I'm trying to develop an apex function to connect my Org with live agent based on Salesforce official guide. Apex function connect with live agent got 2 main step as following:
- Create a Live Agent Session:
- Chat visitor init:
- connect successful
Develop process
a. my apex function already successful achieve the step 1: I get the session ID and in my debug log show "CALLOUT_RESPONSE [218]|System.HttpResponse[Status=OK, StatusCode=200]"
b. but I fail to Chat visitor init error message was "Session required but was invalid or not found" debug log show "CALLOUT_RESPONSE [268]|System.HttpResponse[Status=Forbidden, StatusCode=403]"
I feel confuse because session ID what I put into the apex code to request Chat visitor init was obtain from the step a. Session ID I sure is correct and no problem becasue I already test and debug many time to comfirm the result.
can anyone tell me the reason and help me solve the problem. this is urgent thing. My apex code show as following;
Part 1: Create a Live Agent Session
HttpRequest req = new HttpRequest();
req = new HttpRequest();
Http h = new Http();
h = new Http();
String bodyRes = '';
req.SetEndPoint('https://d.la10.salesforceliveagent.com/chat/rest/System/SessionId');
req.setMethod('GET');
req.setHeader('X-LIVEAGENT-API-VERSION','36');
req.setHeader('X-LIVEAGENT-AFFINITY', '');
try {
HttpResponse res = h.send(req);
bodyRes = res.getBody();
System.debug('[Client] Get Session id=============' + bodyRes);
} catch(System.CalloutException e) {
System.debug('Callout error: '+ e);
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.FATAL, e.getMessage()));
}
String id = '';
String key = '';
JSONParser parser = JSON.createParser(bodyRes);
System.debug('parser=============' + parser);
while (parser.nextToken() != null) {
if ((parser.getCurrentToken() == JSONToken.FIELD_NAME) && (parser.getText() == 'id')) {
parser.nextToken();
id = parser.getText();System.debug('id=============' + id);
}
else if((parser.getCurrentToken() == JSONToken.FIELD_NAME) && (parser.getText() == 'key')){
parser.nextToken();
key = parser.getText();System.debug('key=============' + key);
}
}
Part 2: Chat visitor init
req.SetEndPoint('https://d.la10.salesforceliveagent.com/chat/rest/Chasitor/ChasitorInit');
req.setMethod('POST');
req.setHeader('X-LIVEAGENT-API-VERSION','36');
req.setHeader('X-LIVEAGENT-SESSION-KEY', key);System.debug('req=============' + req);
JSONGenerator gen = JSON.createGenerator(true);
gen.writeStartObject();
gen.writeStringField('organizationId', 'xxxxxxxxxx');
gen.writeStringField('deploymentId', 'xxxxxxxxxxxxxxx');
gen.writeStringField('buttonId', 'xxxxxxxxxxxxxxx');
gen.writeStringField('sessionId', id);
gen.writeStringField('userAgent', '');
gen.writeStringField('language', 'en-US');
gen.writeStringField('screenResolution', '1366x768');
gen.writeStringField('visitorName', 'Jen');
//gen.writeFieldName('prechatDetails');gen.writeStartObject();gen.writeEndObject();
//gen.writeFieldName('prechatEntities');gen.writeStartObject();gen.writeEndObject();
gen.writeBooleanField('receiveQueueUpdates', true);
gen.writeBooleanField('isPost', true);
gen.writeEndObject();
String sendMsg = gen.getAsString();
System.debug('sendMsg in json==============' + sendMsg);
req.setBody(sendMsg);
try {
HttpResponse res = h.send(req);
bodyRes = res.getBody();System.debug('bodyRes==============' + bodyRes);
} catch (System.CalloutException e) {
System.debug('Callout error: '+ e);
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.FATAL, e.getMessage()));
}
I already test on my postman based on your guide, and finally my request can pop up my live agent. But when I try to implement in my apex code I got error message "Session required but was invalid or not found" again even I already hard code "X-LIVEAGENT-SESSION-KEY" and "sessionId" value.
Can you help me verify my code as following? Thank you very very much.
New updated at 30-4-2016
HttpRequest req = new HttpRequest();
Http h = new Http();
String bodyRes = '';
req.SetEndPoint('https://d.la10.salesforceliveagent.com/chat/rest/Chasitor/ChasitorInit');
req.setMethod('POST');
req.setHeader('X-LIVEAGENT-API-VERSION','36');
req.setHeader('X-LIVEAGENT-SESSION-KEY', '18c52adc-0bfc-4843-bc14-6b3ff98cebc5!c9ce3e32-684a-4359-b6f1-edb43141d2a7');
req.setHeader('X-LIVEAGENT-AFFINITY', 'null');
req.setHeader('X-LIVEAGENT-SEQUENCE', '1');
JSONGenerator gen = JSON.createGenerator(true);
gen.writeStartObject();
gen.writeStringField('organizationId', '00D2xxxxxxxxxxx');
gen.writeStringField('deploymentId', '572xxxxxxxxxxxx');
gen.writeStringField('buttonId', '573xxxxxxxxxxxx');
gen.writeStringField('sessionId', '18c52adc-0bfc-4843-bc14-6b3ff98cebc5');
gen.writeStringField('userAgent', '');
gen.writeStringField('language', 'en-US');
gen.writeStringField('screenResolution', '1366x768');
gen.writeStringField('visitorName', 'Jen');
gen.writeFieldName('prechatDetails');
gen.writeStartArray();
gen.writeEndArray();
gen.writeFieldName('prechatEntities');
gen.writeStartArray();
gen.writeEndArray();
gen.writeBooleanField('receiveQueueUpdates', true);
gen.writeBooleanField('isPost', true);
gen.writeEndObject();
String sendMsg = gen.getAsString();
req.setBody(sendMsg);
try {
HttpResponse res = h.send(req);
bodyRes = res.getBody();
} catch (System.CalloutException e) {
System.debug('Callout error: '+ e);
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.FATAL, e.getMessage()));
}