5d1e76610bfe06aee68a9c27da0cd0c53b433ed1
[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 _0xb029=['push','variable','variableName','Variable','name','queue','stripTrailingSlash','serverUrl','monitor_format','recordingURL','uniqueid','Authorization','email','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Ticket\x20ID\x20is:','integrationTab','Displaying\x20ticket\x20to\x20agent...','newTab','user:%s','trigger:browser:url','%s/agent/tickets/%s','replace','/api/v2','[QUEUE]','Zendesk\x20account\x20type\x20not\x20recognized','error','[QUEUE]\x20Error\x20running\x20Zendesk\x20integration','inspect','outbound','none','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','destcalleridname','destcalleridnum','The\x20Enduser\x20ID\x20is:','[OUTBOUND]','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration','unmanaged','lastevent','toUpperCase','catch','\x20Error\x20running\x20Zendesk\x20integration','lodash','ioredis','./util','../../../../config/environment','zendesk','redis','defaults','localhost','socket.io-emitter','emit','application/json','info','Creating\x20new\x20ticket...','format','%s/tickets.json','remoteUri','POST','Tags','getString','Subjects','Fields','validateEmail','Getting\x20agent\x20with\x20email','%s/search.json','then','count','Agent\x20found!','find','results','agent','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','user','Admin\x20account\x20selected.','Searching\x20enduser\x20with\x20phone','type:user\x20role:end-user\x20phone:%s','length','filter','end-user','first','Enduser\x20found!','%s/users.json','Caller\x20-\x20%s','Enduser\x20created.','authType','%s:%s','username','password','token','%s/token:%s','Basic\x20%s','toString','base64','debug','[HTTP]','stringify','forEach','includes','string','picklist','nameField','customField','toLowerCase','content','type','idField','custom_fields'];(function(_0x567539,_0xd7c7a8){var _0xbbcd0d=function(_0x2da317){while(--_0x2da317){_0x567539['push'](_0x567539['shift']());}};_0xbbcd0d(++_0xd7c7a8);}(_0xb029,0x10b));var _0x9b02=function(_0x5c30a3,_0x2b165e){_0x5c30a3=_0x5c30a3-0x0;var _0x341d09=_0xb029[_0x5c30a3];return _0x341d09;};'use strict';var _=require(_0x9b02('0x0'));var rp=require('request-promise');var md5=require('md5');var util=require('util');var Redis=require(_0x9b02('0x1'));var intUtil=require(_0x9b02('0x2'));var config=require(_0x9b02('0x3'));var logger=require('../../../../config/logger')(_0x9b02('0x4'));config[_0x9b02('0x5')]=_[_0x9b02('0x6')](config[_0x9b02('0x5')],{'host':_0x9b02('0x7'),'port':0x18eb});var io=require(_0x9b02('0x8'))(new Redis(config[_0x9b02('0x5')]));function emit(_0x22449c,_0x1074fd,_0x99fa8){io['to'](_0x22449c)[_0x9b02('0x9')](_0x1074fd,_0x99fa8);}var headers={'Content-Type':_0x9b02('0xa'),'Accept':_0x9b02('0xa')};function getTicket(_0x1d03d8,_0x4b3709,_0x35cca2,_0x1b2ed4,_0x3f36d6){logger[_0x9b02('0xb')](_0x9b02('0xc'));return request({'uri':util[_0x9b02('0xd')](_0x9b02('0xe'),_0x1d03d8[_0x9b02('0xf')]),'method':_0x9b02('0x10'),'body':{'ticket':_['merge']({'requester_id':_0x35cca2['id'],'submitter_id':_0x4b3709?_0x4b3709['id']:undefined,'assignee_id':_0x4b3709?_0x4b3709['id']:undefined,'tags':getTags(_0x1b2ed4[_0x9b02('0x11')],'name'),'subject':intUtil[_0x9b02('0x12')](_0x1b2ed4[_0x9b02('0x13')],_0x3f36d6,'\x20'),'description':intUtil['getString'](_0x1b2ed4['Descriptions'],_0x3f36d6,'\x0a'),'comment':{'public':![],'body':intUtil['getString'](_0x1b2ed4['Descriptions'],_0x3f36d6,'\x0a')}},getCustomFields(_0x1b2ed4[_0x9b02('0x14')],_0x3f36d6))}})['then'](function(_0x3f4f11){logger[_0x9b02('0xb')]('Ticket\x20created!');return _0x3f4f11['ticket'];});}function getUser(_0xeaa22f,_0x405a5f){if(intUtil[_0x9b02('0x15')](_0x405a5f)){logger[_0x9b02('0xb')](_0x9b02('0x16'),_0x405a5f);return request({'uri':util[_0x9b02('0xd')](_0x9b02('0x17'),_0xeaa22f['remoteUri']),'qs':{'query':util['format']('type:user\x20role:agent\x20email:%s',_0x405a5f)}})[_0x9b02('0x18')](function(_0x47b88b){if(_0x47b88b[_0x9b02('0x19')]){logger[_0x9b02('0xb')](_0x9b02('0x1a'));return _[_0x9b02('0x1b')](_0x47b88b[_0x9b02('0x1c')],{'email':_0x405a5f,'role':_0x9b02('0x1d')});}else{logger[_0x9b02('0xb')](_0x9b02('0x1e'));return request({'uri':util[_0x9b02('0xd')]('%s/users/me.json',_0xeaa22f['remoteUri'])})[_0x9b02('0x18')](function(_0x59b1f3){logger['info']('Admin\x20account\x20selected.');return _0x59b1f3[_0x9b02('0x1f')];});}});}else{logger[_0x9b02('0xb')](_0x9b02('0x1e'));return request({'uri':util[_0x9b02('0xd')]('%s/users/me.json',_0xeaa22f[_0x9b02('0xf')])})['then'](function(_0x46f1b1){logger[_0x9b02('0xb')](_0x9b02('0x20'));return _0x46f1b1[_0x9b02('0x1f')];});}}function getEndUser(_0x2c43e1,_0x606f1e,_0x407dc9){logger[_0x9b02('0xb')](_0x9b02('0x21'),_0x407dc9);return request({'uri':util[_0x9b02('0xd')]('%s/search.json',_0x2c43e1[_0x9b02('0xf')]),'qs':{'query':util[_0x9b02('0xd')](_0x9b02('0x22'),_0x407dc9)}})[_0x9b02('0x18')](function(_0x234709){var _0x2913b6;if(_0x234709['results'][_0x9b02('0x23')]){_0x234709[_0x9b02('0x1c')]=_[_0x9b02('0x24')](_0x234709[_0x9b02('0x1c')],{'suspended':![],'role':_0x9b02('0x25')});if(_0x234709[_0x9b02('0x1c')][_0x9b02('0x23')]){_0x2913b6=_[_0x9b02('0x26')](_0x234709[_0x9b02('0x1c')]);}}if(_0x2913b6){logger['info'](_0x9b02('0x27'));return _0x2913b6;}else{logger[_0x9b02('0xb')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'uri':util[_0x9b02('0xd')](_0x9b02('0x28'),_0x2c43e1[_0x9b02('0xf')]),'method':_0x9b02('0x10'),'body':{'user':{'role':'end-user','name':util['format'](_0x9b02('0x29'),_0x606f1e||_0x407dc9),'phone':_0x407dc9}}})['then'](function(_0x4c99b9){logger[_0x9b02('0xb')](_0x9b02('0x2a'));return _0x4c99b9[_0x9b02('0x1f')];});}});}function getAuth(_0x463436){var _0x2de5b4;if(_0x463436[_0x9b02('0x2b')]==='password'){_0x2de5b4=util['format'](_0x9b02('0x2c'),_0x463436[_0x9b02('0x2d')],_0x463436[_0x9b02('0x2e')]);}else if(_0x463436[_0x9b02('0x2b')]===_0x9b02('0x2f')){_0x2de5b4=util[_0x9b02('0xd')](_0x9b02('0x30'),_0x463436[_0x9b02('0x2d')],_0x463436[_0x9b02('0x2f')]);}return util['format'](_0x9b02('0x31'),new Buffer(_0x2de5b4)[_0x9b02('0x32')](_0x9b02('0x33')));}function request(_0x1c6b7f){logger[_0x9b02('0x34')](_0x9b02('0x35'),JSON[_0x9b02('0x36')](_0x1c6b7f));return rp(_[_0x9b02('0x6')](_0x1c6b7f,{'method':'GET','headers':headers,'json':!![]}));}function getTags(_0x2e4e18,_0x1fb389){var _0x4e6a34=[];if(_0x2e4e18&&_0x2e4e18[_0x9b02('0x23')]>0x0){_0x4e6a34=_['map'](_0x2e4e18,_0x1fb389);}return _0x4e6a34;}function getCustomFields(_0x3e9901,_0x1f794b){var _0x82880e=[];var _0x472a79={'custom_fields':[]};if(_0x3e9901[_0x9b02('0x23')]>0x0){_[_0x9b02('0x37')](_0x3e9901,function(_0x16ab4f){if(_[_0x9b02('0x38')]([_0x9b02('0x39'),_0x9b02('0x3a')],_0x16ab4f['type'])&&_0x16ab4f[_0x9b02('0x3b')]&&!_0x16ab4f[_0x9b02('0x3c')]){_0x472a79[_0x16ab4f[_0x9b02('0x3b')][_0x9b02('0x3d')]()]=_0x16ab4f[_0x9b02('0x3e')][_0x9b02('0x32')]();}else if(_[_0x9b02('0x38')]([_0x9b02('0x39'),_0x9b02('0x3a')],_0x16ab4f[_0x9b02('0x3f')])&&_0x16ab4f[_0x9b02('0x40')]&&_0x16ab4f[_0x9b02('0x3c')]){_0x472a79[_0x9b02('0x41')][_0x9b02('0x42')]({'id':_0x16ab4f[_0x9b02('0x40')],'value':_0x16ab4f['content'][_0x9b02('0x32')]()});}else if(_0x16ab4f[_0x9b02('0x3f')]===_0x9b02('0x43')&&_0x16ab4f[_0x9b02('0x44')]&&_0x16ab4f[_0x9b02('0x40')]&&_0x16ab4f[_0x9b02('0x3c')]){_0x1f794b[_0x16ab4f[_0x9b02('0x44')]]&&_0x472a79[_0x9b02('0x41')][_0x9b02('0x42')]({'id':_0x16ab4f[_0x9b02('0x40')],'value':_0x1f794b[_0x16ab4f[_0x9b02('0x44')]][_0x9b02('0x32')]()});}else if(_0x16ab4f[_0x9b02('0x3f')]==='customVariable'&&_0x16ab4f[_0x9b02('0x45')]&&_0x16ab4f[_0x9b02('0x45')][_0x9b02('0x46')]&&_0x16ab4f[_0x9b02('0x40')]&&_0x16ab4f[_0x9b02('0x3c')]){_0x1f794b[_0x16ab4f[_0x9b02('0x45')]['name']['toLowerCase']()]&&_0x472a79[_0x9b02('0x41')][_0x9b02('0x42')]({'id':_0x16ab4f[_0x9b02('0x40')],'value':_0x1f794b[_0x16ab4f[_0x9b02('0x45')][_0x9b02('0x46')][_0x9b02('0x3d')]()]['toString']()});}});}return _0x472a79;}exports[_0x9b02('0x47')]=function(_0x4be5dc,_0x295248,_0x234a36,_0x3cdb70,_0x2a5a58,_0x11f65c){var _0x3493f9,_0x4cffbd;_0x11f65c[_0x9b02('0xf')]=intUtil[_0x9b02('0x48')](_0x11f65c[_0x9b02('0xf')]);_0x11f65c[_0x9b02('0x49')]=intUtil[_0x9b02('0x48')](_0x11f65c[_0x9b02('0x49')]);if(_0x2a5a58&&_0x2a5a58[_0x9b02('0x4a')]){logger[_0x9b02('0xb')]('[QUEUE]','Recording\x20is\x20enabled!');_0x295248[_0x9b02('0x4b')]=util[_0x9b02('0xd')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x11f65c[_0x9b02('0x49')],_0x295248[_0x9b02('0x4c')],md5(_0x295248[_0x9b02('0x4c')]));}else{_0x295248[_0x9b02('0x4b')]='';}headers[_0x9b02('0x4d')]=getAuth(_0x11f65c);return getUser(_0x11f65c,_0x3cdb70[_0x9b02('0x4e')])[_0x9b02('0x18')](function(_0x41ae93){_0x3493f9=_0x41ae93;logger[_0x9b02('0xb')](_0x9b02('0x4f'),_0x3493f9['id']);return getEndUser(_0x11f65c,_0x295248[_0x9b02('0x50')],_0x295248[_0x9b02('0x51')]);})[_0x9b02('0x18')](function(_0x3860e0){_0x4cffbd=_0x3860e0;logger[_0x9b02('0xb')]('The\x20Enduser\x20ID\x20is:',_0x4cffbd['id']);return getTicket(_0x11f65c,_0x3493f9,_0x4cffbd,_0x234a36,_0x295248);})[_0x9b02('0x18')](function(_0x48b7ca){if(_0x48b7ca){logger[_0x9b02('0xb')](_0x9b02('0x52'),_0x48b7ca['id']);switch(_0x11f65c[_0x9b02('0x3f')]){case _0x9b02('0x53'):logger['info']('[QUEUE]',_0x9b02('0x54'));return request({'uri':util[_0x9b02('0xd')]('%s/channels/voice/agents/%d/tickets/%d/display.json',_0x11f65c[_0x9b02('0xf')],_0x3493f9['id'],_0x48b7ca['id']),'method':_0x9b02('0x10')});case _0x9b02('0x55'):logger['info']('[QUEUE]','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x9b02('0xd')](_0x9b02('0x56'),_0x3cdb70[_0x9b02('0x46')]),_0x9b02('0x57'),{'uri':util[_0x9b02('0xd')](_0x9b02('0x58'),_0x11f65c[_0x9b02('0xf')][_0x9b02('0x59')](_0x9b02('0x5a'),''),_0x48b7ca['id'])});break;default:logger['error'](_0x9b02('0x5b'),_0x9b02('0x5c'));}}})['catch'](function(_0x579cf5){logger[_0x9b02('0x5d')](_0x9b02('0x5e'),util[_0x9b02('0x5f')](_0x579cf5,{'showHidden':!![],'depth':null}));});};exports[_0x9b02('0x60')]=function(_0x4c8c95,_0x44a735,_0x17e363,_0x4bd8b4,_0x383aa9,_0x5a0cee,_0x3103d9){var _0x322c08,_0x2527e0;_0x5a0cee['remoteUri']=intUtil[_0x9b02('0x48')](_0x5a0cee[_0x9b02('0xf')]);_0x5a0cee[_0x9b02('0x49')]=intUtil['stripTrailingSlash'](_0x5a0cee['serverUrl']);if(_0x3103d9&&_0x3103d9['recordingFormat']&&_0x3103d9['recordingFormat']!==_0x9b02('0x61')){logger[_0x9b02('0xb')]('[OUTBOUND]',_0x9b02('0x62'));_0x44a735[_0x9b02('0x4b')]=util['format'](_0x9b02('0x63'),_0x5a0cee[_0x9b02('0x49')],_0x44a735['uniqueid'],md5(_0x44a735[_0x9b02('0x4c')]));}headers[_0x9b02('0x4d')]=getAuth(_0x5a0cee);return getUser(_0x5a0cee,_0x4bd8b4['email'])[_0x9b02('0x18')](function(_0x482b22){_0x322c08=_0x482b22;logger[_0x9b02('0xb')](_0x9b02('0x4f'),_0x322c08['id']);return getEndUser(_0x5a0cee,_0x44a735[_0x9b02('0x64')],_0x44a735[_0x9b02('0x65')]);})['then'](function(_0x3fb82d){_0x2527e0=_0x3fb82d;logger[_0x9b02('0xb')](_0x9b02('0x66'),_0x2527e0['id']);return getTicket(_0x5a0cee,_0x322c08,_0x2527e0,_0x17e363,_0x44a735);})['then'](function(_0xd28066){if(_0xd28066){logger[_0x9b02('0xb')](_0x9b02('0x52'),_0xd28066['id']);switch(_0x5a0cee[_0x9b02('0x3f')]){case _0x9b02('0x53'):logger[_0x9b02('0xb')](_0x9b02('0x67'),_0x9b02('0x54'));return request({'uri':util[_0x9b02('0xd')]('%s/channels/voice/agents/%d/tickets/%d/display.json',_0x5a0cee['remoteUri'],_0x322c08['id'],_0xd28066['id']),'method':_0x9b02('0x10')});case _0x9b02('0x55'):logger[_0x9b02('0xb')]('[OUTBOUND]',_0x9b02('0x68'));emit(util['format']('user:%s',_0x4bd8b4['name']),_0x9b02('0x57'),{'uri':util[_0x9b02('0xd')](_0x9b02('0x58'),_0x5a0cee[_0x9b02('0xf')][_0x9b02('0x59')]('/api/v2',''),_0xd28066['id'])});break;default:logger[_0x9b02('0x5d')](_0x9b02('0x67'),_0x9b02('0x5c'));}}})['catch'](function(_0x51968a){logger[_0x9b02('0x5d')](_0x9b02('0x69'),util[_0x9b02('0x5f')](_0x51968a,{'showHidden':!![],'depth':null}));});};exports[_0x9b02('0x6a')]=function(_0x8dd151,_0x4adbb6,_0x2eadb7,_0x2d619c,_0x36cd59,_0x42f208){var _0x2c032c,_0x277b35;_0x42f208[_0x9b02('0xf')]=intUtil[_0x9b02('0x48')](_0x42f208[_0x9b02('0xf')]);_0x42f208['serverUrl']=intUtil[_0x9b02('0x48')](_0x42f208[_0x9b02('0x49')]);if(_0x36cd59&&_0x36cd59[_0x9b02('0x4a')]){logger[_0x9b02('0xb')]('['+_0x4adbb6[_0x9b02('0x6b')][_0x9b02('0x6c')]()+']','Recording\x20is\x20enabled!');_0x4adbb6[_0x9b02('0x4b')]=util['format'](_0x9b02('0x63'),_0x42f208[_0x9b02('0x49')],_0x4adbb6[_0x9b02('0x4c')],md5(_0x4adbb6['uniqueid']));}else{_0x4adbb6[_0x9b02('0x4b')]='';}headers[_0x9b02('0x4d')]=getAuth(_0x42f208);return getUser(_0x42f208)['then'](function(_0x5d6cd6){_0x2c032c=_0x5d6cd6;logger[_0x9b02('0xb')](_0x9b02('0x4f'),_0x2c032c['id']);return getEndUser(_0x42f208,_0x4adbb6['calleridname'],_0x4adbb6[_0x9b02('0x51')]);})['then'](function(_0x13b576){_0x277b35=_0x13b576;logger['info']('The\x20Enduser\x20ID\x20is:',_0x277b35['id']);return getTicket(_0x42f208,_0x2c032c,_0x277b35,_0x2eadb7,_0x4adbb6);})[_0x9b02('0x18')](function(_0x2729db){if(_0x2729db){logger[_0x9b02('0xb')]('The\x20Ticket\x20ID\x20is:',_0x2729db['id']);}})[_0x9b02('0x6d')](function(_0x21e238){logger[_0x9b02('0x5d')]('['+_0x4adbb6[_0x9b02('0x6b')]['toUpperCase']()+']'+_0x9b02('0x6e'),util[_0x9b02('0x5f')](_0x21e238,{'showHidden':!![],'depth':null}));});};