f5fec7a1ffb04ff7cea1e95a40a9e26341c1f0d4
[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 _0x9e87=['inspect','unmanaged','lastevent','toUpperCase','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','\x20Error\x20running\x20Zendesk\x20integration','lodash','request-promise','md5','util','./util','../../../../config/environment','../../../../config/logger','zendesk','redis','defaults','application/json','info','Creating\x20new\x20ticket...','format','%s/tickets.json','remoteUri','POST','merge','getString','Subjects','Descriptions','Fields','then','Ticket\x20created!','validateEmail','Getting\x20agent\x20with\x20email','%s/search.json','type:user\x20role:agent\x20email:%s','results','agent','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','Admin\x20account\x20selected.','%s/users/me.json','Searching\x20enduser\x20with\x20phone','type:user\x20role:end-user\x20phone:%s','length','filter','end-user','first','Enduser\x20found!','%s/users.json','Enduser\x20created.','user','authType','password','%s:%s','username','token','Basic\x20%s','toString','base64','[HTTP]','stringify','GET','map','forEach','type','nameField','customField','toLowerCase','content','includes','picklist','idField','custom_fields','push','variable','variableName','customVariable','Variable','name','queue','serverUrl','stripTrailingSlash','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','uniqueid','Authorization','The\x20User\x20ID\x20is:','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','integrationTab','Displaying\x20ticket\x20to\x20agent...','%s/channels/voice/agents/%d/tickets/%d/display.json','newTab','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','replace','/api/v2','error','Zendesk\x20account\x20type\x20not\x20recognized','catch','outbound','recordingFormat','none','[OUTBOUND]','email','destcalleridname','[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration'];(function(_0x567fff,_0xd8acd8){var _0x465a37=function(_0x9d7bf7){while(--_0x9d7bf7){_0x567fff['push'](_0x567fff['shift']());}};_0x465a37(++_0xd8acd8);}(_0x9e87,0xe0));var _0x79e8=function(_0x33155c,_0x3fdde1){_0x33155c=_0x33155c-0x0;var _0x5becf7=_0x9e87[_0x33155c];return _0x5becf7;};'use strict';var _=require(_0x79e8('0x0'));var rp=require(_0x79e8('0x1'));var md5=require(_0x79e8('0x2'));var util=require(_0x79e8('0x3'));var Redis=require('ioredis');var intUtil=require(_0x79e8('0x4'));var config=require(_0x79e8('0x5'));var logger=require(_0x79e8('0x6'))(_0x79e8('0x7'));config[_0x79e8('0x8')]=_[_0x79e8('0x9')](config[_0x79e8('0x8')],{'host':'localhost','port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x79e8('0x8')]));function emit(_0x5ab3b1,_0x3ce358,_0x135da0){io['to'](_0x5ab3b1)['emit'](_0x3ce358,_0x135da0);}var headers={'Content-Type':_0x79e8('0xa'),'Accept':_0x79e8('0xa')};function getTicket(_0x44ac65,_0x369c0c,_0x2c20dc,_0x16a487,_0xfc3686){logger[_0x79e8('0xb')](_0x79e8('0xc'));return request({'uri':util[_0x79e8('0xd')](_0x79e8('0xe'),_0x44ac65[_0x79e8('0xf')]),'method':_0x79e8('0x10'),'body':{'ticket':_[_0x79e8('0x11')]({'requester_id':_0x2c20dc['id'],'submitter_id':_0x369c0c?_0x369c0c['id']:undefined,'assignee_id':_0x369c0c?_0x369c0c['id']:undefined,'tags':getTags(_0x16a487['Tags'],'name'),'subject':intUtil[_0x79e8('0x12')](_0x16a487[_0x79e8('0x13')],_0xfc3686,'\x20'),'description':intUtil[_0x79e8('0x12')](_0x16a487[_0x79e8('0x14')],_0xfc3686,'\x0a'),'comment':{'public':![],'body':intUtil[_0x79e8('0x12')](_0x16a487['Descriptions'],_0xfc3686,'\x0a')}},getCustomFields(_0x16a487[_0x79e8('0x15')],_0xfc3686))}})[_0x79e8('0x16')](function(_0x1fa83a){logger[_0x79e8('0xb')](_0x79e8('0x17'));return _0x1fa83a['ticket'];});}function getUser(_0x1b6385,_0x333c7e){if(intUtil[_0x79e8('0x18')](_0x333c7e)){logger['info'](_0x79e8('0x19'),_0x333c7e);return request({'uri':util['format'](_0x79e8('0x1a'),_0x1b6385[_0x79e8('0xf')]),'qs':{'query':util[_0x79e8('0xd')](_0x79e8('0x1b'),_0x333c7e)}})[_0x79e8('0x16')](function(_0x91524b){if(_0x91524b['count']){logger['info']('Agent\x20found!');return _['find'](_0x91524b[_0x79e8('0x1c')],{'email':_0x333c7e,'role':_0x79e8('0x1d')});}else{logger[_0x79e8('0xb')](_0x79e8('0x1e'));return request({'uri':util[_0x79e8('0xd')]('%s/users/me.json',_0x1b6385[_0x79e8('0xf')])})['then'](function(_0x58bdcc){logger[_0x79e8('0xb')](_0x79e8('0x1f'));return _0x58bdcc['user'];});}});}else{logger[_0x79e8('0xb')](_0x79e8('0x1e'));return request({'uri':util[_0x79e8('0xd')](_0x79e8('0x20'),_0x1b6385[_0x79e8('0xf')])})[_0x79e8('0x16')](function(_0xd74765){logger[_0x79e8('0xb')](_0x79e8('0x1f'));return _0xd74765['user'];});}}function getEndUser(_0x58434d,_0xe6dfce,_0x1081d0){logger[_0x79e8('0xb')](_0x79e8('0x21'),_0x1081d0);return request({'uri':util[_0x79e8('0xd')](_0x79e8('0x1a'),_0x58434d[_0x79e8('0xf')]),'qs':{'query':util[_0x79e8('0xd')](_0x79e8('0x22'),_0x1081d0)}})[_0x79e8('0x16')](function(_0x1c483a){var _0x4f96e0;if(_0x1c483a[_0x79e8('0x1c')][_0x79e8('0x23')]){_0x1c483a[_0x79e8('0x1c')]=_[_0x79e8('0x24')](_0x1c483a[_0x79e8('0x1c')],{'suspended':![],'role':_0x79e8('0x25')});if(_0x1c483a[_0x79e8('0x1c')]['length']){_0x4f96e0=_[_0x79e8('0x26')](_0x1c483a[_0x79e8('0x1c')]);}}if(_0x4f96e0){logger[_0x79e8('0xb')](_0x79e8('0x27'));return _0x4f96e0;}else{logger[_0x79e8('0xb')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'uri':util[_0x79e8('0xd')](_0x79e8('0x28'),_0x58434d[_0x79e8('0xf')]),'method':_0x79e8('0x10'),'body':{'user':{'role':_0x79e8('0x25'),'name':util[_0x79e8('0xd')]('Caller\x20-\x20%s',_0xe6dfce||_0x1081d0),'phone':_0x1081d0}}})[_0x79e8('0x16')](function(_0x56f3b4){logger[_0x79e8('0xb')](_0x79e8('0x29'));return _0x56f3b4[_0x79e8('0x2a')];});}});}function getAuth(_0x58ae9c){var _0x38e1b8;if(_0x58ae9c[_0x79e8('0x2b')]===_0x79e8('0x2c')){_0x38e1b8=util[_0x79e8('0xd')](_0x79e8('0x2d'),_0x58ae9c[_0x79e8('0x2e')],_0x58ae9c[_0x79e8('0x2c')]);}else if(_0x58ae9c[_0x79e8('0x2b')]===_0x79e8('0x2f')){_0x38e1b8=util[_0x79e8('0xd')]('%s/token:%s',_0x58ae9c[_0x79e8('0x2e')],_0x58ae9c[_0x79e8('0x2f')]);}return util[_0x79e8('0xd')](_0x79e8('0x30'),new Buffer(_0x38e1b8)[_0x79e8('0x31')](_0x79e8('0x32')));}function request(_0x84c307){logger['debug'](_0x79e8('0x33'),JSON[_0x79e8('0x34')](_0x84c307));return rp(_[_0x79e8('0x9')](_0x84c307,{'method':_0x79e8('0x35'),'headers':headers,'json':!![]}));}function getTags(_0x591260,_0x2c424e){var _0x2405c5=[];if(_0x591260&&_0x591260[_0x79e8('0x23')]>0x0){_0x2405c5=_[_0x79e8('0x36')](_0x591260,_0x2c424e);}return _0x2405c5;}function getCustomFields(_0xd47f36,_0x3996b7){var _0x438cac=[];var _0x159567={'custom_fields':[]};if(_0xd47f36[_0x79e8('0x23')]>0x0){_[_0x79e8('0x37')](_0xd47f36,function(_0x437f44){if(_['includes'](['string','picklist'],_0x437f44[_0x79e8('0x38')])&&_0x437f44[_0x79e8('0x39')]&&!_0x437f44[_0x79e8('0x3a')]){_0x159567[_0x437f44[_0x79e8('0x39')][_0x79e8('0x3b')]()]=_0x437f44[_0x79e8('0x3c')]['toString']();}else if(_[_0x79e8('0x3d')](['string',_0x79e8('0x3e')],_0x437f44[_0x79e8('0x38')])&&_0x437f44[_0x79e8('0x3f')]&&_0x437f44[_0x79e8('0x3a')]){_0x159567[_0x79e8('0x40')][_0x79e8('0x41')]({'id':_0x437f44[_0x79e8('0x3f')],'value':_0x437f44[_0x79e8('0x3c')][_0x79e8('0x31')]()});}else if(_0x437f44[_0x79e8('0x38')]===_0x79e8('0x42')&&_0x437f44[_0x79e8('0x43')]&&_0x437f44[_0x79e8('0x3f')]&&_0x437f44['customField']){_0x3996b7[_0x437f44[_0x79e8('0x43')]]&&_0x159567[_0x79e8('0x40')][_0x79e8('0x41')]({'id':_0x437f44[_0x79e8('0x3f')],'value':_0x3996b7[_0x437f44[_0x79e8('0x43')]][_0x79e8('0x31')]()});}else if(_0x437f44[_0x79e8('0x38')]===_0x79e8('0x44')&&_0x437f44['Variable']&&_0x437f44[_0x79e8('0x45')][_0x79e8('0x46')]&&_0x437f44['idField']&&_0x437f44[_0x79e8('0x3a')]){_0x3996b7[_0x437f44[_0x79e8('0x45')][_0x79e8('0x46')]['toLowerCase']()]&&_0x159567[_0x79e8('0x40')][_0x79e8('0x41')]({'id':_0x437f44['idField'],'value':_0x3996b7[_0x437f44['Variable'][_0x79e8('0x46')]['toLowerCase']()][_0x79e8('0x31')]()});}});}return _0x159567;}exports[_0x79e8('0x47')]=function(_0x55b5e7,_0x276a9a,_0x5da294,_0x571f21,_0x461c44,_0x382bfc){var _0x4af772,_0x301984;_0x382bfc[_0x79e8('0xf')]=intUtil['stripTrailingSlash'](_0x382bfc[_0x79e8('0xf')]);_0x382bfc[_0x79e8('0x48')]=intUtil[_0x79e8('0x49')](_0x382bfc[_0x79e8('0x48')]);if(_0x461c44&&_0x461c44[_0x79e8('0x4a')]){logger['info'](_0x79e8('0x4b'),_0x79e8('0x4c'));_0x276a9a[_0x79e8('0x4d')]=util[_0x79e8('0xd')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x382bfc[_0x79e8('0x48')],_0x276a9a[_0x79e8('0x4e')],md5(_0x276a9a[_0x79e8('0x4e')]));}else{_0x276a9a[_0x79e8('0x4d')]='';}headers[_0x79e8('0x4f')]=getAuth(_0x382bfc);return getUser(_0x382bfc,_0x571f21['email'])['then'](function(_0x2da2af){_0x4af772=_0x2da2af;logger['info'](_0x79e8('0x50'),_0x4af772['id']);return getEndUser(_0x382bfc,_0x276a9a['calleridname'],_0x276a9a[_0x79e8('0x51')]);})[_0x79e8('0x16')](function(_0x112c23){_0x301984=_0x112c23;logger[_0x79e8('0xb')](_0x79e8('0x52'),_0x301984['id']);return getTicket(_0x382bfc,_0x4af772,_0x301984,_0x5da294,_0x276a9a);})[_0x79e8('0x16')](function(_0x673ecb){if(_0x673ecb){logger[_0x79e8('0xb')](_0x79e8('0x53'),_0x673ecb['id']);switch(_0x382bfc[_0x79e8('0x38')]){case _0x79e8('0x54'):logger[_0x79e8('0xb')](_0x79e8('0x4b'),_0x79e8('0x55'));return request({'uri':util[_0x79e8('0xd')](_0x79e8('0x56'),_0x382bfc[_0x79e8('0xf')],_0x4af772['id'],_0x673ecb['id']),'method':_0x79e8('0x10')});case _0x79e8('0x57'):logger[_0x79e8('0xb')](_0x79e8('0x4b'),_0x79e8('0x58'));emit(util[_0x79e8('0xd')](_0x79e8('0x59'),_0x571f21['name']),_0x79e8('0x5a'),{'uri':util[_0x79e8('0xd')]('%s/agent/tickets/%s',_0x382bfc[_0x79e8('0xf')][_0x79e8('0x5b')](_0x79e8('0x5c'),''),_0x673ecb['id'])});break;default:logger[_0x79e8('0x5d')](_0x79e8('0x4b'),_0x79e8('0x5e'));}}})[_0x79e8('0x5f')](function(_0x3dfe7c){logger[_0x79e8('0x5d')]('[QUEUE]\x20Error\x20running\x20Zendesk\x20integration',util['inspect'](_0x3dfe7c,{'showHidden':!![],'depth':null}));});};exports[_0x79e8('0x60')]=function(_0x3cf0b1,_0x3185dc,_0x3998ee,_0x178d7e,_0xd32116,_0x2c32ed,_0x5ecdd8){var _0x5d9632,_0x913ed9;_0x2c32ed[_0x79e8('0xf')]=intUtil[_0x79e8('0x49')](_0x2c32ed[_0x79e8('0xf')]);_0x2c32ed[_0x79e8('0x48')]=intUtil['stripTrailingSlash'](_0x2c32ed['serverUrl']);if(_0x5ecdd8&&_0x5ecdd8[_0x79e8('0x61')]&&_0x5ecdd8['recordingFormat']!==_0x79e8('0x62')){logger[_0x79e8('0xb')](_0x79e8('0x63'),_0x79e8('0x4c'));_0x3185dc['recordingURL']=util[_0x79e8('0xd')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x2c32ed[_0x79e8('0x48')],_0x3185dc[_0x79e8('0x4e')],md5(_0x3185dc[_0x79e8('0x4e')]));}headers[_0x79e8('0x4f')]=getAuth(_0x2c32ed);return getUser(_0x2c32ed,_0x178d7e[_0x79e8('0x64')])['then'](function(_0x88dc22){_0x5d9632=_0x88dc22;logger['info'](_0x79e8('0x50'),_0x5d9632['id']);return getEndUser(_0x2c32ed,_0x3185dc[_0x79e8('0x65')],_0x3185dc['destcalleridnum']);})[_0x79e8('0x16')](function(_0x3b03a7){_0x913ed9=_0x3b03a7;logger[_0x79e8('0xb')](_0x79e8('0x52'),_0x913ed9['id']);return getTicket(_0x2c32ed,_0x5d9632,_0x913ed9,_0x3998ee,_0x3185dc);})[_0x79e8('0x16')](function(_0x2a6639){if(_0x2a6639){logger[_0x79e8('0xb')]('The\x20Ticket\x20ID\x20is:',_0x2a6639['id']);switch(_0x2c32ed[_0x79e8('0x38')]){case _0x79e8('0x54'):logger[_0x79e8('0xb')](_0x79e8('0x63'),_0x79e8('0x55'));return request({'uri':util['format']('%s/channels/voice/agents/%d/tickets/%d/display.json',_0x2c32ed[_0x79e8('0xf')],_0x5d9632['id'],_0x2a6639['id']),'method':_0x79e8('0x10')});case'newTab':logger[_0x79e8('0xb')]('[OUTBOUND]',_0x79e8('0x58'));emit(util[_0x79e8('0xd')](_0x79e8('0x59'),_0x178d7e[_0x79e8('0x46')]),_0x79e8('0x5a'),{'uri':util[_0x79e8('0xd')]('%s/agent/tickets/%s',_0x2c32ed['remoteUri'][_0x79e8('0x5b')]('/api/v2',''),_0x2a6639['id'])});break;default:logger['error'](_0x79e8('0x63'),'Zendesk\x20account\x20type\x20not\x20recognized');}}})[_0x79e8('0x5f')](function(_0x38ce71){logger[_0x79e8('0x5d')](_0x79e8('0x66'),util[_0x79e8('0x67')](_0x38ce71,{'showHidden':!![],'depth':null}));});};exports[_0x79e8('0x68')]=function(_0x530c42,_0x43ec6d,_0x1d3505,_0x21d4af,_0x5c772e,_0x3460ae){var _0x6059da,_0x3d51ea;_0x3460ae['remoteUri']=intUtil['stripTrailingSlash'](_0x3460ae[_0x79e8('0xf')]);_0x3460ae['serverUrl']=intUtil['stripTrailingSlash'](_0x3460ae[_0x79e8('0x48')]);if(_0x5c772e&&_0x5c772e[_0x79e8('0x4a')]){logger[_0x79e8('0xb')]('['+_0x43ec6d[_0x79e8('0x69')][_0x79e8('0x6a')]()+']',_0x79e8('0x4c'));_0x43ec6d[_0x79e8('0x4d')]=util[_0x79e8('0xd')](_0x79e8('0x6b'),_0x3460ae[_0x79e8('0x48')],_0x43ec6d['uniqueid'],md5(_0x43ec6d[_0x79e8('0x4e')]));}else{_0x43ec6d[_0x79e8('0x4d')]='';}headers[_0x79e8('0x4f')]=getAuth(_0x3460ae);return getUser(_0x3460ae)['then'](function(_0x3c1994){_0x6059da=_0x3c1994;logger['info'](_0x79e8('0x50'),_0x6059da['id']);return getEndUser(_0x3460ae,_0x43ec6d['calleridname'],_0x43ec6d[_0x79e8('0x51')]);})['then'](function(_0x24a771){_0x3d51ea=_0x24a771;logger[_0x79e8('0xb')]('The\x20Enduser\x20ID\x20is:',_0x3d51ea['id']);return getTicket(_0x3460ae,_0x6059da,_0x3d51ea,_0x1d3505,_0x43ec6d);})[_0x79e8('0x16')](function(_0x7873bb){if(_0x7873bb){logger[_0x79e8('0xb')](_0x79e8('0x53'),_0x7873bb['id']);}})[_0x79e8('0x5f')](function(_0x5360d5){logger[_0x79e8('0x5d')]('['+_0x43ec6d[_0x79e8('0x69')]['toUpperCase']()+']'+_0x79e8('0x6c'),util[_0x79e8('0x67')](_0x5360d5,{'showHidden':!![],'depth':null}));});};