Built motion from commit da617fac.|2.6.6
[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 _0x4e96=['message','then','Bearer\x20','4.0','isNil','validateEmail','email','userEmail','length','internalemailaddress','isdisabled','info',']\x20Agent\x20found\x20','systemuserid',']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','username','userId','toLowerCase','outbound','destcalleridnum','calleridnum','contacts','/systemusers(','body','headers','substring','lastIndexOf','enduserId','contacts?$select=','&$filter=','replace','%2b','value','contactid',']\x20Enduser\x20NOT\x20Created\x20-\x20ModuleCreate\x20=\x20Nothing',']\x20Enduser\x20created!','forEach','includes','string','picklist','type','idField','indexOf','content','ticketType','incident','incidents','assign','getString','Subjects','Descriptions','/contacts(','Fields','phonecall','callDirection','odata-entityid','format','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','user:%s','trigger:browser:url','modernAuthentication','stripTrailingSlash','serverUrl','queue','unmanaged','%s/api/data/v9.0/','https://login.microsoftonline.com/%s/oauth2/token','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','recordingURL','recordingFormat','none','[OUTBOUND]','Recording\x20is\x20enabled!',']\x20The\x20User\x20email\x20is:','additionalSearchContact',']\x20The\x20Enduser\x20ID\x20is:',']\x20The\x20Enduser\x20phone\x20is:',']\x20Call\x20direction:\x20%s','openNewTab','Displaying\x20call\x20in\x20a\x20new\x20tab...','name',']\x20Error\x20running\x20Dynamics365\x20integration','Error\x20running\x20Dynamics365\x20integration','lodash','request-promise','util','./util','md5','ioredis','../../../../config/logger','dynamics365','../../../../config/environment','redis','defaults','localhost','socket.io-emitter','remoteUri','CloudProvider','data7','tenantId','resolve','POST','clientId','password','clientSecret','catch','error','toUpperCase',']\x20Wrong\x20credentials!'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x4e96,0x19e));var _0x64e9=function(_0x4ff2bc,_0xedd1df){_0x4ff2bc=_0x4ff2bc-0x0;var _0x21751c=_0x4e96[_0x4ff2bc];return _0x21751c;};'use strict';var _=require(_0x64e9('0x0'));var rp=require(_0x64e9('0x1'));var util=require(_0x64e9('0x2'));var intUtil=require(_0x64e9('0x3'));var md5=require(_0x64e9('0x4'));var Redis=require(_0x64e9('0x5'));var logger=require(_0x64e9('0x6'))(_0x64e9('0x7'));var config=require(_0x64e9('0x8'));config[_0x64e9('0x9')]=_[_0x64e9('0xa')](config[_0x64e9('0x9')],{'host':_0x64e9('0xb'),'port':0x18eb});var io=require(_0x64e9('0xc'))(new Redis(config[_0x64e9('0x9')]));function getAuthToken(_0x3104e1,_0x452e34,_0x9752c9){if(_0x3104e1['modernAuthentication']){_0x3104e1[_0x64e9('0xd')]=_0x3104e1[_0x64e9('0xe')][_0x64e9('0xf')];_0x3104e1[_0x64e9('0x10')]=_0x3104e1[_0x64e9('0xe')]['data2'];return Promise[_0x64e9('0x11')](_0x3104e1['CloudProvider']['data5']);}var _0x36283b={'method':_0x64e9('0x12'),'uri':_0x452e34,'form':{'client_id':_0x3104e1[_0x64e9('0x13')],'resource':_0x3104e1['remoteUri'],'username':_0x3104e1['username'],'password':_0x3104e1[_0x64e9('0x14')],'grant_type':'password','client_secret':_0x3104e1[_0x64e9('0x15')]},'json':!![]};return rp(_0x36283b)['then'](function(_0x26a405){return _0x26a405['access_token'];})[_0x64e9('0x16')](function(_0x3212a1){logger[_0x64e9('0x17')]('['+[_0x9752c9[_0x64e9('0x18')]()]+_0x64e9('0x19'));return _0x3212a1[_0x64e9('0x1a')];});}function getUser(_0xd93723,_0x177bb1,_0x520eef,_0xbd2973,_0x3baef1,_0x3c0422){return new Promise(function(_0x1313a0,_0x4c57dc){return getAuthToken(_0x177bb1,_0xbd2973,_0x3c0422)[_0x64e9('0x1b')](function(_0x37863e){var _0x264737={'method':'GET','uri':_0x3baef1+'systemusers?$select=internalemailaddress,isdisabled,systemuserid','headers':{'Authorization':_0x64e9('0x1c')+_0x37863e,'OData-Version':_0x64e9('0x1d')},'json':!![]};return rp(_0x264737);})[_0x64e9('0x1b')](function(_0x5d8a1c){var _0x3c7588=_0x5d8a1c['value'];var _0x2c7807=![];var _0x22e33d=null;if(!_[_0x64e9('0x1e')](_0x520eef)){if(intUtil[_0x64e9('0x1f')](_0x520eef[_0x64e9('0x20')])){_0xd93723[_0x64e9('0x21')]=_0x520eef[_0x64e9('0x20')];for(_0x22e33d=0x0;_0x22e33d<_0x3c7588[_0x64e9('0x22')];_0x22e33d++){if(_0x3c7588[_0x22e33d][_0x64e9('0x23')]===_0x520eef['email']&&!_0x3c7588[_0x22e33d][_0x64e9('0x24')]){_0x2c7807=!![];logger[_0x64e9('0x25')]('['+[_0x3c0422['toUpperCase']()]+_0x64e9('0x26')+_0x3c7588[_0x22e33d]['systemuserid']+'!');_0xd93723['userId']=_0x3c7588[_0x22e33d][_0x64e9('0x27')];}}}}if(!_0x2c7807){logger[_0x64e9('0x25')]('['+[_0x3c0422[_0x64e9('0x18')]()]+_0x64e9('0x28'));_0xd93723[_0x64e9('0x21')]=_0x177bb1[_0x64e9('0x29')];for(_0x22e33d=0x0;_0x22e33d<_0x3c7588[_0x64e9('0x22')];_0x22e33d++){if(_0x3c7588[_0x22e33d][_0x64e9('0x23')]===_0x177bb1['username']){_0xd93723[_0x64e9('0x2a')]=_0x3c7588[_0x22e33d][_0x64e9('0x27')];}}}_0x1313a0(_0xd93723);})[_0x64e9('0x16')](function(_0x44062b){_0x4c57dc(_0x44062b[_0x64e9('0x1a')]);});});}function createEndUser(_0x5a49c4,_0x122d79,_0x3cde0e,_0x383c18,_0x1661d9,_0x102814,_0x7fad12){return new Promise(function(_0x284fcb,_0x298282){return getAuthToken(_0x122d79,_0x3cde0e,_0x102814)[_0x64e9('0x1b')](function(_0x11a711){var _0x14aeb0=_0x102814[_0x64e9('0x2b')]()===_0x64e9('0x2c')?_0x1661d9[_0x64e9('0x2d')]:_0x1661d9[_0x64e9('0x2e')];var _0x3fef58={'method':_0x64e9('0x12'),'uri':_0x383c18+_0x64e9('0x2f'),'body':{'fullname':_0x14aeb0,'firstname':_0x14aeb0,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':_0x64e9('0x30')+_0x5a49c4['userId']+')'},'headers':{'Authorization':_0x64e9('0x1c')+_0x11a711,'OData-Version':_0x64e9('0x1d')},'json':!![],'resolveWithFullResponse':!![]};_0x3fef58[_0x64e9('0x31')][_0x7fad12]=_0x14aeb0;return rp(_0x3fef58);})['then'](function(_0x4b8ad0){var _0x51e64b=_0x4b8ad0[_0x64e9('0x32')]['odata-entityid'];var _0x41aee8=_0x51e64b[_0x64e9('0x33')](_0x51e64b[_0x64e9('0x34')]('(')+0x1,_0x51e64b[_0x64e9('0x34')](')'));_0x5a49c4[_0x64e9('0x35')]=_0x41aee8;_0x284fcb(_0x5a49c4);})[_0x64e9('0x16')](function(_0x154307){_0x298282(_0x154307[_0x64e9('0x1a')]);});});}function getEndUser(_0x509ff2,_0x1d68a9,_0x2d071b,_0x41fd82,_0x570239,_0x1abf3c,_0x278ca8,_0x3dd9ca){var _0x47588f=_0x1abf3c[_0x64e9('0x2b')]()===_0x64e9('0x2c')?_0x570239[_0x64e9('0x2d')]:_0x570239[_0x64e9('0x2e')];return getAuthToken(_0x1d68a9,_0x2d071b,_0x1abf3c)[_0x64e9('0x1b')](function(_0x49abe){_0x3dd9ca=_0x3dd9ca?_0x3dd9ca:'telephone1';var _0x5170fa={'method':'GET','uri':_0x41fd82+_0x64e9('0x36')+_0x3dd9ca+_0x64e9('0x37')+_0x3dd9ca+'\x20eq\x20\x27'+_0x47588f[_0x64e9('0x38')]('+',_0x64e9('0x39'))+'\x27','headers':{'Authorization':_0x64e9('0x1c')+_0x49abe,'If-None-Match':null,'OData-Version':_0x64e9('0x1d')},'json':!![]};return rp(_0x5170fa);})['then'](function(_0x55710c){var _0x48b63a=![];if(!_0x55710c)return _0x48b63a;var _0x5de51b=_0x55710c[_0x64e9('0x3a')];for(var _0x4177ac=0x0;_0x4177ac<_0x5de51b['length'];_0x4177ac++){if(_0x5de51b[_0x4177ac][_0x3dd9ca]===_0x47588f){_0x48b63a=!![];_0x509ff2[_0x64e9('0x35')]=_0x5de51b[_0x4177ac][_0x64e9('0x3b')];}}return _0x48b63a;})[_0x64e9('0x1b')](function(_0x150542){if(_0x150542)return _0x509ff2;if(_0x278ca8==='nothing'){logger['info']('['+[_0x1abf3c[_0x64e9('0x18')]()]+_0x64e9('0x3c'));return _0x509ff2;}return createEndUser(_0x509ff2,_0x1d68a9,_0x2d071b,_0x41fd82,_0x570239,_0x1abf3c,_0x3dd9ca)['then'](function(_0x89afc2){logger[_0x64e9('0x25')]('['+[_0x1abf3c[_0x64e9('0x18')]()]+_0x64e9('0x3d'),_0x89afc2[_0x64e9('0x35')]);return _0x89afc2;});});}function getCustomFields(_0x53e23c,_0x444088,_0x3bf443){var _0x40be7a={};if(_0x53e23c[_0x64e9('0x22')]>0x0){_[_0x64e9('0x3e')](_0x53e23c,function(_0x31a2d7){if(_[_0x64e9('0x3f')]([_0x64e9('0x40'),_0x64e9('0x41')],_0x31a2d7[_0x64e9('0x42')])&&_0x31a2d7['nameField']&&!_0x31a2d7['customField']){var _0x3d296c=_0x31a2d7[_0x64e9('0x43')][_0x64e9('0x2b')]();var _0x5a50fb=_0x3d296c[_0x64e9('0x33')](0x0,_0x3d296c[_0x64e9('0x44')]('_'));var _0x426ccf=_0x3d296c[_0x64e9('0x33')](_0x3d296c['indexOf']('_')+0x1);if(_0x5a50fb===_0x3bf443){_0x40be7a[_0x426ccf]=_0x31a2d7[_0x64e9('0x45')];}}});}return _0x40be7a;}function getTicket(_0x54daa9,_0x4a7737,_0x2b95e8,_0x1f9a48,_0x5b1e88,_0x26964c,_0x1bec35){return new Promise(function(_0x5c2c1e,_0x4c1610){var _0x1322b7;return getAuthToken(_0x4a7737,_0x2b95e8,_0x1bec35)['then'](function(_0x9bb716){if(_0x26964c[_0x64e9('0x46')]===_0x64e9('0x47')){_0x1322b7={'method':_0x64e9('0x12'),'uri':_0x1f9a48+_0x64e9('0x48'),'body':Object[_0x64e9('0x49')]({},{'title':intUtil[_0x64e9('0x4a')](_0x26964c[_0x64e9('0x4b')],_0x5b1e88,'\x20'),'description':intUtil[_0x64e9('0x4a')](_0x26964c[_0x64e9('0x4c')],_0x5b1e88,'\x0a'),'customerid_contact@odata.bind':_0x54daa9['enduserId']?_0x64e9('0x4d')+_0x54daa9['enduserId']+')':undefined,'ownerid@odata.bind':_0x64e9('0x30')+_0x54daa9['userId']+')','caseorigincode':'1'},getCustomFields(_0x26964c[_0x64e9('0x4e')],_0x5b1e88,_0x26964c['ticketType'])),'headers':{'Authorization':_0x64e9('0x1c')+_0x9bb716,'OData-Version':_0x64e9('0x1d')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x26964c['ticketType']===_0x64e9('0x4f')){var _0x218967=_0x54daa9['enduserId']?[{'partyid_systemuser@odata.bind':'/systemusers('+_0x54daa9[_0x64e9('0x2a')]+')','participationtypemask':_0x54daa9[_0x64e9('0x50')]==='queue'?0x2:0x1},{'partyid_contact@odata.bind':'/contacts('+_0x54daa9['enduserId']+')','participationtypemask':_0x54daa9[_0x64e9('0x50')]==='queue'?0x1:0x2}]:[{'partyid_systemuser@odata.bind':_0x64e9('0x30')+_0x54daa9['userId']+')','participationtypemask':_0x54daa9['callDirection']==='queue'?0x2:0x1}];_0x1322b7={'method':_0x64e9('0x12'),'uri':_0x1f9a48+'phonecalls','body':Object['assign']({},{'subject':intUtil[_0x64e9('0x4a')](_0x26964c['Subjects'],_0x5b1e88,'\x20'),'phonenumber':String(_0x5b1e88[_0x64e9('0x2e')]),'description':intUtil[_0x64e9('0x4a')](_0x26964c['Descriptions'],_0x5b1e88,'\x0a'),'regardingobjectid_contact@odata.bind':_0x54daa9[_0x64e9('0x35')]?_0x64e9('0x4d')+_0x54daa9[_0x64e9('0x35')]+')':undefined,'ownerid@odata.bind':_0x64e9('0x30')+_0x54daa9['userId']+')','directioncode':_0x54daa9[_0x64e9('0x50')]==='queue'?![]:!![],'phonecall_activity_parties':_0x218967},getCustomFields(_0x26964c['Fields'],_0x5b1e88,_0x26964c[_0x64e9('0x46')])),'headers':{'Authorization':_0x64e9('0x1c')+_0x9bb716,'OData-Version':_0x64e9('0x1d')},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x1322b7);})['then'](function(_0x509e4b){var _0x16afef=_0x509e4b[_0x64e9('0x32')][_0x64e9('0x51')];var _0x1c0c7a=_0x16afef['substring'](_0x16afef[_0x64e9('0x34')]('(')+0x1,_0x16afef['lastIndexOf'](')'));_0x54daa9['ticketId']=_0x1c0c7a;_0x5c2c1e(_0x54daa9);})[_0x64e9('0x16')](function(_0x15b772){_0x4c1610(_0x15b772[_0x64e9('0x1a')]);});});}function emit(_0xe0b3c5,_0xd61ed4,_0x59f728,_0x19cbfb){var _0x3c3523={'uri':util[_0x64e9('0x52')](_0x64e9('0x53'),_0xe0b3c5,_0x59f728,_0x19cbfb)};io['to'](util[_0x64e9('0x52')](_0x64e9('0x54'),_0xd61ed4))['emit'](_0x64e9('0x55'),_0x3c3523);}exports['cs']=function(_0x3138f2,_0x1226e0,_0x46063b,_0x441923,_0x19d174,_0xf2787a,_0x27cd3b,_0x4c085e){var _0x3b25e5={};_0xf2787a['remoteUri']=_0xf2787a[_0x64e9('0x56')]?intUtil[_0x64e9('0x57')](_0xf2787a[_0x64e9('0xe')]['data7']):intUtil[_0x64e9('0x57')](_0xf2787a[_0x64e9('0xd')]);_0xf2787a[_0x64e9('0x58')]=intUtil[_0x64e9('0x57')](_0xf2787a[_0x64e9('0x58')]);_0x3b25e5[_0x64e9('0x50')]=_0x4c085e===_0x64e9('0x59')||_0x4c085e===_0x64e9('0x5a')?_0x64e9('0x59'):_0x64e9('0x2c');var _0x46fe7b=_0xf2787a[_0x64e9('0x56')]?util[_0x64e9('0x52')](_0x64e9('0x5b'),_0xf2787a[_0x64e9('0xe')][_0x64e9('0xf')]):util[_0x64e9('0x52')]('%s/api/data/v9.0/',_0xf2787a['remoteUri']);var _0xbabf41=util[_0x64e9('0x52')](_0x64e9('0x5c'),_0xf2787a[_0x64e9('0x10')]);var _0x8536f7=util[_0x64e9('0x52')](_0x64e9('0x5d'),_0xf2787a[_0x64e9('0x58')],_0x1226e0[_0x64e9('0x5e')],md5(_0x1226e0[_0x64e9('0x5e')]));if(_0x19d174&&_0x19d174['monitor_format']){logger[_0x64e9('0x25')]('[QUEUE]','Recording\x20is\x20enabled!');_0x1226e0[_0x64e9('0x5f')]=_0x8536f7;}else if(_0x27cd3b&&_0x27cd3b['recordingFormat']&&_0x27cd3b[_0x64e9('0x60')]!==_0x64e9('0x61')){logger[_0x64e9('0x25')](_0x64e9('0x62'),_0x64e9('0x63'));_0x1226e0[_0x64e9('0x5f')]=_0x8536f7;}else{_0x1226e0['recordingURL']='';}return getUser(_0x3b25e5,_0xf2787a,_0x441923,_0xbabf41,_0x46fe7b,_0x4c085e)[_0x64e9('0x1b')](function(_0x2335a8){logger[_0x64e9('0x25')]('['+_0x4c085e['toUpperCase']()+']\x20The\x20User\x20ID\x20is:',_0x2335a8[_0x64e9('0x2a')]);logger['info']('['+_0x4c085e[_0x64e9('0x18')]()+_0x64e9('0x64'),_0x2335a8[_0x64e9('0x21')]);return getEndUser(_0x2335a8,_0xf2787a,_0xbabf41,_0x46fe7b,_0x1226e0,_0x4c085e,_0x46063b['moduleCreate'],_0x46063b[_0x64e9('0x65')]);})['then'](function(_0x4a0d1d){logger['info']('['+_0x4c085e[_0x64e9('0x18')]()+_0x64e9('0x66'),_0x4a0d1d['enduserId']);logger[_0x64e9('0x25')]('['+_0x4c085e[_0x64e9('0x18')]()+_0x64e9('0x67'),_0x1226e0[_0x64e9('0x2e')]);return getTicket(_0x4a0d1d,_0xf2787a,_0xbabf41,_0x46fe7b,_0x1226e0,_0x46063b,_0x4c085e);})['then'](function(_0x2b3bdc){logger[_0x64e9('0x25')](util['format']('['+_0x4c085e['toUpperCase']()+']\x20The\x20%s\x20ID\x20is:\x20%s',_0x46063b[_0x64e9('0x46')],_0x2b3bdc['ticketId']));logger[_0x64e9('0x25')](util[_0x64e9('0x52')]('['+_0x4c085e[_0x64e9('0x18')]()+_0x64e9('0x68'),_0x4c085e));if(_0x4c085e!==_0x64e9('0x5a')&&_0x46063b[_0x64e9('0x69')]){logger[_0x64e9('0x25')]('['+_0x4c085e[_0x64e9('0x18')]()+']',_0x64e9('0x6a'));emit(_0xf2787a[_0x64e9('0xd')],_0x441923[_0x64e9('0x6b')],_0x46063b['ticketType'],_0x2b3bdc['ticketId']);}})[_0x64e9('0x16')](function(_0x1b41c8){logger[_0x64e9('0x17')]('['+_0x4c085e['toUpperCase']()+_0x64e9('0x6c'),_0x1b41c8[_0x64e9('0x1a')]);console[_0x64e9('0x17')](_0x64e9('0x6d'),_0x1b41c8);});};