Built motion from commit 013e4bb4.|2.6.18
[motion2.git] / server / services / ami / trigger / integration / freshdesk.js
1 // *************************************************************************
2 // *                                                                       *
3 // * xCALLY Motion -  The Omnichannel Contact Center                       *
4 // * Copyright (c) Xenialab s.r.l. All Rights Reserved                     *
5 // *                                                                       *
6 // *************************************************************************
7 // *                                                                       *
8 // * Email: info@xcally.com                                                *
9 // * Website: https://www.xcally.com                                       *
10 // *                                                                       *
11 // *************************************************************************
12 // *                                                                       *
13 // * The SOFTWARE PRODUCT is protected by copyright laws and international *
14 // * copyright treaties, as well as other intellectual property laws and   *
15 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                         *
16 // *                                                                       *
17 // *************************************************************************
18 var _0x3e77=['serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','uniqueid','Authorization','The\x20User\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','catch','error','stripTrailingSlash','recordingFormat','none','[OUTBOUND]','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','destcalleridnum','The\x20Enduser\x20ID\x20is:','%s/helpdesk/tickets/%d','unmanaged','lastevent','toUpperCase','lodash','md5','./util','../../../../config/environment','../../../../config/logger','freshdesk','redis','defaults','localhost','socket.io-emitter','application/json','emit','Creating\x20new\x20ticket...','format','Caller\x20-\x20%s','calleridname','calleridnum','getString','Subjects','Descriptions','<br>','name','Fields','custom_fields','mapValues','keyBy','%s/api/v2/tickets','remoteUri','POST','info','Ticket\x20created!','validateEmail','Agent\x20found!','find','contact','email','%s/api/v2/agents/me','then','Admin\x20account\x20selected.','Searching\x20enduser\x20with\x20phone','length','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/api/v2/contacts','Enduser\x20created.','Basic\x20%s','toString','base64','[HTTP]','stringify','GET','map','forEach','string','picklist','type','customField','nameField','content','includes','push','idField','variable','variableName','customVariable','Variable','toLowerCase','queue'];(function(_0x4ad8e8,_0x174578){var _0x17b05b=function(_0x1d206e){while(--_0x1d206e){_0x4ad8e8['push'](_0x4ad8e8['shift']());}};_0x17b05b(++_0x174578);}(_0x3e77,0x1ea));var _0x73e7=function(_0x3160be,_0x4d4a92){_0x3160be=_0x3160be-0x0;var _0x4b9ca8=_0x3e77[_0x3160be];return _0x4b9ca8;};'use strict';var _=require(_0x73e7('0x0'));var rp=require('request-promise');var md5=require(_0x73e7('0x1'));var util=require('util');var Redis=require('ioredis');var intUtil=require(_0x73e7('0x2'));var config=require(_0x73e7('0x3'));var logger=require(_0x73e7('0x4'))(_0x73e7('0x5'));config[_0x73e7('0x6')]=_[_0x73e7('0x7')](config[_0x73e7('0x6')],{'host':_0x73e7('0x8'),'port':0x18eb});var io=require(_0x73e7('0x9'))(new Redis(config[_0x73e7('0x6')]));var headers={'Content-Type':_0x73e7('0xa'),'Accept':_0x73e7('0xa')};function emit(_0xcdd14,_0x18c214,_0x5de521){io['to'](_0xcdd14)[_0x73e7('0xb')](_0x18c214,_0x5de521);}function getTicket(_0x45a444,_0x549c2d,_0x351b69,_0xdf2591,_0x29b35f){logger['info'](_0x73e7('0xc'));var _0x2fa878=_['merge']({'responder_id':_0x549c2d['id'],'requester_id':_0x351b69['id'],'name':util[_0x73e7('0xd')](_0x73e7('0xe'),_0x29b35f[_0x73e7('0xf')]),'phone':_0x29b35f[_0x73e7('0x10')],'source':0x3,'priority':0x1,'status':0x2,'subject':intUtil[_0x73e7('0x11')](_0xdf2591[_0x73e7('0x12')],_0x29b35f,'\x20'),'description':intUtil[_0x73e7('0x11')](_0xdf2591[_0x73e7('0x13')],_0x29b35f,_0x73e7('0x14')),'tags':getTags(_0xdf2591['Tags'],_0x73e7('0x15'))},getCustomFields(_0xdf2591[_0x73e7('0x16')],_0x29b35f));_0x2fa878[_0x73e7('0x17')]=_[_0x73e7('0x18')](_[_0x73e7('0x19')](_0x2fa878['custom_fields'],'id'),'value');return request({'uri':util[_0x73e7('0xd')](_0x73e7('0x1a'),_0x45a444[_0x73e7('0x1b')]),'method':_0x73e7('0x1c'),'body':_0x2fa878})['then'](function(_0x15998d){logger[_0x73e7('0x1d')](_0x73e7('0x1e'));return _0x15998d;});}function getUser(_0x1d46cc,_0x1f195f){if(intUtil[_0x73e7('0x1f')](_0x1f195f)){return request({'uri':util['format']('%s/api/v2/agents',_0x1d46cc[_0x73e7('0x1b')]),'qs':{'email':_0x1f195f}})['then'](function(_0x24674f){if(_0x24674f['length']){logger['info'](_0x73e7('0x20'));return _[_0x73e7('0x21')](_0x24674f,function(_0x314e01){return _0x314e01[_0x73e7('0x22')][_0x73e7('0x23')]===_0x1f195f;});}else{logger['info']('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0x73e7('0xd')](_0x73e7('0x24'),_0x1d46cc[_0x73e7('0x1b')])})['then'](function(_0x2fada1){logger[_0x73e7('0x1d')]('Admin\x20account\x20selected.');return _0x2fada1;});}});}else{logger['info']('Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0x73e7('0xd')](_0x73e7('0x24'),_0x1d46cc[_0x73e7('0x1b')])})[_0x73e7('0x25')](function(_0x3057b4){logger[_0x73e7('0x1d')](_0x73e7('0x26'));return _0x3057b4;});}}function getEndUser(_0x570e85,_0x5e299b,_0x3feee1){logger['info'](_0x73e7('0x27'),_0x3feee1);return request({'uri':util[_0x73e7('0xd')]('%s/api/v2/contacts',_0x570e85[_0x73e7('0x1b')]),'qs':{'phone':_0x3feee1}})['then'](function(_0x25f3b4){if(_0x25f3b4[_0x73e7('0x28')]){logger[_0x73e7('0x1d')](_0x73e7('0x29'));return _[_0x73e7('0x21')](_0x25f3b4,{'phone':_0x3feee1});}else{logger[_0x73e7('0x1d')](_0x73e7('0x2a'));return request({'uri':util['format'](_0x73e7('0x2b'),_0x570e85[_0x73e7('0x1b')]),'method':_0x73e7('0x1c'),'body':{'name':_0x5e299b,'phone':_0x3feee1}})[_0x73e7('0x25')](function(_0x37e632){logger[_0x73e7('0x1d')](_0x73e7('0x2c'));return _0x37e632;});}});}function getAuth(_0x386137){return util['format'](_0x73e7('0x2d'),new Buffer(_0x386137['apiKey']+':X')[_0x73e7('0x2e')](_0x73e7('0x2f')));}function request(_0x606d5){logger['debug'](_0x73e7('0x30'),JSON[_0x73e7('0x31')](_0x606d5));return rp(_['defaults'](_0x606d5,{'method':_0x73e7('0x32'),'headers':headers,'json':!![]}));}function getTags(_0x1a71de,_0x238799){var _0x31d831=[];if(_0x1a71de&&_0x1a71de['length']>0x0){_0x31d831=_[_0x73e7('0x33')](_0x1a71de,_0x238799);}return _0x31d831;}function getCustomFields(_0x45443d,_0x3bbc82){var _0x3e48c1=[];var _0x580442={'custom_fields':[]};if(_0x45443d[_0x73e7('0x28')]>0x0){_[_0x73e7('0x34')](_0x45443d,function(_0x4a6acd){if(_['includes']([_0x73e7('0x35'),_0x73e7('0x36')],_0x4a6acd[_0x73e7('0x37')])&&_0x4a6acd['nameField']&&!_0x4a6acd[_0x73e7('0x38')]){_0x580442[_0x4a6acd[_0x73e7('0x39')]['toLowerCase']()]=_0x4a6acd[_0x73e7('0x3a')]['toString']();}else if(_[_0x73e7('0x3b')](['string',_0x73e7('0x36')],_0x4a6acd['type'])&&_0x4a6acd['idField']&&_0x4a6acd['customField']){_0x580442[_0x73e7('0x17')][_0x73e7('0x3c')]({'id':_0x4a6acd[_0x73e7('0x3d')],'value':_0x4a6acd['content']['toString']()});}else if(_0x4a6acd[_0x73e7('0x37')]===_0x73e7('0x3e')&&_0x4a6acd[_0x73e7('0x3f')]&&_0x4a6acd[_0x73e7('0x3d')]&&_0x4a6acd['customField']){_0x3bbc82[_0x4a6acd['variableName']]&&_0x580442[_0x73e7('0x17')][_0x73e7('0x3c')]({'id':_0x4a6acd[_0x73e7('0x3d')],'value':_0x3bbc82[_0x4a6acd['variableName']][_0x73e7('0x2e')]()});}else if(_0x4a6acd[_0x73e7('0x37')]===_0x73e7('0x40')&&_0x4a6acd[_0x73e7('0x41')]&&_0x4a6acd[_0x73e7('0x41')][_0x73e7('0x15')]&&_0x4a6acd[_0x73e7('0x3d')]&&_0x4a6acd['customField']){_0x3bbc82[_0x4a6acd[_0x73e7('0x41')]['name'][_0x73e7('0x42')]()]&&_0x580442[_0x73e7('0x17')][_0x73e7('0x3c')]({'id':_0x4a6acd[_0x73e7('0x3d')],'value':_0x3bbc82[_0x4a6acd[_0x73e7('0x41')][_0x73e7('0x15')][_0x73e7('0x42')]()][_0x73e7('0x2e')]()});}});}return _0x580442;}exports[_0x73e7('0x43')]=function(_0x5819e7,_0xed4e2a,_0x2a8dfa,_0xc02c6e,_0x5d1eaa,_0x4879f9){var _0x456624,_0x103bcb;_0x4879f9[_0x73e7('0x1b')]=intUtil['stripTrailingSlash'](_0x4879f9['remoteUri']);_0x4879f9['serverUrl']=intUtil['stripTrailingSlash'](_0x4879f9[_0x73e7('0x44')]);if(_0x5d1eaa&&_0x5d1eaa[_0x73e7('0x45')]){logger[_0x73e7('0x1d')](_0x73e7('0x46'),_0x73e7('0x47'));_0xed4e2a[_0x73e7('0x48')]=util[_0x73e7('0xd')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x4879f9['serverUrl'],_0xed4e2a['uniqueid'],md5(_0xed4e2a[_0x73e7('0x49')]));}else{_0xed4e2a[_0x73e7('0x48')]='';}headers[_0x73e7('0x4a')]=getAuth(_0x4879f9);return getUser(_0x4879f9,_0xc02c6e[_0x73e7('0x23')])[_0x73e7('0x25')](function(_0x101e02){_0x456624=_0x101e02;logger[_0x73e7('0x1d')](_0x73e7('0x4b'),_0x456624['id']);return getEndUser(_0x4879f9,_0xed4e2a[_0x73e7('0xf')],_0xed4e2a[_0x73e7('0x10')]);})[_0x73e7('0x25')](function(_0x25ff4c){_0x103bcb=_0x25ff4c;logger[_0x73e7('0x1d')]('The\x20Enduser\x20ID\x20is:',_0x103bcb['id']);return getTicket(_0x4879f9,_0x456624,_0x103bcb,_0x2a8dfa,_0xed4e2a);})[_0x73e7('0x25')](function(_0x3f1a96){if(_0x3f1a96&&_0x3f1a96['id']){logger[_0x73e7('0x1d')]('Ticket\x20created!');logger[_0x73e7('0x1d')](_0x73e7('0x4c'),_0x3f1a96['id']);logger[_0x73e7('0x1d')]('[QUEUE]',_0x73e7('0x4d'));emit(util['format'](_0x73e7('0x4e'),_0xc02c6e[_0x73e7('0x15')]),_0x73e7('0x4f'),{'uri':util[_0x73e7('0xd')]('%s/helpdesk/tickets/%d',_0x4879f9[_0x73e7('0x1b')],_0x3f1a96['id'])});}})[_0x73e7('0x50')](function(_0x22917e){logger[_0x73e7('0x51')](_0x73e7('0x46'),JSON[_0x73e7('0x31')](_0x22917e));});};exports['outbound']=function(_0x5c2f7d,_0x3beb47,_0x169d70,_0x1ae51f,_0x450a00,_0x5a5f5d,_0x26785d){var _0x83b023,_0x42b565;_0x5a5f5d[_0x73e7('0x1b')]=intUtil[_0x73e7('0x52')](_0x5a5f5d[_0x73e7('0x1b')]);_0x5a5f5d[_0x73e7('0x44')]=intUtil[_0x73e7('0x52')](_0x5a5f5d['serverUrl']);if(_0x26785d&&_0x26785d['recordingFormat']&&_0x26785d[_0x73e7('0x53')]!==_0x73e7('0x54')){logger[_0x73e7('0x1d')](_0x73e7('0x55'),'Recording\x20is\x20enabled!');_0x3beb47['recordingURL']=util[_0x73e7('0xd')](_0x73e7('0x56'),_0x5a5f5d[_0x73e7('0x44')],_0x3beb47[_0x73e7('0x49')],md5(_0x3beb47[_0x73e7('0x49')]));}headers['Authorization']=getAuth(_0x5a5f5d);return getUser(_0x5a5f5d,_0x1ae51f['email'])['then'](function(_0x467100){_0x83b023=_0x467100;logger[_0x73e7('0x1d')](_0x73e7('0x4b'),_0x83b023['id']);return getEndUser(_0x5a5f5d,_0x3beb47['destcalleridname'],_0x3beb47[_0x73e7('0x57')]);})[_0x73e7('0x25')](function(_0x41fa37){_0x42b565=_0x41fa37;logger['info'](_0x73e7('0x58'),_0x42b565['id']);return getTicket(_0x5a5f5d,_0x83b023,_0x42b565,_0x169d70,_0x3beb47);})[_0x73e7('0x25')](function(_0xea034b){if(_0xea034b&&_0xea034b['id']){logger['info'](_0x73e7('0x1e'));logger[_0x73e7('0x1d')](_0x73e7('0x4c'),_0xea034b['id']);logger[_0x73e7('0x1d')](_0x73e7('0x55'),_0x73e7('0x4d'));emit(util['format'](_0x73e7('0x4e'),_0x1ae51f['name']),_0x73e7('0x4f'),{'uri':util[_0x73e7('0xd')](_0x73e7('0x59'),_0x5a5f5d[_0x73e7('0x1b')],_0xea034b['id'])});}})[_0x73e7('0x50')](function(_0x31a50a){logger[_0x73e7('0x51')]('[OUTBOUND]',JSON[_0x73e7('0x31')](_0x31a50a));});};exports[_0x73e7('0x5a')]=function(_0x4ad6bf,_0x29d59c,_0x22dfec,_0xc48e4e,_0x38dc7e,_0x104af6){var _0x45a824,_0x1ac1db;_0x104af6[_0x73e7('0x1b')]=intUtil[_0x73e7('0x52')](_0x104af6[_0x73e7('0x1b')]);_0x104af6[_0x73e7('0x44')]=intUtil[_0x73e7('0x52')](_0x104af6[_0x73e7('0x44')]);if(_0x38dc7e&&_0x38dc7e[_0x73e7('0x45')]){logger[_0x73e7('0x1d')]('['+_0x29d59c[_0x73e7('0x5b')][_0x73e7('0x5c')]()+']',_0x73e7('0x47'));_0x29d59c[_0x73e7('0x48')]=util[_0x73e7('0xd')](_0x73e7('0x56'),_0x104af6['serverUrl'],_0x29d59c[_0x73e7('0x49')],md5(_0x29d59c[_0x73e7('0x49')]));}else{_0x29d59c[_0x73e7('0x48')]='';}headers[_0x73e7('0x4a')]=getAuth(_0x104af6);return getUser(_0x104af6,'')[_0x73e7('0x25')](function(_0x51a11a){_0x45a824=_0x51a11a;logger[_0x73e7('0x1d')]('The\x20User\x20ID\x20is:',_0x45a824['id']);return getEndUser(_0x104af6,_0x29d59c[_0x73e7('0xf')],_0x29d59c[_0x73e7('0x10')]);})[_0x73e7('0x25')](function(_0x969567){_0x1ac1db=_0x969567;logger[_0x73e7('0x1d')](_0x73e7('0x58'),_0x1ac1db['id']);return getTicket(_0x104af6,_0x45a824,_0x1ac1db,_0x22dfec,_0x29d59c);})[_0x73e7('0x25')](function(_0x103b2d){if(_0x103b2d){logger[_0x73e7('0x1d')]('Ticket\x20created!');logger[_0x73e7('0x1d')](_0x73e7('0x4c'),_0x103b2d['id']);}})[_0x73e7('0x50')](function(_0x20bc8b){logger[_0x73e7('0x51')]('['+_0x29d59c['lastevent'][_0x73e7('0x5c')]()+']',JSON['stringify'](_0x20bc8b));});};