Built motion from commit (unavailable).|2.5.30
[motion2.git] / server / services / ami / trigger / integration / desk.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 _0x9c94=['toLowerCase','includes','idField','custom_fields','variable','Variable','name','priority','Creating\x20new\x20ticket...','merge','phone','xCALLY','Motion','CTI','getString','Descriptions','/api/v2/users/%d','user','Fields','queue','stripTrailingSlash','serverUrl','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Authorization','email','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','[QUEUE]','Displaying\x20ticket\x20to\x20agent...','user:%s','trigger:desk:display','newTab','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','https://xcally.desk.com/web/agent/case/%d','error','Desk\x20account\x20type\x20not\x20recognized','catch','recordingFormat','none','[OUTBOUND]','destcalleridnum','Ticket\x20created!','integrationTab','monitor_format','lastevent','toUpperCase','lodash','util','ioredis','./util','../../../../config/environment','../../../../config/logger','desk','redis','localhost','socket.io-emitter','emit','application/json','validateEmail','Getting\x20agent\x20with\x20email','format','remoteUri','then','total_entries','_embedded','entries','info','Agent\x20found!','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!','%s/users/me','debug','stringify','GET','basic','%s:%s','username','authType','token','Basic\x20%s','toString','base64','Searching\x20enduser\x20with\x20phone','Enduser\x20found!','%s/customers','POST','work','length','map','string','picklist','type','nameField','customField'];(function(_0x2215c7,_0x32f45a){var _0x58b1e1=function(_0x52a895){while(--_0x52a895){_0x2215c7['push'](_0x2215c7['shift']());}};_0x58b1e1(++_0x32f45a);}(_0x9c94,0xfc));var _0x49c9=function(_0x2e04ef,_0x31a596){_0x2e04ef=_0x2e04ef-0x0;var _0x5722b0=_0x9c94[_0x2e04ef];return _0x5722b0;};'use strict';var _=require(_0x49c9('0x0'));var rp=require('request-promise');var md5=require('md5');var util=require(_0x49c9('0x1'));var Redis=require(_0x49c9('0x2'));var intUtil=require(_0x49c9('0x3'));var config=require(_0x49c9('0x4'));var logger=require(_0x49c9('0x5'))(_0x49c9('0x6'));config['redis']=_['defaults'](config[_0x49c9('0x7')],{'host':_0x49c9('0x8'),'port':0x18eb});var io=require(_0x49c9('0x9'))(new Redis(config[_0x49c9('0x7')]));function emit(_0x5d540b,_0x5be8df,_0x478406){io['to'](_0x5d540b)[_0x49c9('0xa')](_0x5be8df,_0x478406);}var headers={'Content-Type':_0x49c9('0xb'),'Accept':_0x49c9('0xb')};function getUser(_0x1b32ac,_0xae46b5){if(intUtil[_0x49c9('0xc')](_0xae46b5)===!![]){logger['info'](_0x49c9('0xd'),_0xae46b5);return request({'uri':util[_0x49c9('0xe')]('%s/users',_0x1b32ac[_0x49c9('0xf')])})[_0x49c9('0x10')](function(_0x2d2a88){if(_0x2d2a88[_0x49c9('0x11')]){return _['find'](_0x2d2a88[_0x49c9('0x12')][_0x49c9('0x13')],{'email':_0xae46b5});}})[_0x49c9('0x10')](function(_0x2fc505){if(_0x2fc505){logger[_0x49c9('0x14')](_0x49c9('0x15'));return _0x2fc505;}else{logger[_0x49c9('0x14')](_0x49c9('0x16'));return request({'uri':util[_0x49c9('0xe')]('%s/users/me',_0x1b32ac[_0x49c9('0xf')])});}});}else{logger[_0x49c9('0x14')](_0x49c9('0x17'));return request({'uri':util[_0x49c9('0xe')](_0x49c9('0x18'),_0x1b32ac['remoteUri'])});}}function request(_0x7b4841){logger[_0x49c9('0x19')]('[HTTP]',JSON[_0x49c9('0x1a')](_0x7b4841));return rp(_['defaults'](_0x7b4841,{'method':_0x49c9('0x1b'),'headers':headers,'json':!![]}));}function getAuth(_0x5e844d){var _0x3110c2;if(_0x5e844d['authType']===_0x49c9('0x1c')){_0x3110c2=util[_0x49c9('0xe')](_0x49c9('0x1d'),_0x5e844d[_0x49c9('0x1e')],_0x5e844d['password']);}else if(_0x5e844d[_0x49c9('0x1f')]===_0x49c9('0x20')){_0x3110c2=util[_0x49c9('0xe')]('%s/token:%s',_0x5e844d['username'],_0x5e844d['token']);}return util[_0x49c9('0xe')](_0x49c9('0x21'),new Buffer(_0x3110c2)[_0x49c9('0x22')](_0x49c9('0x23')));}function getEndUser(_0xc36c2f,_0xfec328,_0x7010b9){logger['info'](_0x49c9('0x24'),_0x7010b9);return request({'uri':util[_0x49c9('0xe')]('%s/customers/search',_0xc36c2f[_0x49c9('0xf')]),'qs':{'phone':_0x7010b9}})['then'](function(_0x44c5f2){if(_0x44c5f2[_0x49c9('0x11')]){logger[_0x49c9('0x14')](_0x49c9('0x25'));return _0x44c5f2[_0x49c9('0x12')]['entries'][0x0];}else{logger[_0x49c9('0x14')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'uri':util[_0x49c9('0xe')](_0x49c9('0x26'),_0xc36c2f[_0x49c9('0xf')]),'method':_0x49c9('0x27'),'body':{'first_name':_0xfec328,'title':_0xfec328,'phone_numbers':[{'type':_0x49c9('0x28'),'value':_0x7010b9}]}});}});}function getTags(_0x3d8df4,_0x4d04bb){var _0x3f43b1=[];if(_0x3d8df4&&_0x3d8df4[_0x49c9('0x29')]>0x0){_0x3f43b1=_[_0x49c9('0x2a')](_0x3d8df4,_0x4d04bb);}return _0x3f43b1;}function getCustomFields(_0x152f57,_0x289ebe){var _0x57df1c=[];var _0x2283b0={'custom_fields':{}};if(_0x152f57[_0x49c9('0x29')]>0x0){_['forEach'](_0x152f57,function(_0x360e6b){if(_['includes']([_0x49c9('0x2b'),_0x49c9('0x2c')],_0x360e6b[_0x49c9('0x2d')])&&_0x360e6b[_0x49c9('0x2e')]&&!_0x360e6b[_0x49c9('0x2f')]){_0x2283b0[_0x360e6b[_0x49c9('0x2e')][_0x49c9('0x30')]()]=_0x360e6b['content']['toString']();}else if(_[_0x49c9('0x31')]([_0x49c9('0x2b'),_0x49c9('0x2c')],_0x360e6b[_0x49c9('0x2d')])&&_0x360e6b[_0x49c9('0x32')]&&_0x360e6b[_0x49c9('0x2f')]){_0x2283b0[_0x49c9('0x33')][_0x360e6b['idField']]=_0x360e6b['content'][_0x49c9('0x22')]();}else if(_0x360e6b[_0x49c9('0x2d')]===_0x49c9('0x34')&&_0x360e6b['variableName']&&_0x360e6b[_0x49c9('0x32')]&&_0x360e6b[_0x49c9('0x2f')]){_0x289ebe[_0x360e6b['variableName']]&&(_0x2283b0[_0x49c9('0x33')][_0x360e6b[_0x49c9('0x32')]]=_0x289ebe[_0x360e6b['variableName']][_0x49c9('0x22')]());}else if(_0x360e6b['type']==='customVariable'&&_0x360e6b['Variable']&&_0x360e6b[_0x49c9('0x35')][_0x49c9('0x36')]&&_0x360e6b[_0x49c9('0x32')]&&_0x360e6b['customField']){_0x289ebe[_0x360e6b[_0x49c9('0x35')][_0x49c9('0x36')][_0x49c9('0x30')]()]&&(_0x2283b0[_0x49c9('0x33')][_0x360e6b[_0x49c9('0x32')]]=_0x289ebe[_0x360e6b[_0x49c9('0x35')][_0x49c9('0x36')][_0x49c9('0x30')]()]['toString']());}});}if(_0x2283b0[_0x49c9('0x37')]){_0x2283b0[_0x49c9('0x37')]=Number(_0x2283b0[_0x49c9('0x37')]);}return _0x2283b0;}function getTicket(_0x4f485e,_0xb15898,_0x421f37,_0x18c2c9,_0x5ac9a0){logger[_0x49c9('0x14')](_0x49c9('0x38'));var _0x5f5996=_[_0x49c9('0x39')]({'subject':intUtil['getString'](_0x18c2c9['Subjects'],_0x5ac9a0,'\x20'),'type':_0x49c9('0x3a'),'status':'new','labels':[_0x49c9('0x3b'),_0x49c9('0x3c'),_0x49c9('0x3d')]['concat'](getTags(_0x18c2c9['Tags'],_0x49c9('0x36'))),'description':intUtil[_0x49c9('0x3e')](_0x18c2c9[_0x49c9('0x3f')],_0x5ac9a0,'\x0a'),'_links':{'assigned_user':{'href':util[_0x49c9('0xe')](_0x49c9('0x40'),_0xb15898['id']),'class':_0x49c9('0x41')}},'message':{'direction':'in','body':intUtil[_0x49c9('0x3e')](_0x18c2c9[_0x49c9('0x3f')],_0x5ac9a0,'\x0a')}},getCustomFields(_0x18c2c9[_0x49c9('0x42')],_0x5ac9a0));return request({'uri':util[_0x49c9('0xe')]('%s/customers/%d/cases',_0x4f485e['remoteUri'],_0x421f37['id']),'method':_0x49c9('0x27'),'body':_0x5f5996});}exports[_0x49c9('0x43')]=function(_0x19c651,_0xa26a95,_0x38e0a4,_0x3ef983,_0x3a7cca,_0x5265c8){var _0x2288f2,_0x5a900c;_0x5265c8[_0x49c9('0xf')]=intUtil[_0x49c9('0x44')](_0x5265c8[_0x49c9('0xf')]);_0x5265c8['serverUrl']=intUtil['stripTrailingSlash'](_0x5265c8[_0x49c9('0x45')]);if(_0x3a7cca&&_0x3a7cca['monitor_format']){logger[_0x49c9('0x14')]('[QUEUE]',_0x49c9('0x46'));_0xa26a95[_0x49c9('0x47')]=util[_0x49c9('0xe')](_0x49c9('0x48'),_0x5265c8[_0x49c9('0x45')],_0xa26a95[_0x49c9('0x49')],md5(_0xa26a95[_0x49c9('0x49')]));}else{_0xa26a95[_0x49c9('0x47')]='';}headers[_0x49c9('0x4a')]=getAuth(_0x5265c8);return getUser(_0x5265c8,_0x3ef983[_0x49c9('0x4b')])[_0x49c9('0x10')](function(_0x586cf0){_0x2288f2=_0x586cf0;logger[_0x49c9('0x14')](_0x49c9('0x4c'),_0x2288f2['id']);return getEndUser(_0x5265c8,_0xa26a95[_0x49c9('0x4d')],_0xa26a95[_0x49c9('0x4e')]);})[_0x49c9('0x10')](function(_0x4e9499){_0x5a900c=_0x4e9499;logger[_0x49c9('0x14')](_0x49c9('0x4f'),_0x5a900c['id']);return getTicket(_0x5265c8,_0x2288f2,_0x5a900c,_0x38e0a4,_0xa26a95);})[_0x49c9('0x10')](function(_0x3332d0){if(_0x3332d0){logger[_0x49c9('0x14')]('Ticket\x20created!');logger[_0x49c9('0x14')](_0x49c9('0x50'),_0x3332d0['id']);switch(_0x5265c8[_0x49c9('0x2d')]){case'integrationTab':logger[_0x49c9('0x14')](_0x49c9('0x51'),_0x49c9('0x52'));emit(util['format'](_0x49c9('0x53'),_0x3ef983[_0x49c9('0x36')]),_0x49c9('0x54'),{'recordId':_0x3332d0['id']});break;case _0x49c9('0x55'):logger[_0x49c9('0x14')](_0x49c9('0x51'),_0x49c9('0x56'));emit(util['format'](_0x49c9('0x53'),_0x3ef983[_0x49c9('0x36')]),'trigger:browser:url',{'uri':util[_0x49c9('0xe')](_0x49c9('0x57'),_0x3332d0['id'])});break;default:logger[_0x49c9('0x58')](_0x49c9('0x51'),_0x49c9('0x59'));}}})[_0x49c9('0x5a')](function(_0x296f61){console['error'](_0x296f61);logger[_0x49c9('0x58')]('[QUEUE]',JSON[_0x49c9('0x1a')](_0x296f61));});};exports['outbound']=function(_0x268b0c,_0x25a88b,_0x1f215c,_0x1626c8,_0x2b1a3b,_0x1c05ec,_0x19df9c){var _0x644781,_0x5be0e5;_0x1c05ec[_0x49c9('0xf')]=intUtil[_0x49c9('0x44')](_0x1c05ec['remoteUri']);_0x1c05ec[_0x49c9('0x45')]=intUtil[_0x49c9('0x44')](_0x1c05ec['serverUrl']);if(_0x19df9c&&_0x19df9c['recordingFormat']&&_0x19df9c[_0x49c9('0x5b')]!==_0x49c9('0x5c')){logger[_0x49c9('0x14')](_0x49c9('0x5d'),_0x49c9('0x46'));_0x25a88b[_0x49c9('0x47')]=util[_0x49c9('0xe')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x1c05ec[_0x49c9('0x45')],_0x25a88b[_0x49c9('0x49')],md5(_0x25a88b[_0x49c9('0x49')]));}headers[_0x49c9('0x4a')]=getAuth(_0x1c05ec);return getUser(_0x1c05ec,_0x1626c8[_0x49c9('0x4b')])[_0x49c9('0x10')](function(_0x2dcedd){_0x644781=_0x2dcedd;logger[_0x49c9('0x14')](_0x49c9('0x4c'),_0x644781['id']);return getEndUser(_0x1c05ec,_0x25a88b['destcalleridname'],_0x25a88b[_0x49c9('0x5e')]);})[_0x49c9('0x10')](function(_0x5bd646){_0x5be0e5=_0x5bd646;logger[_0x49c9('0x14')](_0x49c9('0x4f'),_0x5be0e5['id']);return getTicket(_0x1c05ec,_0x644781,_0x5be0e5,_0x1f215c,_0x25a88b);})[_0x49c9('0x10')](function(_0x37c57b){if(_0x37c57b){logger[_0x49c9('0x14')](_0x49c9('0x5f'));logger[_0x49c9('0x14')](_0x49c9('0x50'),_0x37c57b['id']);switch(_0x1c05ec[_0x49c9('0x2d')]){case _0x49c9('0x60'):logger[_0x49c9('0x14')](_0x49c9('0x51'),_0x49c9('0x52'));emit(util['format']('user:%s',_0x1626c8[_0x49c9('0x36')]),_0x49c9('0x54'),{'recordId':_0x37c57b['id']});break;case _0x49c9('0x55'):logger[_0x49c9('0x14')](_0x49c9('0x51'),_0x49c9('0x56'));emit(util['format'](_0x49c9('0x53'),_0x1626c8[_0x49c9('0x36')]),'trigger:browser:url',{'uri':util[_0x49c9('0xe')]('%s/agent/tickets/%s',_0x1c05ec['remoteUri'],_0x37c57b['id'])});break;default:logger[_0x49c9('0x58')](_0x49c9('0x5d'),_0x49c9('0x59'));}}})['catch'](function(_0x47d755){logger[_0x49c9('0x58')](_0x49c9('0x5d'),JSON[_0x49c9('0x1a')](_0x47d755));});};exports['unmanaged']=function(_0x15da57,_0x259c30,_0x3e9505,_0x3c0d5e,_0x3b5a36,_0x4beec3){var _0x12bf80,_0x82a545;_0x4beec3[_0x49c9('0xf')]=intUtil[_0x49c9('0x44')](_0x4beec3[_0x49c9('0xf')]);_0x4beec3[_0x49c9('0x45')]=intUtil[_0x49c9('0x44')](_0x4beec3[_0x49c9('0x45')]);if(_0x3b5a36&&_0x3b5a36[_0x49c9('0x61')]){logger[_0x49c9('0x14')]('['+_0x259c30[_0x49c9('0x62')][_0x49c9('0x63')]()+']',_0x49c9('0x46'));_0x259c30[_0x49c9('0x47')]=util[_0x49c9('0xe')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x4beec3[_0x49c9('0x45')],_0x259c30[_0x49c9('0x49')],md5(_0x259c30[_0x49c9('0x49')]));}else{_0x259c30['recordingURL']='';}headers[_0x49c9('0x4a')]=getAuth(_0x4beec3);return getUser(_0x4beec3)[_0x49c9('0x10')](function(_0x4f7eac){_0x12bf80=_0x4f7eac;logger[_0x49c9('0x14')](_0x49c9('0x4c'),_0x12bf80['id']);return getEndUser(_0x4beec3,_0x259c30[_0x49c9('0x4d')],_0x259c30[_0x49c9('0x4e')]);})[_0x49c9('0x10')](function(_0x4c611e){_0x82a545=_0x4c611e;logger[_0x49c9('0x14')](_0x49c9('0x4f'),_0x82a545['id']);return getTicket(_0x4beec3,_0x12bf80,_0x82a545,_0x3e9505,_0x259c30);})[_0x49c9('0x10')](function(_0x259251){if(_0x259251){logger[_0x49c9('0x14')](_0x49c9('0x5f'));logger[_0x49c9('0x14')]('The\x20Ticket\x20ID\x20is:',_0x259251['id']);}})[_0x49c9('0x5a')](function(_0x4a7ade){logger[_0x49c9('0x58')]('['+_0x259c30[_0x49c9('0x62')]['toUpperCase']()+']',JSON['stringify'](_0x4a7ade));});};