Use this method to start a new session and to get an engagement according to the SDEs provided.
Request
Method | URL |
---|---|
POST | https://{domain}/api/account/{accountId}/app/engagement/visitors/{visitor-id} |
Header | Value |
---|---|
Content-Type | application/json |
Accept | application/json |
Body Parameters
Parameter | Description | Type | Required | Notes |
---|---|---|---|---|
appType | External system type | string | Required | Supported Values: MSDK, EXTERNAL |
appDetails | Optional JSON format with the following fields: Type, Platform, Name, Version, Client timestamp | string | Optional | JSON structure — The main purpose of this information is for troubleshooting and visibility of the consumer SDK / app version that manages the communication with the server side. |
appDetails.appVersion | Application version | string | Optional | Example: For mobile it will be the host app version |
appDetails.deviceFamily | string | Optional | Example: personal_computer/tablet/mobile_phone Supported values: "DESKTOP", "TABLET", "MOBILE" |
|
appDetails.ipAddress | IP address (V4) | string | Optional | (IP format XXX.XXX.XXX.XXX) Validation: Real IP address (IPv6 or IPv4) |
appDetails.os | Contains the operating system, including version info | string | Optional | Supported values: "WINDOWS", "MAC_OSX", "LINUX", "IOS", "ANDROID" |
appDetails.osVersion | OS version | string | Optional | Example: For Android it could be 2.4 |
consumerSections | List of locations in the external system relevant for the engagement | Comma delimited list of strings | Optional | |
engagementAttributes | Array of engagement attributes (SDEs) | string | Optional | Supported Values: all SDEs excluding the type of ImpressionEvent. See here for examples. |
Path Parameters
Parameter | Description | Type | Notes |
---|---|---|---|
accountId | LP site ID | string | |
visitorId | Visitor ID | string | Optional (Required on second request) |
Query parameters
Parameter | Description | Type | Required | Notes |
---|---|---|---|---|
v | API version number | double | Required | Supported Value: 1.0 |
sid | Session ID | Optional (required on second request) | If session doesn't exist, a new session will be generated and sent by the server |
POST Body entity example
https://domainToLiveperson/api/account/{accountId}/app/engagement/visitors/{visitor-id}?v=1.0&sid={session-id}
{
"appType": "MSDK",
"appDetails":{
"os": "MAC_OSX",
"osVersion": "1.2",
"appVersion": "1.0",
"deviceFamily": "MOBILE",
"ipAddress": "192.168.5.2"
},
"consumerSections":[
"Support",
"English",
"Other"
],
"engagementAttributes": [
{
"type": "personal",
"personal": {
"contacts": [{"email":"sarahw@gmail.com","phone":"12345678"},{"email":"sarahw@myemail.com","phone":"98765430"}],
"age": {
"age":30.0,
"year":1986,
"month":7,
"day":22
},
"firstname": "Sarah",
"lastname": "West",
"gender": "FEMALE",
"company": "liveperson"
}
}
]
}
Response
Response Codes
Code | Response |
---|---|
200 | OK |
400 | Validation error |
401 | Unauthorized |
404 | Data not found |
500 | Internal server error — If using a test account (or any account that has extremely low volume), when making the getEngagement call, you will get a 500 error with the following error: "{"time":1499263964605,"message":"Loading account: , vid: ","internalCode":20}" This is due to the way our accounts are loaded on the server side. It takes a short period of time for an account with low volume to load in and get a 200 response with the correct engagement. |
503 | The server is temporarily unavailable |
Retry Policy Recommendation
Error code | Meaning | Recommendation |
---|---|---|
4xx | Client side error | Do not retry, fix problem in code |
5xx | Loading Account; Error on server side | Retry 3 times with 5, 10, 15 second pause between retries, setting the 'visitorId' path parameter with the value of the 'vid' if it was provided in the initial response |
Entity Structure
Attribute | Description | Type | Required |
---|---|---|---|
status | Availability status | enum (‘Available’, ‘NotAvailable’) | Required |
engagementDetails | The details of an engagement when it is available | object | Required when the status is ‘Available’, otherwise is not returned |
engagementDetails.campaignId | number | Required when the status is ‘Available’, otherwise is not returned | |
engagementDetails.engagementId | number | Required when the status is ‘Available’, otherwise is not returned | |
engagementDetails.contextId | string | Required when the status is ‘Available’, otherwise is not returned | |
engagementDetails.windowId | string | Required when the status is ‘Available’, otherwise is not returned | |
engagementDetails.language | string | Required when the status is ‘Available’, otherwise is not returned | |
engagementDetails.engagementRevision | number | Required when the status is ‘Available’, otherwise is not returned | |
engagementDetails.validForSeconds | The period in seconds that the engagement will be valid | number | Required when the status is ‘Available’, otherwise is not returned |
engagementDetails.skillId | number | Optional when the status is ‘Available’ | |
engagementDetails.skillName | string | Optional when the status is ‘Available’ | |
engagementDetails.connectorId | number | Optional when the status is ‘Available’ and engagement is being flagged as 'authenticated' | |
pageId | Page identification ID for sending event on the current engagement | string | Required |
sessionId | The visit session ID | string | Must be saved in order to reuse for future requests in the same visit |
visitorId | The visit visitor ID | string | Must be saved in order to reuse for future requests in the same visit |
Response entity example
Status code: 200 OK (engagement is available)
{
"status": "Available",
"sessionId": "abc",
"visitorId": "xyz",
"pageId": "4743822558",
"engagementDetails": {
"campaignId": "3346848610",
"engagementId": "3562981110",
"contextId": "1",
"windowId": "3346847910",
"language": "en-US",
"engagementRevision": 44,
"validForSeconds": 900,
"skillId": 23,
"skillName":"TestSkill",
"connectorId":"568046210"
}
}
Status code: 200 OK (engagement is not available)
{
"status": "NotAvailable",
"sessionId": "abc",
"visitorId": "xyz",
"pageId": "4743822558"
}