22c4117defa592f8edb4e77975c41dd2a1b91823
[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 _0x0558=['push','content','variable','variableName','customVariable','Variable','name','toLowerCase','stripTrailingSlash','serverUrl','monitor_format','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Authorization','The\x20User\x20ID\x20is:','calleridnum','The\x20Enduser\x20ID\x20is:','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','%s/helpdesk/tickets/%d','catch','error','[QUEUE]','outbound','recordingFormat','none','[OUTBOUND]','destcalleridname','destcalleridnum','The\x20Ticket\x20ID\x20is:','trigger:browser:url','lastevent','toUpperCase','request-promise','ioredis','../../../../config/environment','defaults','redis','localhost','socket.io-emitter','application/json','info','Creating\x20new\x20ticket...','merge','format','Caller\x20-\x20%s','calleridname','Subjects','getString','Descriptions','Fields','custom_fields','mapValues','value','%s/api/v2/tickets','POST','then','Ticket\x20created!','validateEmail','%s/api/v2/agents','remoteUri','length','find','email','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/api/v2/agents/me','Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!','%s/api/v2/contacts','Enduser\x20found!','apiKey','toString','stringify','GET','forEach','type','string','nameField','customField','idField'];(function(_0x243231,_0x336987){var _0x2cbfb7=function(_0x423e95){while(--_0x423e95){_0x243231['push'](_0x243231['shift']());}};_0x2cbfb7(++_0x336987);}(_0x0558,0x116));var _0x8055=function(_0x528bb5,_0x119c5b){_0x528bb5=_0x528bb5-0x0;var _0x58e8ca=_0x0558[_0x528bb5];return _0x58e8ca;};'use strict';var _=require('lodash');var rp=require(_0x8055('0x0'));var md5=require('md5');var util=require('util');var Redis=require(_0x8055('0x1'));var intUtil=require('./util');var config=require(_0x8055('0x2'));var logger=require('../../../../config/logger')('freshdesk');config['redis']=_[_0x8055('0x3')](config[_0x8055('0x4')],{'host':_0x8055('0x5'),'port':0x18eb});var io=require(_0x8055('0x6'))(new Redis(config[_0x8055('0x4')]));var headers={'Content-Type':_0x8055('0x7'),'Accept':_0x8055('0x7')};function emit(_0x2b4e5b,_0xdbf2f,_0xc8d39c){io['to'](_0x2b4e5b)['emit'](_0xdbf2f,_0xc8d39c);}function getTicket(_0x3e750b,_0x48c3f5,_0x4f1b9b,_0x1a0aaf,_0x4bc1d6){logger[_0x8055('0x8')](_0x8055('0x9'));var _0x29c3a2=_[_0x8055('0xa')]({'responder_id':_0x48c3f5['id'],'requester_id':_0x4f1b9b['id'],'name':util[_0x8055('0xb')](_0x8055('0xc'),_0x4bc1d6[_0x8055('0xd')]),'phone':_0x4bc1d6['calleridnum'],'source':0x3,'priority':0x1,'status':0x2,'subject':intUtil['getString'](_0x1a0aaf[_0x8055('0xe')],_0x4bc1d6,'\x20'),'description':intUtil[_0x8055('0xf')](_0x1a0aaf[_0x8055('0x10')],_0x4bc1d6,'<br>'),'tags':getTags(_0x1a0aaf['Tags'],'name')},getCustomFields(_0x1a0aaf[_0x8055('0x11')],_0x4bc1d6));_0x29c3a2[_0x8055('0x12')]=_[_0x8055('0x13')](_['keyBy'](_0x29c3a2[_0x8055('0x12')],'id'),_0x8055('0x14'));return request({'uri':util['format'](_0x8055('0x15'),_0x3e750b['remoteUri']),'method':_0x8055('0x16'),'body':_0x29c3a2})[_0x8055('0x17')](function(_0x10df4a){logger['info'](_0x8055('0x18'));return _0x10df4a;});}function getUser(_0x11bee0,_0x3251c0){if(intUtil[_0x8055('0x19')](_0x3251c0)){return request({'uri':util[_0x8055('0xb')](_0x8055('0x1a'),_0x11bee0[_0x8055('0x1b')]),'qs':{'email':_0x3251c0}})[_0x8055('0x17')](function(_0x2d77bb){if(_0x2d77bb[_0x8055('0x1c')]){logger[_0x8055('0x8')]('Agent\x20found!');return _[_0x8055('0x1d')](_0x2d77bb,function(_0x1991aa){return _0x1991aa['contact'][_0x8055('0x1e')]===_0x3251c0;});}else{logger[_0x8055('0x8')](_0x8055('0x1f'));return request({'uri':util['format'](_0x8055('0x20'),_0x11bee0[_0x8055('0x1b')])})['then'](function(_0x53dc24){logger[_0x8055('0x8')]('Admin\x20account\x20selected.');return _0x53dc24;});}});}else{logger[_0x8055('0x8')](_0x8055('0x21'));return request({'uri':util[_0x8055('0xb')](_0x8055('0x20'),_0x11bee0['remoteUri'])})[_0x8055('0x17')](function(_0x426ee0){logger[_0x8055('0x8')]('Admin\x20account\x20selected.');return _0x426ee0;});}}function getEndUser(_0x19fbe9,_0x4b7686,_0x4d09a8){logger[_0x8055('0x8')]('Searching\x20enduser\x20with\x20phone',_0x4d09a8);return request({'uri':util[_0x8055('0xb')](_0x8055('0x22'),_0x19fbe9[_0x8055('0x1b')]),'qs':{'phone':_0x4d09a8}})[_0x8055('0x17')](function(_0xac7b75){if(_0xac7b75[_0x8055('0x1c')]){logger['info'](_0x8055('0x23'));return _[_0x8055('0x1d')](_0xac7b75,{'phone':_0x4d09a8});}else{logger[_0x8055('0x8')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'uri':util[_0x8055('0xb')](_0x8055('0x22'),_0x19fbe9[_0x8055('0x1b')]),'method':_0x8055('0x16'),'body':{'name':_0x4b7686,'phone':_0x4d09a8}})[_0x8055('0x17')](function(_0x4c5ae3){logger['info']('Enduser\x20created.');return _0x4c5ae3;});}});}function getAuth(_0x3f5afd){return util[_0x8055('0xb')]('Basic\x20%s',new Buffer(_0x3f5afd[_0x8055('0x24')]+':X')[_0x8055('0x25')]('base64'));}function request(_0x19b108){logger['debug']('[HTTP]',JSON[_0x8055('0x26')](_0x19b108));return rp(_['defaults'](_0x19b108,{'method':_0x8055('0x27'),'headers':headers,'json':!![]}));}function getTags(_0x13e793,_0x2f50a6){var _0x26f892=[];if(_0x13e793&&_0x13e793[_0x8055('0x1c')]>0x0){_0x26f892=_['map'](_0x13e793,_0x2f50a6);}return _0x26f892;}function getCustomFields(_0x2efd4e,_0x419cd9){var _0x414a82=[];var _0x4166b8={'custom_fields':[]};if(_0x2efd4e[_0x8055('0x1c')]>0x0){_[_0x8055('0x28')](_0x2efd4e,function(_0x5da65a){if(_0x5da65a[_0x8055('0x29')]===_0x8055('0x2a')&&_0x5da65a[_0x8055('0x2b')]&&!_0x5da65a[_0x8055('0x2c')]){_0x4166b8[_0x5da65a[_0x8055('0x2b')]['toLowerCase']()]=_0x5da65a['content']['toString']();}else if(_0x5da65a[_0x8055('0x29')]==='string'&&_0x5da65a[_0x8055('0x2d')]&&_0x5da65a[_0x8055('0x2c')]){_0x4166b8[_0x8055('0x12')][_0x8055('0x2e')]({'id':_0x5da65a[_0x8055('0x2d')],'value':_0x5da65a[_0x8055('0x2f')][_0x8055('0x25')]()});}else if(_0x5da65a[_0x8055('0x29')]===_0x8055('0x30')&&_0x5da65a[_0x8055('0x31')]&&_0x5da65a[_0x8055('0x2d')]&&_0x5da65a['customField']){_0x419cd9[_0x5da65a[_0x8055('0x31')]]&&_0x4166b8[_0x8055('0x12')][_0x8055('0x2e')]({'id':_0x5da65a[_0x8055('0x2d')],'value':_0x419cd9[_0x5da65a[_0x8055('0x31')]][_0x8055('0x25')]()});}else if(_0x5da65a[_0x8055('0x29')]===_0x8055('0x32')&&_0x5da65a[_0x8055('0x33')]&&_0x5da65a[_0x8055('0x33')][_0x8055('0x34')]&&_0x5da65a['idField']&&_0x5da65a[_0x8055('0x2c')]){_0x419cd9[_0x5da65a['Variable']['name'][_0x8055('0x35')]()]&&_0x4166b8[_0x8055('0x12')][_0x8055('0x2e')]({'id':_0x5da65a[_0x8055('0x2d')],'value':_0x419cd9[_0x5da65a[_0x8055('0x33')]['name']['toLowerCase']()]['toString']()});}});}return _0x4166b8;}exports['queue']=function(_0x2b90b3,_0x10867c,_0x34ee8b,_0x96bde1,_0x4daff6,_0x4b6738){var _0x56cb8c,_0x4abdcd;_0x4b6738[_0x8055('0x1b')]=intUtil[_0x8055('0x36')](_0x4b6738[_0x8055('0x1b')]);_0x4b6738['serverUrl']=intUtil[_0x8055('0x36')](_0x4b6738[_0x8055('0x37')]);if(_0x4daff6&&_0x4daff6[_0x8055('0x38')]){logger['info']('[QUEUE]',_0x8055('0x39'));_0x10867c[_0x8055('0x3a')]=util['format'](_0x8055('0x3b'),_0x4b6738[_0x8055('0x37')],_0x10867c[_0x8055('0x3c')],md5(_0x10867c[_0x8055('0x3c')]));}else{_0x10867c[_0x8055('0x3a')]='';}headers[_0x8055('0x3d')]=getAuth(_0x4b6738);return getUser(_0x4b6738,_0x96bde1[_0x8055('0x1e')])['then'](function(_0x3d5388){_0x56cb8c=_0x3d5388;logger[_0x8055('0x8')](_0x8055('0x3e'),_0x56cb8c['id']);return getEndUser(_0x4b6738,_0x10867c['calleridname'],_0x10867c[_0x8055('0x3f')]);})[_0x8055('0x17')](function(_0x2f4a88){_0x4abdcd=_0x2f4a88;logger[_0x8055('0x8')](_0x8055('0x40'),_0x4abdcd['id']);return getTicket(_0x4b6738,_0x56cb8c,_0x4abdcd,_0x34ee8b,_0x10867c);})['then'](function(_0x14f386){if(_0x14f386&&_0x14f386['id']){logger[_0x8055('0x8')](_0x8055('0x18'));logger[_0x8055('0x8')]('The\x20Ticket\x20ID\x20is:',_0x14f386['id']);logger['info']('[QUEUE]',_0x8055('0x41'));emit(util[_0x8055('0xb')](_0x8055('0x42'),_0x96bde1[_0x8055('0x34')]),'trigger:browser:url',{'uri':util['format'](_0x8055('0x43'),_0x4b6738[_0x8055('0x1b')],_0x14f386['id'])});}})[_0x8055('0x44')](function(_0x45c929){logger[_0x8055('0x45')](_0x8055('0x46'),JSON[_0x8055('0x26')](_0x45c929));});};exports[_0x8055('0x47')]=function(_0x26f7ba,_0x3301c8,_0x10ab6e,_0x161b94,_0x5c98cf,_0x438298,_0x1ec05a){var _0x5b95b5,_0x59179e;_0x438298[_0x8055('0x1b')]=intUtil['stripTrailingSlash'](_0x438298['remoteUri']);_0x438298[_0x8055('0x37')]=intUtil['stripTrailingSlash'](_0x438298[_0x8055('0x37')]);if(_0x1ec05a&&_0x1ec05a[_0x8055('0x48')]&&_0x1ec05a[_0x8055('0x48')]!==_0x8055('0x49')){logger[_0x8055('0x8')](_0x8055('0x4a'),_0x8055('0x39'));_0x3301c8['recordingURL']=util[_0x8055('0xb')](_0x8055('0x3b'),_0x438298['serverUrl'],_0x3301c8[_0x8055('0x3c')],md5(_0x3301c8['uniqueid']));}headers[_0x8055('0x3d')]=getAuth(_0x438298);return getUser(_0x438298,_0x161b94['email'])[_0x8055('0x17')](function(_0x4a70ba){_0x5b95b5=_0x4a70ba;logger['info'](_0x8055('0x3e'),_0x5b95b5['id']);return getEndUser(_0x438298,_0x3301c8[_0x8055('0x4b')],_0x3301c8[_0x8055('0x4c')]);})[_0x8055('0x17')](function(_0x4e12ac){_0x59179e=_0x4e12ac;logger[_0x8055('0x8')](_0x8055('0x40'),_0x59179e['id']);return getTicket(_0x438298,_0x5b95b5,_0x59179e,_0x10ab6e,_0x3301c8);})[_0x8055('0x17')](function(_0x20875d){if(_0x20875d&&_0x20875d['id']){logger[_0x8055('0x8')](_0x8055('0x18'));logger[_0x8055('0x8')](_0x8055('0x4d'),_0x20875d['id']);logger[_0x8055('0x8')]('[OUTBOUND]',_0x8055('0x41'));emit(util[_0x8055('0xb')](_0x8055('0x42'),_0x161b94['name']),_0x8055('0x4e'),{'uri':util[_0x8055('0xb')](_0x8055('0x43'),_0x438298[_0x8055('0x1b')],_0x20875d['id'])});}})[_0x8055('0x44')](function(_0x37116f){logger[_0x8055('0x45')](_0x8055('0x4a'),JSON['stringify'](_0x37116f));});};exports['unmanaged']=function(_0x3657ce,_0x42a429,_0x52f524,_0x5938dd,_0x4af5fa,_0x48def1){var _0xbcb426,_0x22ca1b;_0x48def1[_0x8055('0x1b')]=intUtil['stripTrailingSlash'](_0x48def1[_0x8055('0x1b')]);_0x48def1[_0x8055('0x37')]=intUtil[_0x8055('0x36')](_0x48def1[_0x8055('0x37')]);if(_0x4af5fa&&_0x4af5fa[_0x8055('0x38')]){logger[_0x8055('0x8')]('['+_0x42a429['lastevent']['toUpperCase']()+']',_0x8055('0x39'));_0x42a429['recordingURL']=util[_0x8055('0xb')](_0x8055('0x3b'),_0x48def1[_0x8055('0x37')],_0x42a429[_0x8055('0x3c')],md5(_0x42a429[_0x8055('0x3c')]));}else{_0x42a429['recordingURL']='';}headers[_0x8055('0x3d')]=getAuth(_0x48def1);return getUser(_0x48def1,'')[_0x8055('0x17')](function(_0x356723){_0xbcb426=_0x356723;logger[_0x8055('0x8')](_0x8055('0x3e'),_0xbcb426['id']);return getEndUser(_0x48def1,_0x42a429[_0x8055('0xd')],_0x42a429[_0x8055('0x3f')]);})['then'](function(_0x5d0e84){_0x22ca1b=_0x5d0e84;logger[_0x8055('0x8')](_0x8055('0x40'),_0x22ca1b['id']);return getTicket(_0x48def1,_0xbcb426,_0x22ca1b,_0x52f524,_0x42a429);})[_0x8055('0x17')](function(_0x589037){if(_0x589037){logger[_0x8055('0x8')]('Ticket\x20created!');logger[_0x8055('0x8')]('The\x20Ticket\x20ID\x20is:',_0x589037['id']);}})[_0x8055('0x44')](function(_0x40e8eb){logger[_0x8055('0x45')]('['+_0x42a429[_0x8055('0x4f')][_0x8055('0x50')]()+']',JSON['stringify'](_0x40e8eb));});};