44c6712a2826eb874b0e36b46a4bc021875f34fc
[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 _0xfea7=['POST','validateEmail','then','length','contact','email','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/api/v2/agents/me','Admin\x20account\x20selected.','Searching\x20enduser\x20with\x20phone','%s/api/v2/contacts','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','Enduser\x20created.','Basic\x20%s','apiKey','base64','[HTTP]','stringify','defaults','GET','map','includes','string','picklist','type','nameField','customField','toLowerCase','toString','idField','push','content','variable','variableName','Variable','queue','serverUrl','stripTrailingSlash','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Authorization','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','Ticket\x20created!','The\x20Ticket\x20ID\x20is:','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','catch','outbound','recordingFormat','none','[OUTBOUND]','destcalleridname','destcalleridnum','error','unmanaged','lastevent','toUpperCase','lodash','request-promise','md5','util','ioredis','./util','../../../../config/environment','../../../../config/logger','freshdesk','redis','localhost','socket.io-emitter','application/json','emit','info','Creating\x20new\x20ticket...','merge','format','Caller\x20-\x20%s','getString','Subjects','Tags','name','custom_fields','mapValues','value','%s/api/v2/tickets','remoteUri'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xfea7,0x1b5));var _0x7fea=function(_0x5b7e27,_0x36fb5a){_0x5b7e27=_0x5b7e27-0x0;var _0xbfe91f=_0xfea7[_0x5b7e27];return _0xbfe91f;};'use strict';var _=require(_0x7fea('0x0'));var rp=require(_0x7fea('0x1'));var md5=require(_0x7fea('0x2'));var util=require(_0x7fea('0x3'));var Redis=require(_0x7fea('0x4'));var intUtil=require(_0x7fea('0x5'));var config=require(_0x7fea('0x6'));var logger=require(_0x7fea('0x7'))(_0x7fea('0x8'));config[_0x7fea('0x9')]=_['defaults'](config['redis'],{'host':_0x7fea('0xa'),'port':0x18eb});var io=require(_0x7fea('0xb'))(new Redis(config[_0x7fea('0x9')]));var headers={'Content-Type':_0x7fea('0xc'),'Accept':'application/json'};function emit(_0x2e5ac4,_0x17149c,_0x448abc){io['to'](_0x2e5ac4)[_0x7fea('0xd')](_0x17149c,_0x448abc);}function getTicket(_0x478dac,_0x2934fc,_0x589b04,_0x596124,_0x54e582){logger[_0x7fea('0xe')](_0x7fea('0xf'));var _0x4d17df=_[_0x7fea('0x10')]({'responder_id':_0x2934fc['id'],'requester_id':_0x589b04['id'],'name':util[_0x7fea('0x11')](_0x7fea('0x12'),_0x54e582['calleridname']),'phone':_0x54e582['calleridnum'],'source':0x3,'priority':0x1,'status':0x2,'subject':intUtil[_0x7fea('0x13')](_0x596124[_0x7fea('0x14')],_0x54e582,'\x20'),'description':intUtil['getString'](_0x596124['Descriptions'],_0x54e582,'<br>'),'tags':getTags(_0x596124[_0x7fea('0x15')],_0x7fea('0x16'))},getCustomFields(_0x596124['Fields'],_0x54e582));_0x4d17df[_0x7fea('0x17')]=_[_0x7fea('0x18')](_['keyBy'](_0x4d17df['custom_fields'],'id'),_0x7fea('0x19'));return request({'uri':util[_0x7fea('0x11')](_0x7fea('0x1a'),_0x478dac[_0x7fea('0x1b')]),'method':_0x7fea('0x1c'),'body':_0x4d17df})['then'](function(_0x4017a6){logger[_0x7fea('0xe')]('Ticket\x20created!');return _0x4017a6;});}function getUser(_0x4eecaf,_0x1807c0){if(intUtil[_0x7fea('0x1d')](_0x1807c0)){return request({'uri':util[_0x7fea('0x11')]('%s/api/v2/agents',_0x4eecaf[_0x7fea('0x1b')]),'qs':{'email':_0x1807c0}})[_0x7fea('0x1e')](function(_0x408c3d){if(_0x408c3d[_0x7fea('0x1f')]){logger[_0x7fea('0xe')]('Agent\x20found!');return _['find'](_0x408c3d,function(_0x4a2a28){return _0x4a2a28[_0x7fea('0x20')][_0x7fea('0x21')]===_0x1807c0;});}else{logger['info'](_0x7fea('0x22'));return request({'uri':util[_0x7fea('0x11')](_0x7fea('0x23'),_0x4eecaf[_0x7fea('0x1b')])})[_0x7fea('0x1e')](function(_0x3d7ffc){logger['info'](_0x7fea('0x24'));return _0x3d7ffc;});}});}else{logger['info']('Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0x7fea('0x11')](_0x7fea('0x23'),_0x4eecaf[_0x7fea('0x1b')])})[_0x7fea('0x1e')](function(_0x59365a){logger['info']('Admin\x20account\x20selected.');return _0x59365a;});}}function getEndUser(_0x2432a3,_0x270beb,_0x4b837e){logger[_0x7fea('0xe')](_0x7fea('0x25'),_0x4b837e);return request({'uri':util[_0x7fea('0x11')](_0x7fea('0x26'),_0x2432a3[_0x7fea('0x1b')]),'qs':{'phone':_0x4b837e}})[_0x7fea('0x1e')](function(_0x2b5360){if(_0x2b5360[_0x7fea('0x1f')]){logger[_0x7fea('0xe')]('Enduser\x20found!');return _['find'](_0x2b5360,{'phone':_0x4b837e});}else{logger[_0x7fea('0xe')](_0x7fea('0x27'));return request({'uri':util[_0x7fea('0x11')](_0x7fea('0x26'),_0x2432a3[_0x7fea('0x1b')]),'method':'POST','body':{'name':_0x270beb,'phone':_0x4b837e}})['then'](function(_0x114290){logger[_0x7fea('0xe')](_0x7fea('0x28'));return _0x114290;});}});}function getAuth(_0x270abf){return util['format'](_0x7fea('0x29'),new Buffer(_0x270abf[_0x7fea('0x2a')]+':X')['toString'](_0x7fea('0x2b')));}function request(_0x18c9fb){logger['debug'](_0x7fea('0x2c'),JSON[_0x7fea('0x2d')](_0x18c9fb));return rp(_[_0x7fea('0x2e')](_0x18c9fb,{'method':_0x7fea('0x2f'),'headers':headers,'json':!![]}));}function getTags(_0x2d9c5a,_0x283a26){var _0x5e7d64=[];if(_0x2d9c5a&&_0x2d9c5a['length']>0x0){_0x5e7d64=_[_0x7fea('0x30')](_0x2d9c5a,_0x283a26);}return _0x5e7d64;}function getCustomFields(_0x4c2621,_0x37c8c5){var _0x59739a=[];var _0x3eb9f4={'custom_fields':[]};if(_0x4c2621[_0x7fea('0x1f')]>0x0){_['forEach'](_0x4c2621,function(_0x3dc7a8){if(_[_0x7fea('0x31')]([_0x7fea('0x32'),_0x7fea('0x33')],_0x3dc7a8[_0x7fea('0x34')])&&_0x3dc7a8[_0x7fea('0x35')]&&!_0x3dc7a8[_0x7fea('0x36')]){_0x3eb9f4[_0x3dc7a8[_0x7fea('0x35')][_0x7fea('0x37')]()]=_0x3dc7a8['content'][_0x7fea('0x38')]();}else if(_[_0x7fea('0x31')]([_0x7fea('0x32'),_0x7fea('0x33')],_0x3dc7a8[_0x7fea('0x34')])&&_0x3dc7a8[_0x7fea('0x39')]&&_0x3dc7a8['customField']){_0x3eb9f4[_0x7fea('0x17')][_0x7fea('0x3a')]({'id':_0x3dc7a8[_0x7fea('0x39')],'value':_0x3dc7a8[_0x7fea('0x3b')][_0x7fea('0x38')]()});}else if(_0x3dc7a8[_0x7fea('0x34')]===_0x7fea('0x3c')&&_0x3dc7a8[_0x7fea('0x3d')]&&_0x3dc7a8[_0x7fea('0x39')]&&_0x3dc7a8[_0x7fea('0x36')]){_0x37c8c5[_0x3dc7a8[_0x7fea('0x3d')]]&&_0x3eb9f4['custom_fields'][_0x7fea('0x3a')]({'id':_0x3dc7a8['idField'],'value':_0x37c8c5[_0x3dc7a8[_0x7fea('0x3d')]][_0x7fea('0x38')]()});}else if(_0x3dc7a8[_0x7fea('0x34')]==='customVariable'&&_0x3dc7a8[_0x7fea('0x3e')]&&_0x3dc7a8[_0x7fea('0x3e')][_0x7fea('0x16')]&&_0x3dc7a8['idField']&&_0x3dc7a8[_0x7fea('0x36')]){_0x37c8c5[_0x3dc7a8[_0x7fea('0x3e')][_0x7fea('0x16')][_0x7fea('0x37')]()]&&_0x3eb9f4[_0x7fea('0x17')][_0x7fea('0x3a')]({'id':_0x3dc7a8['idField'],'value':_0x37c8c5[_0x3dc7a8[_0x7fea('0x3e')][_0x7fea('0x16')][_0x7fea('0x37')]()]['toString']()});}});}return _0x3eb9f4;}exports[_0x7fea('0x3f')]=function(_0x55d427,_0x49edab,_0x3a9a4c,_0x293869,_0x466c8a,_0xd6eba0){var _0x3de08a,_0x518332;_0xd6eba0['remoteUri']=intUtil['stripTrailingSlash'](_0xd6eba0[_0x7fea('0x1b')]);_0xd6eba0[_0x7fea('0x40')]=intUtil[_0x7fea('0x41')](_0xd6eba0[_0x7fea('0x40')]);if(_0x466c8a&&_0x466c8a[_0x7fea('0x42')]){logger[_0x7fea('0xe')](_0x7fea('0x43'),_0x7fea('0x44'));_0x49edab[_0x7fea('0x45')]=util[_0x7fea('0x11')](_0x7fea('0x46'),_0xd6eba0['serverUrl'],_0x49edab[_0x7fea('0x47')],md5(_0x49edab[_0x7fea('0x47')]));}else{_0x49edab[_0x7fea('0x45')]='';}headers[_0x7fea('0x48')]=getAuth(_0xd6eba0);return getUser(_0xd6eba0,_0x293869[_0x7fea('0x21')])['then'](function(_0x98cdc8){_0x3de08a=_0x98cdc8;logger[_0x7fea('0xe')](_0x7fea('0x49'),_0x3de08a['id']);return getEndUser(_0xd6eba0,_0x49edab[_0x7fea('0x4a')],_0x49edab[_0x7fea('0x4b')]);})[_0x7fea('0x1e')](function(_0x44775a){_0x518332=_0x44775a;logger[_0x7fea('0xe')](_0x7fea('0x4c'),_0x518332['id']);return getTicket(_0xd6eba0,_0x3de08a,_0x518332,_0x3a9a4c,_0x49edab);})[_0x7fea('0x1e')](function(_0x2b074b){if(_0x2b074b&&_0x2b074b['id']){logger[_0x7fea('0xe')](_0x7fea('0x4d'));logger[_0x7fea('0xe')](_0x7fea('0x4e'),_0x2b074b['id']);logger[_0x7fea('0xe')](_0x7fea('0x43'),_0x7fea('0x4f'));emit(util[_0x7fea('0x11')](_0x7fea('0x50'),_0x293869['name']),_0x7fea('0x51'),{'uri':util[_0x7fea('0x11')]('%s/helpdesk/tickets/%d',_0xd6eba0[_0x7fea('0x1b')],_0x2b074b['id'])});}})[_0x7fea('0x52')](function(_0x1692b5){logger['error'](_0x7fea('0x43'),JSON[_0x7fea('0x2d')](_0x1692b5));});};exports[_0x7fea('0x53')]=function(_0x1f1c74,_0x40a8ec,_0x4afc42,_0x546404,_0x2c6f2a,_0x2d83eb,_0x502815){var _0x5a3b4c,_0x3cdcea;_0x2d83eb[_0x7fea('0x1b')]=intUtil[_0x7fea('0x41')](_0x2d83eb['remoteUri']);_0x2d83eb[_0x7fea('0x40')]=intUtil[_0x7fea('0x41')](_0x2d83eb[_0x7fea('0x40')]);if(_0x502815&&_0x502815[_0x7fea('0x54')]&&_0x502815['recordingFormat']!==_0x7fea('0x55')){logger[_0x7fea('0xe')](_0x7fea('0x56'),'Recording\x20is\x20enabled!');_0x40a8ec['recordingURL']=util[_0x7fea('0x11')](_0x7fea('0x46'),_0x2d83eb[_0x7fea('0x40')],_0x40a8ec[_0x7fea('0x47')],md5(_0x40a8ec[_0x7fea('0x47')]));}headers[_0x7fea('0x48')]=getAuth(_0x2d83eb);return getUser(_0x2d83eb,_0x546404[_0x7fea('0x21')])[_0x7fea('0x1e')](function(_0x3f482a){_0x5a3b4c=_0x3f482a;logger[_0x7fea('0xe')](_0x7fea('0x49'),_0x5a3b4c['id']);return getEndUser(_0x2d83eb,_0x40a8ec[_0x7fea('0x57')],_0x40a8ec[_0x7fea('0x58')]);})['then'](function(_0x2ec18b){_0x3cdcea=_0x2ec18b;logger[_0x7fea('0xe')]('The\x20Enduser\x20ID\x20is:',_0x3cdcea['id']);return getTicket(_0x2d83eb,_0x5a3b4c,_0x3cdcea,_0x4afc42,_0x40a8ec);})[_0x7fea('0x1e')](function(_0x59e8bf){if(_0x59e8bf&&_0x59e8bf['id']){logger[_0x7fea('0xe')](_0x7fea('0x4d'));logger[_0x7fea('0xe')](_0x7fea('0x4e'),_0x59e8bf['id']);logger[_0x7fea('0xe')](_0x7fea('0x56'),_0x7fea('0x4f'));emit(util[_0x7fea('0x11')](_0x7fea('0x50'),_0x546404[_0x7fea('0x16')]),_0x7fea('0x51'),{'uri':util[_0x7fea('0x11')]('%s/helpdesk/tickets/%d',_0x2d83eb[_0x7fea('0x1b')],_0x59e8bf['id'])});}})[_0x7fea('0x52')](function(_0x389c5d){logger[_0x7fea('0x59')](_0x7fea('0x56'),JSON['stringify'](_0x389c5d));});};exports[_0x7fea('0x5a')]=function(_0x49af11,_0x1d3f64,_0x5c8faa,_0x312841,_0x1aefb9,_0x1d12e2){var _0x2d7abc,_0x52aa4b;_0x1d12e2[_0x7fea('0x1b')]=intUtil[_0x7fea('0x41')](_0x1d12e2['remoteUri']);_0x1d12e2[_0x7fea('0x40')]=intUtil['stripTrailingSlash'](_0x1d12e2[_0x7fea('0x40')]);if(_0x1aefb9&&_0x1aefb9['monitor_format']){logger[_0x7fea('0xe')]('['+_0x1d3f64[_0x7fea('0x5b')][_0x7fea('0x5c')]()+']',_0x7fea('0x44'));_0x1d3f64[_0x7fea('0x45')]=util[_0x7fea('0x11')](_0x7fea('0x46'),_0x1d12e2['serverUrl'],_0x1d3f64[_0x7fea('0x47')],md5(_0x1d3f64['uniqueid']));}else{_0x1d3f64['recordingURL']='';}headers[_0x7fea('0x48')]=getAuth(_0x1d12e2);return getUser(_0x1d12e2,'')[_0x7fea('0x1e')](function(_0x50c646){_0x2d7abc=_0x50c646;logger[_0x7fea('0xe')]('The\x20User\x20ID\x20is:',_0x2d7abc['id']);return getEndUser(_0x1d12e2,_0x1d3f64[_0x7fea('0x4a')],_0x1d3f64[_0x7fea('0x4b')]);})[_0x7fea('0x1e')](function(_0x4d561b){_0x52aa4b=_0x4d561b;logger[_0x7fea('0xe')](_0x7fea('0x4c'),_0x52aa4b['id']);return getTicket(_0x1d12e2,_0x2d7abc,_0x52aa4b,_0x5c8faa,_0x1d3f64);})['then'](function(_0x4e0988){if(_0x4e0988){logger[_0x7fea('0xe')](_0x7fea('0x4d'));logger[_0x7fea('0xe')]('The\x20Ticket\x20ID\x20is:',_0x4e0988['id']);}})[_0x7fea('0x52')](function(_0x142113){logger[_0x7fea('0x59')]('['+_0x1d3f64[_0x7fea('0x5b')][_0x7fea('0x5c')]()+']',JSON[_0x7fea('0x2d')](_0x142113));});};