d0ed939a7f1c17ee1b4e62ba4ee492307f59d411
[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 _0x7072=['socket.io-emitter','emit','application/json','info','Creating\x20new\x20ticket...','format','%s/tickets.json','remoteUri','POST','merge','Tags','name','Subjects','Descriptions','getString','Fields','then','Ticket\x20created!','ticket','validateEmail','Getting\x20agent\x20with\x20email','%s/search.json','type:user\x20role:agent\x20email:%s','Agent\x20found!','find','results','agent','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me.json','Admin\x20account\x20selected.','user','Searching\x20enduser\x20with\x20phone','length','Enduser\x20found!','%s/users.json','end-user','Caller\x20-\x20%s','Enduser\x20created.','%s:%s','authType','token','%s/token:%s','username','Basic\x20%s','toString','debug','[HTTP]','GET','forEach','string','nameField','customField','toLowerCase','content','type','idField','custom_fields','push','variable','variableName','customVariable','Variable','queue','stripTrailingSlash','serverUrl','monitor_format','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','recordingURL','email','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','[QUEUE]','Displaying\x20ticket\x20to\x20agent...','%s/channels/voice/agents/%d/tickets/%d/display.json','newTab','user:%s','%s/agent/tickets/%s','error','Zendesk\x20account\x20type\x20not\x20recognized','catch','[QUEUE]\x20Error\x20running\x20Zendesk\x20integration','inspect','outbound','recordingFormat','none','[OUTBOUND]','The\x20User\x20ID\x20is:','destcalleridname','integrationTab','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration','unmanaged','lastevent','toUpperCase','request-promise','md5','util','ioredis','./util','zendesk','defaults','redis','localhost'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0x7072,0x138));var _0x2707=function(_0x1969a7,_0x5a133a){_0x1969a7=_0x1969a7-0x0;var _0x3d665f=_0x7072[_0x1969a7];return _0x3d665f;};'use strict';var _=require('lodash');var rp=require(_0x2707('0x0'));var md5=require(_0x2707('0x1'));var util=require(_0x2707('0x2'));var Redis=require(_0x2707('0x3'));var intUtil=require(_0x2707('0x4'));var config=require('../../../../config/environment');var logger=require('../../../../config/logger')(_0x2707('0x5'));config['redis']=_[_0x2707('0x6')](config[_0x2707('0x7')],{'host':_0x2707('0x8'),'port':0x18eb});var io=require(_0x2707('0x9'))(new Redis(config[_0x2707('0x7')]));function emit(_0x128205,_0x21b0a0,_0x745cfd){io['to'](_0x128205)[_0x2707('0xa')](_0x21b0a0,_0x745cfd);}var headers={'Content-Type':_0x2707('0xb'),'Accept':'application/json'};function getTicket(_0x597ff9,_0x380339,_0x179cef,_0x379ac5,_0x56406b){logger[_0x2707('0xc')](_0x2707('0xd'));return request({'uri':util[_0x2707('0xe')](_0x2707('0xf'),_0x597ff9[_0x2707('0x10')]),'method':_0x2707('0x11'),'body':{'ticket':_[_0x2707('0x12')]({'requester_id':_0x179cef['id'],'submitter_id':_0x380339?_0x380339['id']:undefined,'assignee_id':_0x380339?_0x380339['id']:undefined,'tags':getTags(_0x379ac5[_0x2707('0x13')],_0x2707('0x14')),'subject':intUtil['getString'](_0x379ac5[_0x2707('0x15')],_0x56406b,'\x20'),'description':intUtil['getString'](_0x379ac5[_0x2707('0x16')],_0x56406b,'\x0a'),'comment':{'public':![],'body':intUtil[_0x2707('0x17')](_0x379ac5[_0x2707('0x16')],_0x56406b,'\x0a')}},getCustomFields(_0x379ac5[_0x2707('0x18')],_0x56406b))}})[_0x2707('0x19')](function(_0x4e52a3){logger[_0x2707('0xc')](_0x2707('0x1a'));return _0x4e52a3[_0x2707('0x1b')];});}function getUser(_0x5d523f,_0x1153d7){if(intUtil[_0x2707('0x1c')](_0x1153d7)){logger[_0x2707('0xc')](_0x2707('0x1d'),_0x1153d7);return request({'uri':util[_0x2707('0xe')](_0x2707('0x1e'),_0x5d523f['remoteUri']),'qs':{'query':util[_0x2707('0xe')](_0x2707('0x1f'),_0x1153d7)}})[_0x2707('0x19')](function(_0x518262){if(_0x518262['count']){logger['info'](_0x2707('0x20'));return _[_0x2707('0x21')](_0x518262[_0x2707('0x22')],{'email':_0x1153d7,'role':_0x2707('0x23')});}else{logger[_0x2707('0xc')](_0x2707('0x24'));return request({'uri':util[_0x2707('0xe')](_0x2707('0x25'),_0x5d523f[_0x2707('0x10')])})[_0x2707('0x19')](function(_0x37c475){logger[_0x2707('0xc')](_0x2707('0x26'));return _0x37c475[_0x2707('0x27')];});}});}else{logger['info'](_0x2707('0x24'));return request({'uri':util[_0x2707('0xe')](_0x2707('0x25'),_0x5d523f[_0x2707('0x10')])})[_0x2707('0x19')](function(_0x3f6e8b){logger['info'](_0x2707('0x26'));return _0x3f6e8b[_0x2707('0x27')];});}}function getEndUser(_0x171add,_0x2ad386,_0x5b763f){logger['info'](_0x2707('0x28'),_0x5b763f);return request({'uri':util['format'](_0x2707('0x1e'),_0x171add[_0x2707('0x10')]),'qs':{'query':util[_0x2707('0xe')]('type:user\x20role:end-user\x20phone:%s',_0x5b763f)}})[_0x2707('0x19')](function(_0x14daf8){var _0x2c7047;if(_0x14daf8['results'][_0x2707('0x29')]){_0x14daf8[_0x2707('0x22')]=_['filter'](_0x14daf8[_0x2707('0x22')],{'suspended':![],'role':'end-user'});if(_0x14daf8['results'][_0x2707('0x29')]){_0x2c7047=_['first'](_0x14daf8[_0x2707('0x22')]);}}if(_0x2c7047){logger[_0x2707('0xc')](_0x2707('0x2a'));return _0x2c7047;}else{logger[_0x2707('0xc')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'uri':util[_0x2707('0xe')](_0x2707('0x2b'),_0x171add[_0x2707('0x10')]),'method':_0x2707('0x11'),'body':{'user':{'role':_0x2707('0x2c'),'name':util[_0x2707('0xe')](_0x2707('0x2d'),_0x2ad386||_0x5b763f),'phone':_0x5b763f}}})[_0x2707('0x19')](function(_0x2d2520){logger['info'](_0x2707('0x2e'));return _0x2d2520[_0x2707('0x27')];});}});}function getAuth(_0x5bcdef){var _0x47ce1c;if(_0x5bcdef['authType']==='password'){_0x47ce1c=util['format'](_0x2707('0x2f'),_0x5bcdef['username'],_0x5bcdef['password']);}else if(_0x5bcdef[_0x2707('0x30')]===_0x2707('0x31')){_0x47ce1c=util['format'](_0x2707('0x32'),_0x5bcdef[_0x2707('0x33')],_0x5bcdef['token']);}return util['format'](_0x2707('0x34'),new Buffer(_0x47ce1c)[_0x2707('0x35')]('base64'));}function request(_0x5d69cf){logger[_0x2707('0x36')](_0x2707('0x37'),JSON['stringify'](_0x5d69cf));return rp(_[_0x2707('0x6')](_0x5d69cf,{'method':_0x2707('0x38'),'headers':headers,'json':!![]}));}function getTags(_0x1bd1c3,_0x2df9d5){var _0x9943e8=[];if(_0x1bd1c3&&_0x1bd1c3[_0x2707('0x29')]>0x0){_0x9943e8=_['map'](_0x1bd1c3,_0x2df9d5);}return _0x9943e8;}function getCustomFields(_0x15a953,_0x1836f7){var _0x37c39e=[];var _0x33612f={'custom_fields':[]};if(_0x15a953[_0x2707('0x29')]>0x0){_[_0x2707('0x39')](_0x15a953,function(_0x2700bf){if(_0x2700bf['type']===_0x2707('0x3a')&&_0x2700bf[_0x2707('0x3b')]&&!_0x2700bf[_0x2707('0x3c')]){_0x33612f[_0x2700bf[_0x2707('0x3b')][_0x2707('0x3d')]()]=_0x2700bf[_0x2707('0x3e')][_0x2707('0x35')]();}else if(_0x2700bf[_0x2707('0x3f')]===_0x2707('0x3a')&&_0x2700bf[_0x2707('0x40')]&&_0x2700bf[_0x2707('0x3c')]){_0x33612f[_0x2707('0x41')][_0x2707('0x42')]({'id':_0x2700bf[_0x2707('0x40')],'value':_0x2700bf[_0x2707('0x3e')][_0x2707('0x35')]()});}else if(_0x2700bf['type']===_0x2707('0x43')&&_0x2700bf[_0x2707('0x44')]&&_0x2700bf['idField']&&_0x2700bf[_0x2707('0x3c')]){_0x1836f7[_0x2700bf['variableName']]&&_0x33612f[_0x2707('0x41')][_0x2707('0x42')]({'id':_0x2700bf[_0x2707('0x40')],'value':_0x1836f7[_0x2700bf[_0x2707('0x44')]][_0x2707('0x35')]()});}else if(_0x2700bf[_0x2707('0x3f')]===_0x2707('0x45')&&_0x2700bf['Variable']&&_0x2700bf[_0x2707('0x46')][_0x2707('0x14')]&&_0x2700bf['idField']&&_0x2700bf[_0x2707('0x3c')]){_0x1836f7[_0x2700bf[_0x2707('0x46')][_0x2707('0x14')]['toLowerCase']()]&&_0x33612f['custom_fields'][_0x2707('0x42')]({'id':_0x2700bf[_0x2707('0x40')],'value':_0x1836f7[_0x2700bf['Variable'][_0x2707('0x14')]['toLowerCase']()][_0x2707('0x35')]()});}});}return _0x33612f;}exports[_0x2707('0x47')]=function(_0x323703,_0x6947fa,_0x4b110e,_0x16ede1,_0x420604,_0x3310e6){var _0x2befe9,_0x20a09c;_0x3310e6[_0x2707('0x10')]=intUtil[_0x2707('0x48')](_0x3310e6['remoteUri']);_0x3310e6[_0x2707('0x49')]=intUtil[_0x2707('0x48')](_0x3310e6[_0x2707('0x49')]);if(_0x420604&&_0x420604[_0x2707('0x4a')]){logger[_0x2707('0xc')]('[QUEUE]',_0x2707('0x4b'));_0x6947fa['recordingURL']=util[_0x2707('0xe')](_0x2707('0x4c'),_0x3310e6['serverUrl'],_0x6947fa[_0x2707('0x4d')],md5(_0x6947fa[_0x2707('0x4d')]));}else{_0x6947fa[_0x2707('0x4e')]='';}headers['Authorization']=getAuth(_0x3310e6);return getUser(_0x3310e6,_0x16ede1[_0x2707('0x4f')])['then'](function(_0xf3bfb8){_0x2befe9=_0xf3bfb8;logger[_0x2707('0xc')]('The\x20User\x20ID\x20is:',_0x2befe9['id']);return getEndUser(_0x3310e6,_0x6947fa[_0x2707('0x50')],_0x6947fa[_0x2707('0x51')]);})[_0x2707('0x19')](function(_0x5adec1){_0x20a09c=_0x5adec1;logger['info'](_0x2707('0x52'),_0x20a09c['id']);return getTicket(_0x3310e6,_0x2befe9,_0x20a09c,_0x4b110e,_0x6947fa);})[_0x2707('0x19')](function(_0x292b44){if(_0x292b44){logger[_0x2707('0xc')](_0x2707('0x53'),_0x292b44['id']);switch(_0x3310e6['type']){case'integrationTab':logger['info'](_0x2707('0x54'),_0x2707('0x55'));return request({'uri':util[_0x2707('0xe')](_0x2707('0x56'),_0x3310e6[_0x2707('0x10')],_0x2befe9['id'],_0x292b44['id']),'method':'POST'});case _0x2707('0x57'):logger[_0x2707('0xc')]('[QUEUE]','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x2707('0xe')](_0x2707('0x58'),_0x16ede1[_0x2707('0x14')]),'trigger:browser:url',{'uri':util[_0x2707('0xe')](_0x2707('0x59'),_0x3310e6[_0x2707('0x10')],_0x292b44['id'])});break;default:logger[_0x2707('0x5a')]('[QUEUE]',_0x2707('0x5b'));}}})[_0x2707('0x5c')](function(_0x28a80e){logger[_0x2707('0x5a')](_0x2707('0x5d'),util[_0x2707('0x5e')](_0x28a80e,{'showHidden':!![],'depth':null}));});};exports[_0x2707('0x5f')]=function(_0x32befc,_0x2148b2,_0xe9512e,_0x4f2b54,_0x38acdd,_0x5316ee,_0x5d27ad){var _0x3029ce,_0x4b9451;_0x5316ee['remoteUri']=intUtil[_0x2707('0x48')](_0x5316ee[_0x2707('0x10')]);_0x5316ee[_0x2707('0x49')]=intUtil[_0x2707('0x48')](_0x5316ee[_0x2707('0x49')]);if(_0x5d27ad&&_0x5d27ad[_0x2707('0x60')]&&_0x5d27ad[_0x2707('0x60')]!==_0x2707('0x61')){logger[_0x2707('0xc')](_0x2707('0x62'),_0x2707('0x4b'));_0x2148b2['recordingURL']=util['format']('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x5316ee[_0x2707('0x49')],_0x2148b2[_0x2707('0x4d')],md5(_0x2148b2[_0x2707('0x4d')]));}headers['Authorization']=getAuth(_0x5316ee);return getUser(_0x5316ee,_0x4f2b54['email'])[_0x2707('0x19')](function(_0x39c9b4){_0x3029ce=_0x39c9b4;logger[_0x2707('0xc')](_0x2707('0x63'),_0x3029ce['id']);return getEndUser(_0x5316ee,_0x2148b2[_0x2707('0x64')],_0x2148b2['destcalleridnum']);})['then'](function(_0x3c4c7b){_0x4b9451=_0x3c4c7b;logger[_0x2707('0xc')](_0x2707('0x52'),_0x4b9451['id']);return getTicket(_0x5316ee,_0x3029ce,_0x4b9451,_0xe9512e,_0x2148b2);})[_0x2707('0x19')](function(_0x19b87b){if(_0x19b87b){logger[_0x2707('0xc')](_0x2707('0x53'),_0x19b87b['id']);switch(_0x5316ee[_0x2707('0x3f')]){case _0x2707('0x65'):logger['info'](_0x2707('0x62'),_0x2707('0x55'));return request({'uri':util[_0x2707('0xe')](_0x2707('0x56'),_0x5316ee[_0x2707('0x10')],_0x3029ce['id'],_0x19b87b['id']),'method':_0x2707('0x11')});case'newTab':logger['info'](_0x2707('0x62'),_0x2707('0x66'));emit(util['format']('user:%s',_0x4f2b54['name']),'trigger:browser:url',{'uri':util[_0x2707('0xe')](_0x2707('0x59'),_0x5316ee['remoteUri'],_0x19b87b['id'])});break;default:logger[_0x2707('0x5a')](_0x2707('0x62'),_0x2707('0x5b'));}}})['catch'](function(_0x508265){logger[_0x2707('0x5a')](_0x2707('0x67'),util[_0x2707('0x5e')](_0x508265,{'showHidden':!![],'depth':null}));});};exports[_0x2707('0x68')]=function(_0x3001e5,_0xdb1de0,_0x3973a0,_0x4da6cf,_0x40b201,_0x3bedb2){var _0x319a1e,_0xe1074b;_0x3bedb2[_0x2707('0x10')]=intUtil[_0x2707('0x48')](_0x3bedb2['remoteUri']);_0x3bedb2[_0x2707('0x49')]=intUtil[_0x2707('0x48')](_0x3bedb2[_0x2707('0x49')]);if(_0x40b201&&_0x40b201[_0x2707('0x4a')]){logger[_0x2707('0xc')]('['+_0xdb1de0[_0x2707('0x69')]['toUpperCase']()+']','Recording\x20is\x20enabled!');_0xdb1de0[_0x2707('0x4e')]=util[_0x2707('0xe')](_0x2707('0x4c'),_0x3bedb2[_0x2707('0x49')],_0xdb1de0[_0x2707('0x4d')],md5(_0xdb1de0[_0x2707('0x4d')]));}else{_0xdb1de0['recordingURL']='';}headers['Authorization']=getAuth(_0x3bedb2);return getUser(_0x3bedb2)[_0x2707('0x19')](function(_0x48a9af){_0x319a1e=_0x48a9af;logger[_0x2707('0xc')](_0x2707('0x63'),_0x319a1e['id']);return getEndUser(_0x3bedb2,_0xdb1de0[_0x2707('0x50')],_0xdb1de0[_0x2707('0x51')]);})[_0x2707('0x19')](function(_0x1783e1){_0xe1074b=_0x1783e1;logger['info'](_0x2707('0x52'),_0xe1074b['id']);return getTicket(_0x3bedb2,_0x319a1e,_0xe1074b,_0x3973a0,_0xdb1de0);})['then'](function(_0x7327da){if(_0x7327da){logger[_0x2707('0xc')]('The\x20Ticket\x20ID\x20is:',_0x7327da['id']);}})[_0x2707('0x5c')](function(_0x16dcac){logger[_0x2707('0x5a')]('['+_0xdb1de0[_0x2707('0x69')][_0x2707('0x6a')]()+']'+'\x20Error\x20running\x20Zendesk\x20integration',util[_0x2707('0x5e')](_0x16dcac,{'showHidden':!![],'depth':null}));});};