7fe927900f160d9b21fc3e97bb156a0caf45ece3
[motion2.git] / server / services / ami / trigger / integration / dynamics365.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 _0x2d51=['unmanaged','%s/api/data/v9.0/','https://login.microsoftonline.com/%s/oauth2/token','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingFormat','[OUTBOUND]','recordingURL',']\x20The\x20User\x20ID\x20is:',']\x20The\x20User\x20email\x20is:','moduleCreate','additionalSearchContact',']\x20The\x20Enduser\x20ID\x20is:',']\x20The\x20Enduser\x20phone\x20is:',']\x20The\x20%s\x20ID\x20is:\x20%s',']\x20Call\x20direction:\x20%s','openNewTab','Displaying\x20call\x20in\x20a\x20new\x20tab...','name','error','Error\x20running\x20Dynamics365\x20integration','request-promise','util','./util','md5','ioredis','../../../../config/logger','../../../../config/environment','redis','localhost','socket.io-emitter','modernAuthentication','CloudProvider','data7','tenantId','data2','POST','clientId','remoteUri','password','clientSecret','access_token','catch','toUpperCase',']\x20Wrong\x20credentials!','message','then','GET','systemusers?$select=internalemailaddress,isdisabled,systemuserid','Bearer\x20','4.0','value','validateEmail','email','userEmail','internalemailaddress','info','systemuserid','userId',']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','username','length','toLowerCase','outbound','calleridnum','headers','odata-entityid','substring','enduserId','destcalleridnum','contacts?$select=','&$filter=','\x20eq\x20\x27','replace','%2b','contactid',']\x20Enduser\x20NOT\x20Created\x20-\x20ModuleCreate\x20=\x20Nothing',']\x20Enduser\x20created!','includes','string','picklist','type','nameField','content','incident','assign','getString','Descriptions','/contacts(','Fields','ticketType','phonecall','queue','callDirection','/systemusers(','Subjects','lastIndexOf','ticketId','format','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','user:%s','emit','trigger:browser:url','stripTrailingSlash','serverUrl'];(function(_0x4dc5ec,_0x254f19){var _0x585bee=function(_0x20079b){while(--_0x20079b){_0x4dc5ec['push'](_0x4dc5ec['shift']());}};_0x585bee(++_0x254f19);}(_0x2d51,0x1c8));var _0x12d5=function(_0x54cb59,_0x451548){_0x54cb59=_0x54cb59-0x0;var _0x4c9cdc=_0x2d51[_0x54cb59];return _0x4c9cdc;};'use strict';var _=require('lodash');var rp=require(_0x12d5('0x0'));var util=require(_0x12d5('0x1'));var intUtil=require(_0x12d5('0x2'));var md5=require(_0x12d5('0x3'));var Redis=require(_0x12d5('0x4'));var logger=require(_0x12d5('0x5'))('dynamics365');var config=require(_0x12d5('0x6'));config[_0x12d5('0x7')]=_['defaults'](config['redis'],{'host':_0x12d5('0x8'),'port':0x18eb});var io=require(_0x12d5('0x9'))(new Redis(config['redis']));function getAuthToken(_0x37e10e,_0x5b26ae,_0x4c9a57){if(_0x37e10e[_0x12d5('0xa')]){_0x37e10e['remoteUri']=_0x37e10e[_0x12d5('0xb')][_0x12d5('0xc')];_0x37e10e[_0x12d5('0xd')]=_0x37e10e[_0x12d5('0xb')][_0x12d5('0xe')];return Promise['resolve'](_0x37e10e[_0x12d5('0xb')]['data5']);}var _0x37d670={'method':_0x12d5('0xf'),'uri':_0x5b26ae,'form':{'client_id':_0x37e10e[_0x12d5('0x10')],'resource':_0x37e10e[_0x12d5('0x11')],'username':_0x37e10e['username'],'password':_0x37e10e['password'],'grant_type':_0x12d5('0x12'),'client_secret':_0x37e10e[_0x12d5('0x13')]},'json':!![]};return rp(_0x37d670)['then'](function(_0x188cdd){return _0x188cdd[_0x12d5('0x14')];})[_0x12d5('0x15')](function(_0x5446e1){logger['error']('['+[_0x4c9a57[_0x12d5('0x16')]()]+_0x12d5('0x17'));return _0x5446e1[_0x12d5('0x18')];});}function getUser(_0x4ef9af,_0x31a93b,_0x529113,_0x5e1601,_0x4259cc,_0xf29010){return new Promise(function(_0xbac7,_0x2effab){return getAuthToken(_0x31a93b,_0x5e1601,_0xf29010)[_0x12d5('0x19')](function(_0x12b73f){var _0x4211fe={'method':_0x12d5('0x1a'),'uri':_0x4259cc+_0x12d5('0x1b'),'headers':{'Authorization':_0x12d5('0x1c')+_0x12b73f,'OData-Version':_0x12d5('0x1d')},'json':!![]};return rp(_0x4211fe);})[_0x12d5('0x19')](function(_0x550519){var _0x3a7cfc=_0x550519[_0x12d5('0x1e')];var _0x377285=![];var _0x29e849=null;if(!_['isNil'](_0x529113)){if(intUtil[_0x12d5('0x1f')](_0x529113[_0x12d5('0x20')])){_0x4ef9af[_0x12d5('0x21')]=_0x529113[_0x12d5('0x20')];for(_0x29e849=0x0;_0x29e849<_0x3a7cfc['length'];_0x29e849++){if(_0x3a7cfc[_0x29e849][_0x12d5('0x22')]===_0x529113['email']&&!_0x3a7cfc[_0x29e849]['isdisabled']){_0x377285=!![];logger[_0x12d5('0x23')]('['+[_0xf29010['toUpperCase']()]+']\x20Agent\x20found\x20'+_0x3a7cfc[_0x29e849][_0x12d5('0x24')]+'!');_0x4ef9af[_0x12d5('0x25')]=_0x3a7cfc[_0x29e849][_0x12d5('0x24')];}}}}if(!_0x377285){logger[_0x12d5('0x23')]('['+[_0xf29010[_0x12d5('0x16')]()]+_0x12d5('0x26'));_0x4ef9af[_0x12d5('0x21')]=_0x31a93b[_0x12d5('0x27')];for(_0x29e849=0x0;_0x29e849<_0x3a7cfc[_0x12d5('0x28')];_0x29e849++){if(_0x3a7cfc[_0x29e849][_0x12d5('0x22')]===_0x31a93b[_0x12d5('0x27')]){_0x4ef9af[_0x12d5('0x25')]=_0x3a7cfc[_0x29e849][_0x12d5('0x24')];}}}_0xbac7(_0x4ef9af);})[_0x12d5('0x15')](function(_0x427cd0){_0x2effab(_0x427cd0[_0x12d5('0x18')]);});});}function createEndUser(_0x52f7cb,_0x1d9b60,_0x5d5541,_0x36915d,_0x572f33,_0x489b14,_0xf4649c){return new Promise(function(_0x230435,_0x355d57){return getAuthToken(_0x1d9b60,_0x5d5541,_0x489b14)[_0x12d5('0x19')](function(_0x575324){var _0x28cfa1=_0x489b14[_0x12d5('0x29')]()===_0x12d5('0x2a')?_0x572f33['destcalleridnum']:_0x572f33[_0x12d5('0x2b')];var _0x7fe1dd={'method':_0x12d5('0xf'),'uri':_0x36915d+'contacts','body':{'fullname':_0x28cfa1,'firstname':_0x28cfa1,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':'/systemusers('+_0x52f7cb[_0x12d5('0x25')]+')'},'headers':{'Authorization':_0x12d5('0x1c')+_0x575324,'OData-Version':_0x12d5('0x1d')},'json':!![],'resolveWithFullResponse':!![]};_0x7fe1dd['body'][_0xf4649c]=_0x28cfa1;return rp(_0x7fe1dd);})[_0x12d5('0x19')](function(_0x48b7da){var _0xaad909=_0x48b7da[_0x12d5('0x2c')][_0x12d5('0x2d')];var _0x48d206=_0xaad909[_0x12d5('0x2e')](_0xaad909['lastIndexOf']('(')+0x1,_0xaad909['lastIndexOf'](')'));_0x52f7cb[_0x12d5('0x2f')]=_0x48d206;_0x230435(_0x52f7cb);})['catch'](function(_0x3f0fa2){_0x355d57(_0x3f0fa2[_0x12d5('0x18')]);});});}function getEndUser(_0x2c069e,_0x5e1340,_0x26bcde,_0x4ded13,_0x16034,_0x3098e1,_0x1b0af6,_0x235644){var _0x970b7b=_0x3098e1['toLowerCase']()==='outbound'?_0x16034[_0x12d5('0x30')]:_0x16034[_0x12d5('0x2b')];return getAuthToken(_0x5e1340,_0x26bcde,_0x3098e1)[_0x12d5('0x19')](function(_0x2d9dcc){_0x235644=_0x235644?_0x235644:'telephone1';var _0x4fb1e0={'method':'GET','uri':_0x4ded13+_0x12d5('0x31')+_0x235644+_0x12d5('0x32')+_0x235644+_0x12d5('0x33')+_0x970b7b[_0x12d5('0x34')]('+',_0x12d5('0x35'))+'\x27','headers':{'Authorization':_0x12d5('0x1c')+_0x2d9dcc,'If-None-Match':null,'OData-Version':_0x12d5('0x1d')},'json':!![]};return rp(_0x4fb1e0);})[_0x12d5('0x19')](function(_0xa7d18){var _0x55782f=![];if(!_0xa7d18)return _0x55782f;var _0x443634=_0xa7d18['value'];for(var _0x37081e=0x0;_0x37081e<_0x443634[_0x12d5('0x28')];_0x37081e++){if(_0x443634[_0x37081e][_0x235644]===_0x970b7b){_0x55782f=!![];_0x2c069e['enduserId']=_0x443634[_0x37081e][_0x12d5('0x36')];}}return _0x55782f;})[_0x12d5('0x19')](function(_0x23d58c){if(_0x23d58c)return _0x2c069e;if(_0x1b0af6==='nothing'){logger[_0x12d5('0x23')]('['+[_0x3098e1[_0x12d5('0x16')]()]+_0x12d5('0x37'));return _0x2c069e;}return createEndUser(_0x2c069e,_0x5e1340,_0x26bcde,_0x4ded13,_0x16034,_0x3098e1,_0x235644)[_0x12d5('0x19')](function(_0x429230){logger['info']('['+[_0x3098e1['toUpperCase']()]+_0x12d5('0x38'),_0x429230[_0x12d5('0x2f')]);return _0x429230;});});}function getCustomFields(_0x41e3fb,_0x595839,_0x366f16){var _0x151db0={};if(_0x41e3fb[_0x12d5('0x28')]>0x0){_['forEach'](_0x41e3fb,function(_0x298cd9){if(_[_0x12d5('0x39')]([_0x12d5('0x3a'),_0x12d5('0x3b')],_0x298cd9[_0x12d5('0x3c')])&&_0x298cd9[_0x12d5('0x3d')]&&!_0x298cd9['customField']){var _0x162923=_0x298cd9['idField'][_0x12d5('0x29')]();var _0x5ef6e3=_0x162923['substring'](0x0,_0x162923['indexOf']('_'));var _0x2950ef=_0x162923[_0x12d5('0x2e')](_0x162923['indexOf']('_')+0x1);if(_0x5ef6e3===_0x366f16){_0x151db0[_0x2950ef]=_0x298cd9[_0x12d5('0x3e')];}}});}return _0x151db0;}function getTicket(_0x54b8fc,_0x23d744,_0x1a5dc9,_0x12dd1a,_0x45ad9f,_0x5c4fc2,_0x514048){return new Promise(function(_0x80d47c,_0x561fc5){var _0x5c81a7;return getAuthToken(_0x23d744,_0x1a5dc9,_0x514048)[_0x12d5('0x19')](function(_0x37575d){if(_0x5c4fc2['ticketType']===_0x12d5('0x3f')){_0x5c81a7={'method':_0x12d5('0xf'),'uri':_0x12dd1a+'incidents','body':Object[_0x12d5('0x40')]({},{'title':intUtil[_0x12d5('0x41')](_0x5c4fc2['Subjects'],_0x45ad9f,'\x20'),'description':intUtil['getString'](_0x5c4fc2[_0x12d5('0x42')],_0x45ad9f,'\x0a'),'customerid_contact@odata.bind':_0x54b8fc[_0x12d5('0x2f')]?_0x12d5('0x43')+_0x54b8fc['enduserId']+')':undefined,'ownerid@odata.bind':'/systemusers('+_0x54b8fc[_0x12d5('0x25')]+')','caseorigincode':'1'},getCustomFields(_0x5c4fc2[_0x12d5('0x44')],_0x45ad9f,_0x5c4fc2[_0x12d5('0x45')])),'headers':{'Authorization':_0x12d5('0x1c')+_0x37575d,'OData-Version':_0x12d5('0x1d')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x5c4fc2[_0x12d5('0x45')]===_0x12d5('0x46')){var _0x5b8fda=_0x54b8fc[_0x12d5('0x2f')]?[{'partyid_systemuser@odata.bind':'/systemusers('+_0x54b8fc[_0x12d5('0x25')]+')','participationtypemask':_0x54b8fc['callDirection']===_0x12d5('0x47')?0x2:0x1},{'partyid_contact@odata.bind':_0x12d5('0x43')+_0x54b8fc[_0x12d5('0x2f')]+')','participationtypemask':_0x54b8fc[_0x12d5('0x48')]===_0x12d5('0x47')?0x1:0x2}]:[{'partyid_systemuser@odata.bind':_0x12d5('0x49')+_0x54b8fc[_0x12d5('0x25')]+')','participationtypemask':_0x54b8fc[_0x12d5('0x48')]==='queue'?0x2:0x1}];_0x5c81a7={'method':'POST','uri':_0x12dd1a+'phonecalls','body':Object[_0x12d5('0x40')]({},{'subject':intUtil['getString'](_0x5c4fc2[_0x12d5('0x4a')],_0x45ad9f,'\x20'),'phonenumber':String(_0x45ad9f[_0x12d5('0x2b')]),'description':intUtil[_0x12d5('0x41')](_0x5c4fc2[_0x12d5('0x42')],_0x45ad9f,'\x0a'),'regardingobjectid_contact@odata.bind':_0x54b8fc[_0x12d5('0x2f')]?_0x12d5('0x43')+_0x54b8fc[_0x12d5('0x2f')]+')':undefined,'ownerid@odata.bind':_0x12d5('0x49')+_0x54b8fc[_0x12d5('0x25')]+')','directioncode':_0x54b8fc[_0x12d5('0x48')]===_0x12d5('0x47')?![]:!![],'phonecall_activity_parties':_0x5b8fda},getCustomFields(_0x5c4fc2['Fields'],_0x45ad9f,_0x5c4fc2['ticketType'])),'headers':{'Authorization':_0x12d5('0x1c')+_0x37575d,'OData-Version':_0x12d5('0x1d')},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x5c81a7);})['then'](function(_0x50c092){var _0x2a5231=_0x50c092['headers']['odata-entityid'];var _0x302189=_0x2a5231[_0x12d5('0x2e')](_0x2a5231[_0x12d5('0x4b')]('(')+0x1,_0x2a5231[_0x12d5('0x4b')](')'));_0x54b8fc[_0x12d5('0x4c')]=_0x302189;_0x80d47c(_0x54b8fc);})['catch'](function(_0x41342b){_0x561fc5(_0x41342b['message']);});});}function emit(_0x330029,_0xa07d24,_0x3cb75e,_0x179eb4){var _0x40e188={'uri':util[_0x12d5('0x4d')](_0x12d5('0x4e'),_0x330029,_0x3cb75e,_0x179eb4)};io['to'](util['format'](_0x12d5('0x4f'),_0xa07d24))[_0x12d5('0x50')](_0x12d5('0x51'),_0x40e188);}exports['cs']=function(_0x35342,_0x2b7162,_0x5434ff,_0x15653f,_0x22f558,_0x593ff8,_0x16c4db,_0x2587e9){var _0x44482f={};_0x593ff8[_0x12d5('0x11')]=_0x593ff8[_0x12d5('0xa')]?intUtil[_0x12d5('0x52')](_0x593ff8[_0x12d5('0xb')]['data7']):intUtil[_0x12d5('0x52')](_0x593ff8[_0x12d5('0x11')]);_0x593ff8[_0x12d5('0x53')]=intUtil[_0x12d5('0x52')](_0x593ff8['serverUrl']);_0x44482f[_0x12d5('0x48')]=_0x2587e9==='queue'||_0x2587e9===_0x12d5('0x54')?_0x12d5('0x47'):_0x12d5('0x2a');var _0x1b9f40=_0x593ff8[_0x12d5('0xa')]?util[_0x12d5('0x4d')](_0x12d5('0x55'),_0x593ff8[_0x12d5('0xb')][_0x12d5('0xc')]):util[_0x12d5('0x4d')](_0x12d5('0x55'),_0x593ff8[_0x12d5('0x11')]);var _0xc34b56=util['format'](_0x12d5('0x56'),_0x593ff8[_0x12d5('0xd')]);var _0x14b338=util[_0x12d5('0x4d')](_0x12d5('0x57'),_0x593ff8[_0x12d5('0x53')],_0x2b7162[_0x12d5('0x58')],md5(_0x2b7162[_0x12d5('0x58')]));if(_0x22f558&&_0x22f558[_0x12d5('0x59')]){logger['info'](_0x12d5('0x5a'),_0x12d5('0x5b'));_0x2b7162['recordingURL']=_0x14b338;}else if(_0x16c4db&&_0x16c4db[_0x12d5('0x5c')]&&_0x16c4db[_0x12d5('0x5c')]!=='none'){logger['info'](_0x12d5('0x5d'),_0x12d5('0x5b'));_0x2b7162[_0x12d5('0x5e')]=_0x14b338;}else{_0x2b7162[_0x12d5('0x5e')]='';}return getUser(_0x44482f,_0x593ff8,_0x15653f,_0xc34b56,_0x1b9f40,_0x2587e9)[_0x12d5('0x19')](function(_0x5b52c9){logger[_0x12d5('0x23')]('['+_0x2587e9['toUpperCase']()+_0x12d5('0x5f'),_0x5b52c9[_0x12d5('0x25')]);logger[_0x12d5('0x23')]('['+_0x2587e9[_0x12d5('0x16')]()+_0x12d5('0x60'),_0x5b52c9['userEmail']);return getEndUser(_0x5b52c9,_0x593ff8,_0xc34b56,_0x1b9f40,_0x2b7162,_0x2587e9,_0x5434ff[_0x12d5('0x61')],_0x5434ff[_0x12d5('0x62')]);})[_0x12d5('0x19')](function(_0x53bede){logger[_0x12d5('0x23')]('['+_0x2587e9[_0x12d5('0x16')]()+_0x12d5('0x63'),_0x53bede[_0x12d5('0x2f')]);logger[_0x12d5('0x23')]('['+_0x2587e9[_0x12d5('0x16')]()+_0x12d5('0x64'),_0x2b7162[_0x12d5('0x2b')]);return getTicket(_0x53bede,_0x593ff8,_0xc34b56,_0x1b9f40,_0x2b7162,_0x5434ff,_0x2587e9);})[_0x12d5('0x19')](function(_0x4c16a9){logger[_0x12d5('0x23')](util[_0x12d5('0x4d')]('['+_0x2587e9[_0x12d5('0x16')]()+_0x12d5('0x65'),_0x5434ff['ticketType'],_0x4c16a9[_0x12d5('0x4c')]));logger[_0x12d5('0x23')](util[_0x12d5('0x4d')]('['+_0x2587e9[_0x12d5('0x16')]()+_0x12d5('0x66'),_0x2587e9));if(_0x2587e9!==_0x12d5('0x54')&&_0x5434ff[_0x12d5('0x67')]){logger['info']('['+_0x2587e9[_0x12d5('0x16')]()+']',_0x12d5('0x68'));emit(_0x593ff8[_0x12d5('0x11')],_0x15653f[_0x12d5('0x69')],_0x5434ff[_0x12d5('0x45')],_0x4c16a9[_0x12d5('0x4c')]);}})[_0x12d5('0x15')](function(_0x2e003f){logger[_0x12d5('0x6a')]('['+_0x2587e9[_0x12d5('0x16')]()+']\x20Error\x20running\x20Dynamics365\x20integration',_0x2e003f[_0x12d5('0x18')]);console[_0x12d5('0x6a')](_0x12d5('0x6b'),_0x2e003f);});};