f84ffff4f41f4ef64b2924bee4a80a441cd3b144
[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 _0xa6c4=['Variable','name','queue','stripTrailingSlash','serverUrl','monitor_format','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','recordingURL','Authorization','email','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','integrationTab','%s/channels/voice/agents/%d/tickets/%d/display.json','newTab','[QUEUE]','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','%s/agent/tickets/%s','replace','/api/v2','error','Zendesk\x20account\x20type\x20not\x20recognized','catch','inspect','outbound','recordingFormat','none','[OUTBOUND]','uniqueid','destcalleridname','destcalleridnum','Displaying\x20ticket\x20to\x20agent...','user:%s','trigger:browser:url','[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration','unmanaged','lastevent','toUpperCase','\x20Error\x20running\x20Zendesk\x20integration','request-promise','md5','util','ioredis','../../../../config/environment','../../../../config/logger','redis','localhost','socket.io-emitter','application/json','info','Creating\x20new\x20ticket...','format','%s/tickets.json','remoteUri','POST','getString','Subjects','Descriptions','Fields','then','Ticket\x20created!','ticket','validateEmail','Getting\x20agent\x20with\x20email','count','Agent\x20found!','find','agent','%s/users/me.json','Admin\x20account\x20selected.','user','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','Searching\x20enduser\x20with\x20phone','type:user\x20role:end-user\x20phone:%s','results','filter','length','first','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/users.json','end-user','Caller\x20-\x20%s','authType','password','%s:%s','token','%s/token:%s','username','Basic\x20%s','toString','base64','[HTTP]','defaults','includes','string','type','nameField','customField','toLowerCase','content','picklist','idField','variable','variableName','custom_fields','push'];(function(_0xa03bf4,_0x529b06){var _0x33db2c=function(_0x455104){while(--_0x455104){_0xa03bf4['push'](_0xa03bf4['shift']());}};_0x33db2c(++_0x529b06);}(_0xa6c4,0x9a));var _0x4a6c=function(_0xc8db6b,_0x320abd){_0xc8db6b=_0xc8db6b-0x0;var _0x12cb81=_0xa6c4[_0xc8db6b];return _0x12cb81;};'use strict';var _=require('lodash');var rp=require(_0x4a6c('0x0'));var md5=require(_0x4a6c('0x1'));var util=require(_0x4a6c('0x2'));var Redis=require(_0x4a6c('0x3'));var intUtil=require('./util');var config=require(_0x4a6c('0x4'));var logger=require(_0x4a6c('0x5'))('zendesk');config['redis']=_['defaults'](config[_0x4a6c('0x6')],{'host':_0x4a6c('0x7'),'port':0x18eb});var io=require(_0x4a6c('0x8'))(new Redis(config[_0x4a6c('0x6')]));function emit(_0x11ce21,_0x3d8be8,_0x21ab85){io['to'](_0x11ce21)['emit'](_0x3d8be8,_0x21ab85);}var headers={'Content-Type':_0x4a6c('0x9'),'Accept':_0x4a6c('0x9')};function getTicket(_0x283d91,_0x37313c,_0x2860f7,_0x52a848,_0x42a48b){logger[_0x4a6c('0xa')](_0x4a6c('0xb'));return request({'uri':util[_0x4a6c('0xc')](_0x4a6c('0xd'),_0x283d91[_0x4a6c('0xe')]),'method':_0x4a6c('0xf'),'body':{'ticket':_['merge']({'requester_id':_0x2860f7['id'],'submitter_id':_0x37313c?_0x37313c['id']:undefined,'assignee_id':_0x37313c?_0x37313c['id']:undefined,'tags':getTags(_0x52a848['Tags'],'name'),'subject':intUtil[_0x4a6c('0x10')](_0x52a848[_0x4a6c('0x11')],_0x42a48b,'\x20'),'description':intUtil[_0x4a6c('0x10')](_0x52a848[_0x4a6c('0x12')],_0x42a48b,'\x0a'),'comment':{'public':![],'body':intUtil['getString'](_0x52a848[_0x4a6c('0x12')],_0x42a48b,'\x0a')}},getCustomFields(_0x52a848[_0x4a6c('0x13')],_0x42a48b))}})[_0x4a6c('0x14')](function(_0x3abd5c){logger['info'](_0x4a6c('0x15'));return _0x3abd5c[_0x4a6c('0x16')];});}function getUser(_0x4497b8,_0x64dd64){if(intUtil[_0x4a6c('0x17')](_0x64dd64)){logger[_0x4a6c('0xa')](_0x4a6c('0x18'),_0x64dd64);return request({'uri':util['format']('%s/search.json',_0x4497b8[_0x4a6c('0xe')]),'qs':{'query':util[_0x4a6c('0xc')]('type:user\x20role:agent\x20email:%s',_0x64dd64)}})[_0x4a6c('0x14')](function(_0x486252){if(_0x486252[_0x4a6c('0x19')]){logger[_0x4a6c('0xa')](_0x4a6c('0x1a'));return _[_0x4a6c('0x1b')](_0x486252['results'],{'email':_0x64dd64,'role':_0x4a6c('0x1c')});}else{logger[_0x4a6c('0xa')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0x4a6c('0xc')](_0x4a6c('0x1d'),_0x4497b8['remoteUri'])})[_0x4a6c('0x14')](function(_0x3a050b){logger['info'](_0x4a6c('0x1e'));return _0x3a050b[_0x4a6c('0x1f')];});}});}else{logger['info'](_0x4a6c('0x20'));return request({'uri':util[_0x4a6c('0xc')](_0x4a6c('0x1d'),_0x4497b8[_0x4a6c('0xe')])})[_0x4a6c('0x14')](function(_0xec7710){logger[_0x4a6c('0xa')](_0x4a6c('0x1e'));return _0xec7710[_0x4a6c('0x1f')];});}}function getEndUser(_0x303f0a,_0x45362d,_0x3126ef){logger['info'](_0x4a6c('0x21'),_0x3126ef);return request({'uri':util[_0x4a6c('0xc')]('%s/search.json',_0x303f0a[_0x4a6c('0xe')]),'qs':{'query':util['format'](_0x4a6c('0x22'),_0x3126ef)}})['then'](function(_0x4318d0){var _0x585376;if(_0x4318d0[_0x4a6c('0x23')]['length']){_0x4318d0['results']=_[_0x4a6c('0x24')](_0x4318d0[_0x4a6c('0x23')],{'suspended':![],'role':'end-user'});if(_0x4318d0[_0x4a6c('0x23')][_0x4a6c('0x25')]){_0x585376=_[_0x4a6c('0x26')](_0x4318d0['results']);}}if(_0x585376){logger[_0x4a6c('0xa')](_0x4a6c('0x27'));return _0x585376;}else{logger['info'](_0x4a6c('0x28'));return request({'uri':util[_0x4a6c('0xc')](_0x4a6c('0x29'),_0x303f0a[_0x4a6c('0xe')]),'method':'POST','body':{'user':{'role':_0x4a6c('0x2a'),'name':util[_0x4a6c('0xc')](_0x4a6c('0x2b'),_0x45362d||_0x3126ef),'phone':_0x3126ef}}})[_0x4a6c('0x14')](function(_0x26ac67){logger[_0x4a6c('0xa')]('Enduser\x20created.');return _0x26ac67[_0x4a6c('0x1f')];});}});}function getAuth(_0x175ca4){var _0x3bf5c8;if(_0x175ca4[_0x4a6c('0x2c')]===_0x4a6c('0x2d')){_0x3bf5c8=util['format'](_0x4a6c('0x2e'),_0x175ca4['username'],_0x175ca4[_0x4a6c('0x2d')]);}else if(_0x175ca4['authType']===_0x4a6c('0x2f')){_0x3bf5c8=util[_0x4a6c('0xc')](_0x4a6c('0x30'),_0x175ca4[_0x4a6c('0x31')],_0x175ca4[_0x4a6c('0x2f')]);}return util[_0x4a6c('0xc')](_0x4a6c('0x32'),new Buffer(_0x3bf5c8)[_0x4a6c('0x33')](_0x4a6c('0x34')));}function request(_0x1db65d){logger['debug'](_0x4a6c('0x35'),JSON['stringify'](_0x1db65d));return rp(_[_0x4a6c('0x36')](_0x1db65d,{'method':'GET','headers':headers,'json':!![]}));}function getTags(_0x9d34a1,_0x24d500){var _0x57b85f=[];if(_0x9d34a1&&_0x9d34a1[_0x4a6c('0x25')]>0x0){_0x57b85f=_['map'](_0x9d34a1,_0x24d500);}return _0x57b85f;}function getCustomFields(_0x2c4ab7,_0x3d0937){var _0x4b6a63=[];var _0x8ee76e={'custom_fields':[]};if(_0x2c4ab7['length']>0x0){_['forEach'](_0x2c4ab7,function(_0x18efb6){if(_[_0x4a6c('0x37')]([_0x4a6c('0x38'),'picklist'],_0x18efb6[_0x4a6c('0x39')])&&_0x18efb6[_0x4a6c('0x3a')]&&!_0x18efb6[_0x4a6c('0x3b')]){_0x8ee76e[_0x18efb6['nameField'][_0x4a6c('0x3c')]()]=_0x18efb6[_0x4a6c('0x3d')][_0x4a6c('0x33')]();}else if(_[_0x4a6c('0x37')]([_0x4a6c('0x38'),_0x4a6c('0x3e')],_0x18efb6['type'])&&_0x18efb6[_0x4a6c('0x3f')]&&_0x18efb6[_0x4a6c('0x3b')]){_0x8ee76e['custom_fields']['push']({'id':_0x18efb6[_0x4a6c('0x3f')],'value':_0x18efb6[_0x4a6c('0x3d')]['toString']()});}else if(_0x18efb6['type']===_0x4a6c('0x40')&&_0x18efb6[_0x4a6c('0x41')]&&_0x18efb6[_0x4a6c('0x3f')]&&_0x18efb6[_0x4a6c('0x3b')]){_0x3d0937[_0x18efb6['variableName']]&&_0x8ee76e[_0x4a6c('0x42')][_0x4a6c('0x43')]({'id':_0x18efb6['idField'],'value':_0x3d0937[_0x18efb6[_0x4a6c('0x41')]][_0x4a6c('0x33')]()});}else if(_0x18efb6[_0x4a6c('0x39')]==='customVariable'&&_0x18efb6[_0x4a6c('0x44')]&&_0x18efb6[_0x4a6c('0x44')][_0x4a6c('0x45')]&&_0x18efb6[_0x4a6c('0x3f')]&&_0x18efb6[_0x4a6c('0x3b')]){_0x3d0937[_0x18efb6['Variable']['name'][_0x4a6c('0x3c')]()]&&_0x8ee76e[_0x4a6c('0x42')][_0x4a6c('0x43')]({'id':_0x18efb6[_0x4a6c('0x3f')],'value':_0x3d0937[_0x18efb6[_0x4a6c('0x44')][_0x4a6c('0x45')]['toLowerCase']()][_0x4a6c('0x33')]()});}});}return _0x8ee76e;}exports[_0x4a6c('0x46')]=function(_0x1ea54c,_0x329ba9,_0x2efe06,_0x1dc27c,_0x461911,_0x5cdd35){var _0x1ed50b,_0x3098ed;_0x5cdd35['remoteUri']=intUtil[_0x4a6c('0x47')](_0x5cdd35['remoteUri']);_0x5cdd35[_0x4a6c('0x48')]=intUtil['stripTrailingSlash'](_0x5cdd35[_0x4a6c('0x48')]);if(_0x461911&&_0x461911[_0x4a6c('0x49')]){logger['info']('[QUEUE]',_0x4a6c('0x4a'));_0x329ba9['recordingURL']=util['format'](_0x4a6c('0x4b'),_0x5cdd35[_0x4a6c('0x48')],_0x329ba9['uniqueid'],md5(_0x329ba9['uniqueid']));}else{_0x329ba9[_0x4a6c('0x4c')]='';}headers[_0x4a6c('0x4d')]=getAuth(_0x5cdd35);return getUser(_0x5cdd35,_0x1dc27c[_0x4a6c('0x4e')])[_0x4a6c('0x14')](function(_0xdd4cd4){_0x1ed50b=_0xdd4cd4;logger[_0x4a6c('0xa')](_0x4a6c('0x4f'),_0x1ed50b['id']);return getEndUser(_0x5cdd35,_0x329ba9[_0x4a6c('0x50')],_0x329ba9[_0x4a6c('0x51')]);})[_0x4a6c('0x14')](function(_0x151c15){_0x3098ed=_0x151c15;logger[_0x4a6c('0xa')](_0x4a6c('0x52'),_0x3098ed['id']);return getTicket(_0x5cdd35,_0x1ed50b,_0x3098ed,_0x2efe06,_0x329ba9);})[_0x4a6c('0x14')](function(_0x90a5c2){if(_0x90a5c2){logger['info'](_0x4a6c('0x53'),_0x90a5c2['id']);switch(_0x5cdd35[_0x4a6c('0x39')]){case _0x4a6c('0x54'):logger[_0x4a6c('0xa')]('[QUEUE]','Displaying\x20ticket\x20to\x20agent...');return request({'uri':util[_0x4a6c('0xc')](_0x4a6c('0x55'),_0x5cdd35[_0x4a6c('0xe')],_0x1ed50b['id'],_0x90a5c2['id']),'method':'POST'});case _0x4a6c('0x56'):logger[_0x4a6c('0xa')](_0x4a6c('0x57'),_0x4a6c('0x58'));emit(util[_0x4a6c('0xc')]('user:%s',_0x1dc27c['name']),'trigger:browser:url',{'uri':util[_0x4a6c('0xc')](_0x4a6c('0x59'),_0x5cdd35[_0x4a6c('0xe')][_0x4a6c('0x5a')](_0x4a6c('0x5b'),''),_0x90a5c2['id'])});break;default:logger[_0x4a6c('0x5c')]('[QUEUE]',_0x4a6c('0x5d'));}}})[_0x4a6c('0x5e')](function(_0x37b7da){logger[_0x4a6c('0x5c')]('[QUEUE]\x20Error\x20running\x20Zendesk\x20integration',util[_0x4a6c('0x5f')](_0x37b7da,{'showHidden':!![],'depth':null}));});};exports[_0x4a6c('0x60')]=function(_0x520760,_0x3f971e,_0xc80e17,_0x29b515,_0x1b0c0e,_0x5c1f46,_0x28b24b){var _0x24d034,_0x4dcf6c;_0x5c1f46[_0x4a6c('0xe')]=intUtil[_0x4a6c('0x47')](_0x5c1f46[_0x4a6c('0xe')]);_0x5c1f46[_0x4a6c('0x48')]=intUtil['stripTrailingSlash'](_0x5c1f46[_0x4a6c('0x48')]);if(_0x28b24b&&_0x28b24b[_0x4a6c('0x61')]&&_0x28b24b[_0x4a6c('0x61')]!==_0x4a6c('0x62')){logger[_0x4a6c('0xa')](_0x4a6c('0x63'),_0x4a6c('0x4a'));_0x3f971e['recordingURL']=util[_0x4a6c('0xc')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x5c1f46[_0x4a6c('0x48')],_0x3f971e[_0x4a6c('0x64')],md5(_0x3f971e['uniqueid']));}headers[_0x4a6c('0x4d')]=getAuth(_0x5c1f46);return getUser(_0x5c1f46,_0x29b515[_0x4a6c('0x4e')])[_0x4a6c('0x14')](function(_0x4f591e){_0x24d034=_0x4f591e;logger[_0x4a6c('0xa')]('The\x20User\x20ID\x20is:',_0x24d034['id']);return getEndUser(_0x5c1f46,_0x3f971e[_0x4a6c('0x65')],_0x3f971e[_0x4a6c('0x66')]);})[_0x4a6c('0x14')](function(_0x5c830c){_0x4dcf6c=_0x5c830c;logger['info'](_0x4a6c('0x52'),_0x4dcf6c['id']);return getTicket(_0x5c1f46,_0x24d034,_0x4dcf6c,_0xc80e17,_0x3f971e);})['then'](function(_0x54c27a){if(_0x54c27a){logger[_0x4a6c('0xa')](_0x4a6c('0x53'),_0x54c27a['id']);switch(_0x5c1f46[_0x4a6c('0x39')]){case'integrationTab':logger[_0x4a6c('0xa')]('[OUTBOUND]',_0x4a6c('0x67'));return request({'uri':util[_0x4a6c('0xc')](_0x4a6c('0x55'),_0x5c1f46[_0x4a6c('0xe')],_0x24d034['id'],_0x54c27a['id']),'method':_0x4a6c('0xf')});case'newTab':logger[_0x4a6c('0xa')](_0x4a6c('0x63'),_0x4a6c('0x58'));emit(util[_0x4a6c('0xc')](_0x4a6c('0x68'),_0x29b515[_0x4a6c('0x45')]),_0x4a6c('0x69'),{'uri':util[_0x4a6c('0xc')](_0x4a6c('0x59'),_0x5c1f46[_0x4a6c('0xe')]['replace'](_0x4a6c('0x5b'),''),_0x54c27a['id'])});break;default:logger['error'](_0x4a6c('0x63'),'Zendesk\x20account\x20type\x20not\x20recognized');}}})['catch'](function(_0x304860){logger['error'](_0x4a6c('0x6a'),util['inspect'](_0x304860,{'showHidden':!![],'depth':null}));});};exports[_0x4a6c('0x6b')]=function(_0x5ad38a,_0x3eb752,_0x5cdffc,_0x2684fd,_0x8aa24c,_0x1120be){var _0x2219ab,_0x6e4d8c;_0x1120be['remoteUri']=intUtil['stripTrailingSlash'](_0x1120be[_0x4a6c('0xe')]);_0x1120be[_0x4a6c('0x48')]=intUtil[_0x4a6c('0x47')](_0x1120be[_0x4a6c('0x48')]);if(_0x8aa24c&&_0x8aa24c[_0x4a6c('0x49')]){logger['info']('['+_0x3eb752[_0x4a6c('0x6c')][_0x4a6c('0x6d')]()+']','Recording\x20is\x20enabled!');_0x3eb752[_0x4a6c('0x4c')]=util[_0x4a6c('0xc')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x1120be[_0x4a6c('0x48')],_0x3eb752[_0x4a6c('0x64')],md5(_0x3eb752[_0x4a6c('0x64')]));}else{_0x3eb752[_0x4a6c('0x4c')]='';}headers[_0x4a6c('0x4d')]=getAuth(_0x1120be);return getUser(_0x1120be)['then'](function(_0xee27c6){_0x2219ab=_0xee27c6;logger[_0x4a6c('0xa')]('The\x20User\x20ID\x20is:',_0x2219ab['id']);return getEndUser(_0x1120be,_0x3eb752['calleridname'],_0x3eb752['calleridnum']);})[_0x4a6c('0x14')](function(_0x2f680c){_0x6e4d8c=_0x2f680c;logger[_0x4a6c('0xa')]('The\x20Enduser\x20ID\x20is:',_0x6e4d8c['id']);return getTicket(_0x1120be,_0x2219ab,_0x6e4d8c,_0x5cdffc,_0x3eb752);})[_0x4a6c('0x14')](function(_0x56ffc5){if(_0x56ffc5){logger[_0x4a6c('0xa')]('The\x20Ticket\x20ID\x20is:',_0x56ffc5['id']);}})[_0x4a6c('0x5e')](function(_0x217fda){logger[_0x4a6c('0x5c')]('['+_0x3eb752[_0x4a6c('0x6c')][_0x4a6c('0x6d')]()+']'+_0x4a6c('0x6e'),util['inspect'](_0x217fda,{'showHidden':!![],'depth':null}));});};