933ba65095ada283abad47bbe8b49379b9da6cc0
[motion2.git] / server / services / ami / trigger / integration / zendesk.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 _0x4ded=['%s/token:%s','toString','base64','[HTTP]','stringify','GET','forEach','type','nameField','toLowerCase','content','string','idField','custom_fields','push','variable','variableName','customVariable','Variable','customField','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Authorization','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','integrationTab','Displaying\x20ticket\x20to\x20agent...','newTab','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','%s/agent/tickets/%s','Zendesk\x20account\x20type\x20not\x20recognized','catch','error','[QUEUE]\x20Error\x20running\x20Zendesk\x20integration','outbound','recordingFormat','none','email','destcalleridname','destcalleridnum','[OUTBOUND]','%s/channels/voice/agents/%d/tickets/%d/display.json','inspect','unmanaged','toUpperCase','lastevent','\x20Error\x20running\x20Zendesk\x20integration','lodash','request-promise','md5','util','ioredis','./util','../../../../config/environment','../../../../config/logger','zendesk','redis','defaults','socket.io-emitter','emit','application/json','%s/tickets.json','POST','merge','Tags','name','getString','Subjects','Descriptions','Fields','then','info','Ticket\x20created!','ticket','Getting\x20agent\x20with\x20email','format','%s/search.json','type:user\x20role:agent\x20email:%s','count','Agent\x20found!','results','agent','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me.json','remoteUri','Admin\x20account\x20selected.','user','Searching\x20enduser\x20with\x20phone','length','filter','end-user','first','%s/users.json','Caller\x20-\x20%s','authType','password','%s:%s','username','token'];(function(_0x571553,_0x492e57){var _0x3198cf=function(_0x415a36){while(--_0x415a36){_0x571553['push'](_0x571553['shift']());}};_0x3198cf(++_0x492e57);}(_0x4ded,0x116));var _0xd4de=function(_0xe29eb,_0x49c9ef){_0xe29eb=_0xe29eb-0x0;var _0x1e211e=_0x4ded[_0xe29eb];return _0x1e211e;};'use strict';var _=require(_0xd4de('0x0'));var rp=require(_0xd4de('0x1'));var md5=require(_0xd4de('0x2'));var util=require(_0xd4de('0x3'));var Redis=require(_0xd4de('0x4'));var intUtil=require(_0xd4de('0x5'));var config=require(_0xd4de('0x6'));var logger=require(_0xd4de('0x7'))(_0xd4de('0x8'));config[_0xd4de('0x9')]=_[_0xd4de('0xa')](config[_0xd4de('0x9')],{'host':'localhost','port':0x18eb});var io=require(_0xd4de('0xb'))(new Redis(config[_0xd4de('0x9')]));function emit(_0x15eb91,_0x2c56d5,_0x4453c2){io['to'](_0x15eb91)[_0xd4de('0xc')](_0x2c56d5,_0x4453c2);}var headers={'Content-Type':'application/json','Accept':_0xd4de('0xd')};function getTicket(_0x5ebcf3,_0x4ab822,_0x4b0876,_0x176b31,_0x459a46){logger['info']('Creating\x20new\x20ticket...');return request({'uri':util['format'](_0xd4de('0xe'),_0x5ebcf3['remoteUri']),'method':_0xd4de('0xf'),'body':{'ticket':_[_0xd4de('0x10')]({'requester_id':_0x4b0876['id'],'submitter_id':_0x4ab822?_0x4ab822['id']:undefined,'assignee_id':_0x4ab822?_0x4ab822['id']:undefined,'tags':getTags(_0x176b31[_0xd4de('0x11')],_0xd4de('0x12')),'subject':intUtil[_0xd4de('0x13')](_0x176b31[_0xd4de('0x14')],_0x459a46,'\x20'),'description':intUtil[_0xd4de('0x13')](_0x176b31[_0xd4de('0x15')],_0x459a46,'\x0a'),'comment':{'public':![],'body':intUtil[_0xd4de('0x13')](_0x176b31[_0xd4de('0x15')],_0x459a46,'\x0a')}},getCustomFields(_0x176b31[_0xd4de('0x16')],_0x459a46))}})[_0xd4de('0x17')](function(_0x164ca0){logger[_0xd4de('0x18')](_0xd4de('0x19'));return _0x164ca0[_0xd4de('0x1a')];});}function getUser(_0x325fba,_0x4b0a95){if(intUtil['validateEmail'](_0x4b0a95)){logger[_0xd4de('0x18')](_0xd4de('0x1b'),_0x4b0a95);return request({'uri':util[_0xd4de('0x1c')](_0xd4de('0x1d'),_0x325fba['remoteUri']),'qs':{'query':util['format'](_0xd4de('0x1e'),_0x4b0a95)}})['then'](function(_0xeaaefa){if(_0xeaaefa[_0xd4de('0x1f')]){logger['info'](_0xd4de('0x20'));return _['find'](_0xeaaefa[_0xd4de('0x21')],{'email':_0x4b0a95,'role':_0xd4de('0x22')});}else{logger[_0xd4de('0x18')](_0xd4de('0x23'));return request({'uri':util['format'](_0xd4de('0x24'),_0x325fba[_0xd4de('0x25')])})[_0xd4de('0x17')](function(_0xdb3fc){logger[_0xd4de('0x18')](_0xd4de('0x26'));return _0xdb3fc[_0xd4de('0x27')];});}});}else{logger[_0xd4de('0x18')](_0xd4de('0x23'));return request({'uri':util[_0xd4de('0x1c')]('%s/users/me.json',_0x325fba[_0xd4de('0x25')])})[_0xd4de('0x17')](function(_0x221f26){logger[_0xd4de('0x18')](_0xd4de('0x26'));return _0x221f26[_0xd4de('0x27')];});}}function getEndUser(_0xffe1cc,_0x36308c,_0x2aa82a){logger[_0xd4de('0x18')](_0xd4de('0x28'),_0x2aa82a);return request({'uri':util[_0xd4de('0x1c')]('%s/search.json',_0xffe1cc[_0xd4de('0x25')]),'qs':{'query':util[_0xd4de('0x1c')]('type:user\x20role:end-user\x20phone:%s',_0x2aa82a)}})[_0xd4de('0x17')](function(_0x59b3c5){var _0x44b710;if(_0x59b3c5[_0xd4de('0x21')][_0xd4de('0x29')]){_0x59b3c5['results']=_[_0xd4de('0x2a')](_0x59b3c5[_0xd4de('0x21')],{'suspended':![],'role':_0xd4de('0x2b')});if(_0x59b3c5['results'][_0xd4de('0x29')]){_0x44b710=_[_0xd4de('0x2c')](_0x59b3c5['results']);}}if(_0x44b710){logger['info']('Enduser\x20found!');return _0x44b710;}else{logger[_0xd4de('0x18')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'uri':util[_0xd4de('0x1c')](_0xd4de('0x2d'),_0xffe1cc[_0xd4de('0x25')]),'method':_0xd4de('0xf'),'body':{'user':{'role':'end-user','name':util[_0xd4de('0x1c')](_0xd4de('0x2e'),_0x36308c||_0x2aa82a),'phone':_0x2aa82a}}})['then'](function(_0x133a43){logger[_0xd4de('0x18')]('Enduser\x20created.');return _0x133a43['user'];});}});}function getAuth(_0x16e7a9){var _0x40114b;if(_0x16e7a9[_0xd4de('0x2f')]===_0xd4de('0x30')){_0x40114b=util['format'](_0xd4de('0x31'),_0x16e7a9[_0xd4de('0x32')],_0x16e7a9['password']);}else if(_0x16e7a9[_0xd4de('0x2f')]===_0xd4de('0x33')){_0x40114b=util[_0xd4de('0x1c')](_0xd4de('0x34'),_0x16e7a9[_0xd4de('0x32')],_0x16e7a9[_0xd4de('0x33')]);}return util['format']('Basic\x20%s',new Buffer(_0x40114b)[_0xd4de('0x35')](_0xd4de('0x36')));}function request(_0x400450){logger['debug'](_0xd4de('0x37'),JSON[_0xd4de('0x38')](_0x400450));return rp(_['defaults'](_0x400450,{'method':_0xd4de('0x39'),'headers':headers,'json':!![]}));}function getTags(_0x4724bd,_0x4626c7){var _0x1f60e8=[];if(_0x4724bd&&_0x4724bd['length']>0x0){_0x1f60e8=_['map'](_0x4724bd,_0x4626c7);}return _0x1f60e8;}function getCustomFields(_0x421efb,_0x541777){var _0x3e5e34=[];var _0x4de12c={'custom_fields':[]};if(_0x421efb[_0xd4de('0x29')]>0x0){_[_0xd4de('0x3a')](_0x421efb,function(_0x21cd77){if(_0x21cd77[_0xd4de('0x3b')]==='string'&&_0x21cd77[_0xd4de('0x3c')]&&!_0x21cd77['customField']){_0x4de12c[_0x21cd77[_0xd4de('0x3c')][_0xd4de('0x3d')]()]=_0x21cd77[_0xd4de('0x3e')][_0xd4de('0x35')]();}else if(_0x21cd77[_0xd4de('0x3b')]===_0xd4de('0x3f')&&_0x21cd77[_0xd4de('0x40')]&&_0x21cd77['customField']){_0x4de12c[_0xd4de('0x41')][_0xd4de('0x42')]({'id':_0x21cd77[_0xd4de('0x40')],'value':_0x21cd77[_0xd4de('0x3e')][_0xd4de('0x35')]()});}else if(_0x21cd77['type']===_0xd4de('0x43')&&_0x21cd77[_0xd4de('0x44')]&&_0x21cd77[_0xd4de('0x40')]&&_0x21cd77['customField']){_0x541777[_0x21cd77[_0xd4de('0x44')]]&&_0x4de12c[_0xd4de('0x41')][_0xd4de('0x42')]({'id':_0x21cd77['idField'],'value':_0x541777[_0x21cd77[_0xd4de('0x44')]][_0xd4de('0x35')]()});}else if(_0x21cd77[_0xd4de('0x3b')]===_0xd4de('0x45')&&_0x21cd77[_0xd4de('0x46')]&&_0x21cd77[_0xd4de('0x46')][_0xd4de('0x12')]&&_0x21cd77['idField']&&_0x21cd77[_0xd4de('0x47')]){_0x541777[_0x21cd77[_0xd4de('0x46')][_0xd4de('0x12')]['toLowerCase']()]&&_0x4de12c[_0xd4de('0x41')][_0xd4de('0x42')]({'id':_0x21cd77[_0xd4de('0x40')],'value':_0x541777[_0x21cd77['Variable']['name'][_0xd4de('0x3d')]()][_0xd4de('0x35')]()});}});}return _0x4de12c;}exports['queue']=function(_0x1ee047,_0x1f477b,_0x3a3c63,_0x13b317,_0x564a96,_0x27afac){var _0x72d025,_0x579700;_0x27afac[_0xd4de('0x25')]=intUtil[_0xd4de('0x48')](_0x27afac[_0xd4de('0x25')]);_0x27afac['serverUrl']=intUtil[_0xd4de('0x48')](_0x27afac[_0xd4de('0x49')]);if(_0x564a96&&_0x564a96[_0xd4de('0x4a')]){logger[_0xd4de('0x18')](_0xd4de('0x4b'),_0xd4de('0x4c'));_0x1f477b[_0xd4de('0x4d')]=util[_0xd4de('0x1c')](_0xd4de('0x4e'),_0x27afac[_0xd4de('0x49')],_0x1f477b['uniqueid'],md5(_0x1f477b[_0xd4de('0x4f')]));}else{_0x1f477b[_0xd4de('0x4d')]='';}headers[_0xd4de('0x50')]=getAuth(_0x27afac);return getUser(_0x27afac,_0x13b317['email'])[_0xd4de('0x17')](function(_0x199204){_0x72d025=_0x199204;logger[_0xd4de('0x18')](_0xd4de('0x51'),_0x72d025['id']);return getEndUser(_0x27afac,_0x1f477b[_0xd4de('0x52')],_0x1f477b[_0xd4de('0x53')]);})[_0xd4de('0x17')](function(_0x29cb16){_0x579700=_0x29cb16;logger[_0xd4de('0x18')](_0xd4de('0x54'),_0x579700['id']);return getTicket(_0x27afac,_0x72d025,_0x579700,_0x3a3c63,_0x1f477b);})['then'](function(_0x3e4c7f){if(_0x3e4c7f){logger[_0xd4de('0x18')](_0xd4de('0x55'),_0x3e4c7f['id']);switch(_0x27afac[_0xd4de('0x3b')]){case _0xd4de('0x56'):logger['info']('[QUEUE]',_0xd4de('0x57'));return request({'uri':util[_0xd4de('0x1c')]('%s/channels/voice/agents/%d/tickets/%d/display.json',_0x27afac['remoteUri'],_0x72d025['id'],_0x3e4c7f['id']),'method':_0xd4de('0xf')});case _0xd4de('0x58'):logger[_0xd4de('0x18')](_0xd4de('0x4b'),_0xd4de('0x59'));emit(util[_0xd4de('0x1c')](_0xd4de('0x5a'),_0x13b317[_0xd4de('0x12')]),_0xd4de('0x5b'),{'uri':util[_0xd4de('0x1c')](_0xd4de('0x5c'),_0x27afac[_0xd4de('0x25')],_0x3e4c7f['id'])});break;default:logger['error'](_0xd4de('0x4b'),_0xd4de('0x5d'));}}})[_0xd4de('0x5e')](function(_0x1da822){logger[_0xd4de('0x5f')](_0xd4de('0x60'),util['inspect'](_0x1da822,{'showHidden':!![],'depth':null}));});};exports[_0xd4de('0x61')]=function(_0x5896c5,_0x48fe2a,_0xa0242e,_0xd79781,_0x2d1e45,_0x1fe52b,_0x4e533c){var _0xfc79e7,_0x3d62c2;_0x1fe52b[_0xd4de('0x25')]=intUtil[_0xd4de('0x48')](_0x1fe52b[_0xd4de('0x25')]);_0x1fe52b['serverUrl']=intUtil['stripTrailingSlash'](_0x1fe52b['serverUrl']);if(_0x4e533c&&_0x4e533c[_0xd4de('0x62')]&&_0x4e533c[_0xd4de('0x62')]!==_0xd4de('0x63')){logger[_0xd4de('0x18')]('[OUTBOUND]',_0xd4de('0x4c'));_0x48fe2a[_0xd4de('0x4d')]=util[_0xd4de('0x1c')](_0xd4de('0x4e'),_0x1fe52b['serverUrl'],_0x48fe2a[_0xd4de('0x4f')],md5(_0x48fe2a[_0xd4de('0x4f')]));}headers[_0xd4de('0x50')]=getAuth(_0x1fe52b);return getUser(_0x1fe52b,_0xd79781[_0xd4de('0x64')])['then'](function(_0x4fd7c2){_0xfc79e7=_0x4fd7c2;logger['info'](_0xd4de('0x51'),_0xfc79e7['id']);return getEndUser(_0x1fe52b,_0x48fe2a[_0xd4de('0x65')],_0x48fe2a[_0xd4de('0x66')]);})['then'](function(_0x18f2c3){_0x3d62c2=_0x18f2c3;logger[_0xd4de('0x18')](_0xd4de('0x54'),_0x3d62c2['id']);return getTicket(_0x1fe52b,_0xfc79e7,_0x3d62c2,_0xa0242e,_0x48fe2a);})['then'](function(_0x1758b3){if(_0x1758b3){logger['info'](_0xd4de('0x55'),_0x1758b3['id']);switch(_0x1fe52b[_0xd4de('0x3b')]){case _0xd4de('0x56'):logger[_0xd4de('0x18')](_0xd4de('0x67'),_0xd4de('0x57'));return request({'uri':util[_0xd4de('0x1c')](_0xd4de('0x68'),_0x1fe52b['remoteUri'],_0xfc79e7['id'],_0x1758b3['id']),'method':_0xd4de('0xf')});case'newTab':logger[_0xd4de('0x18')](_0xd4de('0x67'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0xd4de('0x1c')](_0xd4de('0x5a'),_0xd79781[_0xd4de('0x12')]),_0xd4de('0x5b'),{'uri':util[_0xd4de('0x1c')](_0xd4de('0x5c'),_0x1fe52b[_0xd4de('0x25')],_0x1758b3['id'])});break;default:logger[_0xd4de('0x5f')](_0xd4de('0x67'),_0xd4de('0x5d'));}}})[_0xd4de('0x5e')](function(_0x37057c){logger[_0xd4de('0x5f')]('[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration',util[_0xd4de('0x69')](_0x37057c,{'showHidden':!![],'depth':null}));});};exports[_0xd4de('0x6a')]=function(_0x216fd5,_0x331f08,_0x25628e,_0x2c9a38,_0x26bf55,_0x3fdd63){var _0x574939,_0xbe1141;_0x3fdd63['remoteUri']=intUtil['stripTrailingSlash'](_0x3fdd63['remoteUri']);_0x3fdd63[_0xd4de('0x49')]=intUtil[_0xd4de('0x48')](_0x3fdd63['serverUrl']);if(_0x26bf55&&_0x26bf55['monitor_format']){logger['info']('['+_0x331f08['lastevent'][_0xd4de('0x6b')]()+']','Recording\x20is\x20enabled!');_0x331f08[_0xd4de('0x4d')]=util['format'](_0xd4de('0x4e'),_0x3fdd63[_0xd4de('0x49')],_0x331f08['uniqueid'],md5(_0x331f08['uniqueid']));}else{_0x331f08['recordingURL']='';}headers['Authorization']=getAuth(_0x3fdd63);return getUser(_0x3fdd63)[_0xd4de('0x17')](function(_0x214e05){_0x574939=_0x214e05;logger[_0xd4de('0x18')](_0xd4de('0x51'),_0x574939['id']);return getEndUser(_0x3fdd63,_0x331f08[_0xd4de('0x52')],_0x331f08[_0xd4de('0x53')]);})['then'](function(_0x5c651b){_0xbe1141=_0x5c651b;logger['info'](_0xd4de('0x54'),_0xbe1141['id']);return getTicket(_0x3fdd63,_0x574939,_0xbe1141,_0x25628e,_0x331f08);})[_0xd4de('0x17')](function(_0x4c2343){if(_0x4c2343){logger[_0xd4de('0x18')]('The\x20Ticket\x20ID\x20is:',_0x4c2343['id']);}})[_0xd4de('0x5e')](function(_0x574973){logger[_0xd4de('0x5f')]('['+_0x331f08[_0xd4de('0x6c')]['toUpperCase']()+']'+_0xd4de('0x6d'),util['inspect'](_0x574973,{'showHidden':!![],'depth':null}));});};