6afd969b63236fbce910f70aa434ec5d18a5781f
[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 _0x9204=['userEmail','length','internalemailaddress','isdisabled','info',']\x20Agent\x20found\x20','systemuserid','userId',']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','destcalleridnum','contacts','/systemusers(','body','headers','odata-entityid','substring','lastIndexOf','enduserId','message','toLowerCase','outbound','calleridnum','GET','contacts?$select=','replace','%2b','nothing',']\x20Enduser\x20created!','includes','string','picklist','type','nameField','idField','content','ticketType','incident','incidents','assign','getString','Descriptions','/contacts(','Fields','phonecall','queue','callDirection','Subjects','format','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','user:%s','emit','trigger:browser:url','stripTrailingSlash','serverUrl','unmanaged','%s/api/data/v9.0/','data7','https://login.microsoftonline.com/%s/oauth2/token','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','recordingFormat','none','[OUTBOUND]',']\x20The\x20User\x20ID\x20is:',']\x20The\x20User\x20email\x20is:','moduleCreate','additionalSearchContact',']\x20The\x20Enduser\x20ID\x20is:',']\x20The\x20%s\x20ID\x20is:\x20%s','ticketId',']\x20Call\x20direction:\x20%s','openNewTab','Displaying\x20call\x20in\x20a\x20new\x20tab...','name',']\x20Error\x20running\x20Dynamics365\x20integration','lodash','request-promise','./util','ioredis','../../../../config/logger','dynamics365','../../../../config/environment','redis','socket.io-emitter','modernAuthentication','remoteUri','tenantId','CloudProvider','data2','resolve','data5','POST','username','password','clientSecret','then','access_token','catch','error','toUpperCase',']\x20Wrong\x20credentials!','Bearer\x20','4.0','value','isNil','validateEmail','email'];(function(_0x7e2384,_0xd8f685){var _0x40656f=function(_0x10c17f){while(--_0x10c17f){_0x7e2384['push'](_0x7e2384['shift']());}};_0x40656f(++_0xd8f685);}(_0x9204,0x194));var _0x4920=function(_0x1b3d86,_0x4463fa){_0x1b3d86=_0x1b3d86-0x0;var _0x171257=_0x9204[_0x1b3d86];return _0x171257;};'use strict';var _=require(_0x4920('0x0'));var rp=require(_0x4920('0x1'));var util=require('util');var intUtil=require(_0x4920('0x2'));var md5=require('md5');var Redis=require(_0x4920('0x3'));var logger=require(_0x4920('0x4'))(_0x4920('0x5'));var config=require(_0x4920('0x6'));config[_0x4920('0x7')]=_['defaults'](config[_0x4920('0x7')],{'host':'localhost','port':0x18eb});var io=require(_0x4920('0x8'))(new Redis(config[_0x4920('0x7')]));function getAuthToken(_0x4e132a,_0x593c37,_0x5ece12){if(_0x4e132a[_0x4920('0x9')]){_0x4e132a[_0x4920('0xa')]=_0x4e132a['CloudProvider']['data7'];_0x4e132a[_0x4920('0xb')]=_0x4e132a[_0x4920('0xc')][_0x4920('0xd')];return Promise[_0x4920('0xe')](_0x4e132a['CloudProvider'][_0x4920('0xf')]);}var _0x4e8518={'method':_0x4920('0x10'),'uri':_0x593c37,'form':{'client_id':_0x4e132a['clientId'],'resource':_0x4e132a['remoteUri'],'username':_0x4e132a[_0x4920('0x11')],'password':_0x4e132a[_0x4920('0x12')],'grant_type':_0x4920('0x12'),'client_secret':_0x4e132a[_0x4920('0x13')]},'json':!![]};return rp(_0x4e8518)[_0x4920('0x14')](function(_0x402e1f){return _0x402e1f[_0x4920('0x15')];})[_0x4920('0x16')](function(_0x2ec27a){logger[_0x4920('0x17')]('['+[_0x5ece12[_0x4920('0x18')]()]+_0x4920('0x19'));return _0x2ec27a['message'];});}function getUser(_0x274b1c,_0x3c401f,_0x5de2fd,_0x2af145,_0x216483,_0x3d6ecb){return new Promise(function(_0x46cc97,_0x4f6d02){return getAuthToken(_0x3c401f,_0x2af145,_0x3d6ecb)[_0x4920('0x14')](function(_0x4e05ad){var _0x3e8072={'method':'GET','uri':_0x216483+'systemusers?$select=internalemailaddress,isdisabled,systemuserid','headers':{'Authorization':_0x4920('0x1a')+_0x4e05ad,'OData-Version':_0x4920('0x1b')},'json':!![]};return rp(_0x3e8072);})[_0x4920('0x14')](function(_0x3aa491){var _0x381167=_0x3aa491[_0x4920('0x1c')];var _0x41091c=![];var _0x51a1c6=null;if(!_[_0x4920('0x1d')](_0x5de2fd)){if(intUtil[_0x4920('0x1e')](_0x5de2fd[_0x4920('0x1f')])){_0x274b1c[_0x4920('0x20')]=_0x5de2fd[_0x4920('0x1f')];for(_0x51a1c6=0x0;_0x51a1c6<_0x381167[_0x4920('0x21')];_0x51a1c6++){if(_0x381167[_0x51a1c6][_0x4920('0x22')]===_0x5de2fd[_0x4920('0x1f')]&&!_0x381167[_0x51a1c6][_0x4920('0x23')]){_0x41091c=!![];logger[_0x4920('0x24')]('['+[_0x3d6ecb[_0x4920('0x18')]()]+_0x4920('0x25')+_0x381167[_0x51a1c6][_0x4920('0x26')]+'!');_0x274b1c[_0x4920('0x27')]=_0x381167[_0x51a1c6]['systemuserid'];}}}}if(!_0x41091c){logger['info']('['+[_0x3d6ecb['toUpperCase']()]+_0x4920('0x28'));_0x274b1c['userEmail']=_0x3c401f['username'];for(_0x51a1c6=0x0;_0x51a1c6<_0x381167[_0x4920('0x21')];_0x51a1c6++){if(_0x381167[_0x51a1c6]['internalemailaddress']===_0x3c401f[_0x4920('0x11')]){_0x274b1c['userId']=_0x381167[_0x51a1c6][_0x4920('0x26')];}}}_0x46cc97(_0x274b1c);})[_0x4920('0x16')](function(_0x395cca){_0x4f6d02(_0x395cca['message']);});});}function createEndUser(_0x47d344,_0x2f5f2b,_0x3454b0,_0x23dccf,_0x12f54d,_0x58657b,_0x357763){return new Promise(function(_0x59af80,_0x256953){return getAuthToken(_0x2f5f2b,_0x3454b0,_0x58657b)[_0x4920('0x14')](function(_0x4a6f00){var _0x4f85d5=_0x58657b['toLowerCase']()==='outbound'?_0x12f54d[_0x4920('0x29')]:_0x12f54d['calleridnum'];var _0x5558f3={'method':_0x4920('0x10'),'uri':_0x23dccf+_0x4920('0x2a'),'body':{'fullname':_0x4f85d5,'firstname':_0x4f85d5,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':_0x4920('0x2b')+_0x47d344[_0x4920('0x27')]+')'},'headers':{'Authorization':_0x4920('0x1a')+_0x4a6f00,'OData-Version':'4.0'},'json':!![],'resolveWithFullResponse':!![]};_0x5558f3[_0x4920('0x2c')][_0x357763]=_0x4f85d5;return rp(_0x5558f3);})[_0x4920('0x14')](function(_0x4fd3f1){var _0xbe2aef=_0x4fd3f1[_0x4920('0x2d')][_0x4920('0x2e')];var _0x3a5b3e=_0xbe2aef[_0x4920('0x2f')](_0xbe2aef[_0x4920('0x30')]('(')+0x1,_0xbe2aef[_0x4920('0x30')](')'));_0x47d344[_0x4920('0x31')]=_0x3a5b3e;_0x59af80(_0x47d344);})[_0x4920('0x16')](function(_0xb3e648){_0x256953(_0xb3e648[_0x4920('0x32')]);});});}function getEndUser(_0x4919cf,_0x408448,_0x518e34,_0x213220,_0x126e88,_0x4fe21e,_0x4bb338,_0x5d5bfc){var _0x1598ac=_0x4fe21e[_0x4920('0x33')]()===_0x4920('0x34')?_0x126e88[_0x4920('0x29')]:_0x126e88[_0x4920('0x35')];return getAuthToken(_0x408448,_0x518e34,_0x4fe21e)['then'](function(_0x217002){_0x5d5bfc=_0x5d5bfc?_0x5d5bfc:'telephone1';var _0x35905f={'method':_0x4920('0x36'),'uri':_0x213220+_0x4920('0x37')+_0x5d5bfc+'&$filter='+_0x5d5bfc+'\x20eq\x20\x27'+_0x1598ac[_0x4920('0x38')]('+',_0x4920('0x39'))+'\x27','headers':{'Authorization':'Bearer\x20'+_0x217002,'If-None-Match':null,'OData-Version':_0x4920('0x1b')},'json':!![]};return rp(_0x35905f);})[_0x4920('0x14')](function(_0x3894d2){var _0x563a31=![];if(!_0x3894d2)return _0x563a31;var _0x5506b1=_0x3894d2['value'];for(var _0x51c35d=0x0;_0x51c35d<_0x5506b1[_0x4920('0x21')];_0x51c35d++){if(_0x5506b1[_0x51c35d][_0x5d5bfc]===_0x1598ac){_0x563a31=!![];_0x4919cf[_0x4920('0x31')]=_0x5506b1[_0x51c35d]['contactid'];}}return _0x563a31;})[_0x4920('0x14')](function(_0x5648e2){if(_0x5648e2)return _0x4919cf;if(_0x4bb338===_0x4920('0x3a')){logger[_0x4920('0x24')]('['+[_0x4fe21e[_0x4920('0x18')]()]+']\x20Enduser\x20NOT\x20Created\x20-\x20ModuleCreate\x20=\x20Nothing');return _0x4919cf;}return createEndUser(_0x4919cf,_0x408448,_0x518e34,_0x213220,_0x126e88,_0x4fe21e,_0x5d5bfc)[_0x4920('0x14')](function(_0x1c9a76){logger[_0x4920('0x24')]('['+[_0x4fe21e[_0x4920('0x18')]()]+_0x4920('0x3b'),_0x1c9a76[_0x4920('0x31')]);return _0x1c9a76;});});}function getCustomFields(_0x40caf0,_0x45fa56,_0x1a2531){var _0x55403c={};if(_0x40caf0[_0x4920('0x21')]>0x0){_['forEach'](_0x40caf0,function(_0x59076d){if(_[_0x4920('0x3c')]([_0x4920('0x3d'),_0x4920('0x3e')],_0x59076d[_0x4920('0x3f')])&&_0x59076d[_0x4920('0x40')]&&!_0x59076d['customField']){var _0x4a26b6=_0x59076d[_0x4920('0x41')][_0x4920('0x33')]();var _0x11cfcc=_0x4a26b6[_0x4920('0x2f')](0x0,_0x4a26b6['indexOf']('_'));var _0xefdc8c=_0x4a26b6[_0x4920('0x2f')](_0x4a26b6['indexOf']('_')+0x1);if(_0x11cfcc===_0x1a2531){_0x55403c[_0xefdc8c]=_0x59076d[_0x4920('0x42')];}}});}return _0x55403c;}function getTicket(_0x3968f0,_0xa50434,_0x5c8faf,_0x3a1e7c,_0x459f15,_0xd19483,_0x17f6ff){return new Promise(function(_0x3709d8,_0x128cb8){var _0x5218fa;return getAuthToken(_0xa50434,_0x5c8faf,_0x17f6ff)[_0x4920('0x14')](function(_0xe978a5){if(_0xd19483[_0x4920('0x43')]===_0x4920('0x44')){_0x5218fa={'method':_0x4920('0x10'),'uri':_0x3a1e7c+_0x4920('0x45'),'body':Object[_0x4920('0x46')]({},{'title':intUtil[_0x4920('0x47')](_0xd19483['Subjects'],_0x459f15,'\x20'),'description':intUtil[_0x4920('0x47')](_0xd19483[_0x4920('0x48')],_0x459f15,'\x0a'),'customerid_contact@odata.bind':_0x3968f0['enduserId']?_0x4920('0x49')+_0x3968f0[_0x4920('0x31')]+')':undefined,'ownerid@odata.bind':'/systemusers('+_0x3968f0[_0x4920('0x27')]+')','caseorigincode':'1'},getCustomFields(_0xd19483[_0x4920('0x4a')],_0x459f15,_0xd19483[_0x4920('0x43')])),'headers':{'Authorization':'Bearer\x20'+_0xe978a5,'OData-Version':_0x4920('0x1b')},'json':!![],'resolveWithFullResponse':!![]};}if(_0xd19483[_0x4920('0x43')]===_0x4920('0x4b')){var _0x506b09=_0x3968f0[_0x4920('0x31')]?[{'partyid_systemuser@odata.bind':_0x4920('0x2b')+_0x3968f0[_0x4920('0x27')]+')','participationtypemask':_0x3968f0['callDirection']==='queue'?0x2:0x1},{'partyid_contact@odata.bind':'/contacts('+_0x3968f0[_0x4920('0x31')]+')','participationtypemask':_0x3968f0['callDirection']===_0x4920('0x4c')?0x1:0x2}]:[{'partyid_systemuser@odata.bind':_0x4920('0x2b')+_0x3968f0[_0x4920('0x27')]+')','participationtypemask':_0x3968f0[_0x4920('0x4d')]===_0x4920('0x4c')?0x2:0x1}];_0x5218fa={'method':'POST','uri':_0x3a1e7c+'phonecalls','body':Object[_0x4920('0x46')]({},{'subject':intUtil[_0x4920('0x47')](_0xd19483[_0x4920('0x4e')],_0x459f15,'\x20'),'phonenumber':String(_0x459f15[_0x4920('0x35')]),'description':intUtil[_0x4920('0x47')](_0xd19483[_0x4920('0x48')],_0x459f15,'\x0a'),'regardingobjectid_contact@odata.bind':_0x3968f0[_0x4920('0x31')]?_0x4920('0x49')+_0x3968f0[_0x4920('0x31')]+')':undefined,'ownerid@odata.bind':_0x4920('0x2b')+_0x3968f0[_0x4920('0x27')]+')','directioncode':_0x3968f0[_0x4920('0x4d')]===_0x4920('0x4c')?![]:!![],'phonecall_activity_parties':_0x506b09},getCustomFields(_0xd19483['Fields'],_0x459f15,_0xd19483[_0x4920('0x43')])),'headers':{'Authorization':_0x4920('0x1a')+_0xe978a5,'OData-Version':_0x4920('0x1b')},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x5218fa);})[_0x4920('0x14')](function(_0x60c0e8){var _0x157871=_0x60c0e8[_0x4920('0x2d')][_0x4920('0x2e')];var _0xd1fa2c=_0x157871[_0x4920('0x2f')](_0x157871[_0x4920('0x30')]('(')+0x1,_0x157871[_0x4920('0x30')](')'));_0x3968f0['ticketId']=_0xd1fa2c;_0x3709d8(_0x3968f0);})[_0x4920('0x16')](function(_0x25fa81){_0x128cb8(_0x25fa81[_0x4920('0x32')]);});});}function emit(_0x32ab69,_0x1d95c8,_0x5abfd8,_0x19b96a){var _0x3f8719={'uri':util[_0x4920('0x4f')](_0x4920('0x50'),_0x32ab69,_0x5abfd8,_0x19b96a)};io['to'](util['format'](_0x4920('0x51'),_0x1d95c8))[_0x4920('0x52')](_0x4920('0x53'),_0x3f8719);}exports['cs']=function(_0x420527,_0x37c23a,_0x49f3f6,_0x2523f8,_0x2c6069,_0x29f847,_0x42a750,_0x1272b4){var _0x3d8ddf={};_0x29f847['remoteUri']=_0x29f847['modernAuthentication']?intUtil['stripTrailingSlash'](_0x29f847[_0x4920('0xc')]['data7']):intUtil[_0x4920('0x54')](_0x29f847[_0x4920('0xa')]);_0x29f847[_0x4920('0x55')]=intUtil[_0x4920('0x54')](_0x29f847[_0x4920('0x55')]);_0x3d8ddf['callDirection']=_0x1272b4===_0x4920('0x4c')||_0x1272b4===_0x4920('0x56')?_0x4920('0x4c'):_0x4920('0x34');var _0x3cb78e=_0x29f847['modernAuthentication']?util['format'](_0x4920('0x57'),_0x29f847[_0x4920('0xc')][_0x4920('0x58')]):util[_0x4920('0x4f')](_0x4920('0x57'),_0x29f847[_0x4920('0xa')]);var _0x28e8a8=util[_0x4920('0x4f')](_0x4920('0x59'),_0x29f847[_0x4920('0xb')]);var _0x139923=util[_0x4920('0x4f')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x29f847['serverUrl'],_0x37c23a['uniqueid'],md5(_0x37c23a['uniqueid']));if(_0x2c6069&&_0x2c6069[_0x4920('0x5a')]){logger[_0x4920('0x24')](_0x4920('0x5b'),_0x4920('0x5c'));_0x37c23a[_0x4920('0x5d')]=_0x139923;}else if(_0x42a750&&_0x42a750[_0x4920('0x5e')]&&_0x42a750[_0x4920('0x5e')]!==_0x4920('0x5f')){logger[_0x4920('0x24')](_0x4920('0x60'),'Recording\x20is\x20enabled!');_0x37c23a[_0x4920('0x5d')]=_0x139923;}else{_0x37c23a['recordingURL']='';}return getUser(_0x3d8ddf,_0x29f847,_0x2523f8,_0x28e8a8,_0x3cb78e,_0x1272b4)['then'](function(_0x5e80e7){logger[_0x4920('0x24')]('['+_0x1272b4['toUpperCase']()+_0x4920('0x61'),_0x5e80e7[_0x4920('0x27')]);logger['info']('['+_0x1272b4['toUpperCase']()+_0x4920('0x62'),_0x5e80e7[_0x4920('0x20')]);return getEndUser(_0x5e80e7,_0x29f847,_0x28e8a8,_0x3cb78e,_0x37c23a,_0x1272b4,_0x49f3f6[_0x4920('0x63')],_0x49f3f6[_0x4920('0x64')]);})[_0x4920('0x14')](function(_0x446251){logger['info']('['+_0x1272b4[_0x4920('0x18')]()+_0x4920('0x65'),_0x446251[_0x4920('0x31')]);logger['info']('['+_0x1272b4['toUpperCase']()+']\x20The\x20Enduser\x20phone\x20is:',_0x37c23a[_0x4920('0x35')]);return getTicket(_0x446251,_0x29f847,_0x28e8a8,_0x3cb78e,_0x37c23a,_0x49f3f6,_0x1272b4);})[_0x4920('0x14')](function(_0x177a81){logger[_0x4920('0x24')](util[_0x4920('0x4f')]('['+_0x1272b4['toUpperCase']()+_0x4920('0x66'),_0x49f3f6[_0x4920('0x43')],_0x177a81[_0x4920('0x67')]));logger[_0x4920('0x24')](util[_0x4920('0x4f')]('['+_0x1272b4[_0x4920('0x18')]()+_0x4920('0x68'),_0x1272b4));if(_0x1272b4!=='unmanaged'&&_0x49f3f6[_0x4920('0x69')]){logger[_0x4920('0x24')]('['+_0x1272b4['toUpperCase']()+']',_0x4920('0x6a'));emit(_0x29f847[_0x4920('0xa')],_0x2523f8[_0x4920('0x6b')],_0x49f3f6[_0x4920('0x43')],_0x177a81[_0x4920('0x67')]);}})['catch'](function(_0x23d9a3){logger['error']('['+_0x1272b4[_0x4920('0x18')]()+_0x4920('0x6c'),_0x23d9a3['message']);console['error']('Error\x20running\x20Dynamics365\x20integration',_0x23d9a3);});};