Built motion from commit e02f907f.|2.6.14
[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 _0x6a2c=['string','nameField','toLowerCase','picklist','idField','customField','custom_fields','push','type','variableName','customVariable','Variable','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Authorization','email','The\x20User\x20ID\x20is:','calleridnum','The\x20Enduser\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','%s/agent/tickets/%s','/api/v2','error','Zendesk\x20account\x20type\x20not\x20recognized','catch','[QUEUE]\x20Error\x20running\x20Zendesk\x20integration','inspect','outbound','recordingFormat','Recording\x20is\x20enabled!','destcalleridname','The\x20Ticket\x20ID\x20is:','[OUTBOUND]','replace','[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration','unmanaged','lastevent','toUpperCase','calleridname','lodash','util','./util','../../../../config/environment','../../../../config/logger','zendesk','defaults','redis','localhost','socket.io-emitter','emit','application/json','info','format','%s/tickets.json','remoteUri','POST','Tags','name','getString','Subjects','Descriptions','Fields','then','Ticket\x20created!','validateEmail','Getting\x20agent\x20with\x20email','type:user\x20role:agent\x20email:%s','count','find','results','agent','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me.json','Admin\x20account\x20selected.','user','Searching\x20enduser\x20with\x20phone','%s/search.json','type:user\x20role:end-user\x20phone:%s','filter','end-user','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/users.json','Caller\x20-\x20%s','Enduser\x20created.','authType','%s:%s','username','password','token','%s/token:%s','Basic\x20%s','toString','[HTTP]','stringify','GET','length','map','forEach','includes'];(function(_0x1101c9,_0x56ece2){var _0x3fef5d=function(_0x5e93ea){while(--_0x5e93ea){_0x1101c9['push'](_0x1101c9['shift']());}};_0x3fef5d(++_0x56ece2);}(_0x6a2c,0x110));var _0xc6a2=function(_0x3972c0,_0x4b49ea){_0x3972c0=_0x3972c0-0x0;var _0x1c7018=_0x6a2c[_0x3972c0];return _0x1c7018;};'use strict';var _=require(_0xc6a2('0x0'));var rp=require('request-promise');var md5=require('md5');var util=require(_0xc6a2('0x1'));var Redis=require('ioredis');var intUtil=require(_0xc6a2('0x2'));var config=require(_0xc6a2('0x3'));var logger=require(_0xc6a2('0x4'))(_0xc6a2('0x5'));config['redis']=_[_0xc6a2('0x6')](config[_0xc6a2('0x7')],{'host':_0xc6a2('0x8'),'port':0x18eb});var io=require(_0xc6a2('0x9'))(new Redis(config[_0xc6a2('0x7')]));function emit(_0x5cf53a,_0x570a31,_0x53d2f4){io['to'](_0x5cf53a)[_0xc6a2('0xa')](_0x570a31,_0x53d2f4);}var headers={'Content-Type':_0xc6a2('0xb'),'Accept':'application/json'};function getTicket(_0x2678c4,_0x317045,_0x4ece8a,_0x33522b,_0x37fbbb){logger[_0xc6a2('0xc')]('Creating\x20new\x20ticket...');return request({'uri':util[_0xc6a2('0xd')](_0xc6a2('0xe'),_0x2678c4[_0xc6a2('0xf')]),'method':_0xc6a2('0x10'),'body':{'ticket':_['merge']({'requester_id':_0x4ece8a['id'],'submitter_id':_0x317045?_0x317045['id']:undefined,'assignee_id':_0x317045?_0x317045['id']:undefined,'tags':getTags(_0x33522b[_0xc6a2('0x11')],_0xc6a2('0x12')),'subject':intUtil[_0xc6a2('0x13')](_0x33522b[_0xc6a2('0x14')],_0x37fbbb,'\x20'),'description':intUtil[_0xc6a2('0x13')](_0x33522b[_0xc6a2('0x15')],_0x37fbbb,'\x0a'),'comment':{'public':![],'body':intUtil[_0xc6a2('0x13')](_0x33522b['Descriptions'],_0x37fbbb,'\x0a')}},getCustomFields(_0x33522b[_0xc6a2('0x16')],_0x37fbbb))}})[_0xc6a2('0x17')](function(_0x54692c){logger[_0xc6a2('0xc')](_0xc6a2('0x18'));return _0x54692c['ticket'];});}function getUser(_0x391e56,_0x2e10af){if(intUtil[_0xc6a2('0x19')](_0x2e10af)){logger[_0xc6a2('0xc')](_0xc6a2('0x1a'),_0x2e10af);return request({'uri':util['format']('%s/search.json',_0x391e56[_0xc6a2('0xf')]),'qs':{'query':util[_0xc6a2('0xd')](_0xc6a2('0x1b'),_0x2e10af)}})[_0xc6a2('0x17')](function(_0x50ed8e){if(_0x50ed8e[_0xc6a2('0x1c')]){logger[_0xc6a2('0xc')]('Agent\x20found!');return _[_0xc6a2('0x1d')](_0x50ed8e[_0xc6a2('0x1e')],{'email':_0x2e10af,'role':_0xc6a2('0x1f')});}else{logger[_0xc6a2('0xc')](_0xc6a2('0x20'));return request({'uri':util['format'](_0xc6a2('0x21'),_0x391e56[_0xc6a2('0xf')])})[_0xc6a2('0x17')](function(_0x3bd27c){logger[_0xc6a2('0xc')](_0xc6a2('0x22'));return _0x3bd27c['user'];});}});}else{logger[_0xc6a2('0xc')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0xc6a2('0xd')]('%s/users/me.json',_0x391e56[_0xc6a2('0xf')])})[_0xc6a2('0x17')](function(_0x3714ce){logger[_0xc6a2('0xc')](_0xc6a2('0x22'));return _0x3714ce[_0xc6a2('0x23')];});}}function getEndUser(_0x203517,_0x2f4594,_0x4705c7){logger[_0xc6a2('0xc')](_0xc6a2('0x24'),_0x4705c7);return request({'uri':util[_0xc6a2('0xd')](_0xc6a2('0x25'),_0x203517[_0xc6a2('0xf')]),'qs':{'query':util['format'](_0xc6a2('0x26'),_0x4705c7)}})[_0xc6a2('0x17')](function(_0x523051){var _0x28d639;if(_0x523051['results']['length']){_0x523051[_0xc6a2('0x1e')]=_[_0xc6a2('0x27')](_0x523051[_0xc6a2('0x1e')],{'suspended':![],'role':_0xc6a2('0x28')});if(_0x523051[_0xc6a2('0x1e')]['length']){_0x28d639=_['first'](_0x523051[_0xc6a2('0x1e')]);}}if(_0x28d639){logger[_0xc6a2('0xc')](_0xc6a2('0x29'));return _0x28d639;}else{logger[_0xc6a2('0xc')](_0xc6a2('0x2a'));return request({'uri':util[_0xc6a2('0xd')](_0xc6a2('0x2b'),_0x203517[_0xc6a2('0xf')]),'method':_0xc6a2('0x10'),'body':{'user':{'role':'end-user','name':util[_0xc6a2('0xd')](_0xc6a2('0x2c'),_0x2f4594||_0x4705c7),'phone':_0x4705c7}}})[_0xc6a2('0x17')](function(_0x2dfde4){logger[_0xc6a2('0xc')](_0xc6a2('0x2d'));return _0x2dfde4[_0xc6a2('0x23')];});}});}function getAuth(_0x2ab57c){var _0x3d82a8;if(_0x2ab57c[_0xc6a2('0x2e')]==='password'){_0x3d82a8=util[_0xc6a2('0xd')](_0xc6a2('0x2f'),_0x2ab57c[_0xc6a2('0x30')],_0x2ab57c[_0xc6a2('0x31')]);}else if(_0x2ab57c[_0xc6a2('0x2e')]===_0xc6a2('0x32')){_0x3d82a8=util[_0xc6a2('0xd')](_0xc6a2('0x33'),_0x2ab57c[_0xc6a2('0x30')],_0x2ab57c[_0xc6a2('0x32')]);}return util[_0xc6a2('0xd')](_0xc6a2('0x34'),new Buffer(_0x3d82a8)[_0xc6a2('0x35')]('base64'));}function request(_0x263652){logger['debug'](_0xc6a2('0x36'),JSON[_0xc6a2('0x37')](_0x263652));return rp(_[_0xc6a2('0x6')](_0x263652,{'method':_0xc6a2('0x38'),'headers':headers,'json':!![]}));}function getTags(_0xacf70f,_0x5a604c){var _0x238825=[];if(_0xacf70f&&_0xacf70f[_0xc6a2('0x39')]>0x0){_0x238825=_[_0xc6a2('0x3a')](_0xacf70f,_0x5a604c);}return _0x238825;}function getCustomFields(_0x29b8aa,_0x4d1161){var _0x147230=[];var _0x2c1925={'custom_fields':[]};if(_0x29b8aa['length']>0x0){_[_0xc6a2('0x3b')](_0x29b8aa,function(_0x1ff24b){if(_[_0xc6a2('0x3c')]([_0xc6a2('0x3d'),'picklist'],_0x1ff24b['type'])&&_0x1ff24b[_0xc6a2('0x3e')]&&!_0x1ff24b['customField']){_0x2c1925[_0x1ff24b[_0xc6a2('0x3e')][_0xc6a2('0x3f')]()]=_0x1ff24b['content']['toString']();}else if(_[_0xc6a2('0x3c')](['string',_0xc6a2('0x40')],_0x1ff24b['type'])&&_0x1ff24b[_0xc6a2('0x41')]&&_0x1ff24b[_0xc6a2('0x42')]){_0x2c1925[_0xc6a2('0x43')][_0xc6a2('0x44')]({'id':_0x1ff24b['idField'],'value':_0x1ff24b['content'][_0xc6a2('0x35')]()});}else if(_0x1ff24b[_0xc6a2('0x45')]==='variable'&&_0x1ff24b[_0xc6a2('0x46')]&&_0x1ff24b['idField']&&_0x1ff24b[_0xc6a2('0x42')]){_0x4d1161[_0x1ff24b[_0xc6a2('0x46')]]&&_0x2c1925['custom_fields'][_0xc6a2('0x44')]({'id':_0x1ff24b[_0xc6a2('0x41')],'value':_0x4d1161[_0x1ff24b[_0xc6a2('0x46')]][_0xc6a2('0x35')]()});}else if(_0x1ff24b[_0xc6a2('0x45')]===_0xc6a2('0x47')&&_0x1ff24b[_0xc6a2('0x48')]&&_0x1ff24b[_0xc6a2('0x48')][_0xc6a2('0x12')]&&_0x1ff24b[_0xc6a2('0x41')]&&_0x1ff24b['customField']){_0x4d1161[_0x1ff24b['Variable'][_0xc6a2('0x12')][_0xc6a2('0x3f')]()]&&_0x2c1925[_0xc6a2('0x43')][_0xc6a2('0x44')]({'id':_0x1ff24b[_0xc6a2('0x41')],'value':_0x4d1161[_0x1ff24b[_0xc6a2('0x48')][_0xc6a2('0x12')]['toLowerCase']()][_0xc6a2('0x35')]()});}});}return _0x2c1925;}exports['queue']=function(_0x5bdf39,_0x1b678e,_0x319fc9,_0xf6d3d,_0x57f0a2,_0x58f4e7){var _0x10bc6b,_0x5cc63b;_0x58f4e7[_0xc6a2('0xf')]=intUtil[_0xc6a2('0x49')](_0x58f4e7['remoteUri']);_0x58f4e7[_0xc6a2('0x4a')]=intUtil[_0xc6a2('0x49')](_0x58f4e7['serverUrl']);if(_0x57f0a2&&_0x57f0a2[_0xc6a2('0x4b')]){logger[_0xc6a2('0xc')](_0xc6a2('0x4c'),'Recording\x20is\x20enabled!');_0x1b678e[_0xc6a2('0x4d')]=util[_0xc6a2('0xd')](_0xc6a2('0x4e'),_0x58f4e7['serverUrl'],_0x1b678e['uniqueid'],md5(_0x1b678e[_0xc6a2('0x4f')]));}else{_0x1b678e['recordingURL']='';}headers[_0xc6a2('0x50')]=getAuth(_0x58f4e7);return getUser(_0x58f4e7,_0xf6d3d[_0xc6a2('0x51')])['then'](function(_0x38005d){_0x10bc6b=_0x38005d;logger[_0xc6a2('0xc')](_0xc6a2('0x52'),_0x10bc6b['id']);return getEndUser(_0x58f4e7,_0x1b678e['calleridname'],_0x1b678e[_0xc6a2('0x53')]);})['then'](function(_0x5e6bad){_0x5cc63b=_0x5e6bad;logger[_0xc6a2('0xc')](_0xc6a2('0x54'),_0x5cc63b['id']);return getTicket(_0x58f4e7,_0x10bc6b,_0x5cc63b,_0x319fc9,_0x1b678e);})[_0xc6a2('0x17')](function(_0x5d77b1){if(_0x5d77b1){logger['info']('The\x20Ticket\x20ID\x20is:',_0x5d77b1['id']);switch(_0x58f4e7[_0xc6a2('0x45')]){case _0xc6a2('0x55'):logger[_0xc6a2('0xc')]('[QUEUE]',_0xc6a2('0x56'));return request({'uri':util['format'](_0xc6a2('0x57'),_0x58f4e7[_0xc6a2('0xf')],_0x10bc6b['id'],_0x5d77b1['id']),'method':_0xc6a2('0x10')});case _0xc6a2('0x58'):logger[_0xc6a2('0xc')](_0xc6a2('0x4c'),_0xc6a2('0x59'));emit(util[_0xc6a2('0xd')](_0xc6a2('0x5a'),_0xf6d3d['name']),_0xc6a2('0x5b'),{'uri':util['format'](_0xc6a2('0x5c'),_0x58f4e7['remoteUri']['replace'](_0xc6a2('0x5d'),''),_0x5d77b1['id'])});break;default:logger[_0xc6a2('0x5e')](_0xc6a2('0x4c'),_0xc6a2('0x5f'));}}})[_0xc6a2('0x60')](function(_0x3503ba){logger['error'](_0xc6a2('0x61'),util[_0xc6a2('0x62')](_0x3503ba,{'showHidden':!![],'depth':null}));});};exports[_0xc6a2('0x63')]=function(_0x47c9ba,_0x5bcddc,_0x149bf4,_0x4c7479,_0x249792,_0x51d966,_0x1ec892){var _0xddbca9,_0x4b32db;_0x51d966[_0xc6a2('0xf')]=intUtil[_0xc6a2('0x49')](_0x51d966[_0xc6a2('0xf')]);_0x51d966[_0xc6a2('0x4a')]=intUtil[_0xc6a2('0x49')](_0x51d966[_0xc6a2('0x4a')]);if(_0x1ec892&&_0x1ec892[_0xc6a2('0x64')]&&_0x1ec892[_0xc6a2('0x64')]!=='none'){logger[_0xc6a2('0xc')]('[OUTBOUND]',_0xc6a2('0x65'));_0x5bcddc['recordingURL']=util['format'](_0xc6a2('0x4e'),_0x51d966['serverUrl'],_0x5bcddc[_0xc6a2('0x4f')],md5(_0x5bcddc[_0xc6a2('0x4f')]));}headers['Authorization']=getAuth(_0x51d966);return getUser(_0x51d966,_0x4c7479[_0xc6a2('0x51')])[_0xc6a2('0x17')](function(_0x408992){_0xddbca9=_0x408992;logger[_0xc6a2('0xc')]('The\x20User\x20ID\x20is:',_0xddbca9['id']);return getEndUser(_0x51d966,_0x5bcddc[_0xc6a2('0x66')],_0x5bcddc['destcalleridnum']);})[_0xc6a2('0x17')](function(_0x1d606d){_0x4b32db=_0x1d606d;logger[_0xc6a2('0xc')]('The\x20Enduser\x20ID\x20is:',_0x4b32db['id']);return getTicket(_0x51d966,_0xddbca9,_0x4b32db,_0x149bf4,_0x5bcddc);})[_0xc6a2('0x17')](function(_0x3ed14a){if(_0x3ed14a){logger[_0xc6a2('0xc')](_0xc6a2('0x67'),_0x3ed14a['id']);switch(_0x51d966['type']){case _0xc6a2('0x55'):logger['info'](_0xc6a2('0x68'),_0xc6a2('0x56'));return request({'uri':util['format'](_0xc6a2('0x57'),_0x51d966[_0xc6a2('0xf')],_0xddbca9['id'],_0x3ed14a['id']),'method':_0xc6a2('0x10')});case _0xc6a2('0x58'):logger[_0xc6a2('0xc')](_0xc6a2('0x68'),_0xc6a2('0x59'));emit(util[_0xc6a2('0xd')]('user:%s',_0x4c7479[_0xc6a2('0x12')]),_0xc6a2('0x5b'),{'uri':util[_0xc6a2('0xd')](_0xc6a2('0x5c'),_0x51d966[_0xc6a2('0xf')][_0xc6a2('0x69')](_0xc6a2('0x5d'),''),_0x3ed14a['id'])});break;default:logger['error'](_0xc6a2('0x68'),_0xc6a2('0x5f'));}}})[_0xc6a2('0x60')](function(_0x45329b){logger[_0xc6a2('0x5e')](_0xc6a2('0x6a'),util['inspect'](_0x45329b,{'showHidden':!![],'depth':null}));});};exports[_0xc6a2('0x6b')]=function(_0x25d817,_0x32d578,_0x267d84,_0x559a87,_0x3444ee,_0x485237){var _0x5e3b86,_0x41af80;_0x485237[_0xc6a2('0xf')]=intUtil[_0xc6a2('0x49')](_0x485237[_0xc6a2('0xf')]);_0x485237[_0xc6a2('0x4a')]=intUtil['stripTrailingSlash'](_0x485237[_0xc6a2('0x4a')]);if(_0x3444ee&&_0x3444ee[_0xc6a2('0x4b')]){logger['info']('['+_0x32d578[_0xc6a2('0x6c')][_0xc6a2('0x6d')]()+']',_0xc6a2('0x65'));_0x32d578[_0xc6a2('0x4d')]=util['format']('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x485237[_0xc6a2('0x4a')],_0x32d578[_0xc6a2('0x4f')],md5(_0x32d578['uniqueid']));}else{_0x32d578[_0xc6a2('0x4d')]='';}headers[_0xc6a2('0x50')]=getAuth(_0x485237);return getUser(_0x485237)[_0xc6a2('0x17')](function(_0x3c7578){_0x5e3b86=_0x3c7578;logger['info'](_0xc6a2('0x52'),_0x5e3b86['id']);return getEndUser(_0x485237,_0x32d578[_0xc6a2('0x6e')],_0x32d578[_0xc6a2('0x53')]);})[_0xc6a2('0x17')](function(_0x5afec7){_0x41af80=_0x5afec7;logger[_0xc6a2('0xc')]('The\x20Enduser\x20ID\x20is:',_0x41af80['id']);return getTicket(_0x485237,_0x5e3b86,_0x41af80,_0x267d84,_0x32d578);})[_0xc6a2('0x17')](function(_0x4e77c0){if(_0x4e77c0){logger[_0xc6a2('0xc')](_0xc6a2('0x67'),_0x4e77c0['id']);}})[_0xc6a2('0x60')](function(_0x21aab2){logger['error']('['+_0x32d578[_0xc6a2('0x6c')][_0xc6a2('0x6d')]()+']'+'\x20Error\x20running\x20Zendesk\x20integration',util[_0xc6a2('0x62')](_0x21aab2,{'showHidden':!![],'depth':null}));});};