6f9e37c667794eeb5d95766ff089654f2fa88b22
[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 _0x8008=['recordingFormat','none','[OUTBOUND]',']\x20The\x20User\x20ID\x20is:',']\x20The\x20User\x20email\x20is:','moduleCreate',']\x20The\x20Enduser\x20ID\x20is:',']\x20The\x20Enduser\x20phone\x20is:',']\x20Call\x20direction:\x20%s','openNewTab','Displaying\x20call\x20in\x20a\x20new\x20tab...',']\x20Error\x20running\x20Dynamics365\x20integration','Error\x20running\x20Dynamics365\x20integration','lodash','request-promise','./util','md5','ioredis','../../../../config/logger','../../../../config/environment','redis','localhost','remoteUri','CloudProvider','tenantId','data2','data5','username','password','clientSecret','then','access_token','catch','error','toUpperCase','message','systemusers?$select=internalemailaddress,isdisabled,systemuserid','value','isNil','validateEmail','email','userEmail','length','internalemailaddress','isdisabled',']\x20Agent\x20found\x20','systemuserid','userId','info','toLowerCase','outbound','destcalleridnum','POST','contacts','/systemusers(','headers','odata-entityid','lastIndexOf','enduserId','calleridnum','telephone1','GET','contacts?$select=','\x20eq\x20\x27','replace','Bearer\x20','4.0','contactid',']\x20Enduser\x20NOT\x20Created\x20-\x20ModuleCreate\x20=\x20Nothing',']\x20Enduser\x20created!','includes','string','customField','idField','substring','indexOf','ticketType','incidents','assign','getString','Subjects','Descriptions','/contacts(','Fields','phonecall','callDirection','queue','phonecalls','ticketId','format','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','user:%s','emit','trigger:browser:url','modernAuthentication','stripTrailingSlash','data7','serverUrl','unmanaged','%s/api/data/v9.0/','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','[QUEUE]','recordingURL'];(function(_0x330fb3,_0x33d842){var _0xf97de4=function(_0x4214d6){while(--_0x4214d6){_0x330fb3['push'](_0x330fb3['shift']());}};_0xf97de4(++_0x33d842);}(_0x8008,0x145));var _0x8800=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x8008[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0x8800('0x0'));var rp=require(_0x8800('0x1'));var util=require('util');var intUtil=require(_0x8800('0x2'));var md5=require(_0x8800('0x3'));var Redis=require(_0x8800('0x4'));var logger=require(_0x8800('0x5'))('dynamics365');var config=require(_0x8800('0x6'));config['redis']=_['defaults'](config[_0x8800('0x7')],{'host':_0x8800('0x8'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x8800('0x7')]));function getAuthToken(_0x2be16a,_0x414930,_0x54619b){if(_0x2be16a['modernAuthentication']){_0x2be16a[_0x8800('0x9')]=_0x2be16a[_0x8800('0xa')]['data7'];_0x2be16a[_0x8800('0xb')]=_0x2be16a[_0x8800('0xa')][_0x8800('0xc')];return Promise['resolve'](_0x2be16a[_0x8800('0xa')][_0x8800('0xd')]);}var _0xd7a690={'method':'POST','uri':_0x414930,'form':{'client_id':_0x2be16a['clientId'],'resource':_0x2be16a['remoteUri'],'username':_0x2be16a[_0x8800('0xe')],'password':_0x2be16a[_0x8800('0xf')],'grant_type':_0x8800('0xf'),'client_secret':_0x2be16a[_0x8800('0x10')]},'json':!![]};return rp(_0xd7a690)[_0x8800('0x11')](function(_0x516c0c){return _0x516c0c[_0x8800('0x12')];})[_0x8800('0x13')](function(_0x1c9a6a){logger[_0x8800('0x14')]('['+[_0x54619b[_0x8800('0x15')]()]+']\x20Wrong\x20credentials!');return _0x1c9a6a[_0x8800('0x16')];});}function getUser(_0xb56fcf,_0x863631,_0x50cff4,_0x5a511a,_0x101d61,_0x532b17){return new Promise(function(_0x2ecba0,_0x167020){return getAuthToken(_0x863631,_0x5a511a,_0x532b17)[_0x8800('0x11')](function(_0x1ca58c){var _0x12bb41={'method':'GET','uri':_0x101d61+_0x8800('0x17'),'headers':{'Authorization':'Bearer\x20'+_0x1ca58c,'OData-Version':'4.0'},'json':!![]};return rp(_0x12bb41);})[_0x8800('0x11')](function(_0x3d5f39){var _0x4017a8=_0x3d5f39[_0x8800('0x18')];var _0x4f6bee=![];var _0x2a5ab0=null;if(!_[_0x8800('0x19')](_0x50cff4)){if(intUtil[_0x8800('0x1a')](_0x50cff4[_0x8800('0x1b')])){_0xb56fcf[_0x8800('0x1c')]=_0x50cff4[_0x8800('0x1b')];for(_0x2a5ab0=0x0;_0x2a5ab0<_0x4017a8[_0x8800('0x1d')];_0x2a5ab0++){if(_0x4017a8[_0x2a5ab0][_0x8800('0x1e')]===_0x50cff4['email']&&!_0x4017a8[_0x2a5ab0][_0x8800('0x1f')]){_0x4f6bee=!![];logger['info']('['+[_0x532b17[_0x8800('0x15')]()]+_0x8800('0x20')+_0x4017a8[_0x2a5ab0][_0x8800('0x21')]+'!');_0xb56fcf[_0x8800('0x22')]=_0x4017a8[_0x2a5ab0][_0x8800('0x21')];}}}}if(!_0x4f6bee){logger[_0x8800('0x23')]('['+[_0x532b17[_0x8800('0x15')]()]+']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');_0xb56fcf['userEmail']=_0x863631['username'];for(_0x2a5ab0=0x0;_0x2a5ab0<_0x4017a8['length'];_0x2a5ab0++){if(_0x4017a8[_0x2a5ab0][_0x8800('0x1e')]===_0x863631['username']){_0xb56fcf[_0x8800('0x22')]=_0x4017a8[_0x2a5ab0][_0x8800('0x21')];}}}_0x2ecba0(_0xb56fcf);})['catch'](function(_0x9b9214){_0x167020(_0x9b9214['message']);});});}function createEndUser(_0x49f21d,_0x48e18a,_0x35098f,_0x2a1952,_0x15e115,_0x3c691e,_0x233f8f){return new Promise(function(_0x2175b1,_0x5be3ee){return getAuthToken(_0x48e18a,_0x35098f,_0x3c691e)[_0x8800('0x11')](function(_0x45d73e){var _0x1481b4=_0x3c691e[_0x8800('0x24')]()===_0x8800('0x25')?_0x15e115[_0x8800('0x26')]:_0x15e115['calleridnum'];var _0x5e490f={'method':_0x8800('0x27'),'uri':_0x2a1952+_0x8800('0x28'),'body':{'fullname':_0x1481b4,'firstname':_0x1481b4,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':_0x8800('0x29')+_0x49f21d[_0x8800('0x22')]+')'},'headers':{'Authorization':'Bearer\x20'+_0x45d73e,'OData-Version':'4.0'},'json':!![],'resolveWithFullResponse':!![]};_0x5e490f['body'][_0x233f8f]=_0x1481b4;return rp(_0x5e490f);})[_0x8800('0x11')](function(_0xda480a){var _0x50cd0a=_0xda480a[_0x8800('0x2a')][_0x8800('0x2b')];var _0x5711db=_0x50cd0a['substring'](_0x50cd0a[_0x8800('0x2c')]('(')+0x1,_0x50cd0a[_0x8800('0x2c')](')'));_0x49f21d[_0x8800('0x2d')]=_0x5711db;_0x2175b1(_0x49f21d);})[_0x8800('0x13')](function(_0x175698){_0x5be3ee(_0x175698[_0x8800('0x16')]);});});}function getEndUser(_0x2036dc,_0x22bfe9,_0x50260e,_0x2dba4a,_0x38b6a4,_0x388e35,_0x3ff220,_0x17e69){var _0x25261c=_0x388e35[_0x8800('0x24')]()===_0x8800('0x25')?_0x38b6a4[_0x8800('0x26')]:_0x38b6a4[_0x8800('0x2e')];return getAuthToken(_0x22bfe9,_0x50260e,_0x388e35)[_0x8800('0x11')](function(_0x33d311){_0x17e69=_0x17e69?_0x17e69:_0x8800('0x2f');var _0x2a898c={'method':_0x8800('0x30'),'uri':_0x2dba4a+_0x8800('0x31')+_0x17e69+'&$filter='+_0x17e69+_0x8800('0x32')+_0x25261c[_0x8800('0x33')]('+','%2b')+'\x27','headers':{'Authorization':_0x8800('0x34')+_0x33d311,'If-None-Match':null,'OData-Version':_0x8800('0x35')},'json':!![]};return rp(_0x2a898c);})[_0x8800('0x11')](function(_0xd04ed7){var _0x3dcc06=![];if(!_0xd04ed7)return _0x3dcc06;var _0x3cec04=_0xd04ed7[_0x8800('0x18')];for(var _0x46975c=0x0;_0x46975c<_0x3cec04[_0x8800('0x1d')];_0x46975c++){if(_0x3cec04[_0x46975c][_0x17e69]===_0x25261c){_0x3dcc06=!![];_0x2036dc[_0x8800('0x2d')]=_0x3cec04[_0x46975c][_0x8800('0x36')];}}return _0x3dcc06;})[_0x8800('0x11')](function(_0x5aa2f8){if(_0x5aa2f8)return _0x2036dc;if(_0x3ff220==='nothing'){logger[_0x8800('0x23')]('['+[_0x388e35[_0x8800('0x15')]()]+_0x8800('0x37'));return _0x2036dc;}return createEndUser(_0x2036dc,_0x22bfe9,_0x50260e,_0x2dba4a,_0x38b6a4,_0x388e35,_0x17e69)[_0x8800('0x11')](function(_0x35dd87){logger[_0x8800('0x23')]('['+[_0x388e35['toUpperCase']()]+_0x8800('0x38'),_0x35dd87[_0x8800('0x2d')]);return _0x35dd87;});});}function getCustomFields(_0x2e49e1,_0x3d5d43,_0x10f8d7){var _0x2605ed={};if(_0x2e49e1[_0x8800('0x1d')]>0x0){_['forEach'](_0x2e49e1,function(_0x69a7f8){if(_[_0x8800('0x39')]([_0x8800('0x3a'),'picklist'],_0x69a7f8['type'])&&_0x69a7f8['nameField']&&!_0x69a7f8[_0x8800('0x3b')]){var _0x39e3a5=_0x69a7f8[_0x8800('0x3c')]['toLowerCase']();var _0x430cc6=_0x39e3a5[_0x8800('0x3d')](0x0,_0x39e3a5['indexOf']('_'));var _0xae0dd1=_0x39e3a5[_0x8800('0x3d')](_0x39e3a5[_0x8800('0x3e')]('_')+0x1);if(_0x430cc6===_0x10f8d7){_0x2605ed[_0xae0dd1]=_0x69a7f8['content'];}}});}return _0x2605ed;}function getTicket(_0x5ddc04,_0x1653cf,_0x31515d,_0x47e177,_0x3b316b,_0x176e61,_0x4c7349){return new Promise(function(_0x508516,_0x8e84ce){var _0x9ee7bc;return getAuthToken(_0x1653cf,_0x31515d,_0x4c7349)[_0x8800('0x11')](function(_0x4625d1){if(_0x176e61[_0x8800('0x3f')]==='incident'){_0x9ee7bc={'method':'POST','uri':_0x47e177+_0x8800('0x40'),'body':Object[_0x8800('0x41')]({},{'title':intUtil[_0x8800('0x42')](_0x176e61[_0x8800('0x43')],_0x3b316b,'\x20'),'description':intUtil[_0x8800('0x42')](_0x176e61[_0x8800('0x44')],_0x3b316b,'\x0a'),'customerid_contact@odata.bind':_0x5ddc04['enduserId']?_0x8800('0x45')+_0x5ddc04['enduserId']+')':undefined,'ownerid@odata.bind':_0x8800('0x29')+_0x5ddc04['userId']+')','caseorigincode':'1'},getCustomFields(_0x176e61[_0x8800('0x46')],_0x3b316b,_0x176e61[_0x8800('0x3f')])),'headers':{'Authorization':_0x8800('0x34')+_0x4625d1,'OData-Version':_0x8800('0x35')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x176e61[_0x8800('0x3f')]===_0x8800('0x47')){var _0x4c3f7b=_0x5ddc04[_0x8800('0x2d')]?[{'partyid_systemuser@odata.bind':'/systemusers('+_0x5ddc04['userId']+')','participationtypemask':_0x5ddc04[_0x8800('0x48')]===_0x8800('0x49')?0x2:0x1},{'partyid_contact@odata.bind':_0x8800('0x45')+_0x5ddc04[_0x8800('0x2d')]+')','participationtypemask':_0x5ddc04[_0x8800('0x48')]==='queue'?0x1:0x2}]:[{'partyid_systemuser@odata.bind':_0x8800('0x29')+_0x5ddc04[_0x8800('0x22')]+')','participationtypemask':_0x5ddc04[_0x8800('0x48')]===_0x8800('0x49')?0x2:0x1}];_0x9ee7bc={'method':'POST','uri':_0x47e177+_0x8800('0x4a'),'body':Object['assign']({},{'subject':intUtil[_0x8800('0x42')](_0x176e61[_0x8800('0x43')],_0x3b316b,'\x20'),'phonenumber':String(_0x3b316b[_0x8800('0x2e')]),'description':intUtil[_0x8800('0x42')](_0x176e61[_0x8800('0x44')],_0x3b316b,'\x0a'),'regardingobjectid_contact@odata.bind':_0x5ddc04[_0x8800('0x2d')]?'/contacts('+_0x5ddc04['enduserId']+')':undefined,'ownerid@odata.bind':_0x8800('0x29')+_0x5ddc04[_0x8800('0x22')]+')','directioncode':_0x5ddc04[_0x8800('0x48')]===_0x8800('0x49')?![]:!![],'phonecall_activity_parties':_0x4c3f7b},getCustomFields(_0x176e61[_0x8800('0x46')],_0x3b316b,_0x176e61[_0x8800('0x3f')])),'headers':{'Authorization':_0x8800('0x34')+_0x4625d1,'OData-Version':_0x8800('0x35')},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x9ee7bc);})[_0x8800('0x11')](function(_0x18ac1d){var _0x32d025=_0x18ac1d[_0x8800('0x2a')][_0x8800('0x2b')];var _0x55ceec=_0x32d025['substring'](_0x32d025[_0x8800('0x2c')]('(')+0x1,_0x32d025[_0x8800('0x2c')](')'));_0x5ddc04[_0x8800('0x4b')]=_0x55ceec;_0x508516(_0x5ddc04);})[_0x8800('0x13')](function(_0x3a3340){_0x8e84ce(_0x3a3340['message']);});});}function emit(_0x23713b,_0x5922ae,_0x274d26,_0x5bba29){var _0x4d07f1={'uri':util[_0x8800('0x4c')](_0x8800('0x4d'),_0x23713b,_0x274d26,_0x5bba29)};io['to'](util[_0x8800('0x4c')](_0x8800('0x4e'),_0x5922ae))[_0x8800('0x4f')](_0x8800('0x50'),_0x4d07f1);}exports['cs']=function(_0x5ec677,_0x1c9933,_0x2f5324,_0x13e1fe,_0x1add26,_0x5afc64,_0x548dbe,_0x8a5d0){var _0x3f8b77={};_0x5afc64[_0x8800('0x9')]=_0x5afc64[_0x8800('0x51')]?intUtil[_0x8800('0x52')](_0x5afc64['CloudProvider'][_0x8800('0x53')]):intUtil[_0x8800('0x52')](_0x5afc64[_0x8800('0x9')]);_0x5afc64['serverUrl']=intUtil[_0x8800('0x52')](_0x5afc64[_0x8800('0x54')]);_0x3f8b77['callDirection']=_0x8a5d0==='queue'||_0x8a5d0===_0x8800('0x55')?_0x8800('0x49'):'outbound';var _0x4a1a4b=_0x5afc64[_0x8800('0x51')]?util['format'](_0x8800('0x56'),_0x5afc64[_0x8800('0xa')]['data7']):util[_0x8800('0x4c')]('%s/api/data/v9.0/',_0x5afc64[_0x8800('0x9')]);var _0x295970=util['format']('https://login.microsoftonline.com/%s/oauth2/token',_0x5afc64[_0x8800('0xb')]);var _0x35ba3c=util[_0x8800('0x4c')](_0x8800('0x57'),_0x5afc64[_0x8800('0x54')],_0x1c9933[_0x8800('0x58')],md5(_0x1c9933['uniqueid']));if(_0x1add26&&_0x1add26['monitor_format']){logger['info'](_0x8800('0x59'),'Recording\x20is\x20enabled!');_0x1c9933[_0x8800('0x5a')]=_0x35ba3c;}else if(_0x548dbe&&_0x548dbe[_0x8800('0x5b')]&&_0x548dbe['recordingFormat']!==_0x8800('0x5c')){logger['info'](_0x8800('0x5d'),'Recording\x20is\x20enabled!');_0x1c9933['recordingURL']=_0x35ba3c;}else{_0x1c9933[_0x8800('0x5a')]='';}return getUser(_0x3f8b77,_0x5afc64,_0x13e1fe,_0x295970,_0x4a1a4b,_0x8a5d0)['then'](function(_0x120ba9){logger['info']('['+_0x8a5d0[_0x8800('0x15')]()+_0x8800('0x5e'),_0x120ba9[_0x8800('0x22')]);logger[_0x8800('0x23')]('['+_0x8a5d0[_0x8800('0x15')]()+_0x8800('0x5f'),_0x120ba9[_0x8800('0x1c')]);return getEndUser(_0x120ba9,_0x5afc64,_0x295970,_0x4a1a4b,_0x1c9933,_0x8a5d0,_0x2f5324[_0x8800('0x60')],_0x2f5324['additionalSearchContact']);})[_0x8800('0x11')](function(_0x46cbe5){logger[_0x8800('0x23')]('['+_0x8a5d0[_0x8800('0x15')]()+_0x8800('0x61'),_0x46cbe5[_0x8800('0x2d')]);logger['info']('['+_0x8a5d0['toUpperCase']()+_0x8800('0x62'),_0x1c9933[_0x8800('0x2e')]);return getTicket(_0x46cbe5,_0x5afc64,_0x295970,_0x4a1a4b,_0x1c9933,_0x2f5324,_0x8a5d0);})[_0x8800('0x11')](function(_0x4b05d8){logger[_0x8800('0x23')](util[_0x8800('0x4c')]('['+_0x8a5d0[_0x8800('0x15')]()+']\x20The\x20%s\x20ID\x20is:\x20%s',_0x2f5324[_0x8800('0x3f')],_0x4b05d8[_0x8800('0x4b')]));logger[_0x8800('0x23')](util[_0x8800('0x4c')]('['+_0x8a5d0[_0x8800('0x15')]()+_0x8800('0x63'),_0x8a5d0));if(_0x8a5d0!=='unmanaged'&&_0x2f5324[_0x8800('0x64')]){logger['info']('['+_0x8a5d0[_0x8800('0x15')]()+']',_0x8800('0x65'));emit(_0x5afc64[_0x8800('0x9')],_0x13e1fe['name'],_0x2f5324['ticketType'],_0x4b05d8[_0x8800('0x4b')]);}})[_0x8800('0x13')](function(_0x2aefa1){logger[_0x8800('0x14')]('['+_0x8a5d0[_0x8800('0x15')]()+_0x8800('0x66'),_0x2aefa1['message']);console['error'](_0x8800('0x67'),_0x2aefa1);});};