7729c59b2ed8825790f475049591a44d927ae97a
[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 _0x958f=['recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Authorization','email','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','integrationTab','Displaying\x20ticket\x20to\x20agent...','%s/channels/voice/agents/%d/tickets/%d/display.json','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','%s/agent/tickets/%s','replace','/api/v2','error','Zendesk\x20account\x20type\x20not\x20recognized','[QUEUE]\x20Error\x20running\x20Zendesk\x20integration','inspect','outbound','recordingFormat','none','[OUTBOUND]','destcalleridname','destcalleridnum','newTab','trigger:browser:url','catch','[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration','unmanaged','lastevent','toUpperCase','\x20Error\x20running\x20Zendesk\x20integration','request-promise','md5','util','ioredis','./util','../../../../config/logger','zendesk','defaults','localhost','socket.io-emitter','redis','emit','application/json','info','Creating\x20new\x20ticket...','format','%s/tickets.json','remoteUri','POST','getString','Subjects','Fields','then','Ticket\x20created!','ticket','Getting\x20agent\x20with\x20email','%s/search.json','count','find','agent','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me.json','Admin\x20account\x20selected.','type:user\x20role:end-user\x20phone:%s','results','length','filter','end-user','first','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/users.json','Caller\x20-\x20%s','Enduser\x20created.','user','password','%s:%s','username','authType','token','base64','debug','[HTTP]','map','forEach','type','string','nameField','content','toString','idField','customField','custom_fields','push','variableName','customVariable','Variable','name','toLowerCase','queue','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!'];(function(_0x2955c9,_0x235353){var _0x584289=function(_0x14de37){while(--_0x14de37){_0x2955c9['push'](_0x2955c9['shift']());}};_0x584289(++_0x235353);}(_0x958f,0x16e));var _0xf958=function(_0x2dadb9,_0x42cfe6){_0x2dadb9=_0x2dadb9-0x0;var _0x2f0097=_0x958f[_0x2dadb9];return _0x2f0097;};'use strict';var _=require('lodash');var rp=require(_0xf958('0x0'));var md5=require(_0xf958('0x1'));var util=require(_0xf958('0x2'));var Redis=require(_0xf958('0x3'));var intUtil=require(_0xf958('0x4'));var config=require('../../../../config/environment');var logger=require(_0xf958('0x5'))(_0xf958('0x6'));config['redis']=_[_0xf958('0x7')](config['redis'],{'host':_0xf958('0x8'),'port':0x18eb});var io=require(_0xf958('0x9'))(new Redis(config[_0xf958('0xa')]));function emit(_0x55ebc5,_0x4f5a7a,_0x4769ad){io['to'](_0x55ebc5)[_0xf958('0xb')](_0x4f5a7a,_0x4769ad);}var headers={'Content-Type':_0xf958('0xc'),'Accept':_0xf958('0xc')};function getTicket(_0x44a0e0,_0x38ca8c,_0x3256f7,_0x1dacb9,_0x60d6a0){logger[_0xf958('0xd')](_0xf958('0xe'));return request({'uri':util[_0xf958('0xf')](_0xf958('0x10'),_0x44a0e0[_0xf958('0x11')]),'method':_0xf958('0x12'),'body':{'ticket':_['merge']({'requester_id':_0x3256f7['id'],'submitter_id':_0x38ca8c?_0x38ca8c['id']:undefined,'assignee_id':_0x38ca8c?_0x38ca8c['id']:undefined,'tags':getTags(_0x1dacb9['Tags'],'name'),'subject':intUtil[_0xf958('0x13')](_0x1dacb9[_0xf958('0x14')],_0x60d6a0,'\x20'),'description':intUtil['getString'](_0x1dacb9['Descriptions'],_0x60d6a0,'\x0a'),'comment':{'public':![],'body':intUtil['getString'](_0x1dacb9['Descriptions'],_0x60d6a0,'\x0a')}},getCustomFields(_0x1dacb9[_0xf958('0x15')],_0x60d6a0))}})[_0xf958('0x16')](function(_0xcdf4cf){logger['info'](_0xf958('0x17'));return _0xcdf4cf[_0xf958('0x18')];});}function getUser(_0x25dd16,_0x5d3a7b){if(intUtil['validateEmail'](_0x5d3a7b)){logger[_0xf958('0xd')](_0xf958('0x19'),_0x5d3a7b);return request({'uri':util[_0xf958('0xf')](_0xf958('0x1a'),_0x25dd16[_0xf958('0x11')]),'qs':{'query':util[_0xf958('0xf')]('type:user\x20role:agent\x20email:%s',_0x5d3a7b)}})[_0xf958('0x16')](function(_0x30f3ff){if(_0x30f3ff[_0xf958('0x1b')]){logger[_0xf958('0xd')]('Agent\x20found!');return _[_0xf958('0x1c')](_0x30f3ff['results'],{'email':_0x5d3a7b,'role':_0xf958('0x1d')});}else{logger[_0xf958('0xd')](_0xf958('0x1e'));return request({'uri':util[_0xf958('0xf')]('%s/users/me.json',_0x25dd16['remoteUri'])})[_0xf958('0x16')](function(_0x136533){logger[_0xf958('0xd')]('Admin\x20account\x20selected.');return _0x136533['user'];});}});}else{logger[_0xf958('0xd')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0xf958('0xf')](_0xf958('0x1f'),_0x25dd16[_0xf958('0x11')])})[_0xf958('0x16')](function(_0x1634da){logger[_0xf958('0xd')](_0xf958('0x20'));return _0x1634da['user'];});}}function getEndUser(_0x269006,_0x5cc87c,_0x373fa9){logger[_0xf958('0xd')]('Searching\x20enduser\x20with\x20phone',_0x373fa9);return request({'uri':util[_0xf958('0xf')](_0xf958('0x1a'),_0x269006['remoteUri']),'qs':{'query':util['format'](_0xf958('0x21'),_0x373fa9)}})[_0xf958('0x16')](function(_0x2327aa){var _0x457166;if(_0x2327aa[_0xf958('0x22')][_0xf958('0x23')]){_0x2327aa[_0xf958('0x22')]=_[_0xf958('0x24')](_0x2327aa['results'],{'suspended':![],'role':_0xf958('0x25')});if(_0x2327aa[_0xf958('0x22')][_0xf958('0x23')]){_0x457166=_[_0xf958('0x26')](_0x2327aa[_0xf958('0x22')]);}}if(_0x457166){logger[_0xf958('0xd')]('Enduser\x20found!');return _0x457166;}else{logger[_0xf958('0xd')](_0xf958('0x27'));return request({'uri':util[_0xf958('0xf')](_0xf958('0x28'),_0x269006[_0xf958('0x11')]),'method':'POST','body':{'user':{'role':_0xf958('0x25'),'name':util[_0xf958('0xf')](_0xf958('0x29'),_0x5cc87c||_0x373fa9),'phone':_0x373fa9}}})[_0xf958('0x16')](function(_0xf10cd2){logger['info'](_0xf958('0x2a'));return _0xf10cd2[_0xf958('0x2b')];});}});}function getAuth(_0x1e8953){var _0x249477;if(_0x1e8953['authType']===_0xf958('0x2c')){_0x249477=util['format'](_0xf958('0x2d'),_0x1e8953[_0xf958('0x2e')],_0x1e8953[_0xf958('0x2c')]);}else if(_0x1e8953[_0xf958('0x2f')]===_0xf958('0x30')){_0x249477=util['format']('%s/token:%s',_0x1e8953[_0xf958('0x2e')],_0x1e8953[_0xf958('0x30')]);}return util[_0xf958('0xf')]('Basic\x20%s',new Buffer(_0x249477)['toString'](_0xf958('0x31')));}function request(_0x3e94ce){logger[_0xf958('0x32')](_0xf958('0x33'),JSON['stringify'](_0x3e94ce));return rp(_[_0xf958('0x7')](_0x3e94ce,{'method':'GET','headers':headers,'json':!![]}));}function getTags(_0x5eaa44,_0x18ff06){var _0x3979c4=[];if(_0x5eaa44&&_0x5eaa44[_0xf958('0x23')]>0x0){_0x3979c4=_[_0xf958('0x34')](_0x5eaa44,_0x18ff06);}return _0x3979c4;}function getCustomFields(_0x49c768,_0x202ebf){var _0x47faa1=[];var _0x9567d0={'custom_fields':[]};if(_0x49c768[_0xf958('0x23')]>0x0){_[_0xf958('0x35')](_0x49c768,function(_0x27985e){if(_0x27985e[_0xf958('0x36')]===_0xf958('0x37')&&_0x27985e[_0xf958('0x38')]&&!_0x27985e['customField']){_0x9567d0[_0x27985e[_0xf958('0x38')]['toLowerCase']()]=_0x27985e[_0xf958('0x39')][_0xf958('0x3a')]();}else if(_0x27985e[_0xf958('0x36')]==='string'&&_0x27985e[_0xf958('0x3b')]&&_0x27985e[_0xf958('0x3c')]){_0x9567d0[_0xf958('0x3d')][_0xf958('0x3e')]({'id':_0x27985e[_0xf958('0x3b')],'value':_0x27985e[_0xf958('0x39')][_0xf958('0x3a')]()});}else if(_0x27985e[_0xf958('0x36')]==='variable'&&_0x27985e[_0xf958('0x3f')]&&_0x27985e[_0xf958('0x3b')]&&_0x27985e[_0xf958('0x3c')]){_0x202ebf[_0x27985e[_0xf958('0x3f')]]&&_0x9567d0[_0xf958('0x3d')]['push']({'id':_0x27985e[_0xf958('0x3b')],'value':_0x202ebf[_0x27985e['variableName']]['toString']()});}else if(_0x27985e['type']===_0xf958('0x40')&&_0x27985e[_0xf958('0x41')]&&_0x27985e[_0xf958('0x41')]['name']&&_0x27985e['idField']&&_0x27985e['customField']){_0x202ebf[_0x27985e[_0xf958('0x41')][_0xf958('0x42')]['toLowerCase']()]&&_0x9567d0[_0xf958('0x3d')][_0xf958('0x3e')]({'id':_0x27985e[_0xf958('0x3b')],'value':_0x202ebf[_0x27985e[_0xf958('0x41')][_0xf958('0x42')][_0xf958('0x43')]()]['toString']()});}});}return _0x9567d0;}exports[_0xf958('0x44')]=function(_0x29e9e8,_0x2c5a7b,_0xc0f9bd,_0x319d6c,_0x2eaa1e,_0xe04e46){var _0x1671fa,_0x55634c;_0xe04e46[_0xf958('0x11')]=intUtil[_0xf958('0x45')](_0xe04e46[_0xf958('0x11')]);_0xe04e46[_0xf958('0x46')]=intUtil['stripTrailingSlash'](_0xe04e46[_0xf958('0x46')]);if(_0x2eaa1e&&_0x2eaa1e[_0xf958('0x47')]){logger[_0xf958('0xd')](_0xf958('0x48'),_0xf958('0x49'));_0x2c5a7b[_0xf958('0x4a')]=util['format'](_0xf958('0x4b'),_0xe04e46[_0xf958('0x46')],_0x2c5a7b[_0xf958('0x4c')],md5(_0x2c5a7b[_0xf958('0x4c')]));}else{_0x2c5a7b['recordingURL']='';}headers[_0xf958('0x4d')]=getAuth(_0xe04e46);return getUser(_0xe04e46,_0x319d6c[_0xf958('0x4e')])[_0xf958('0x16')](function(_0x2c8daf){_0x1671fa=_0x2c8daf;logger['info'](_0xf958('0x4f'),_0x1671fa['id']);return getEndUser(_0xe04e46,_0x2c5a7b[_0xf958('0x50')],_0x2c5a7b[_0xf958('0x51')]);})[_0xf958('0x16')](function(_0x188d28){_0x55634c=_0x188d28;logger[_0xf958('0xd')](_0xf958('0x52'),_0x55634c['id']);return getTicket(_0xe04e46,_0x1671fa,_0x55634c,_0xc0f9bd,_0x2c5a7b);})[_0xf958('0x16')](function(_0x433455){if(_0x433455){logger[_0xf958('0xd')](_0xf958('0x53'),_0x433455['id']);switch(_0xe04e46[_0xf958('0x36')]){case _0xf958('0x54'):logger['info'](_0xf958('0x48'),_0xf958('0x55'));return request({'uri':util[_0xf958('0xf')](_0xf958('0x56'),_0xe04e46[_0xf958('0x11')],_0x1671fa['id'],_0x433455['id']),'method':_0xf958('0x12')});case'newTab':logger['info']('[QUEUE]',_0xf958('0x57'));emit(util[_0xf958('0xf')](_0xf958('0x58'),_0x319d6c[_0xf958('0x42')]),'trigger:browser:url',{'uri':util[_0xf958('0xf')](_0xf958('0x59'),_0xe04e46[_0xf958('0x11')][_0xf958('0x5a')](_0xf958('0x5b'),''),_0x433455['id'])});break;default:logger[_0xf958('0x5c')]('[QUEUE]',_0xf958('0x5d'));}}})['catch'](function(_0x2d845b){logger[_0xf958('0x5c')](_0xf958('0x5e'),util[_0xf958('0x5f')](_0x2d845b,{'showHidden':!![],'depth':null}));});};exports[_0xf958('0x60')]=function(_0x19e8fa,_0x4e041a,_0x13cbba,_0x344cca,_0x1db6d2,_0x2789ad,_0x4bc9d2){var _0x3f6d82,_0x3590cd;_0x2789ad[_0xf958('0x11')]=intUtil['stripTrailingSlash'](_0x2789ad[_0xf958('0x11')]);_0x2789ad[_0xf958('0x46')]=intUtil[_0xf958('0x45')](_0x2789ad['serverUrl']);if(_0x4bc9d2&&_0x4bc9d2[_0xf958('0x61')]&&_0x4bc9d2[_0xf958('0x61')]!==_0xf958('0x62')){logger[_0xf958('0xd')](_0xf958('0x63'),_0xf958('0x49'));_0x4e041a[_0xf958('0x4a')]=util['format']('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x2789ad[_0xf958('0x46')],_0x4e041a['uniqueid'],md5(_0x4e041a['uniqueid']));}headers[_0xf958('0x4d')]=getAuth(_0x2789ad);return getUser(_0x2789ad,_0x344cca[_0xf958('0x4e')])[_0xf958('0x16')](function(_0x43ac75){_0x3f6d82=_0x43ac75;logger['info']('The\x20User\x20ID\x20is:',_0x3f6d82['id']);return getEndUser(_0x2789ad,_0x4e041a[_0xf958('0x64')],_0x4e041a[_0xf958('0x65')]);})['then'](function(_0x51cb4d){_0x3590cd=_0x51cb4d;logger[_0xf958('0xd')](_0xf958('0x52'),_0x3590cd['id']);return getTicket(_0x2789ad,_0x3f6d82,_0x3590cd,_0x13cbba,_0x4e041a);})[_0xf958('0x16')](function(_0x2d3fde){if(_0x2d3fde){logger['info'](_0xf958('0x53'),_0x2d3fde['id']);switch(_0x2789ad[_0xf958('0x36')]){case _0xf958('0x54'):logger[_0xf958('0xd')]('[OUTBOUND]',_0xf958('0x55'));return request({'uri':util[_0xf958('0xf')](_0xf958('0x56'),_0x2789ad['remoteUri'],_0x3f6d82['id'],_0x2d3fde['id']),'method':_0xf958('0x12')});case _0xf958('0x66'):logger['info']('[OUTBOUND]',_0xf958('0x57'));emit(util[_0xf958('0xf')]('user:%s',_0x344cca[_0xf958('0x42')]),_0xf958('0x67'),{'uri':util[_0xf958('0xf')](_0xf958('0x59'),_0x2789ad[_0xf958('0x11')][_0xf958('0x5a')](_0xf958('0x5b'),''),_0x2d3fde['id'])});break;default:logger[_0xf958('0x5c')](_0xf958('0x63'),'Zendesk\x20account\x20type\x20not\x20recognized');}}})[_0xf958('0x68')](function(_0x4aeaf2){logger[_0xf958('0x5c')](_0xf958('0x69'),util[_0xf958('0x5f')](_0x4aeaf2,{'showHidden':!![],'depth':null}));});};exports[_0xf958('0x6a')]=function(_0x5fa1de,_0x5d82b2,_0x12c6e2,_0x2a4e5a,_0x32997d,_0x50066d){var _0x3458b0,_0x42baa3;_0x50066d['remoteUri']=intUtil[_0xf958('0x45')](_0x50066d['remoteUri']);_0x50066d[_0xf958('0x46')]=intUtil[_0xf958('0x45')](_0x50066d[_0xf958('0x46')]);if(_0x32997d&&_0x32997d[_0xf958('0x47')]){logger[_0xf958('0xd')]('['+_0x5d82b2[_0xf958('0x6b')][_0xf958('0x6c')]()+']','Recording\x20is\x20enabled!');_0x5d82b2['recordingURL']=util['format']('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x50066d['serverUrl'],_0x5d82b2[_0xf958('0x4c')],md5(_0x5d82b2[_0xf958('0x4c')]));}else{_0x5d82b2[_0xf958('0x4a')]='';}headers[_0xf958('0x4d')]=getAuth(_0x50066d);return getUser(_0x50066d)[_0xf958('0x16')](function(_0x11ba3f){_0x3458b0=_0x11ba3f;logger[_0xf958('0xd')](_0xf958('0x4f'),_0x3458b0['id']);return getEndUser(_0x50066d,_0x5d82b2[_0xf958('0x50')],_0x5d82b2[_0xf958('0x51')]);})[_0xf958('0x16')](function(_0x16c2b0){_0x42baa3=_0x16c2b0;logger[_0xf958('0xd')](_0xf958('0x52'),_0x42baa3['id']);return getTicket(_0x50066d,_0x3458b0,_0x42baa3,_0x12c6e2,_0x5d82b2);})[_0xf958('0x16')](function(_0x157f55){if(_0x157f55){logger[_0xf958('0xd')](_0xf958('0x53'),_0x157f55['id']);}})[_0xf958('0x68')](function(_0x33c6d9){logger[_0xf958('0x5c')]('['+_0x5d82b2['lastevent'][_0xf958('0x6c')]()+']'+_0xf958('0x6d'),util[_0xf958('0x5f')](_0x33c6d9,{'showHidden':!![],'depth':null}));});};