eeec29de1b18fc5a178cbaa9a637fb620ebbae86
[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 _0x8504=['Ticket\x20created!','The\x20Ticket\x20ID\x20is:','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','trigger:browser:url','catch','error','outbound','recordingFormat','none','[OUTBOUND]','Recording\x20is\x20enabled!','uniqueid','Authorization','destcalleridname','destcalleridnum','%s/helpdesk/tickets/%d','abandoned','monitor_format','[ABANDONED]','calleridnum','request-promise','md5','util','ioredis','./util','../../../../config/environment','../../../../config/logger','freshdesk','redis','defaults','localhost','socket.io-emitter','application/json','emit','info','Creating\x20new\x20ticket...','merge','Caller\x20-\x20%s','calleridname','getString','Subjects','Descriptions','<br>','Tags','name','Fields','custom_fields','mapValues','keyBy','value','%s/api/v2/tickets','remoteUri','POST','then','format','%s/api/v2/agents','length','Agent\x20found!','find','email','Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!','%s/api/v2/agents/me','Admin\x20account\x20selected.','Searching\x20enduser\x20with\x20phone','%s/api/v2/contacts','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','Enduser\x20created.','apiKey','base64','stringify','GET','map','forEach','type','string','nameField','customField','toLowerCase','content','idField','toString','variable','customVariable','Variable','push','queue','stripTrailingSlash','serverUrl','[QUEUE]','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','The\x20User\x20ID\x20is:','The\x20Enduser\x20ID\x20is:'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x8504,0x1ea));var _0x4850=function(_0x38a162,_0x4396b2){_0x38a162=_0x38a162-0x0;var _0x1f622b=_0x8504[_0x38a162];return _0x1f622b;};'use strict';var _=require('lodash');var rp=require(_0x4850('0x0'));var md5=require(_0x4850('0x1'));var util=require(_0x4850('0x2'));var Redis=require(_0x4850('0x3'));var intUtil=require(_0x4850('0x4'));var config=require(_0x4850('0x5'));var logger=require(_0x4850('0x6'))(_0x4850('0x7'));config[_0x4850('0x8')]=_[_0x4850('0x9')](config[_0x4850('0x8')],{'host':_0x4850('0xa'),'port':0x18eb});var io=require(_0x4850('0xb'))(new Redis(config['redis']));var headers={'Content-Type':_0x4850('0xc'),'Accept':_0x4850('0xc')};function emit(_0x37ea72,_0x235fda,_0x4ba6c3){io['to'](_0x37ea72)[_0x4850('0xd')](_0x235fda,_0x4ba6c3);}function getTicket(_0x381294,_0x3b39df,_0x29cc57,_0x3ce20c,_0x3f0eca){logger[_0x4850('0xe')](_0x4850('0xf'));var _0x4d8d55=_[_0x4850('0x10')]({'responder_id':_0x3b39df['id'],'requester_id':_0x29cc57['id'],'name':util['format'](_0x4850('0x11'),_0x3f0eca[_0x4850('0x12')]),'phone':_0x3f0eca['calleridnum'],'source':0x3,'priority':0x1,'status':0x2,'subject':intUtil[_0x4850('0x13')](_0x3ce20c[_0x4850('0x14')],_0x3f0eca,'\x20'),'description':intUtil[_0x4850('0x13')](_0x3ce20c[_0x4850('0x15')],_0x3f0eca,_0x4850('0x16')),'tags':getTags(_0x3ce20c[_0x4850('0x17')],_0x4850('0x18'))},getCustomFields(_0x3ce20c[_0x4850('0x19')],_0x3f0eca));_0x4d8d55[_0x4850('0x1a')]=_[_0x4850('0x1b')](_[_0x4850('0x1c')](_0x4d8d55[_0x4850('0x1a')],'id'),_0x4850('0x1d'));return request({'uri':util['format'](_0x4850('0x1e'),_0x381294[_0x4850('0x1f')]),'method':_0x4850('0x20'),'body':_0x4d8d55})[_0x4850('0x21')](function(_0x3ad56a){logger[_0x4850('0xe')]('Ticket\x20created!');return _0x3ad56a;});}function getUser(_0x24436e,_0x1d2f0c){if(intUtil['validateEmail'](_0x1d2f0c)){return request({'uri':util[_0x4850('0x22')](_0x4850('0x23'),_0x24436e[_0x4850('0x1f')]),'qs':{'email':_0x1d2f0c}})[_0x4850('0x21')](function(_0x2e31ee){if(_0x2e31ee[_0x4850('0x24')]){logger[_0x4850('0xe')](_0x4850('0x25'));return _[_0x4850('0x26')](_0x2e31ee,function(_0x24e92d){return _0x24e92d['contact'][_0x4850('0x27')]===_0x1d2f0c;});}else{logger[_0x4850('0xe')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util['format']('%s/api/v2/agents/me',_0x24436e['remoteUri'])})[_0x4850('0x21')](function(_0x476309){logger['info']('Admin\x20account\x20selected.');return _0x476309;});}});}else{logger[_0x4850('0xe')](_0x4850('0x28'));return request({'uri':util[_0x4850('0x22')](_0x4850('0x29'),_0x24436e['remoteUri'])})[_0x4850('0x21')](function(_0x57106d){logger[_0x4850('0xe')](_0x4850('0x2a'));return _0x57106d;});}}function getEndUser(_0x3cca5a,_0x327c46,_0x575796){logger[_0x4850('0xe')](_0x4850('0x2b'),_0x575796);return request({'uri':util[_0x4850('0x22')](_0x4850('0x2c'),_0x3cca5a[_0x4850('0x1f')]),'qs':{'phone':_0x575796}})[_0x4850('0x21')](function(_0x524576){if(_0x524576['length']){logger[_0x4850('0xe')](_0x4850('0x2d'));return _['find'](_0x524576,{'phone':_0x575796});}else{logger[_0x4850('0xe')](_0x4850('0x2e'));return request({'uri':util['format'](_0x4850('0x2c'),_0x3cca5a[_0x4850('0x1f')]),'method':_0x4850('0x20'),'body':{'name':_0x327c46,'phone':_0x575796}})[_0x4850('0x21')](function(_0x1f3d21){logger[_0x4850('0xe')](_0x4850('0x2f'));return _0x1f3d21;});}});}function getAuth(_0x5bfd3e){return util[_0x4850('0x22')]('Basic\x20%s',new Buffer(_0x5bfd3e[_0x4850('0x30')]+':X')['toString'](_0x4850('0x31')));}function request(_0x1a6122){logger['debug']('[HTTP]',JSON[_0x4850('0x32')](_0x1a6122));return rp(_[_0x4850('0x9')](_0x1a6122,{'method':_0x4850('0x33'),'headers':headers,'json':!![]}));}function getTags(_0x5b6d94,_0x477cf4){var _0x10e568=[];if(_0x5b6d94&&_0x5b6d94[_0x4850('0x24')]>0x0){_0x10e568=_[_0x4850('0x34')](_0x5b6d94,_0x477cf4);}return _0x10e568;}function getCustomFields(_0x1f67d9,_0x2cfdb1){var _0x58f5fa=[];var _0x2d207b={'custom_fields':[]};if(_0x1f67d9[_0x4850('0x24')]>0x0){_[_0x4850('0x35')](_0x1f67d9,function(_0x20dce8){if(_0x20dce8[_0x4850('0x36')]===_0x4850('0x37')&&_0x20dce8[_0x4850('0x38')]&&!_0x20dce8[_0x4850('0x39')]){_0x2d207b[_0x20dce8[_0x4850('0x38')][_0x4850('0x3a')]()]=_0x20dce8[_0x4850('0x3b')]['toString']();}else if(_0x20dce8[_0x4850('0x36')]==='string'&&_0x20dce8[_0x4850('0x3c')]&&_0x20dce8[_0x4850('0x39')]){_0x2d207b[_0x4850('0x1a')]['push']({'id':_0x20dce8[_0x4850('0x3c')],'value':_0x20dce8[_0x4850('0x3b')][_0x4850('0x3d')]()});}else if(_0x20dce8[_0x4850('0x36')]===_0x4850('0x3e')&&_0x20dce8['variableName']&&_0x20dce8[_0x4850('0x3c')]&&_0x20dce8['customField']){_0x2cfdb1[_0x20dce8['variableName']]&&_0x2d207b[_0x4850('0x1a')]['push']({'id':_0x20dce8[_0x4850('0x3c')],'value':_0x2cfdb1[_0x20dce8['variableName']]['toString']()});}else if(_0x20dce8['type']===_0x4850('0x3f')&&_0x20dce8['Variable']&&_0x20dce8[_0x4850('0x40')]['name']&&_0x20dce8['idField']&&_0x20dce8[_0x4850('0x39')]){_0x2cfdb1[_0x20dce8[_0x4850('0x40')][_0x4850('0x18')][_0x4850('0x3a')]()]&&_0x2d207b[_0x4850('0x1a')][_0x4850('0x41')]({'id':_0x20dce8[_0x4850('0x3c')],'value':_0x2cfdb1[_0x20dce8[_0x4850('0x40')]['name'][_0x4850('0x3a')]()][_0x4850('0x3d')]()});}});}return _0x2d207b;}exports[_0x4850('0x42')]=function(_0x50a9fe,_0x276f29,_0x1cad86,_0x3e2576,_0x38c2a7,_0x38e4a4){var _0x5b008b,_0x27eb8b;_0x38e4a4[_0x4850('0x1f')]=intUtil[_0x4850('0x43')](_0x38e4a4['remoteUri']);_0x38e4a4[_0x4850('0x44')]=intUtil[_0x4850('0x43')](_0x38e4a4['serverUrl']);if(_0x38c2a7&&_0x38c2a7['monitor_format']){logger[_0x4850('0xe')](_0x4850('0x45'),'Recording\x20is\x20enabled!');_0x276f29[_0x4850('0x46')]=util[_0x4850('0x22')](_0x4850('0x47'),_0x38e4a4[_0x4850('0x44')],_0x276f29['uniqueid'],md5(_0x276f29['uniqueid']));}else{_0x276f29['recordingURL']='';}headers['Authorization']=getAuth(_0x38e4a4);return getUser(_0x38e4a4,_0x3e2576[_0x4850('0x27')])[_0x4850('0x21')](function(_0x56d202){_0x5b008b=_0x56d202;logger[_0x4850('0xe')](_0x4850('0x48'),_0x5b008b['id']);return getEndUser(_0x38e4a4,_0x276f29['calleridname'],_0x276f29['calleridnum']);})['then'](function(_0x28b5bb){_0x27eb8b=_0x28b5bb;logger[_0x4850('0xe')](_0x4850('0x49'),_0x27eb8b['id']);return getTicket(_0x38e4a4,_0x5b008b,_0x27eb8b,_0x1cad86,_0x276f29);})['then'](function(_0x162a25){if(_0x162a25&&_0x162a25['id']){logger[_0x4850('0xe')](_0x4850('0x4a'));logger[_0x4850('0xe')](_0x4850('0x4b'),_0x162a25['id']);logger['info']('[QUEUE]',_0x4850('0x4c'));emit(util[_0x4850('0x22')]('user:%s',_0x3e2576['name']),_0x4850('0x4d'),{'uri':util[_0x4850('0x22')]('%s/helpdesk/tickets/%d',_0x38e4a4[_0x4850('0x1f')],_0x162a25['id'])});}})[_0x4850('0x4e')](function(_0xb7e428){logger[_0x4850('0x4f')]('[QUEUE]',JSON[_0x4850('0x32')](_0xb7e428));});};exports[_0x4850('0x50')]=function(_0x5e1fab,_0x6e6b55,_0x1eeac1,_0x3df076,_0x5002b5,_0x4d0b09,_0x3dc35a){var _0x569aa7,_0x2ed6f4;_0x4d0b09[_0x4850('0x1f')]=intUtil[_0x4850('0x43')](_0x4d0b09['remoteUri']);_0x4d0b09[_0x4850('0x44')]=intUtil[_0x4850('0x43')](_0x4d0b09['serverUrl']);if(_0x3dc35a&&_0x3dc35a[_0x4850('0x51')]&&_0x3dc35a[_0x4850('0x51')]!==_0x4850('0x52')){logger['info'](_0x4850('0x53'),_0x4850('0x54'));_0x6e6b55['recordingURL']=util[_0x4850('0x22')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x4d0b09[_0x4850('0x44')],_0x6e6b55[_0x4850('0x55')],md5(_0x6e6b55[_0x4850('0x55')]));}headers[_0x4850('0x56')]=getAuth(_0x4d0b09);return getUser(_0x4d0b09,_0x3df076[_0x4850('0x27')])[_0x4850('0x21')](function(_0x5cd166){_0x569aa7=_0x5cd166;logger[_0x4850('0xe')](_0x4850('0x48'),_0x569aa7['id']);return getEndUser(_0x4d0b09,_0x6e6b55[_0x4850('0x57')],_0x6e6b55[_0x4850('0x58')]);})[_0x4850('0x21')](function(_0x2e524c){_0x2ed6f4=_0x2e524c;logger[_0x4850('0xe')]('The\x20Enduser\x20ID\x20is:',_0x2ed6f4['id']);return getTicket(_0x4d0b09,_0x569aa7,_0x2ed6f4,_0x1eeac1,_0x6e6b55);})[_0x4850('0x21')](function(_0x4ead19){if(_0x4ead19&&_0x4ead19['id']){logger[_0x4850('0xe')](_0x4850('0x4a'));logger[_0x4850('0xe')](_0x4850('0x4b'),_0x4ead19['id']);logger[_0x4850('0xe')](_0x4850('0x53'),_0x4850('0x4c'));emit(util[_0x4850('0x22')]('user:%s',_0x3df076['name']),_0x4850('0x4d'),{'uri':util[_0x4850('0x22')](_0x4850('0x59'),_0x4d0b09['remoteUri'],_0x4ead19['id'])});}})['catch'](function(_0x3f3348){logger['error'](_0x4850('0x53'),JSON[_0x4850('0x32')](_0x3f3348));});};exports[_0x4850('0x5a')]=function(_0x3f21e9,_0x4541bb,_0xc2eb73,_0x41f9c7,_0x2454b5,_0x2fe630){var _0x266904,_0x52f80e;_0x2fe630['remoteUri']=intUtil['stripTrailingSlash'](_0x2fe630[_0x4850('0x1f')]);_0x2fe630['serverUrl']=intUtil[_0x4850('0x43')](_0x2fe630[_0x4850('0x44')]);if(_0x2454b5&&_0x2454b5[_0x4850('0x5b')]){logger['info'](_0x4850('0x5c'),_0x4850('0x54'));_0x4541bb['recordingURL']=util[_0x4850('0x22')](_0x4850('0x47'),_0x2fe630[_0x4850('0x44')],_0x4541bb[_0x4850('0x55')],md5(_0x4541bb['uniqueid']));}else{_0x4541bb[_0x4850('0x46')]='';}headers[_0x4850('0x56')]=getAuth(_0x2fe630);return getUser(_0x2fe630,'')['then'](function(_0x37648e){_0x266904=_0x37648e;logger[_0x4850('0xe')](_0x4850('0x48'),_0x266904['id']);return getEndUser(_0x2fe630,_0x4541bb[_0x4850('0x12')],_0x4541bb[_0x4850('0x5d')]);})['then'](function(_0x2b74d7){_0x52f80e=_0x2b74d7;logger[_0x4850('0xe')](_0x4850('0x49'),_0x52f80e['id']);return getTicket(_0x2fe630,_0x266904,_0x52f80e,_0xc2eb73,_0x4541bb);})[_0x4850('0x21')](function(_0xe3db83){if(_0xe3db83){logger[_0x4850('0xe')](_0x4850('0x4a'));logger[_0x4850('0xe')](_0x4850('0x4b'),_0xe3db83['id']);}})[_0x4850('0x4e')](function(_0x26043e){logger['error'](_0x4850('0x5c'),JSON['stringify'](_0x26043e));});};