18f7453a790a2a8401978c0c3e8a91e9d170ea47
[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 _0x6780=['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','newTab','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','%s/agent/tickets/%s','replace','/api/v2','error','Zendesk\x20account\x20type\x20not\x20recognized','catch','[QUEUE]\x20Error\x20running\x20Zendesk\x20integration','inspect','outbound','recordingFormat','none','[OUTBOUND]','recordingURL','destcalleridnum','[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration','unmanaged','toUpperCase','lastevent','lodash','request-promise','md5','util','ioredis','./util','../../../../config/environment','redis','defaults','localhost','socket.io-emitter','application/json','info','Creating\x20new\x20ticket...','format','%s/tickets.json','remoteUri','POST','name','getString','Descriptions','Fields','then','Getting\x20agent\x20with\x20email','type:user\x20role:agent\x20email:%s','count','Agent\x20found!','find','results','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me.json','user','%s/search.json','type:user\x20role:end-user\x20phone:%s','length','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/users.json','end-user','Caller\x20-\x20%s','Enduser\x20created.','authType','password','%s:%s','token','username','Basic\x20%s','toString','base64','stringify','map','includes','string','picklist','type','nameField','content','idField','customField','custom_fields','variable','variableName','push','customVariable','Variable','toLowerCase','queue','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid'];(function(_0x11b04f,_0x129fbd){var _0x43ac42=function(_0x52fb47){while(--_0x52fb47){_0x11b04f['push'](_0x11b04f['shift']());}};_0x43ac42(++_0x129fbd);}(_0x6780,0x1c8));var _0x0678=function(_0x306f32,_0xd0685a){_0x306f32=_0x306f32-0x0;var _0x2161fb=_0x6780[_0x306f32];return _0x2161fb;};'use strict';var _=require(_0x0678('0x0'));var rp=require(_0x0678('0x1'));var md5=require(_0x0678('0x2'));var util=require(_0x0678('0x3'));var Redis=require(_0x0678('0x4'));var intUtil=require(_0x0678('0x5'));var config=require(_0x0678('0x6'));var logger=require('../../../../config/logger')('zendesk');config[_0x0678('0x7')]=_[_0x0678('0x8')](config[_0x0678('0x7')],{'host':_0x0678('0x9'),'port':0x18eb});var io=require(_0x0678('0xa'))(new Redis(config[_0x0678('0x7')]));function emit(_0x441281,_0x2348c3,_0x33add2){io['to'](_0x441281)['emit'](_0x2348c3,_0x33add2);}var headers={'Content-Type':_0x0678('0xb'),'Accept':_0x0678('0xb')};function getTicket(_0x416481,_0x4a6238,_0x47bdd1,_0x5b0856,_0x5d75b7){logger[_0x0678('0xc')](_0x0678('0xd'));return request({'uri':util[_0x0678('0xe')](_0x0678('0xf'),_0x416481[_0x0678('0x10')]),'method':_0x0678('0x11'),'body':{'ticket':_['merge']({'requester_id':_0x47bdd1['id'],'submitter_id':_0x4a6238?_0x4a6238['id']:undefined,'assignee_id':_0x4a6238?_0x4a6238['id']:undefined,'tags':getTags(_0x5b0856['Tags'],_0x0678('0x12')),'subject':intUtil[_0x0678('0x13')](_0x5b0856['Subjects'],_0x5d75b7,'\x20'),'description':intUtil[_0x0678('0x13')](_0x5b0856['Descriptions'],_0x5d75b7,'\x0a'),'comment':{'public':![],'body':intUtil[_0x0678('0x13')](_0x5b0856[_0x0678('0x14')],_0x5d75b7,'\x0a')}},getCustomFields(_0x5b0856[_0x0678('0x15')],_0x5d75b7))}})[_0x0678('0x16')](function(_0x23b28f){logger[_0x0678('0xc')]('Ticket\x20created!');return _0x23b28f['ticket'];});}function getUser(_0x28560d,_0x4f5cb7){if(intUtil['validateEmail'](_0x4f5cb7)){logger[_0x0678('0xc')](_0x0678('0x17'),_0x4f5cb7);return request({'uri':util[_0x0678('0xe')]('%s/search.json',_0x28560d[_0x0678('0x10')]),'qs':{'query':util[_0x0678('0xe')](_0x0678('0x18'),_0x4f5cb7)}})[_0x0678('0x16')](function(_0x4d5af2){if(_0x4d5af2[_0x0678('0x19')]){logger[_0x0678('0xc')](_0x0678('0x1a'));return _[_0x0678('0x1b')](_0x4d5af2[_0x0678('0x1c')],{'email':_0x4f5cb7,'role':'agent'});}else{logger[_0x0678('0xc')](_0x0678('0x1d'));return request({'uri':util[_0x0678('0xe')](_0x0678('0x1e'),_0x28560d[_0x0678('0x10')])})[_0x0678('0x16')](function(_0x37b5d9){logger[_0x0678('0xc')]('Admin\x20account\x20selected.');return _0x37b5d9['user'];});}});}else{logger[_0x0678('0xc')](_0x0678('0x1d'));return request({'uri':util[_0x0678('0xe')](_0x0678('0x1e'),_0x28560d[_0x0678('0x10')])})[_0x0678('0x16')](function(_0x4e82ae){logger['info']('Admin\x20account\x20selected.');return _0x4e82ae[_0x0678('0x1f')];});}}function getEndUser(_0x4f4566,_0xe88179,_0x2b1ae5){logger[_0x0678('0xc')]('Searching\x20enduser\x20with\x20phone',_0x2b1ae5);return request({'uri':util[_0x0678('0xe')](_0x0678('0x20'),_0x4f4566[_0x0678('0x10')]),'qs':{'query':util['format'](_0x0678('0x21'),_0x2b1ae5)}})['then'](function(_0x3ce6a2){var _0x4cbd3d;if(_0x3ce6a2[_0x0678('0x1c')][_0x0678('0x22')]){_0x3ce6a2['results']=_['filter'](_0x3ce6a2[_0x0678('0x1c')],{'suspended':![],'role':'end-user'});if(_0x3ce6a2[_0x0678('0x1c')][_0x0678('0x22')]){_0x4cbd3d=_['first'](_0x3ce6a2[_0x0678('0x1c')]);}}if(_0x4cbd3d){logger[_0x0678('0xc')](_0x0678('0x23'));return _0x4cbd3d;}else{logger['info'](_0x0678('0x24'));return request({'uri':util[_0x0678('0xe')](_0x0678('0x25'),_0x4f4566['remoteUri']),'method':_0x0678('0x11'),'body':{'user':{'role':_0x0678('0x26'),'name':util['format'](_0x0678('0x27'),_0xe88179||_0x2b1ae5),'phone':_0x2b1ae5}}})[_0x0678('0x16')](function(_0x36501a){logger[_0x0678('0xc')](_0x0678('0x28'));return _0x36501a[_0x0678('0x1f')];});}});}function getAuth(_0x5e2867){var _0x87c9ba;if(_0x5e2867[_0x0678('0x29')]===_0x0678('0x2a')){_0x87c9ba=util[_0x0678('0xe')](_0x0678('0x2b'),_0x5e2867['username'],_0x5e2867[_0x0678('0x2a')]);}else if(_0x5e2867['authType']===_0x0678('0x2c')){_0x87c9ba=util[_0x0678('0xe')]('%s/token:%s',_0x5e2867[_0x0678('0x2d')],_0x5e2867['token']);}return util[_0x0678('0xe')](_0x0678('0x2e'),new Buffer(_0x87c9ba)[_0x0678('0x2f')](_0x0678('0x30')));}function request(_0x5ac695){logger['debug']('[HTTP]',JSON[_0x0678('0x31')](_0x5ac695));return rp(_['defaults'](_0x5ac695,{'method':'GET','headers':headers,'json':!![]}));}function getTags(_0x10c925,_0x305d2d){var _0x2b0273=[];if(_0x10c925&&_0x10c925[_0x0678('0x22')]>0x0){_0x2b0273=_[_0x0678('0x32')](_0x10c925,_0x305d2d);}return _0x2b0273;}function getCustomFields(_0x23c454,_0x116706){var _0xf825dd=[];var _0x297d01={'custom_fields':[]};if(_0x23c454['length']>0x0){_['forEach'](_0x23c454,function(_0x3a81f3){if(_[_0x0678('0x33')]([_0x0678('0x34'),_0x0678('0x35')],_0x3a81f3[_0x0678('0x36')])&&_0x3a81f3[_0x0678('0x37')]&&!_0x3a81f3['customField']){_0x297d01[_0x3a81f3['nameField']['toLowerCase']()]=_0x3a81f3[_0x0678('0x38')][_0x0678('0x2f')]();}else if(_['includes']([_0x0678('0x34'),_0x0678('0x35')],_0x3a81f3['type'])&&_0x3a81f3[_0x0678('0x39')]&&_0x3a81f3[_0x0678('0x3a')]){_0x297d01[_0x0678('0x3b')]['push']({'id':_0x3a81f3[_0x0678('0x39')],'value':_0x3a81f3['content'][_0x0678('0x2f')]()});}else if(_0x3a81f3[_0x0678('0x36')]===_0x0678('0x3c')&&_0x3a81f3['variableName']&&_0x3a81f3[_0x0678('0x39')]&&_0x3a81f3[_0x0678('0x3a')]){_0x116706[_0x3a81f3[_0x0678('0x3d')]]&&_0x297d01['custom_fields'][_0x0678('0x3e')]({'id':_0x3a81f3[_0x0678('0x39')],'value':_0x116706[_0x3a81f3[_0x0678('0x3d')]][_0x0678('0x2f')]()});}else if(_0x3a81f3['type']===_0x0678('0x3f')&&_0x3a81f3[_0x0678('0x40')]&&_0x3a81f3[_0x0678('0x40')][_0x0678('0x12')]&&_0x3a81f3['idField']&&_0x3a81f3[_0x0678('0x3a')]){_0x116706[_0x3a81f3[_0x0678('0x40')][_0x0678('0x12')][_0x0678('0x41')]()]&&_0x297d01['custom_fields'][_0x0678('0x3e')]({'id':_0x3a81f3['idField'],'value':_0x116706[_0x3a81f3[_0x0678('0x40')][_0x0678('0x12')]['toLowerCase']()][_0x0678('0x2f')]()});}});}return _0x297d01;}exports[_0x0678('0x42')]=function(_0x58313e,_0x1e9f65,_0x3609b5,_0x28a331,_0x19ccb1,_0x10841b){var _0x243d1c,_0x562040;_0x10841b[_0x0678('0x10')]=intUtil[_0x0678('0x43')](_0x10841b[_0x0678('0x10')]);_0x10841b[_0x0678('0x44')]=intUtil[_0x0678('0x43')](_0x10841b[_0x0678('0x44')]);if(_0x19ccb1&&_0x19ccb1[_0x0678('0x45')]){logger[_0x0678('0xc')](_0x0678('0x46'),_0x0678('0x47'));_0x1e9f65['recordingURL']=util['format'](_0x0678('0x48'),_0x10841b[_0x0678('0x44')],_0x1e9f65[_0x0678('0x49')],md5(_0x1e9f65[_0x0678('0x49')]));}else{_0x1e9f65['recordingURL']='';}headers[_0x0678('0x4a')]=getAuth(_0x10841b);return getUser(_0x10841b,_0x28a331[_0x0678('0x4b')])['then'](function(_0x3970a4){_0x243d1c=_0x3970a4;logger[_0x0678('0xc')](_0x0678('0x4c'),_0x243d1c['id']);return getEndUser(_0x10841b,_0x1e9f65[_0x0678('0x4d')],_0x1e9f65[_0x0678('0x4e')]);})[_0x0678('0x16')](function(_0x16fe23){_0x562040=_0x16fe23;logger[_0x0678('0xc')](_0x0678('0x4f'),_0x562040['id']);return getTicket(_0x10841b,_0x243d1c,_0x562040,_0x3609b5,_0x1e9f65);})[_0x0678('0x16')](function(_0x482f62){if(_0x482f62){logger[_0x0678('0xc')](_0x0678('0x50'),_0x482f62['id']);switch(_0x10841b['type']){case _0x0678('0x51'):logger[_0x0678('0xc')](_0x0678('0x46'),_0x0678('0x52'));return request({'uri':util['format'](_0x0678('0x53'),_0x10841b['remoteUri'],_0x243d1c['id'],_0x482f62['id']),'method':_0x0678('0x11')});case _0x0678('0x54'):logger['info']('[QUEUE]',_0x0678('0x55'));emit(util['format'](_0x0678('0x56'),_0x28a331['name']),_0x0678('0x57'),{'uri':util[_0x0678('0xe')](_0x0678('0x58'),_0x10841b['remoteUri'][_0x0678('0x59')](_0x0678('0x5a'),''),_0x482f62['id'])});break;default:logger[_0x0678('0x5b')](_0x0678('0x46'),_0x0678('0x5c'));}}})[_0x0678('0x5d')](function(_0x3f106b){logger[_0x0678('0x5b')](_0x0678('0x5e'),util[_0x0678('0x5f')](_0x3f106b,{'showHidden':!![],'depth':null}));});};exports[_0x0678('0x60')]=function(_0x232ae2,_0x51dfca,_0x4bbe84,_0x17ddf0,_0x514ca9,_0x1916c4,_0x280840){var _0x12a8d8,_0x34c576;_0x1916c4[_0x0678('0x10')]=intUtil[_0x0678('0x43')](_0x1916c4[_0x0678('0x10')]);_0x1916c4[_0x0678('0x44')]=intUtil[_0x0678('0x43')](_0x1916c4['serverUrl']);if(_0x280840&&_0x280840[_0x0678('0x61')]&&_0x280840[_0x0678('0x61')]!==_0x0678('0x62')){logger[_0x0678('0xc')](_0x0678('0x63'),_0x0678('0x47'));_0x51dfca[_0x0678('0x64')]=util[_0x0678('0xe')](_0x0678('0x48'),_0x1916c4['serverUrl'],_0x51dfca[_0x0678('0x49')],md5(_0x51dfca[_0x0678('0x49')]));}headers[_0x0678('0x4a')]=getAuth(_0x1916c4);return getUser(_0x1916c4,_0x17ddf0[_0x0678('0x4b')])[_0x0678('0x16')](function(_0x4f36b4){_0x12a8d8=_0x4f36b4;logger[_0x0678('0xc')](_0x0678('0x4c'),_0x12a8d8['id']);return getEndUser(_0x1916c4,_0x51dfca['destcalleridname'],_0x51dfca[_0x0678('0x65')]);})['then'](function(_0x2b966f){_0x34c576=_0x2b966f;logger[_0x0678('0xc')](_0x0678('0x4f'),_0x34c576['id']);return getTicket(_0x1916c4,_0x12a8d8,_0x34c576,_0x4bbe84,_0x51dfca);})[_0x0678('0x16')](function(_0x4c264c){if(_0x4c264c){logger['info'](_0x0678('0x50'),_0x4c264c['id']);switch(_0x1916c4[_0x0678('0x36')]){case _0x0678('0x51'):logger[_0x0678('0xc')](_0x0678('0x63'),_0x0678('0x52'));return request({'uri':util['format'](_0x0678('0x53'),_0x1916c4[_0x0678('0x10')],_0x12a8d8['id'],_0x4c264c['id']),'method':_0x0678('0x11')});case _0x0678('0x54'):logger[_0x0678('0xc')](_0x0678('0x63'),_0x0678('0x55'));emit(util['format'](_0x0678('0x56'),_0x17ddf0[_0x0678('0x12')]),_0x0678('0x57'),{'uri':util[_0x0678('0xe')]('%s/agent/tickets/%s',_0x1916c4[_0x0678('0x10')][_0x0678('0x59')](_0x0678('0x5a'),''),_0x4c264c['id'])});break;default:logger[_0x0678('0x5b')](_0x0678('0x63'),'Zendesk\x20account\x20type\x20not\x20recognized');}}})['catch'](function(_0x1ed642){logger[_0x0678('0x5b')](_0x0678('0x66'),util[_0x0678('0x5f')](_0x1ed642,{'showHidden':!![],'depth':null}));});};exports[_0x0678('0x67')]=function(_0x4dbe0e,_0x32ed6f,_0x536124,_0x5baf06,_0x4837c4,_0x1fd74f){var _0x953aa5,_0x47ad3e;_0x1fd74f[_0x0678('0x10')]=intUtil[_0x0678('0x43')](_0x1fd74f[_0x0678('0x10')]);_0x1fd74f[_0x0678('0x44')]=intUtil['stripTrailingSlash'](_0x1fd74f['serverUrl']);if(_0x4837c4&&_0x4837c4['monitor_format']){logger[_0x0678('0xc')]('['+_0x32ed6f['lastevent'][_0x0678('0x68')]()+']',_0x0678('0x47'));_0x32ed6f['recordingURL']=util[_0x0678('0xe')](_0x0678('0x48'),_0x1fd74f[_0x0678('0x44')],_0x32ed6f['uniqueid'],md5(_0x32ed6f[_0x0678('0x49')]));}else{_0x32ed6f['recordingURL']='';}headers[_0x0678('0x4a')]=getAuth(_0x1fd74f);return getUser(_0x1fd74f)[_0x0678('0x16')](function(_0x3ad50d){_0x953aa5=_0x3ad50d;logger[_0x0678('0xc')](_0x0678('0x4c'),_0x953aa5['id']);return getEndUser(_0x1fd74f,_0x32ed6f[_0x0678('0x4d')],_0x32ed6f[_0x0678('0x4e')]);})[_0x0678('0x16')](function(_0x455232){_0x47ad3e=_0x455232;logger[_0x0678('0xc')]('The\x20Enduser\x20ID\x20is:',_0x47ad3e['id']);return getTicket(_0x1fd74f,_0x953aa5,_0x47ad3e,_0x536124,_0x32ed6f);})['then'](function(_0x224eaa){if(_0x224eaa){logger[_0x0678('0xc')](_0x0678('0x50'),_0x224eaa['id']);}})[_0x0678('0x5d')](function(_0x3cec57){logger[_0x0678('0x5b')]('['+_0x32ed6f[_0x0678('0x69')]['toUpperCase']()+']'+'\x20Error\x20running\x20Zendesk\x20integration',util[_0x0678('0x5f')](_0x3cec57,{'showHidden':!![],'depth':null}));});};