93e109b9b316c648918e74cdc945d66fc4e5829e
[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 _0xb6b1=['base64','debug','[HTTP]','stringify','GET','length','map','forEach','type','string','nameField','toLowerCase','content','idField','variable','variableName','custom_fields','push','customVariable','Variable','customField','queue','stripTrailingSlash','serverUrl','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','uniqueid','Authorization','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','integrationTab','Displaying\x20ticket\x20to\x20agent...','newTab','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','error','[QUEUE]\x20Error\x20running\x20Zendesk\x20integration','inspect','recordingFormat','none','[OUTBOUND]','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','destcalleridname','destcalleridnum','%s/channels/voice/agents/%d/tickets/%d/display.json','POST','%s/agent/tickets/%s','Zendesk\x20account\x20type\x20not\x20recognized','catch','[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration','unmanaged','toUpperCase','lastevent','\x20Error\x20running\x20Zendesk\x20integration','lodash','md5','ioredis','./util','../../../../config/logger','redis','defaults','localhost','emit','application/json','info','Creating\x20new\x20ticket...','format','%s/tickets.json','remoteUri','merge','Tags','name','Subjects','getString','Descriptions','Fields','then','Ticket\x20created!','validateEmail','%s/search.json','type:user\x20role:agent\x20email:%s','count','Agent\x20found!','find','results','agent','%s/users/me.json','Admin\x20account\x20selected.','user','Searching\x20enduser\x20with\x20phone','type:user\x20role:end-user\x20phone:%s','filter','end-user','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/users.json','Caller\x20-\x20%s','Enduser\x20created.','authType','password','%s:%s','token','username','toString'];(function(_0x5b5348,_0x114705){var _0x5badd6=function(_0x1f8c4b){while(--_0x1f8c4b){_0x5b5348['push'](_0x5b5348['shift']());}};_0x5badd6(++_0x114705);}(_0xb6b1,0x17b));var _0x1b6b=function(_0x213518,_0x51e022){_0x213518=_0x213518-0x0;var _0x1baf75=_0xb6b1[_0x213518];return _0x1baf75;};'use strict';var _=require(_0x1b6b('0x0'));var rp=require('request-promise');var md5=require(_0x1b6b('0x1'));var util=require('util');var Redis=require(_0x1b6b('0x2'));var intUtil=require(_0x1b6b('0x3'));var config=require('../../../../config/environment');var logger=require(_0x1b6b('0x4'))('zendesk');config[_0x1b6b('0x5')]=_[_0x1b6b('0x6')](config[_0x1b6b('0x5')],{'host':_0x1b6b('0x7'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x1b6b('0x5')]));function emit(_0x51cfed,_0xae4115,_0x5042f7){io['to'](_0x51cfed)[_0x1b6b('0x8')](_0xae4115,_0x5042f7);}var headers={'Content-Type':_0x1b6b('0x9'),'Accept':_0x1b6b('0x9')};function getTicket(_0x29258a,_0x5249cd,_0x4c750a,_0x475423,_0x43d9f0){logger[_0x1b6b('0xa')](_0x1b6b('0xb'));return request({'uri':util[_0x1b6b('0xc')](_0x1b6b('0xd'),_0x29258a[_0x1b6b('0xe')]),'method':'POST','body':{'ticket':_[_0x1b6b('0xf')]({'requester_id':_0x4c750a['id'],'submitter_id':_0x5249cd?_0x5249cd['id']:undefined,'assignee_id':_0x5249cd?_0x5249cd['id']:undefined,'tags':getTags(_0x475423[_0x1b6b('0x10')],_0x1b6b('0x11')),'subject':intUtil['getString'](_0x475423[_0x1b6b('0x12')],_0x43d9f0,'\x20'),'description':intUtil['getString'](_0x475423['Descriptions'],_0x43d9f0,'\x0a'),'comment':{'public':![],'body':intUtil[_0x1b6b('0x13')](_0x475423[_0x1b6b('0x14')],_0x43d9f0,'\x0a')}},getCustomFields(_0x475423[_0x1b6b('0x15')],_0x43d9f0))}})[_0x1b6b('0x16')](function(_0x1b9cc4){logger[_0x1b6b('0xa')](_0x1b6b('0x17'));return _0x1b9cc4['ticket'];});}function getUser(_0x1069a4,_0x251821){if(intUtil[_0x1b6b('0x18')](_0x251821)){logger[_0x1b6b('0xa')]('Getting\x20agent\x20with\x20email',_0x251821);return request({'uri':util[_0x1b6b('0xc')](_0x1b6b('0x19'),_0x1069a4[_0x1b6b('0xe')]),'qs':{'query':util['format'](_0x1b6b('0x1a'),_0x251821)}})[_0x1b6b('0x16')](function(_0x38801e){if(_0x38801e[_0x1b6b('0x1b')]){logger[_0x1b6b('0xa')](_0x1b6b('0x1c'));return _[_0x1b6b('0x1d')](_0x38801e[_0x1b6b('0x1e')],{'email':_0x251821,'role':_0x1b6b('0x1f')});}else{logger[_0x1b6b('0xa')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0x1b6b('0xc')](_0x1b6b('0x20'),_0x1069a4[_0x1b6b('0xe')])})[_0x1b6b('0x16')](function(_0x27974f){logger[_0x1b6b('0xa')](_0x1b6b('0x21'));return _0x27974f[_0x1b6b('0x22')];});}});}else{logger[_0x1b6b('0xa')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0x1b6b('0xc')]('%s/users/me.json',_0x1069a4['remoteUri'])})['then'](function(_0x11449b){logger[_0x1b6b('0xa')]('Admin\x20account\x20selected.');return _0x11449b[_0x1b6b('0x22')];});}}function getEndUser(_0x47c318,_0x15dfc7,_0x440658){logger[_0x1b6b('0xa')](_0x1b6b('0x23'),_0x440658);return request({'uri':util[_0x1b6b('0xc')](_0x1b6b('0x19'),_0x47c318['remoteUri']),'qs':{'query':util[_0x1b6b('0xc')](_0x1b6b('0x24'),_0x440658)}})[_0x1b6b('0x16')](function(_0x3b33d4){var _0x4bd5b8;if(_0x3b33d4[_0x1b6b('0x1e')]['length']){_0x3b33d4['results']=_[_0x1b6b('0x25')](_0x3b33d4['results'],{'suspended':![],'role':_0x1b6b('0x26')});if(_0x3b33d4[_0x1b6b('0x1e')]['length']){_0x4bd5b8=_['first'](_0x3b33d4[_0x1b6b('0x1e')]);}}if(_0x4bd5b8){logger[_0x1b6b('0xa')]('Enduser\x20found!');return _0x4bd5b8;}else{logger['info'](_0x1b6b('0x27'));return request({'uri':util[_0x1b6b('0xc')](_0x1b6b('0x28'),_0x47c318[_0x1b6b('0xe')]),'method':'POST','body':{'user':{'role':_0x1b6b('0x26'),'name':util[_0x1b6b('0xc')](_0x1b6b('0x29'),_0x15dfc7||_0x440658),'phone':_0x440658}}})[_0x1b6b('0x16')](function(_0x1c373b){logger[_0x1b6b('0xa')](_0x1b6b('0x2a'));return _0x1c373b[_0x1b6b('0x22')];});}});}function getAuth(_0x2e991b){var _0x517cf7;if(_0x2e991b[_0x1b6b('0x2b')]===_0x1b6b('0x2c')){_0x517cf7=util[_0x1b6b('0xc')](_0x1b6b('0x2d'),_0x2e991b['username'],_0x2e991b[_0x1b6b('0x2c')]);}else if(_0x2e991b['authType']===_0x1b6b('0x2e')){_0x517cf7=util['format']('%s/token:%s',_0x2e991b[_0x1b6b('0x2f')],_0x2e991b[_0x1b6b('0x2e')]);}return util[_0x1b6b('0xc')]('Basic\x20%s',new Buffer(_0x517cf7)[_0x1b6b('0x30')](_0x1b6b('0x31')));}function request(_0x3c7e65){logger[_0x1b6b('0x32')](_0x1b6b('0x33'),JSON[_0x1b6b('0x34')](_0x3c7e65));return rp(_[_0x1b6b('0x6')](_0x3c7e65,{'method':_0x1b6b('0x35'),'headers':headers,'json':!![]}));}function getTags(_0x37e374,_0x2033fa){var _0x120e13=[];if(_0x37e374&&_0x37e374[_0x1b6b('0x36')]>0x0){_0x120e13=_[_0x1b6b('0x37')](_0x37e374,_0x2033fa);}return _0x120e13;}function getCustomFields(_0xfc4d04,_0x4d4795){var _0x2114d6=[];var _0x47349b={'custom_fields':[]};if(_0xfc4d04['length']>0x0){_[_0x1b6b('0x38')](_0xfc4d04,function(_0x4ca91c){if(_0x4ca91c[_0x1b6b('0x39')]===_0x1b6b('0x3a')&&_0x4ca91c[_0x1b6b('0x3b')]&&!_0x4ca91c['customField']){_0x47349b[_0x4ca91c[_0x1b6b('0x3b')][_0x1b6b('0x3c')]()]=_0x4ca91c[_0x1b6b('0x3d')]['toString']();}else if(_0x4ca91c[_0x1b6b('0x39')]===_0x1b6b('0x3a')&&_0x4ca91c[_0x1b6b('0x3e')]&&_0x4ca91c['customField']){_0x47349b['custom_fields']['push']({'id':_0x4ca91c[_0x1b6b('0x3e')],'value':_0x4ca91c[_0x1b6b('0x3d')][_0x1b6b('0x30')]()});}else if(_0x4ca91c[_0x1b6b('0x39')]===_0x1b6b('0x3f')&&_0x4ca91c[_0x1b6b('0x40')]&&_0x4ca91c[_0x1b6b('0x3e')]&&_0x4ca91c['customField']){_0x4d4795[_0x4ca91c[_0x1b6b('0x40')]]&&_0x47349b[_0x1b6b('0x41')][_0x1b6b('0x42')]({'id':_0x4ca91c[_0x1b6b('0x3e')],'value':_0x4d4795[_0x4ca91c[_0x1b6b('0x40')]][_0x1b6b('0x30')]()});}else if(_0x4ca91c['type']===_0x1b6b('0x43')&&_0x4ca91c[_0x1b6b('0x44')]&&_0x4ca91c[_0x1b6b('0x44')][_0x1b6b('0x11')]&&_0x4ca91c[_0x1b6b('0x3e')]&&_0x4ca91c[_0x1b6b('0x45')]){_0x4d4795[_0x4ca91c[_0x1b6b('0x44')][_0x1b6b('0x11')][_0x1b6b('0x3c')]()]&&_0x47349b[_0x1b6b('0x41')][_0x1b6b('0x42')]({'id':_0x4ca91c[_0x1b6b('0x3e')],'value':_0x4d4795[_0x4ca91c['Variable'][_0x1b6b('0x11')][_0x1b6b('0x3c')]()][_0x1b6b('0x30')]()});}});}return _0x47349b;}exports[_0x1b6b('0x46')]=function(_0xc6cec0,_0x355fde,_0x53544f,_0x519282,_0x203d3c,_0x5bbe60){var _0x1b3a85,_0x5bd593;_0x5bbe60[_0x1b6b('0xe')]=intUtil[_0x1b6b('0x47')](_0x5bbe60[_0x1b6b('0xe')]);_0x5bbe60[_0x1b6b('0x48')]=intUtil['stripTrailingSlash'](_0x5bbe60[_0x1b6b('0x48')]);if(_0x203d3c&&_0x203d3c['monitor_format']){logger['info'](_0x1b6b('0x49'),_0x1b6b('0x4a'));_0x355fde[_0x1b6b('0x4b')]=util[_0x1b6b('0xc')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x5bbe60[_0x1b6b('0x48')],_0x355fde['uniqueid'],md5(_0x355fde[_0x1b6b('0x4c')]));}else{_0x355fde[_0x1b6b('0x4b')]='';}headers[_0x1b6b('0x4d')]=getAuth(_0x5bbe60);return getUser(_0x5bbe60,_0x519282['email'])[_0x1b6b('0x16')](function(_0x5c7a72){_0x1b3a85=_0x5c7a72;logger[_0x1b6b('0xa')]('The\x20User\x20ID\x20is:',_0x1b3a85['id']);return getEndUser(_0x5bbe60,_0x355fde[_0x1b6b('0x4e')],_0x355fde[_0x1b6b('0x4f')]);})[_0x1b6b('0x16')](function(_0x21e798){_0x5bd593=_0x21e798;logger[_0x1b6b('0xa')](_0x1b6b('0x50'),_0x5bd593['id']);return getTicket(_0x5bbe60,_0x1b3a85,_0x5bd593,_0x53544f,_0x355fde);})['then'](function(_0x4c1e02){if(_0x4c1e02){logger[_0x1b6b('0xa')](_0x1b6b('0x51'),_0x4c1e02['id']);switch(_0x5bbe60['type']){case _0x1b6b('0x52'):logger[_0x1b6b('0xa')](_0x1b6b('0x49'),_0x1b6b('0x53'));return request({'uri':util[_0x1b6b('0xc')]('%s/channels/voice/agents/%d/tickets/%d/display.json',_0x5bbe60[_0x1b6b('0xe')],_0x1b3a85['id'],_0x4c1e02['id']),'method':'POST'});case _0x1b6b('0x54'):logger[_0x1b6b('0xa')](_0x1b6b('0x49'),_0x1b6b('0x55'));emit(util[_0x1b6b('0xc')](_0x1b6b('0x56'),_0x519282[_0x1b6b('0x11')]),_0x1b6b('0x57'),{'uri':util[_0x1b6b('0xc')]('%s/agent/tickets/%s',_0x5bbe60['remoteUri'],_0x4c1e02['id'])});break;default:logger['error'](_0x1b6b('0x49'),'Zendesk\x20account\x20type\x20not\x20recognized');}}})['catch'](function(_0x2f1375){logger[_0x1b6b('0x58')](_0x1b6b('0x59'),util[_0x1b6b('0x5a')](_0x2f1375,{'showHidden':!![],'depth':null}));});};exports['outbound']=function(_0x1f549c,_0x20b70e,_0x11f3ec,_0x4e3226,_0x4df1e4,_0xfc3746,_0x8ab8a5){var _0x42d7d3,_0x5589cd;_0xfc3746['remoteUri']=intUtil['stripTrailingSlash'](_0xfc3746['remoteUri']);_0xfc3746[_0x1b6b('0x48')]=intUtil[_0x1b6b('0x47')](_0xfc3746[_0x1b6b('0x48')]);if(_0x8ab8a5&&_0x8ab8a5[_0x1b6b('0x5b')]&&_0x8ab8a5[_0x1b6b('0x5b')]!==_0x1b6b('0x5c')){logger['info'](_0x1b6b('0x5d'),_0x1b6b('0x4a'));_0x20b70e[_0x1b6b('0x4b')]=util[_0x1b6b('0xc')](_0x1b6b('0x5e'),_0xfc3746[_0x1b6b('0x48')],_0x20b70e['uniqueid'],md5(_0x20b70e[_0x1b6b('0x4c')]));}headers['Authorization']=getAuth(_0xfc3746);return getUser(_0xfc3746,_0x4e3226['email'])['then'](function(_0x1bd704){_0x42d7d3=_0x1bd704;logger['info']('The\x20User\x20ID\x20is:',_0x42d7d3['id']);return getEndUser(_0xfc3746,_0x20b70e[_0x1b6b('0x5f')],_0x20b70e[_0x1b6b('0x60')]);})[_0x1b6b('0x16')](function(_0x3cba4a){_0x5589cd=_0x3cba4a;logger[_0x1b6b('0xa')](_0x1b6b('0x50'),_0x5589cd['id']);return getTicket(_0xfc3746,_0x42d7d3,_0x5589cd,_0x11f3ec,_0x20b70e);})[_0x1b6b('0x16')](function(_0x489015){if(_0x489015){logger[_0x1b6b('0xa')]('The\x20Ticket\x20ID\x20is:',_0x489015['id']);switch(_0xfc3746[_0x1b6b('0x39')]){case _0x1b6b('0x52'):logger[_0x1b6b('0xa')]('[OUTBOUND]','Displaying\x20ticket\x20to\x20agent...');return request({'uri':util[_0x1b6b('0xc')](_0x1b6b('0x61'),_0xfc3746[_0x1b6b('0xe')],_0x42d7d3['id'],_0x489015['id']),'method':_0x1b6b('0x62')});case _0x1b6b('0x54'):logger[_0x1b6b('0xa')](_0x1b6b('0x5d'),_0x1b6b('0x55'));emit(util['format']('user:%s',_0x4e3226[_0x1b6b('0x11')]),_0x1b6b('0x57'),{'uri':util[_0x1b6b('0xc')](_0x1b6b('0x63'),_0xfc3746['remoteUri'],_0x489015['id'])});break;default:logger[_0x1b6b('0x58')]('[OUTBOUND]',_0x1b6b('0x64'));}}})[_0x1b6b('0x65')](function(_0x50989c){logger[_0x1b6b('0x58')](_0x1b6b('0x66'),util[_0x1b6b('0x5a')](_0x50989c,{'showHidden':!![],'depth':null}));});};exports[_0x1b6b('0x67')]=function(_0x40b86a,_0x10bd40,_0x591193,_0x860891,_0x3fbc4b,_0x533441){var _0x30b618,_0x26edc4;_0x533441[_0x1b6b('0xe')]=intUtil[_0x1b6b('0x47')](_0x533441[_0x1b6b('0xe')]);_0x533441[_0x1b6b('0x48')]=intUtil[_0x1b6b('0x47')](_0x533441[_0x1b6b('0x48')]);if(_0x3fbc4b&&_0x3fbc4b['monitor_format']){logger['info']('['+_0x10bd40['lastevent'][_0x1b6b('0x68')]()+']',_0x1b6b('0x4a'));_0x10bd40[_0x1b6b('0x4b')]=util[_0x1b6b('0xc')](_0x1b6b('0x5e'),_0x533441[_0x1b6b('0x48')],_0x10bd40['uniqueid'],md5(_0x10bd40['uniqueid']));}else{_0x10bd40[_0x1b6b('0x4b')]='';}headers['Authorization']=getAuth(_0x533441);return getUser(_0x533441)[_0x1b6b('0x16')](function(_0x3dcc50){_0x30b618=_0x3dcc50;logger[_0x1b6b('0xa')]('The\x20User\x20ID\x20is:',_0x30b618['id']);return getEndUser(_0x533441,_0x10bd40[_0x1b6b('0x4e')],_0x10bd40['calleridnum']);})[_0x1b6b('0x16')](function(_0x224584){_0x26edc4=_0x224584;logger['info'](_0x1b6b('0x50'),_0x26edc4['id']);return getTicket(_0x533441,_0x30b618,_0x26edc4,_0x591193,_0x10bd40);})['then'](function(_0x3dac67){if(_0x3dac67){logger[_0x1b6b('0xa')]('The\x20Ticket\x20ID\x20is:',_0x3dac67['id']);}})[_0x1b6b('0x65')](function(_0x137f15){logger[_0x1b6b('0x58')]('['+_0x10bd40[_0x1b6b('0x69')][_0x1b6b('0x68')]()+']'+_0x1b6b('0x6a'),util[_0x1b6b('0x5a')](_0x137f15,{'showHidden':!![],'depth':null}));});};