a38b630929fbbc056b32b7ebe3fc84872045e1b3
[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 _0x5692=['[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration','lastevent','toUpperCase','\x20Error\x20running\x20Zendesk\x20integration','lodash','request-promise','md5','util','ioredis','./util','../../../../config/environment','../../../../config/logger','redis','defaults','localhost','socket.io-emitter','emit','application/json','Creating\x20new\x20ticket...','format','%s/tickets.json','remoteUri','POST','name','getString','Subjects','Descriptions','Fields','then','info','Ticket\x20created!','ticket','Getting\x20agent\x20with\x20email','%s/search.json','Agent\x20found!','agent','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me.json','Admin\x20account\x20selected.','user','Searching\x20enduser\x20with\x20phone','type:user\x20role:end-user\x20phone:%s','results','length','filter','end-user','first','Enduser\x20found!','%s/users.json','Caller\x20-\x20%s','authType','password','token','%s/token:%s','username','Basic\x20%s','base64','[HTTP]','stringify','map','forEach','type','nameField','customField','content','toString','string','idField','push','variable','variableName','custom_fields','Variable','toLowerCase','queue','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Authorization','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','integrationTab','newTab','user:%s','trigger:browser:url','%s/agent/tickets/%s','replace','/api/v2','Zendesk\x20account\x20type\x20not\x20recognized','error','[QUEUE]\x20Error\x20running\x20Zendesk\x20integration','inspect','outbound','recordingFormat','none','[OUTBOUND]','email','destcalleridname','Displaying\x20ticket\x20to\x20agent...','%s/channels/voice/agents/%d/tickets/%d/display.json','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','catch'];(function(_0x5f1b1e,_0x299f3f){var _0x5170ca=function(_0xcfb2a4){while(--_0xcfb2a4){_0x5f1b1e['push'](_0x5f1b1e['shift']());}};_0x5170ca(++_0x299f3f);}(_0x5692,0xe0));var _0x2569=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x5692[_0x14add3];return _0x4a174f;};'use strict';var _=require(_0x2569('0x0'));var rp=require(_0x2569('0x1'));var md5=require(_0x2569('0x2'));var util=require(_0x2569('0x3'));var Redis=require(_0x2569('0x4'));var intUtil=require(_0x2569('0x5'));var config=require(_0x2569('0x6'));var logger=require(_0x2569('0x7'))('zendesk');config[_0x2569('0x8')]=_[_0x2569('0x9')](config[_0x2569('0x8')],{'host':_0x2569('0xa'),'port':0x18eb});var io=require(_0x2569('0xb'))(new Redis(config[_0x2569('0x8')]));function emit(_0x418bc8,_0x377668,_0x25d7fb){io['to'](_0x418bc8)[_0x2569('0xc')](_0x377668,_0x25d7fb);}var headers={'Content-Type':_0x2569('0xd'),'Accept':_0x2569('0xd')};function getTicket(_0x348db2,_0x5e12f6,_0x3a6cf3,_0x5e7d85,_0x5171d4){logger['info'](_0x2569('0xe'));return request({'uri':util[_0x2569('0xf')](_0x2569('0x10'),_0x348db2[_0x2569('0x11')]),'method':_0x2569('0x12'),'body':{'ticket':_['merge']({'requester_id':_0x3a6cf3['id'],'submitter_id':_0x5e12f6?_0x5e12f6['id']:undefined,'assignee_id':_0x5e12f6?_0x5e12f6['id']:undefined,'tags':getTags(_0x5e7d85['Tags'],_0x2569('0x13')),'subject':intUtil[_0x2569('0x14')](_0x5e7d85[_0x2569('0x15')],_0x5171d4,'\x20'),'description':intUtil[_0x2569('0x14')](_0x5e7d85[_0x2569('0x16')],_0x5171d4,'\x0a'),'comment':{'public':![],'body':intUtil[_0x2569('0x14')](_0x5e7d85[_0x2569('0x16')],_0x5171d4,'\x0a')}},getCustomFields(_0x5e7d85[_0x2569('0x17')],_0x5171d4))}})[_0x2569('0x18')](function(_0x5e22ff){logger[_0x2569('0x19')](_0x2569('0x1a'));return _0x5e22ff[_0x2569('0x1b')];});}function getUser(_0x24c84f,_0x58b99f){if(intUtil['validateEmail'](_0x58b99f)){logger[_0x2569('0x19')](_0x2569('0x1c'),_0x58b99f);return request({'uri':util[_0x2569('0xf')](_0x2569('0x1d'),_0x24c84f[_0x2569('0x11')]),'qs':{'query':util[_0x2569('0xf')]('type:user\x20role:agent\x20email:%s',_0x58b99f)}})['then'](function(_0x5f01fd){if(_0x5f01fd['count']){logger[_0x2569('0x19')](_0x2569('0x1e'));return _['find'](_0x5f01fd['results'],{'email':_0x58b99f,'role':_0x2569('0x1f')});}else{logger[_0x2569('0x19')](_0x2569('0x20'));return request({'uri':util[_0x2569('0xf')](_0x2569('0x21'),_0x24c84f['remoteUri'])})[_0x2569('0x18')](function(_0x33fabe){logger[_0x2569('0x19')](_0x2569('0x22'));return _0x33fabe[_0x2569('0x23')];});}});}else{logger[_0x2569('0x19')](_0x2569('0x20'));return request({'uri':util[_0x2569('0xf')](_0x2569('0x21'),_0x24c84f[_0x2569('0x11')])})[_0x2569('0x18')](function(_0x346cd7){logger[_0x2569('0x19')]('Admin\x20account\x20selected.');return _0x346cd7['user'];});}}function getEndUser(_0x41bab5,_0x44c8b7,_0x142488){logger[_0x2569('0x19')](_0x2569('0x24'),_0x142488);return request({'uri':util[_0x2569('0xf')](_0x2569('0x1d'),_0x41bab5[_0x2569('0x11')]),'qs':{'query':util['format'](_0x2569('0x25'),_0x142488)}})[_0x2569('0x18')](function(_0x1387e7){var _0x2036df;if(_0x1387e7[_0x2569('0x26')][_0x2569('0x27')]){_0x1387e7[_0x2569('0x26')]=_[_0x2569('0x28')](_0x1387e7[_0x2569('0x26')],{'suspended':![],'role':_0x2569('0x29')});if(_0x1387e7[_0x2569('0x26')]['length']){_0x2036df=_[_0x2569('0x2a')](_0x1387e7[_0x2569('0x26')]);}}if(_0x2036df){logger[_0x2569('0x19')](_0x2569('0x2b'));return _0x2036df;}else{logger[_0x2569('0x19')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'uri':util[_0x2569('0xf')](_0x2569('0x2c'),_0x41bab5[_0x2569('0x11')]),'method':'POST','body':{'user':{'role':_0x2569('0x29'),'name':util['format'](_0x2569('0x2d'),_0x44c8b7||_0x142488),'phone':_0x142488}}})['then'](function(_0xed41c8){logger[_0x2569('0x19')]('Enduser\x20created.');return _0xed41c8[_0x2569('0x23')];});}});}function getAuth(_0x2d429c){var _0x188d33;if(_0x2d429c[_0x2569('0x2e')]===_0x2569('0x2f')){_0x188d33=util['format']('%s:%s',_0x2d429c['username'],_0x2d429c[_0x2569('0x2f')]);}else if(_0x2d429c[_0x2569('0x2e')]===_0x2569('0x30')){_0x188d33=util[_0x2569('0xf')](_0x2569('0x31'),_0x2d429c[_0x2569('0x32')],_0x2d429c[_0x2569('0x30')]);}return util[_0x2569('0xf')](_0x2569('0x33'),new Buffer(_0x188d33)['toString'](_0x2569('0x34')));}function request(_0x14592e){logger['debug'](_0x2569('0x35'),JSON[_0x2569('0x36')](_0x14592e));return rp(_[_0x2569('0x9')](_0x14592e,{'method':'GET','headers':headers,'json':!![]}));}function getTags(_0x56f51a,_0x324063){var _0x21b293=[];if(_0x56f51a&&_0x56f51a[_0x2569('0x27')]>0x0){_0x21b293=_[_0x2569('0x37')](_0x56f51a,_0x324063);}return _0x21b293;}function getCustomFields(_0x5bdc2e,_0xd83ff0){var _0x1dd1bb=[];var _0x3855a3={'custom_fields':[]};if(_0x5bdc2e['length']>0x0){_[_0x2569('0x38')](_0x5bdc2e,function(_0x2c8404){if(_0x2c8404[_0x2569('0x39')]==='string'&&_0x2c8404[_0x2569('0x3a')]&&!_0x2c8404[_0x2569('0x3b')]){_0x3855a3[_0x2c8404[_0x2569('0x3a')]['toLowerCase']()]=_0x2c8404[_0x2569('0x3c')][_0x2569('0x3d')]();}else if(_0x2c8404[_0x2569('0x39')]===_0x2569('0x3e')&&_0x2c8404[_0x2569('0x3f')]&&_0x2c8404[_0x2569('0x3b')]){_0x3855a3['custom_fields'][_0x2569('0x40')]({'id':_0x2c8404[_0x2569('0x3f')],'value':_0x2c8404[_0x2569('0x3c')][_0x2569('0x3d')]()});}else if(_0x2c8404[_0x2569('0x39')]===_0x2569('0x41')&&_0x2c8404['variableName']&&_0x2c8404[_0x2569('0x3f')]&&_0x2c8404[_0x2569('0x3b')]){_0xd83ff0[_0x2c8404[_0x2569('0x42')]]&&_0x3855a3[_0x2569('0x43')][_0x2569('0x40')]({'id':_0x2c8404[_0x2569('0x3f')],'value':_0xd83ff0[_0x2c8404['variableName']][_0x2569('0x3d')]()});}else if(_0x2c8404[_0x2569('0x39')]==='customVariable'&&_0x2c8404[_0x2569('0x44')]&&_0x2c8404[_0x2569('0x44')][_0x2569('0x13')]&&_0x2c8404['idField']&&_0x2c8404[_0x2569('0x3b')]){_0xd83ff0[_0x2c8404['Variable'][_0x2569('0x13')]['toLowerCase']()]&&_0x3855a3[_0x2569('0x43')][_0x2569('0x40')]({'id':_0x2c8404[_0x2569('0x3f')],'value':_0xd83ff0[_0x2c8404[_0x2569('0x44')][_0x2569('0x13')][_0x2569('0x45')]()][_0x2569('0x3d')]()});}});}return _0x3855a3;}exports[_0x2569('0x46')]=function(_0x5a791c,_0x30670b,_0x2f7997,_0xe4f74,_0x4cc7ee,_0x4ba20d){var _0x1d8af7,_0x57b662;_0x4ba20d[_0x2569('0x11')]=intUtil[_0x2569('0x47')](_0x4ba20d[_0x2569('0x11')]);_0x4ba20d[_0x2569('0x48')]=intUtil[_0x2569('0x47')](_0x4ba20d['serverUrl']);if(_0x4cc7ee&&_0x4cc7ee[_0x2569('0x49')]){logger[_0x2569('0x19')](_0x2569('0x4a'),_0x2569('0x4b'));_0x30670b[_0x2569('0x4c')]=util[_0x2569('0xf')](_0x2569('0x4d'),_0x4ba20d[_0x2569('0x48')],_0x30670b[_0x2569('0x4e')],md5(_0x30670b['uniqueid']));}else{_0x30670b[_0x2569('0x4c')]='';}headers[_0x2569('0x4f')]=getAuth(_0x4ba20d);return getUser(_0x4ba20d,_0xe4f74['email'])[_0x2569('0x18')](function(_0x36bacd){_0x1d8af7=_0x36bacd;logger[_0x2569('0x19')](_0x2569('0x50'),_0x1d8af7['id']);return getEndUser(_0x4ba20d,_0x30670b[_0x2569('0x51')],_0x30670b[_0x2569('0x52')]);})['then'](function(_0x320183){_0x57b662=_0x320183;logger[_0x2569('0x19')](_0x2569('0x53'),_0x57b662['id']);return getTicket(_0x4ba20d,_0x1d8af7,_0x57b662,_0x2f7997,_0x30670b);})[_0x2569('0x18')](function(_0x21fe5e){if(_0x21fe5e){logger[_0x2569('0x19')](_0x2569('0x54'),_0x21fe5e['id']);switch(_0x4ba20d[_0x2569('0x39')]){case _0x2569('0x55'):logger[_0x2569('0x19')](_0x2569('0x4a'),'Displaying\x20ticket\x20to\x20agent...');return request({'uri':util['format']('%s/channels/voice/agents/%d/tickets/%d/display.json',_0x4ba20d['remoteUri'],_0x1d8af7['id'],_0x21fe5e['id']),'method':_0x2569('0x12')});case _0x2569('0x56'):logger[_0x2569('0x19')](_0x2569('0x4a'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x2569('0xf')](_0x2569('0x57'),_0xe4f74[_0x2569('0x13')]),_0x2569('0x58'),{'uri':util['format'](_0x2569('0x59'),_0x4ba20d[_0x2569('0x11')][_0x2569('0x5a')](_0x2569('0x5b'),''),_0x21fe5e['id'])});break;default:logger['error']('[QUEUE]',_0x2569('0x5c'));}}})['catch'](function(_0xa32adc){logger[_0x2569('0x5d')](_0x2569('0x5e'),util[_0x2569('0x5f')](_0xa32adc,{'showHidden':!![],'depth':null}));});};exports[_0x2569('0x60')]=function(_0x5ab807,_0x2118b0,_0x8dac0f,_0x54d44f,_0xf8a859,_0x38f261,_0x51dfe1){var _0x2e6732,_0x2a3495;_0x38f261[_0x2569('0x11')]=intUtil[_0x2569('0x47')](_0x38f261[_0x2569('0x11')]);_0x38f261[_0x2569('0x48')]=intUtil['stripTrailingSlash'](_0x38f261[_0x2569('0x48')]);if(_0x51dfe1&&_0x51dfe1[_0x2569('0x61')]&&_0x51dfe1[_0x2569('0x61')]!==_0x2569('0x62')){logger[_0x2569('0x19')](_0x2569('0x63'),_0x2569('0x4b'));_0x2118b0[_0x2569('0x4c')]=util['format'](_0x2569('0x4d'),_0x38f261[_0x2569('0x48')],_0x2118b0[_0x2569('0x4e')],md5(_0x2118b0['uniqueid']));}headers[_0x2569('0x4f')]=getAuth(_0x38f261);return getUser(_0x38f261,_0x54d44f[_0x2569('0x64')])['then'](function(_0x3ecb85){_0x2e6732=_0x3ecb85;logger[_0x2569('0x19')]('The\x20User\x20ID\x20is:',_0x2e6732['id']);return getEndUser(_0x38f261,_0x2118b0[_0x2569('0x65')],_0x2118b0['destcalleridnum']);})['then'](function(_0x5b4f50){_0x2a3495=_0x5b4f50;logger['info'](_0x2569('0x53'),_0x2a3495['id']);return getTicket(_0x38f261,_0x2e6732,_0x2a3495,_0x8dac0f,_0x2118b0);})['then'](function(_0x27b4fd){if(_0x27b4fd){logger[_0x2569('0x19')](_0x2569('0x54'),_0x27b4fd['id']);switch(_0x38f261[_0x2569('0x39')]){case'integrationTab':logger[_0x2569('0x19')](_0x2569('0x63'),_0x2569('0x66'));return request({'uri':util[_0x2569('0xf')](_0x2569('0x67'),_0x38f261['remoteUri'],_0x2e6732['id'],_0x27b4fd['id']),'method':_0x2569('0x12')});case _0x2569('0x56'):logger['info'](_0x2569('0x63'),_0x2569('0x68'));emit(util[_0x2569('0xf')]('user:%s',_0x54d44f[_0x2569('0x13')]),_0x2569('0x58'),{'uri':util[_0x2569('0xf')]('%s/agent/tickets/%s',_0x38f261[_0x2569('0x11')][_0x2569('0x5a')]('/api/v2',''),_0x27b4fd['id'])});break;default:logger['error'](_0x2569('0x63'),_0x2569('0x5c'));}}})[_0x2569('0x69')](function(_0x4bed43){logger[_0x2569('0x5d')](_0x2569('0x6a'),util[_0x2569('0x5f')](_0x4bed43,{'showHidden':!![],'depth':null}));});};exports['unmanaged']=function(_0x5c1729,_0x4c77ff,_0x44e5d0,_0x9f69a4,_0x44b3a2,_0x59471c){var _0x40d4db,_0x2a2f1f;_0x59471c['remoteUri']=intUtil[_0x2569('0x47')](_0x59471c[_0x2569('0x11')]);_0x59471c[_0x2569('0x48')]=intUtil[_0x2569('0x47')](_0x59471c[_0x2569('0x48')]);if(_0x44b3a2&&_0x44b3a2[_0x2569('0x49')]){logger[_0x2569('0x19')]('['+_0x4c77ff[_0x2569('0x6b')]['toUpperCase']()+']',_0x2569('0x4b'));_0x4c77ff[_0x2569('0x4c')]=util[_0x2569('0xf')](_0x2569('0x4d'),_0x59471c[_0x2569('0x48')],_0x4c77ff['uniqueid'],md5(_0x4c77ff[_0x2569('0x4e')]));}else{_0x4c77ff[_0x2569('0x4c')]='';}headers[_0x2569('0x4f')]=getAuth(_0x59471c);return getUser(_0x59471c)[_0x2569('0x18')](function(_0x213bae){_0x40d4db=_0x213bae;logger[_0x2569('0x19')](_0x2569('0x50'),_0x40d4db['id']);return getEndUser(_0x59471c,_0x4c77ff['calleridname'],_0x4c77ff[_0x2569('0x52')]);})[_0x2569('0x18')](function(_0x858679){_0x2a2f1f=_0x858679;logger[_0x2569('0x19')](_0x2569('0x53'),_0x2a2f1f['id']);return getTicket(_0x59471c,_0x40d4db,_0x2a2f1f,_0x44e5d0,_0x4c77ff);})[_0x2569('0x18')](function(_0x5b11cb){if(_0x5b11cb){logger['info'](_0x2569('0x54'),_0x5b11cb['id']);}})[_0x2569('0x69')](function(_0x7c7395){logger[_0x2569('0x5d')]('['+_0x4c77ff['lastevent'][_0x2569('0x6c')]()+']'+_0x2569('0x6d'),util[_0x2569('0x5f')](_0x7c7395,{'showHidden':!![],'depth':null}));});};