@RestResource(urlMapping='/LiveChatTicketWebhook')
global without sharing class LiveChatTicketWebhook {
@httpPost
global static void doPost() {
//post请求
RestRequest req = RestContext.request;
//响应
RestResponse res = RestContext.response;
//解析请求到的body
String requestBbody = req.requestBody.toString();
//转义反斜杠
String reqBbody = requestBbody.Replace('\n','\\n');
system.debug(requestBbody);
try{
//序列化字符串
TicketType tt = (TicketType)JSON.deserialize(reqBbody, TicketType.class);
system.debug(tt);
//查找相同的邮箱
List<Contact > cont =[select email from Contact where email =:tt.ticket.requester.mail];
Case c = new Case();
String s='';
String name = '';
String texts = '';
String sub = '';
String id='';
//如果cont不为空,就关联个案与联系人
if(cont != null && cont.size() > 0){
c.ContactId=cont[0].Id;
//循环取出 Events 里面的message
for(Events et:tt.ticket.events){
texts = et.message;
}
id=tt.license_id;
//获取我传进来的值,赋给LivechatSetting__c 方法
LivechatSetting__c ls = CommonUtil.getLivechatSetting(id);
if(ls!= null){
c.origin=ls.Case_Origin__c;
}
name = tt.ticket.requester.name;
s += name+':'+texts+'\n';
c.Description=s;
Insert c;
} else{
for(Events et:tt.ticket.events){
texts = et.message;
}
id=tt.license_id;
LivechatSetting__c ls = CommonUtil.getLivechatSetting(id);
if(ls!= null){
c.origin=ls.Case_Origin__c;
}
name = tt.ticket.requester.name;
sub = tt.ticket.subject;
s += name+':'+texts+'\n';
c.Description=s;
c.SuppliedName=tt.ticket.requester.name;
c.SuppliedEmail=tt.ticket.requester.mail;
Insert c;
}
}catch(Exception ex){
insert new log__c(name='ticket error:',description__c=ex.getmessage());
}
}
public class TicketType{
private String event_type;
private String token;
private String license_id;
private Ticket ticket;
}
public class Ticket {
// private Assignee assignee;
private Events[] events;
private Groups[] groups;
private String id;
private Requester requester;
private String status;
private String subject;
private List<String> tags;
private Source source;
}
class Events{
private Author author;
// private Date date;
// private boolean is_private;
private String message;
private String type;
private Source source;
}
class Requester{
private String mail;
private String name;
private String ip;
}
class Source {
private String type;
private String url;
}
class Author {
private String id;
private String name;
private String type;
}
class Groups {
private Decimal id;
private String name;
}
}
@isTest
public class LiveChatTicketWebhookTest{
@isTest
private static void doPostTest() {
Contact con = new Contact( LastName = 'test',email = '12345@wd.com');
insert con;
String JSONMsg = '{"event_type":"ticket_created","token":"d157e75ddb196c7c324065e959b3afd9","license_id":"8918404",'
+'"ticket":{"events":[{"author":{"id":"12345@wd.com","name":"testAngle","type":"client"},"date":"2017-11-13T08:52:10Z",'
+'"is_private":false,"message":"Message:\ntest\n/Cart: 0 items, $0.00 total","type":"message","source":'
+'{"url":"https://www.queenfy.com/","type":"chat-window"}}],"groups":[{"id":0,"name":"All operators"}],"id":"K01DF",'
+'"requester":{"mail":"12345@wd.com","name":"testAngle","utc_offset":"Asia/Shanghai","ip":"61.152.234.182"},"status":"open",'
+'"subject":"(no subject)","tags":[],"source":{"type":"chat-window","url":"https://www.queenfy.com/"}}}';
RestRequest request = new RestRequest();
request.addHeader('Content-Type', 'application/json'); // Add a JSON Header as it is validated
request.addHeader('X-Shopify-Shop-Domain', 'mydemostore2017.myshopify.com');
request.httpMethod = 'POST'; // Perform a POST
request.requestBody = Blob.valueof(JSONMsg); // Add JSON Message as a POST
RestContext.request = request;
// Call the method to test
LiveChatTicketWebhook.doPost();
String JSONMsgs = '{"event_type":"ticket_created","token":"d157e75ddb196c7c324065e959b3afd9","license_id":"8918404",'
+'"ticket":{"events":[{"author":{"id":"274474@11.com","name":"testAngle","type":"client"},"date":"2017-11-13T08:52:10Z",'
+'"is_private":false,"message":"Message:test/Cart: 0 items, $0.00 total","type":"message","source":'
+'{"url":"https://www.queenfy.com/","type":"chat-window"}}],"groups":[{"id":0,"name":"All operators"}],"id":"K01DF",'
+'"requester":{"mail":"274474@11.com","name":"testAngle","utc_offset":"Asia/Shanghai","ip":"61.152.234.182"},"status":"open",'
+'"subject":"(no subject)","tags":[],"source":{"type":"chat-window","url":"https://www.queenfy.com/"}}}';
RestRequest requests = new RestRequest();
requests.addHeader('Content-Type', 'application/json'); // Add a JSON Header as it is validated
requests.addHeader('X-Shopify-Shop-Domain', 'mydemostore2017.myshopify.com');
requests.httpMethod = 'POST'; // Perform a POST
requests.requestBody = Blob.valueof(JSONMsgs); // Add JSON Message as a POST
RestContext.request = requests;
// Call the method to test
LiveChatTicketWebhook.doPost();
}
}