3c2479f4fe0ae53e4e1eb429171344e27f5456e3
[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 _0xe3cd=['[HTTP]','stringify','GET','map','includes','string','customField','nameField','content','toString','picklist','type','idField','push','variable','variableName','customVariable','Variable','toLowerCase','queue','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','recordingURL','Authorization','The\x20User\x20ID\x20is:','The\x20Enduser\x20ID\x20is:','Ticket\x20created!','The\x20Ticket\x20ID\x20is:','user:%s','trigger:browser:url','catch','error','stripTrailingSlash','recordingFormat','none','[OUTBOUND]','destcalleridname','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','%s/helpdesk/tickets/%d','unmanaged','lastevent','toUpperCase','lodash','ioredis','./util','freshdesk','redis','defaults','socket.io-emitter','application/json','emit','info','Creating\x20new\x20ticket...','merge','format','Caller\x20-\x20%s','calleridname','calleridnum','getString','<br>','Tags','name','Fields','custom_fields','keyBy','value','%s/api/v2/tickets','remoteUri','POST','then','validateEmail','%s/api/v2/agents','length','find','email','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/api/v2/agents/me','Admin\x20account\x20selected.','Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!','Searching\x20enduser\x20with\x20phone','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/api/v2/contacts','Enduser\x20created.','Basic\x20%s','apiKey','base64','debug'];(function(_0x515d24,_0x443b15){var _0x5a56cb=function(_0x52180f){while(--_0x52180f){_0x515d24['push'](_0x515d24['shift']());}};_0x5a56cb(++_0x443b15);}(_0xe3cd,0x19e));var _0xde3c=function(_0x2b1e2e,_0xf6875d){_0x2b1e2e=_0x2b1e2e-0x0;var _0x430f4f=_0xe3cd[_0x2b1e2e];return _0x430f4f;};'use strict';var _=require(_0xde3c('0x0'));var rp=require('request-promise');var md5=require('md5');var util=require('util');var Redis=require(_0xde3c('0x1'));var intUtil=require(_0xde3c('0x2'));var config=require('../../../../config/environment');var logger=require('../../../../config/logger')(_0xde3c('0x3'));config[_0xde3c('0x4')]=_[_0xde3c('0x5')](config[_0xde3c('0x4')],{'host':'localhost','port':0x18eb});var io=require(_0xde3c('0x6'))(new Redis(config[_0xde3c('0x4')]));var headers={'Content-Type':_0xde3c('0x7'),'Accept':'application/json'};function emit(_0x4ca44f,_0xe23e42,_0x34d1c6){io['to'](_0x4ca44f)[_0xde3c('0x8')](_0xe23e42,_0x34d1c6);}function getTicket(_0x90f932,_0x5b98e4,_0x5c79df,_0x5262ad,_0x51f826){logger[_0xde3c('0x9')](_0xde3c('0xa'));var _0x5f218f=_[_0xde3c('0xb')]({'responder_id':_0x5b98e4['id'],'requester_id':_0x5c79df['id'],'name':util[_0xde3c('0xc')](_0xde3c('0xd'),_0x51f826[_0xde3c('0xe')]),'phone':_0x51f826[_0xde3c('0xf')],'source':0x3,'priority':0x1,'status':0x2,'subject':intUtil[_0xde3c('0x10')](_0x5262ad['Subjects'],_0x51f826,'\x20'),'description':intUtil[_0xde3c('0x10')](_0x5262ad['Descriptions'],_0x51f826,_0xde3c('0x11')),'tags':getTags(_0x5262ad[_0xde3c('0x12')],_0xde3c('0x13'))},getCustomFields(_0x5262ad[_0xde3c('0x14')],_0x51f826));_0x5f218f[_0xde3c('0x15')]=_['mapValues'](_[_0xde3c('0x16')](_0x5f218f[_0xde3c('0x15')],'id'),_0xde3c('0x17'));return request({'uri':util[_0xde3c('0xc')](_0xde3c('0x18'),_0x90f932[_0xde3c('0x19')]),'method':_0xde3c('0x1a'),'body':_0x5f218f})[_0xde3c('0x1b')](function(_0x501368){logger[_0xde3c('0x9')]('Ticket\x20created!');return _0x501368;});}function getUser(_0x162882,_0xa3ff88){if(intUtil[_0xde3c('0x1c')](_0xa3ff88)){return request({'uri':util[_0xde3c('0xc')](_0xde3c('0x1d'),_0x162882[_0xde3c('0x19')]),'qs':{'email':_0xa3ff88}})[_0xde3c('0x1b')](function(_0x35898f){if(_0x35898f[_0xde3c('0x1e')]){logger['info']('Agent\x20found!');return _[_0xde3c('0x1f')](_0x35898f,function(_0x2926aa){return _0x2926aa['contact'][_0xde3c('0x20')]===_0xa3ff88;});}else{logger[_0xde3c('0x9')](_0xde3c('0x21'));return request({'uri':util[_0xde3c('0xc')](_0xde3c('0x22'),_0x162882[_0xde3c('0x19')])})[_0xde3c('0x1b')](function(_0xc727d5){logger[_0xde3c('0x9')](_0xde3c('0x23'));return _0xc727d5;});}});}else{logger[_0xde3c('0x9')](_0xde3c('0x24'));return request({'uri':util['format'](_0xde3c('0x22'),_0x162882[_0xde3c('0x19')])})['then'](function(_0x7c58){logger[_0xde3c('0x9')](_0xde3c('0x23'));return _0x7c58;});}}function getEndUser(_0x4e7f86,_0x4c263e,_0x4d85a9){logger[_0xde3c('0x9')](_0xde3c('0x25'),_0x4d85a9);return request({'uri':util[_0xde3c('0xc')]('%s/api/v2/contacts',_0x4e7f86[_0xde3c('0x19')]),'qs':{'phone':_0x4d85a9}})[_0xde3c('0x1b')](function(_0x49a189){if(_0x49a189['length']){logger[_0xde3c('0x9')](_0xde3c('0x26'));return _['find'](_0x49a189,{'phone':_0x4d85a9});}else{logger[_0xde3c('0x9')](_0xde3c('0x27'));return request({'uri':util['format'](_0xde3c('0x28'),_0x4e7f86[_0xde3c('0x19')]),'method':'POST','body':{'name':_0x4c263e,'phone':_0x4d85a9}})[_0xde3c('0x1b')](function(_0x1fc1b7){logger['info'](_0xde3c('0x29'));return _0x1fc1b7;});}});}function getAuth(_0x1583ca){return util[_0xde3c('0xc')](_0xde3c('0x2a'),new Buffer(_0x1583ca[_0xde3c('0x2b')]+':X')['toString'](_0xde3c('0x2c')));}function request(_0x275f93){logger[_0xde3c('0x2d')](_0xde3c('0x2e'),JSON[_0xde3c('0x2f')](_0x275f93));return rp(_[_0xde3c('0x5')](_0x275f93,{'method':_0xde3c('0x30'),'headers':headers,'json':!![]}));}function getTags(_0xa05141,_0x107484){var _0x34a857=[];if(_0xa05141&&_0xa05141[_0xde3c('0x1e')]>0x0){_0x34a857=_[_0xde3c('0x31')](_0xa05141,_0x107484);}return _0x34a857;}function getCustomFields(_0x596758,_0x5fd61e){var _0x570491=[];var _0x37796f={'custom_fields':[]};if(_0x596758['length']>0x0){_['forEach'](_0x596758,function(_0x4bb297){if(_[_0xde3c('0x32')]([_0xde3c('0x33'),'picklist'],_0x4bb297['type'])&&_0x4bb297['nameField']&&!_0x4bb297[_0xde3c('0x34')]){_0x37796f[_0x4bb297[_0xde3c('0x35')]['toLowerCase']()]=_0x4bb297[_0xde3c('0x36')][_0xde3c('0x37')]();}else if(_['includes']([_0xde3c('0x33'),_0xde3c('0x38')],_0x4bb297[_0xde3c('0x39')])&&_0x4bb297[_0xde3c('0x3a')]&&_0x4bb297[_0xde3c('0x34')]){_0x37796f[_0xde3c('0x15')][_0xde3c('0x3b')]({'id':_0x4bb297[_0xde3c('0x3a')],'value':_0x4bb297[_0xde3c('0x36')][_0xde3c('0x37')]()});}else if(_0x4bb297['type']===_0xde3c('0x3c')&&_0x4bb297[_0xde3c('0x3d')]&&_0x4bb297['idField']&&_0x4bb297[_0xde3c('0x34')]){_0x5fd61e[_0x4bb297[_0xde3c('0x3d')]]&&_0x37796f[_0xde3c('0x15')][_0xde3c('0x3b')]({'id':_0x4bb297['idField'],'value':_0x5fd61e[_0x4bb297['variableName']][_0xde3c('0x37')]()});}else if(_0x4bb297[_0xde3c('0x39')]===_0xde3c('0x3e')&&_0x4bb297[_0xde3c('0x3f')]&&_0x4bb297[_0xde3c('0x3f')][_0xde3c('0x13')]&&_0x4bb297[_0xde3c('0x3a')]&&_0x4bb297['customField']){_0x5fd61e[_0x4bb297[_0xde3c('0x3f')]['name'][_0xde3c('0x40')]()]&&_0x37796f[_0xde3c('0x15')][_0xde3c('0x3b')]({'id':_0x4bb297[_0xde3c('0x3a')],'value':_0x5fd61e[_0x4bb297[_0xde3c('0x3f')][_0xde3c('0x13')][_0xde3c('0x40')]()][_0xde3c('0x37')]()});}});}return _0x37796f;}exports[_0xde3c('0x41')]=function(_0x38dfd0,_0x500cb2,_0x309e7f,_0x10fb4c,_0x2d5f93,_0x118427){var _0x23bd13,_0x303ba0;_0x118427[_0xde3c('0x19')]=intUtil['stripTrailingSlash'](_0x118427[_0xde3c('0x19')]);_0x118427[_0xde3c('0x42')]=intUtil['stripTrailingSlash'](_0x118427['serverUrl']);if(_0x2d5f93&&_0x2d5f93[_0xde3c('0x43')]){logger['info'](_0xde3c('0x44'),_0xde3c('0x45'));_0x500cb2['recordingURL']=util[_0xde3c('0xc')](_0xde3c('0x46'),_0x118427[_0xde3c('0x42')],_0x500cb2[_0xde3c('0x47')],md5(_0x500cb2['uniqueid']));}else{_0x500cb2[_0xde3c('0x48')]='';}headers[_0xde3c('0x49')]=getAuth(_0x118427);return getUser(_0x118427,_0x10fb4c[_0xde3c('0x20')])['then'](function(_0x10d9cf){_0x23bd13=_0x10d9cf;logger[_0xde3c('0x9')](_0xde3c('0x4a'),_0x23bd13['id']);return getEndUser(_0x118427,_0x500cb2[_0xde3c('0xe')],_0x500cb2['calleridnum']);})[_0xde3c('0x1b')](function(_0x23c969){_0x303ba0=_0x23c969;logger[_0xde3c('0x9')](_0xde3c('0x4b'),_0x303ba0['id']);return getTicket(_0x118427,_0x23bd13,_0x303ba0,_0x309e7f,_0x500cb2);})[_0xde3c('0x1b')](function(_0x49b02d){if(_0x49b02d&&_0x49b02d['id']){logger[_0xde3c('0x9')](_0xde3c('0x4c'));logger[_0xde3c('0x9')](_0xde3c('0x4d'),_0x49b02d['id']);logger[_0xde3c('0x9')]('[QUEUE]','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0xde3c('0xc')](_0xde3c('0x4e'),_0x10fb4c[_0xde3c('0x13')]),_0xde3c('0x4f'),{'uri':util[_0xde3c('0xc')]('%s/helpdesk/tickets/%d',_0x118427['remoteUri'],_0x49b02d['id'])});}})[_0xde3c('0x50')](function(_0x31abe0){logger[_0xde3c('0x51')](_0xde3c('0x44'),JSON[_0xde3c('0x2f')](_0x31abe0));});};exports['outbound']=function(_0x4ac5a8,_0x3b8193,_0x18f05c,_0xa4970,_0x30ad3e,_0x19142d,_0x5ca132){var _0x4f8c37,_0x5b4226;_0x19142d['remoteUri']=intUtil['stripTrailingSlash'](_0x19142d['remoteUri']);_0x19142d[_0xde3c('0x42')]=intUtil[_0xde3c('0x52')](_0x19142d[_0xde3c('0x42')]);if(_0x5ca132&&_0x5ca132['recordingFormat']&&_0x5ca132[_0xde3c('0x53')]!==_0xde3c('0x54')){logger[_0xde3c('0x9')](_0xde3c('0x55'),'Recording\x20is\x20enabled!');_0x3b8193[_0xde3c('0x48')]=util[_0xde3c('0xc')](_0xde3c('0x46'),_0x19142d[_0xde3c('0x42')],_0x3b8193[_0xde3c('0x47')],md5(_0x3b8193[_0xde3c('0x47')]));}headers['Authorization']=getAuth(_0x19142d);return getUser(_0x19142d,_0xa4970[_0xde3c('0x20')])['then'](function(_0x5c2d21){_0x4f8c37=_0x5c2d21;logger[_0xde3c('0x9')](_0xde3c('0x4a'),_0x4f8c37['id']);return getEndUser(_0x19142d,_0x3b8193[_0xde3c('0x56')],_0x3b8193['destcalleridnum']);})[_0xde3c('0x1b')](function(_0x2c9b71){_0x5b4226=_0x2c9b71;logger[_0xde3c('0x9')](_0xde3c('0x4b'),_0x5b4226['id']);return getTicket(_0x19142d,_0x4f8c37,_0x5b4226,_0x18f05c,_0x3b8193);})[_0xde3c('0x1b')](function(_0x4a4059){if(_0x4a4059&&_0x4a4059['id']){logger[_0xde3c('0x9')]('Ticket\x20created!');logger[_0xde3c('0x9')](_0xde3c('0x4d'),_0x4a4059['id']);logger['info'](_0xde3c('0x55'),_0xde3c('0x57'));emit(util[_0xde3c('0xc')](_0xde3c('0x4e'),_0xa4970[_0xde3c('0x13')]),_0xde3c('0x4f'),{'uri':util[_0xde3c('0xc')](_0xde3c('0x58'),_0x19142d[_0xde3c('0x19')],_0x4a4059['id'])});}})[_0xde3c('0x50')](function(_0x560d75){logger[_0xde3c('0x51')](_0xde3c('0x55'),JSON[_0xde3c('0x2f')](_0x560d75));});};exports[_0xde3c('0x59')]=function(_0x2c8de0,_0x236064,_0x47cac4,_0x56cfdb,_0x43f5e8,_0x51fe59){var _0x389b86,_0x400c91;_0x51fe59['remoteUri']=intUtil[_0xde3c('0x52')](_0x51fe59[_0xde3c('0x19')]);_0x51fe59[_0xde3c('0x42')]=intUtil[_0xde3c('0x52')](_0x51fe59['serverUrl']);if(_0x43f5e8&&_0x43f5e8['monitor_format']){logger['info']('['+_0x236064[_0xde3c('0x5a')][_0xde3c('0x5b')]()+']',_0xde3c('0x45'));_0x236064['recordingURL']=util['format'](_0xde3c('0x46'),_0x51fe59[_0xde3c('0x42')],_0x236064[_0xde3c('0x47')],md5(_0x236064[_0xde3c('0x47')]));}else{_0x236064[_0xde3c('0x48')]='';}headers[_0xde3c('0x49')]=getAuth(_0x51fe59);return getUser(_0x51fe59,'')[_0xde3c('0x1b')](function(_0x462a5f){_0x389b86=_0x462a5f;logger[_0xde3c('0x9')](_0xde3c('0x4a'),_0x389b86['id']);return getEndUser(_0x51fe59,_0x236064[_0xde3c('0xe')],_0x236064[_0xde3c('0xf')]);})[_0xde3c('0x1b')](function(_0x5b2d08){_0x400c91=_0x5b2d08;logger['info']('The\x20Enduser\x20ID\x20is:',_0x400c91['id']);return getTicket(_0x51fe59,_0x389b86,_0x400c91,_0x47cac4,_0x236064);})[_0xde3c('0x1b')](function(_0x1bb0bc){if(_0x1bb0bc){logger[_0xde3c('0x9')](_0xde3c('0x4c'));logger[_0xde3c('0x9')]('The\x20Ticket\x20ID\x20is:',_0x1bb0bc['id']);}})[_0xde3c('0x50')](function(_0x7e1503){logger[_0xde3c('0x51')]('['+_0x236064[_0xde3c('0x5a')][_0xde3c('0x5b')]()+']',JSON['stringify'](_0x7e1503));});};