1323b498481ffff5de70f8a35ef8980fd58f0aa5
[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 _0xcd0c=['picklist','type','nameField','customField','content','toString','idField','custom_fields','push','variable','variableName','customVariable','Variable','toLowerCase','queue','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','Authorization','email','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','Displaying\x20ticket\x20to\x20agent...','%s/channels/voice/agents/%d/tickets/%d/display.json','newTab','/api/v2','error','Zendesk\x20account\x20type\x20not\x20recognized','catch','[QUEUE]\x20Error\x20running\x20Zendesk\x20integration','inspect','outbound','recordingFormat','none','uniqueid','The\x20User\x20ID\x20is:','destcalleridname','destcalleridnum','integrationTab','[OUTBOUND]','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','%s/agent/tickets/%s','replace','[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration','unmanaged','lastevent','toUpperCase','calleridname','\x20Error\x20running\x20Zendesk\x20integration','lodash','md5','util','ioredis','../../../../config/environment','../../../../config/logger','zendesk','defaults','redis','localhost','socket.io-emitter','emit','application/json','info','Creating\x20new\x20ticket...','format','%s/tickets.json','remoteUri','POST','merge','Tags','name','getString','Subjects','Descriptions','Fields','then','Ticket\x20created!','ticket','validateEmail','Getting\x20agent\x20with\x20email','count','Agent\x20found!','find','results','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me.json','Admin\x20account\x20selected.','user','filter','end-user','length','Enduser\x20found!','%s/users.json','Caller\x20-\x20%s','authType','password','%s:%s','token','%s/token:%s','username','base64','debug','[HTTP]','stringify','GET','map','includes','string'];(function(_0x54d2e3,_0x3fc590){var _0x26a918=function(_0x3acc69){while(--_0x3acc69){_0x54d2e3['push'](_0x54d2e3['shift']());}};_0x26a918(++_0x3fc590);}(_0xcd0c,0xab));var _0xccd0=function(_0x50a7c4,_0x582aca){_0x50a7c4=_0x50a7c4-0x0;var _0x17d784=_0xcd0c[_0x50a7c4];return _0x17d784;};'use strict';var _=require(_0xccd0('0x0'));var rp=require('request-promise');var md5=require(_0xccd0('0x1'));var util=require(_0xccd0('0x2'));var Redis=require(_0xccd0('0x3'));var intUtil=require('./util');var config=require(_0xccd0('0x4'));var logger=require(_0xccd0('0x5'))(_0xccd0('0x6'));config['redis']=_[_0xccd0('0x7')](config[_0xccd0('0x8')],{'host':_0xccd0('0x9'),'port':0x18eb});var io=require(_0xccd0('0xa'))(new Redis(config[_0xccd0('0x8')]));function emit(_0x57cc39,_0x4a25e6,_0x164e71){io['to'](_0x57cc39)[_0xccd0('0xb')](_0x4a25e6,_0x164e71);}var headers={'Content-Type':'application/json','Accept':_0xccd0('0xc')};function getTicket(_0x57dc53,_0x3337e4,_0x3e982b,_0x53bfa8,_0x3759e6){logger[_0xccd0('0xd')](_0xccd0('0xe'));return request({'uri':util[_0xccd0('0xf')](_0xccd0('0x10'),_0x57dc53[_0xccd0('0x11')]),'method':_0xccd0('0x12'),'body':{'ticket':_[_0xccd0('0x13')]({'requester_id':_0x3e982b['id'],'submitter_id':_0x3337e4?_0x3337e4['id']:undefined,'assignee_id':_0x3337e4?_0x3337e4['id']:undefined,'tags':getTags(_0x53bfa8[_0xccd0('0x14')],_0xccd0('0x15')),'subject':intUtil[_0xccd0('0x16')](_0x53bfa8[_0xccd0('0x17')],_0x3759e6,'\x20'),'description':intUtil[_0xccd0('0x16')](_0x53bfa8[_0xccd0('0x18')],_0x3759e6,'\x0a'),'comment':{'public':![],'body':intUtil[_0xccd0('0x16')](_0x53bfa8['Descriptions'],_0x3759e6,'\x0a')}},getCustomFields(_0x53bfa8[_0xccd0('0x19')],_0x3759e6))}})[_0xccd0('0x1a')](function(_0x452bf2){logger['info'](_0xccd0('0x1b'));return _0x452bf2[_0xccd0('0x1c')];});}function getUser(_0x1584eb,_0xc2c139){if(intUtil[_0xccd0('0x1d')](_0xc2c139)){logger[_0xccd0('0xd')](_0xccd0('0x1e'),_0xc2c139);return request({'uri':util[_0xccd0('0xf')]('%s/search.json',_0x1584eb[_0xccd0('0x11')]),'qs':{'query':util['format']('type:user\x20role:agent\x20email:%s',_0xc2c139)}})[_0xccd0('0x1a')](function(_0x1b2f52){if(_0x1b2f52[_0xccd0('0x1f')]){logger['info'](_0xccd0('0x20'));return _[_0xccd0('0x21')](_0x1b2f52[_0xccd0('0x22')],{'email':_0xc2c139,'role':'agent'});}else{logger[_0xccd0('0xd')](_0xccd0('0x23'));return request({'uri':util[_0xccd0('0xf')](_0xccd0('0x24'),_0x1584eb[_0xccd0('0x11')])})[_0xccd0('0x1a')](function(_0x293044){logger[_0xccd0('0xd')](_0xccd0('0x25'));return _0x293044[_0xccd0('0x26')];});}});}else{logger[_0xccd0('0xd')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util['format'](_0xccd0('0x24'),_0x1584eb['remoteUri'])})['then'](function(_0x2eea7c){logger[_0xccd0('0xd')]('Admin\x20account\x20selected.');return _0x2eea7c[_0xccd0('0x26')];});}}function getEndUser(_0x437e5b,_0x1dd424,_0x23da39){logger[_0xccd0('0xd')]('Searching\x20enduser\x20with\x20phone',_0x23da39);return request({'uri':util[_0xccd0('0xf')]('%s/search.json',_0x437e5b[_0xccd0('0x11')]),'qs':{'query':util[_0xccd0('0xf')]('type:user\x20role:end-user\x20phone:%s',_0x23da39)}})[_0xccd0('0x1a')](function(_0xfe7288){var _0x503a7e;if(_0xfe7288[_0xccd0('0x22')]['length']){_0xfe7288[_0xccd0('0x22')]=_[_0xccd0('0x27')](_0xfe7288[_0xccd0('0x22')],{'suspended':![],'role':_0xccd0('0x28')});if(_0xfe7288[_0xccd0('0x22')][_0xccd0('0x29')]){_0x503a7e=_['first'](_0xfe7288[_0xccd0('0x22')]);}}if(_0x503a7e){logger[_0xccd0('0xd')](_0xccd0('0x2a'));return _0x503a7e;}else{logger[_0xccd0('0xd')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'uri':util[_0xccd0('0xf')](_0xccd0('0x2b'),_0x437e5b['remoteUri']),'method':'POST','body':{'user':{'role':'end-user','name':util['format'](_0xccd0('0x2c'),_0x1dd424||_0x23da39),'phone':_0x23da39}}})[_0xccd0('0x1a')](function(_0x42343d){logger[_0xccd0('0xd')]('Enduser\x20created.');return _0x42343d['user'];});}});}function getAuth(_0x3f9d35){var _0x420f36;if(_0x3f9d35[_0xccd0('0x2d')]===_0xccd0('0x2e')){_0x420f36=util['format'](_0xccd0('0x2f'),_0x3f9d35['username'],_0x3f9d35[_0xccd0('0x2e')]);}else if(_0x3f9d35['authType']===_0xccd0('0x30')){_0x420f36=util[_0xccd0('0xf')](_0xccd0('0x31'),_0x3f9d35[_0xccd0('0x32')],_0x3f9d35[_0xccd0('0x30')]);}return util[_0xccd0('0xf')]('Basic\x20%s',new Buffer(_0x420f36)['toString'](_0xccd0('0x33')));}function request(_0x50a6f7){logger[_0xccd0('0x34')](_0xccd0('0x35'),JSON[_0xccd0('0x36')](_0x50a6f7));return rp(_[_0xccd0('0x7')](_0x50a6f7,{'method':_0xccd0('0x37'),'headers':headers,'json':!![]}));}function getTags(_0x745aa2,_0x23ced8){var _0x28ac2e=[];if(_0x745aa2&&_0x745aa2[_0xccd0('0x29')]>0x0){_0x28ac2e=_[_0xccd0('0x38')](_0x745aa2,_0x23ced8);}return _0x28ac2e;}function getCustomFields(_0x2b9784,_0x27d6cf){var _0x1e3d15=[];var _0x87eeb4={'custom_fields':[]};if(_0x2b9784[_0xccd0('0x29')]>0x0){_['forEach'](_0x2b9784,function(_0x3ce278){if(_[_0xccd0('0x39')]([_0xccd0('0x3a'),_0xccd0('0x3b')],_0x3ce278[_0xccd0('0x3c')])&&_0x3ce278[_0xccd0('0x3d')]&&!_0x3ce278[_0xccd0('0x3e')]){_0x87eeb4[_0x3ce278[_0xccd0('0x3d')]['toLowerCase']()]=_0x3ce278[_0xccd0('0x3f')][_0xccd0('0x40')]();}else if(_[_0xccd0('0x39')]([_0xccd0('0x3a'),_0xccd0('0x3b')],_0x3ce278[_0xccd0('0x3c')])&&_0x3ce278[_0xccd0('0x41')]&&_0x3ce278[_0xccd0('0x3e')]){_0x87eeb4[_0xccd0('0x42')][_0xccd0('0x43')]({'id':_0x3ce278[_0xccd0('0x41')],'value':_0x3ce278[_0xccd0('0x3f')][_0xccd0('0x40')]()});}else if(_0x3ce278[_0xccd0('0x3c')]===_0xccd0('0x44')&&_0x3ce278[_0xccd0('0x45')]&&_0x3ce278['idField']&&_0x3ce278[_0xccd0('0x3e')]){_0x27d6cf[_0x3ce278['variableName']]&&_0x87eeb4[_0xccd0('0x42')]['push']({'id':_0x3ce278[_0xccd0('0x41')],'value':_0x27d6cf[_0x3ce278[_0xccd0('0x45')]][_0xccd0('0x40')]()});}else if(_0x3ce278[_0xccd0('0x3c')]===_0xccd0('0x46')&&_0x3ce278[_0xccd0('0x47')]&&_0x3ce278[_0xccd0('0x47')][_0xccd0('0x15')]&&_0x3ce278[_0xccd0('0x41')]&&_0x3ce278[_0xccd0('0x3e')]){_0x27d6cf[_0x3ce278[_0xccd0('0x47')][_0xccd0('0x15')][_0xccd0('0x48')]()]&&_0x87eeb4[_0xccd0('0x42')][_0xccd0('0x43')]({'id':_0x3ce278[_0xccd0('0x41')],'value':_0x27d6cf[_0x3ce278[_0xccd0('0x47')][_0xccd0('0x15')]['toLowerCase']()][_0xccd0('0x40')]()});}});}return _0x87eeb4;}exports[_0xccd0('0x49')]=function(_0x463813,_0x436729,_0xf9f44c,_0x41d05e,_0x5d6ea5,_0x46fccb){var _0x2f4ea5,_0x1869df;_0x46fccb[_0xccd0('0x11')]=intUtil[_0xccd0('0x4a')](_0x46fccb[_0xccd0('0x11')]);_0x46fccb[_0xccd0('0x4b')]=intUtil[_0xccd0('0x4a')](_0x46fccb['serverUrl']);if(_0x5d6ea5&&_0x5d6ea5[_0xccd0('0x4c')]){logger[_0xccd0('0xd')](_0xccd0('0x4d'),_0xccd0('0x4e'));_0x436729[_0xccd0('0x4f')]=util[_0xccd0('0xf')](_0xccd0('0x50'),_0x46fccb[_0xccd0('0x4b')],_0x436729['uniqueid'],md5(_0x436729['uniqueid']));}else{_0x436729[_0xccd0('0x4f')]='';}headers[_0xccd0('0x51')]=getAuth(_0x46fccb);return getUser(_0x46fccb,_0x41d05e[_0xccd0('0x52')])[_0xccd0('0x1a')](function(_0x45d72d){_0x2f4ea5=_0x45d72d;logger[_0xccd0('0xd')]('The\x20User\x20ID\x20is:',_0x2f4ea5['id']);return getEndUser(_0x46fccb,_0x436729['calleridname'],_0x436729[_0xccd0('0x53')]);})['then'](function(_0x545199){_0x1869df=_0x545199;logger[_0xccd0('0xd')](_0xccd0('0x54'),_0x1869df['id']);return getTicket(_0x46fccb,_0x2f4ea5,_0x1869df,_0xf9f44c,_0x436729);})[_0xccd0('0x1a')](function(_0x2ae788){if(_0x2ae788){logger[_0xccd0('0xd')](_0xccd0('0x55'),_0x2ae788['id']);switch(_0x46fccb['type']){case'integrationTab':logger[_0xccd0('0xd')](_0xccd0('0x4d'),_0xccd0('0x56'));return request({'uri':util[_0xccd0('0xf')](_0xccd0('0x57'),_0x46fccb['remoteUri'],_0x2f4ea5['id'],_0x2ae788['id']),'method':_0xccd0('0x12')});case _0xccd0('0x58'):logger[_0xccd0('0xd')]('[QUEUE]','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0xccd0('0xf')]('user:%s',_0x41d05e[_0xccd0('0x15')]),'trigger:browser:url',{'uri':util[_0xccd0('0xf')]('%s/agent/tickets/%s',_0x46fccb[_0xccd0('0x11')]['replace'](_0xccd0('0x59'),''),_0x2ae788['id'])});break;default:logger[_0xccd0('0x5a')](_0xccd0('0x4d'),_0xccd0('0x5b'));}}})[_0xccd0('0x5c')](function(_0x3d5567){logger[_0xccd0('0x5a')](_0xccd0('0x5d'),util[_0xccd0('0x5e')](_0x3d5567,{'showHidden':!![],'depth':null}));});};exports[_0xccd0('0x5f')]=function(_0x17f6f7,_0x43a71a,_0x31d289,_0x4fe43b,_0xdad6bf,_0x2b218e,_0x4d28ac){var _0x1db817,_0x4402b8;_0x2b218e[_0xccd0('0x11')]=intUtil[_0xccd0('0x4a')](_0x2b218e[_0xccd0('0x11')]);_0x2b218e[_0xccd0('0x4b')]=intUtil[_0xccd0('0x4a')](_0x2b218e['serverUrl']);if(_0x4d28ac&&_0x4d28ac[_0xccd0('0x60')]&&_0x4d28ac[_0xccd0('0x60')]!==_0xccd0('0x61')){logger[_0xccd0('0xd')]('[OUTBOUND]',_0xccd0('0x4e'));_0x43a71a[_0xccd0('0x4f')]=util['format'](_0xccd0('0x50'),_0x2b218e['serverUrl'],_0x43a71a[_0xccd0('0x62')],md5(_0x43a71a['uniqueid']));}headers[_0xccd0('0x51')]=getAuth(_0x2b218e);return getUser(_0x2b218e,_0x4fe43b[_0xccd0('0x52')])['then'](function(_0x5b4255){_0x1db817=_0x5b4255;logger[_0xccd0('0xd')](_0xccd0('0x63'),_0x1db817['id']);return getEndUser(_0x2b218e,_0x43a71a[_0xccd0('0x64')],_0x43a71a[_0xccd0('0x65')]);})[_0xccd0('0x1a')](function(_0x1272ec){_0x4402b8=_0x1272ec;logger['info']('The\x20Enduser\x20ID\x20is:',_0x4402b8['id']);return getTicket(_0x2b218e,_0x1db817,_0x4402b8,_0x31d289,_0x43a71a);})['then'](function(_0x2bb23b){if(_0x2bb23b){logger[_0xccd0('0xd')](_0xccd0('0x55'),_0x2bb23b['id']);switch(_0x2b218e[_0xccd0('0x3c')]){case _0xccd0('0x66'):logger[_0xccd0('0xd')](_0xccd0('0x67'),'Displaying\x20ticket\x20to\x20agent...');return request({'uri':util[_0xccd0('0xf')](_0xccd0('0x57'),_0x2b218e[_0xccd0('0x11')],_0x1db817['id'],_0x2bb23b['id']),'method':_0xccd0('0x12')});case'newTab':logger[_0xccd0('0xd')](_0xccd0('0x67'),_0xccd0('0x68'));emit(util['format'](_0xccd0('0x69'),_0x4fe43b['name']),_0xccd0('0x6a'),{'uri':util[_0xccd0('0xf')](_0xccd0('0x6b'),_0x2b218e[_0xccd0('0x11')][_0xccd0('0x6c')](_0xccd0('0x59'),''),_0x2bb23b['id'])});break;default:logger['error'](_0xccd0('0x67'),_0xccd0('0x5b'));}}})[_0xccd0('0x5c')](function(_0x1b0f7d){logger['error'](_0xccd0('0x6d'),util[_0xccd0('0x5e')](_0x1b0f7d,{'showHidden':!![],'depth':null}));});};exports[_0xccd0('0x6e')]=function(_0x67cecd,_0x1216b0,_0x3d759b,_0x323cf4,_0x2ea982,_0x50bda7){var _0xea6a1f,_0xf4326f;_0x50bda7[_0xccd0('0x11')]=intUtil[_0xccd0('0x4a')](_0x50bda7['remoteUri']);_0x50bda7[_0xccd0('0x4b')]=intUtil[_0xccd0('0x4a')](_0x50bda7[_0xccd0('0x4b')]);if(_0x2ea982&&_0x2ea982['monitor_format']){logger[_0xccd0('0xd')]('['+_0x1216b0[_0xccd0('0x6f')][_0xccd0('0x70')]()+']',_0xccd0('0x4e'));_0x1216b0['recordingURL']=util[_0xccd0('0xf')](_0xccd0('0x50'),_0x50bda7['serverUrl'],_0x1216b0['uniqueid'],md5(_0x1216b0[_0xccd0('0x62')]));}else{_0x1216b0[_0xccd0('0x4f')]='';}headers[_0xccd0('0x51')]=getAuth(_0x50bda7);return getUser(_0x50bda7)[_0xccd0('0x1a')](function(_0xa2372f){_0xea6a1f=_0xa2372f;logger[_0xccd0('0xd')]('The\x20User\x20ID\x20is:',_0xea6a1f['id']);return getEndUser(_0x50bda7,_0x1216b0[_0xccd0('0x71')],_0x1216b0[_0xccd0('0x53')]);})[_0xccd0('0x1a')](function(_0x225993){_0xf4326f=_0x225993;logger[_0xccd0('0xd')](_0xccd0('0x54'),_0xf4326f['id']);return getTicket(_0x50bda7,_0xea6a1f,_0xf4326f,_0x3d759b,_0x1216b0);})[_0xccd0('0x1a')](function(_0x59b09b){if(_0x59b09b){logger[_0xccd0('0xd')](_0xccd0('0x55'),_0x59b09b['id']);}})[_0xccd0('0x5c')](function(_0x344eb2){logger[_0xccd0('0x5a')]('['+_0x1216b0[_0xccd0('0x6f')][_0xccd0('0x70')]()+']'+_0xccd0('0x72'),util['inspect'](_0x344eb2,{'showHidden':!![],'depth':null}));});};