98ea039abeba93a157bb3db8c992ad749ab09807
[motion2.git] / server / services / ami / trigger / integration / freshdesk.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 _0x2d72=['type','nameField','customField','toLowerCase','content','includes','idField','variable','push','variableName','customVariable','Variable','name','queue','stripTrailingSlash','serverUrl','monitor_format','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Authorization','email','The\x20User\x20ID\x20is:','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','[QUEUE]','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','%s/helpdesk/tickets/%d','catch','error','outbound','recordingFormat','none','[OUTBOUND]','destcalleridnum','trigger:browser:url','unmanaged','lastevent','toUpperCase','lodash','request-promise','util','ioredis','./util','../../../../config/environment','../../../../config/logger','freshdesk','redis','application/json','emit','info','Creating\x20new\x20ticket...','merge','format','calleridname','calleridnum','Subjects','Descriptions','Fields','custom_fields','POST','then','Ticket\x20created!','validateEmail','%s/api/v2/agents','length','Agent\x20found!','find','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','remoteUri','Admin\x20account\x20selected.','Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!','Searching\x20enduser\x20with\x20phone','%s/api/v2/contacts','Enduser\x20found!','Enduser\x20created.','Basic\x20%s','toString','base64','debug','[HTTP]','stringify','defaults','map','string','picklist'];(function(_0x2b84f7,_0x3eeb07){var _0x18f7f1=function(_0x165d2a){while(--_0x165d2a){_0x2b84f7['push'](_0x2b84f7['shift']());}};_0x18f7f1(++_0x3eeb07);}(_0x2d72,0x81));var _0x22d7=function(_0x2f86b4,_0x31aa14){_0x2f86b4=_0x2f86b4-0x0;var _0x1c35dd=_0x2d72[_0x2f86b4];return _0x1c35dd;};'use strict';var _=require(_0x22d7('0x0'));var rp=require(_0x22d7('0x1'));var md5=require('md5');var util=require(_0x22d7('0x2'));var Redis=require(_0x22d7('0x3'));var intUtil=require(_0x22d7('0x4'));var config=require(_0x22d7('0x5'));var logger=require(_0x22d7('0x6'))(_0x22d7('0x7'));config[_0x22d7('0x8')]=_['defaults'](config[_0x22d7('0x8')],{'host':'localhost','port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x22d7('0x8')]));var headers={'Content-Type':_0x22d7('0x9'),'Accept':_0x22d7('0x9')};function emit(_0x31c234,_0x2e0e9f,_0x343a01){io['to'](_0x31c234)[_0x22d7('0xa')](_0x2e0e9f,_0x343a01);}function getTicket(_0x149dd8,_0x2147c6,_0x451a9c,_0x1395b4,_0x203161){logger[_0x22d7('0xb')](_0x22d7('0xc'));var _0x7e8b54=_[_0x22d7('0xd')]({'responder_id':_0x2147c6['id'],'requester_id':_0x451a9c['id'],'name':util[_0x22d7('0xe')]('Caller\x20-\x20%s',_0x203161[_0x22d7('0xf')]),'phone':_0x203161[_0x22d7('0x10')],'source':0x3,'priority':0x1,'status':0x2,'subject':intUtil['getString'](_0x1395b4[_0x22d7('0x11')],_0x203161,'\x20'),'description':intUtil['getString'](_0x1395b4[_0x22d7('0x12')],_0x203161,'<br>'),'tags':getTags(_0x1395b4['Tags'],'name')},getCustomFields(_0x1395b4[_0x22d7('0x13')],_0x203161));_0x7e8b54['custom_fields']=_['mapValues'](_['keyBy'](_0x7e8b54[_0x22d7('0x14')],'id'),'value');return request({'uri':util[_0x22d7('0xe')]('%s/api/v2/tickets',_0x149dd8['remoteUri']),'method':_0x22d7('0x15'),'body':_0x7e8b54})[_0x22d7('0x16')](function(_0xb0ed6a){logger['info'](_0x22d7('0x17'));return _0xb0ed6a;});}function getUser(_0x45aa01,_0x1aafc3){if(intUtil[_0x22d7('0x18')](_0x1aafc3)){return request({'uri':util['format'](_0x22d7('0x19'),_0x45aa01['remoteUri']),'qs':{'email':_0x1aafc3}})[_0x22d7('0x16')](function(_0x5ac319){if(_0x5ac319[_0x22d7('0x1a')]){logger[_0x22d7('0xb')](_0x22d7('0x1b'));return _[_0x22d7('0x1c')](_0x5ac319,function(_0x39b16a){return _0x39b16a['contact']['email']===_0x1aafc3;});}else{logger[_0x22d7('0xb')](_0x22d7('0x1d'));return request({'uri':util['format']('%s/api/v2/agents/me',_0x45aa01[_0x22d7('0x1e')])})[_0x22d7('0x16')](function(_0x47ef65){logger[_0x22d7('0xb')](_0x22d7('0x1f'));return _0x47ef65;});}});}else{logger[_0x22d7('0xb')](_0x22d7('0x20'));return request({'uri':util[_0x22d7('0xe')]('%s/api/v2/agents/me',_0x45aa01[_0x22d7('0x1e')])})[_0x22d7('0x16')](function(_0x534036){logger[_0x22d7('0xb')]('Admin\x20account\x20selected.');return _0x534036;});}}function getEndUser(_0x56ae80,_0x391181,_0x531ae0){logger[_0x22d7('0xb')](_0x22d7('0x21'),_0x531ae0);return request({'uri':util[_0x22d7('0xe')](_0x22d7('0x22'),_0x56ae80[_0x22d7('0x1e')]),'qs':{'phone':_0x531ae0}})[_0x22d7('0x16')](function(_0x1514a9){if(_0x1514a9[_0x22d7('0x1a')]){logger[_0x22d7('0xb')](_0x22d7('0x23'));return _[_0x22d7('0x1c')](_0x1514a9,{'phone':_0x531ae0});}else{logger['info']('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'uri':util[_0x22d7('0xe')](_0x22d7('0x22'),_0x56ae80[_0x22d7('0x1e')]),'method':_0x22d7('0x15'),'body':{'name':_0x391181,'phone':_0x531ae0}})[_0x22d7('0x16')](function(_0x2a7fc0){logger[_0x22d7('0xb')](_0x22d7('0x24'));return _0x2a7fc0;});}});}function getAuth(_0x4a7b54){return util[_0x22d7('0xe')](_0x22d7('0x25'),new Buffer(_0x4a7b54['apiKey']+':X')[_0x22d7('0x26')](_0x22d7('0x27')));}function request(_0x166b4d){logger[_0x22d7('0x28')](_0x22d7('0x29'),JSON[_0x22d7('0x2a')](_0x166b4d));return rp(_[_0x22d7('0x2b')](_0x166b4d,{'method':'GET','headers':headers,'json':!![]}));}function getTags(_0x587730,_0x141d10){var _0x4def53=[];if(_0x587730&&_0x587730[_0x22d7('0x1a')]>0x0){_0x4def53=_[_0x22d7('0x2c')](_0x587730,_0x141d10);}return _0x4def53;}function getCustomFields(_0xae1039,_0x19a220){var _0x3e0730=[];var _0x32402d={'custom_fields':[]};if(_0xae1039['length']>0x0){_['forEach'](_0xae1039,function(_0x5e8028){if(_['includes']([_0x22d7('0x2d'),_0x22d7('0x2e')],_0x5e8028[_0x22d7('0x2f')])&&_0x5e8028[_0x22d7('0x30')]&&!_0x5e8028[_0x22d7('0x31')]){_0x32402d[_0x5e8028['nameField'][_0x22d7('0x32')]()]=_0x5e8028[_0x22d7('0x33')][_0x22d7('0x26')]();}else if(_[_0x22d7('0x34')]([_0x22d7('0x2d'),_0x22d7('0x2e')],_0x5e8028[_0x22d7('0x2f')])&&_0x5e8028['idField']&&_0x5e8028[_0x22d7('0x31')]){_0x32402d['custom_fields']['push']({'id':_0x5e8028[_0x22d7('0x35')],'value':_0x5e8028[_0x22d7('0x33')][_0x22d7('0x26')]()});}else if(_0x5e8028['type']===_0x22d7('0x36')&&_0x5e8028['variableName']&&_0x5e8028[_0x22d7('0x35')]&&_0x5e8028[_0x22d7('0x31')]){_0x19a220[_0x5e8028['variableName']]&&_0x32402d[_0x22d7('0x14')][_0x22d7('0x37')]({'id':_0x5e8028[_0x22d7('0x35')],'value':_0x19a220[_0x5e8028[_0x22d7('0x38')]]['toString']()});}else if(_0x5e8028[_0x22d7('0x2f')]===_0x22d7('0x39')&&_0x5e8028[_0x22d7('0x3a')]&&_0x5e8028[_0x22d7('0x3a')][_0x22d7('0x3b')]&&_0x5e8028['idField']&&_0x5e8028[_0x22d7('0x31')]){_0x19a220[_0x5e8028[_0x22d7('0x3a')][_0x22d7('0x3b')][_0x22d7('0x32')]()]&&_0x32402d['custom_fields'][_0x22d7('0x37')]({'id':_0x5e8028['idField'],'value':_0x19a220[_0x5e8028[_0x22d7('0x3a')]['name'][_0x22d7('0x32')]()][_0x22d7('0x26')]()});}});}return _0x32402d;}exports[_0x22d7('0x3c')]=function(_0x236d27,_0x1c7921,_0x444cd4,_0x14e87a,_0x4792de,_0x11eb50){var _0x108472,_0x236276;_0x11eb50['remoteUri']=intUtil[_0x22d7('0x3d')](_0x11eb50[_0x22d7('0x1e')]);_0x11eb50['serverUrl']=intUtil['stripTrailingSlash'](_0x11eb50[_0x22d7('0x3e')]);if(_0x4792de&&_0x4792de[_0x22d7('0x3f')]){logger[_0x22d7('0xb')]('[QUEUE]',_0x22d7('0x40'));_0x1c7921[_0x22d7('0x41')]=util[_0x22d7('0xe')](_0x22d7('0x42'),_0x11eb50[_0x22d7('0x3e')],_0x1c7921[_0x22d7('0x43')],md5(_0x1c7921[_0x22d7('0x43')]));}else{_0x1c7921[_0x22d7('0x41')]='';}headers[_0x22d7('0x44')]=getAuth(_0x11eb50);return getUser(_0x11eb50,_0x14e87a[_0x22d7('0x45')])[_0x22d7('0x16')](function(_0x2d3ab1){_0x108472=_0x2d3ab1;logger['info'](_0x22d7('0x46'),_0x108472['id']);return getEndUser(_0x11eb50,_0x1c7921[_0x22d7('0xf')],_0x1c7921[_0x22d7('0x10')]);})['then'](function(_0x563f10){_0x236276=_0x563f10;logger[_0x22d7('0xb')](_0x22d7('0x47'),_0x236276['id']);return getTicket(_0x11eb50,_0x108472,_0x236276,_0x444cd4,_0x1c7921);})['then'](function(_0x3d8cc2){if(_0x3d8cc2&&_0x3d8cc2['id']){logger['info'](_0x22d7('0x17'));logger[_0x22d7('0xb')](_0x22d7('0x48'),_0x3d8cc2['id']);logger[_0x22d7('0xb')](_0x22d7('0x49'),_0x22d7('0x4a'));emit(util['format'](_0x22d7('0x4b'),_0x14e87a[_0x22d7('0x3b')]),'trigger:browser:url',{'uri':util['format'](_0x22d7('0x4c'),_0x11eb50[_0x22d7('0x1e')],_0x3d8cc2['id'])});}})[_0x22d7('0x4d')](function(_0x4ada19){logger[_0x22d7('0x4e')]('[QUEUE]',JSON[_0x22d7('0x2a')](_0x4ada19));});};exports[_0x22d7('0x4f')]=function(_0x5337ed,_0x5bcf51,_0x32e71a,_0x4e32a1,_0x10ab55,_0x326b6e,_0x1d266d){var _0x1a3a12,_0x33e7d4;_0x326b6e[_0x22d7('0x1e')]=intUtil[_0x22d7('0x3d')](_0x326b6e[_0x22d7('0x1e')]);_0x326b6e[_0x22d7('0x3e')]=intUtil[_0x22d7('0x3d')](_0x326b6e[_0x22d7('0x3e')]);if(_0x1d266d&&_0x1d266d['recordingFormat']&&_0x1d266d[_0x22d7('0x50')]!==_0x22d7('0x51')){logger['info'](_0x22d7('0x52'),_0x22d7('0x40'));_0x5bcf51[_0x22d7('0x41')]=util[_0x22d7('0xe')](_0x22d7('0x42'),_0x326b6e['serverUrl'],_0x5bcf51[_0x22d7('0x43')],md5(_0x5bcf51[_0x22d7('0x43')]));}headers[_0x22d7('0x44')]=getAuth(_0x326b6e);return getUser(_0x326b6e,_0x4e32a1['email'])[_0x22d7('0x16')](function(_0x1d722f){_0x1a3a12=_0x1d722f;logger[_0x22d7('0xb')]('The\x20User\x20ID\x20is:',_0x1a3a12['id']);return getEndUser(_0x326b6e,_0x5bcf51['destcalleridname'],_0x5bcf51[_0x22d7('0x53')]);})[_0x22d7('0x16')](function(_0x16a6b2){_0x33e7d4=_0x16a6b2;logger[_0x22d7('0xb')](_0x22d7('0x47'),_0x33e7d4['id']);return getTicket(_0x326b6e,_0x1a3a12,_0x33e7d4,_0x32e71a,_0x5bcf51);})['then'](function(_0x12b9a9){if(_0x12b9a9&&_0x12b9a9['id']){logger[_0x22d7('0xb')](_0x22d7('0x17'));logger[_0x22d7('0xb')]('The\x20Ticket\x20ID\x20is:',_0x12b9a9['id']);logger[_0x22d7('0xb')](_0x22d7('0x52'),_0x22d7('0x4a'));emit(util['format'](_0x22d7('0x4b'),_0x4e32a1['name']),_0x22d7('0x54'),{'uri':util[_0x22d7('0xe')]('%s/helpdesk/tickets/%d',_0x326b6e['remoteUri'],_0x12b9a9['id'])});}})[_0x22d7('0x4d')](function(_0x1ba885){logger[_0x22d7('0x4e')](_0x22d7('0x52'),JSON[_0x22d7('0x2a')](_0x1ba885));});};exports[_0x22d7('0x55')]=function(_0x2913be,_0x54cf5e,_0x1a59dd,_0xe0dd24,_0x398ced,_0x2fce16){var _0x25aa0f,_0x229308;_0x2fce16[_0x22d7('0x1e')]=intUtil[_0x22d7('0x3d')](_0x2fce16['remoteUri']);_0x2fce16[_0x22d7('0x3e')]=intUtil[_0x22d7('0x3d')](_0x2fce16[_0x22d7('0x3e')]);if(_0x398ced&&_0x398ced[_0x22d7('0x3f')]){logger[_0x22d7('0xb')]('['+_0x54cf5e[_0x22d7('0x56')][_0x22d7('0x57')]()+']',_0x22d7('0x40'));_0x54cf5e[_0x22d7('0x41')]=util[_0x22d7('0xe')](_0x22d7('0x42'),_0x2fce16['serverUrl'],_0x54cf5e[_0x22d7('0x43')],md5(_0x54cf5e[_0x22d7('0x43')]));}else{_0x54cf5e[_0x22d7('0x41')]='';}headers[_0x22d7('0x44')]=getAuth(_0x2fce16);return getUser(_0x2fce16,'')[_0x22d7('0x16')](function(_0x13d7e9){_0x25aa0f=_0x13d7e9;logger['info'](_0x22d7('0x46'),_0x25aa0f['id']);return getEndUser(_0x2fce16,_0x54cf5e[_0x22d7('0xf')],_0x54cf5e[_0x22d7('0x10')]);})[_0x22d7('0x16')](function(_0x25e8b1){_0x229308=_0x25e8b1;logger[_0x22d7('0xb')]('The\x20Enduser\x20ID\x20is:',_0x229308['id']);return getTicket(_0x2fce16,_0x25aa0f,_0x229308,_0x1a59dd,_0x54cf5e);})[_0x22d7('0x16')](function(_0x34e002){if(_0x34e002){logger[_0x22d7('0xb')]('Ticket\x20created!');logger['info']('The\x20Ticket\x20ID\x20is:',_0x34e002['id']);}})[_0x22d7('0x4d')](function(_0x2ee6c3){logger[_0x22d7('0x4e')]('['+_0x54cf5e['lastevent']['toUpperCase']()+']',JSON['stringify'](_0x2ee6c3));});};