Built motion from commit 97153652.|2.6.26
[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 _0xa5d3=['serverUrl','unmanaged','%s/api/data/v9.0/','https://login.microsoftonline.com/%s/oauth2/token','uniqueid','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','recordingFormat','none','[OUTBOUND]',']\x20The\x20User\x20ID\x20is:','moduleCreate',']\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...','ticketId',']\x20Error\x20running\x20Dynamics365\x20integration','error','Error\x20running\x20Dynamics365\x20integration','lodash','request-promise','util','md5','../../../../config/logger','dynamics365','../../../../config/environment','redis','defaults','localhost','modernAuthentication','CloudProvider','data7','tenantId','data2','resolve','data5','POST','clientId','remoteUri','username','clientSecret','then','access_token','catch','toUpperCase','message','GET','systemusers?$select=internalemailaddress,isdisabled,systemuserid','Bearer\x20','isNil','email','userEmail','length','isdisabled',']\x20Agent\x20found\x20','systemuserid','userId','toLowerCase','outbound','destcalleridnum','calleridnum','contacts','/systemusers(','4.0','odata-entityid','substring','lastIndexOf','enduserId','telephone1','contacts?$select=','&$filter=','\x20eq\x20\x27','replace','%2b','value','nothing','info',']\x20Enduser\x20created!','forEach','includes','string','picklist','type','nameField','customField','idField','indexOf','content','ticketType','incident','incidents','assign','getString','Fields','phonecall','queue','callDirection','Descriptions','/contacts(','format','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','trigger:browser:url','stripTrailingSlash'];(function(_0x3dac7f,_0x34c456){var _0x465894=function(_0x21b8b6){while(--_0x21b8b6){_0x3dac7f['push'](_0x3dac7f['shift']());}};_0x465894(++_0x34c456);}(_0xa5d3,0x1c8));var _0x3a5d=function(_0x1cff93,_0x132b43){_0x1cff93=_0x1cff93-0x0;var _0x2ececc=_0xa5d3[_0x1cff93];return _0x2ececc;};'use strict';var _=require(_0x3a5d('0x0'));var rp=require(_0x3a5d('0x1'));var util=require(_0x3a5d('0x2'));var intUtil=require('./util');var md5=require(_0x3a5d('0x3'));var Redis=require('ioredis');var logger=require(_0x3a5d('0x4'))(_0x3a5d('0x5'));var config=require(_0x3a5d('0x6'));config[_0x3a5d('0x7')]=_[_0x3a5d('0x8')](config['redis'],{'host':_0x3a5d('0x9'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x3a5d('0x7')]));function getAuthToken(_0x183132,_0x4689fc,_0x5caa27){if(_0x183132[_0x3a5d('0xa')]){_0x183132['remoteUri']=_0x183132[_0x3a5d('0xb')][_0x3a5d('0xc')];_0x183132[_0x3a5d('0xd')]=_0x183132[_0x3a5d('0xb')][_0x3a5d('0xe')];return Promise[_0x3a5d('0xf')](_0x183132['CloudProvider'][_0x3a5d('0x10')]);}var _0x4fc27c={'method':_0x3a5d('0x11'),'uri':_0x4689fc,'form':{'client_id':_0x183132[_0x3a5d('0x12')],'resource':_0x183132[_0x3a5d('0x13')],'username':_0x183132[_0x3a5d('0x14')],'password':_0x183132['password'],'grant_type':'password','client_secret':_0x183132[_0x3a5d('0x15')]},'json':!![]};return rp(_0x4fc27c)[_0x3a5d('0x16')](function(_0xa035df){return _0xa035df[_0x3a5d('0x17')];})[_0x3a5d('0x18')](function(_0x26ccbe){logger['error']('['+[_0x5caa27[_0x3a5d('0x19')]()]+']\x20Wrong\x20credentials!');return _0x26ccbe[_0x3a5d('0x1a')];});}function getUser(_0x571eea,_0x169beb,_0x163ba1,_0x1f35e3,_0x4fdbdf,_0x431d64){return new Promise(function(_0x174488,_0x283546){return getAuthToken(_0x169beb,_0x1f35e3,_0x431d64)['then'](function(_0x5ea4c2){var _0x1eff2a={'method':_0x3a5d('0x1b'),'uri':_0x4fdbdf+_0x3a5d('0x1c'),'headers':{'Authorization':_0x3a5d('0x1d')+_0x5ea4c2,'OData-Version':'4.0'},'json':!![]};return rp(_0x1eff2a);})['then'](function(_0x59a687){var _0x1d0e2a=_0x59a687['value'];var _0x35d5b7=![];var _0x4168a8=null;if(!_[_0x3a5d('0x1e')](_0x163ba1)){if(intUtil['validateEmail'](_0x163ba1[_0x3a5d('0x1f')])){_0x571eea[_0x3a5d('0x20')]=_0x163ba1[_0x3a5d('0x1f')];for(_0x4168a8=0x0;_0x4168a8<_0x1d0e2a[_0x3a5d('0x21')];_0x4168a8++){if(_0x1d0e2a[_0x4168a8]['internalemailaddress']===_0x163ba1[_0x3a5d('0x1f')]&&!_0x1d0e2a[_0x4168a8][_0x3a5d('0x22')]){_0x35d5b7=!![];logger['info']('['+[_0x431d64[_0x3a5d('0x19')]()]+_0x3a5d('0x23')+_0x1d0e2a[_0x4168a8][_0x3a5d('0x24')]+'!');_0x571eea[_0x3a5d('0x25')]=_0x1d0e2a[_0x4168a8][_0x3a5d('0x24')];}}}}if(!_0x35d5b7){logger['info']('['+[_0x431d64[_0x3a5d('0x19')]()]+']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');_0x571eea[_0x3a5d('0x20')]=_0x169beb[_0x3a5d('0x14')];for(_0x4168a8=0x0;_0x4168a8<_0x1d0e2a[_0x3a5d('0x21')];_0x4168a8++){if(_0x1d0e2a[_0x4168a8]['internalemailaddress']===_0x169beb['username']){_0x571eea[_0x3a5d('0x25')]=_0x1d0e2a[_0x4168a8][_0x3a5d('0x24')];}}}_0x174488(_0x571eea);})['catch'](function(_0x4ef152){_0x283546(_0x4ef152[_0x3a5d('0x1a')]);});});}function createEndUser(_0x22b972,_0x54029d,_0x52229c,_0x5d813b,_0x257eba,_0xae109b,_0x40327){return new Promise(function(_0x3db45c,_0x270eae){return getAuthToken(_0x54029d,_0x52229c,_0xae109b)[_0x3a5d('0x16')](function(_0x386207){var _0x176c9c=_0xae109b[_0x3a5d('0x26')]()===_0x3a5d('0x27')?_0x257eba[_0x3a5d('0x28')]:_0x257eba[_0x3a5d('0x29')];var _0x1e346b={'method':'POST','uri':_0x5d813b+_0x3a5d('0x2a'),'body':{'fullname':_0x176c9c,'firstname':_0x176c9c,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':_0x3a5d('0x2b')+_0x22b972['userId']+')'},'headers':{'Authorization':_0x3a5d('0x1d')+_0x386207,'OData-Version':_0x3a5d('0x2c')},'json':!![],'resolveWithFullResponse':!![]};_0x1e346b['body'][_0x40327]=_0x176c9c;return rp(_0x1e346b);})['then'](function(_0x17b17d){var _0x145d1c=_0x17b17d['headers'][_0x3a5d('0x2d')];var _0x5c9dc9=_0x145d1c[_0x3a5d('0x2e')](_0x145d1c[_0x3a5d('0x2f')]('(')+0x1,_0x145d1c[_0x3a5d('0x2f')](')'));_0x22b972[_0x3a5d('0x30')]=_0x5c9dc9;_0x3db45c(_0x22b972);})['catch'](function(_0x44d080){_0x270eae(_0x44d080[_0x3a5d('0x1a')]);});});}function getEndUser(_0x36f178,_0x5ede5c,_0x32927a,_0x4f1f8e,_0x1323a2,_0xf16f6f,_0x5372e2,_0x264679){var _0x1fd535=_0xf16f6f[_0x3a5d('0x26')]()===_0x3a5d('0x27')?_0x1323a2[_0x3a5d('0x28')]:_0x1323a2[_0x3a5d('0x29')];return getAuthToken(_0x5ede5c,_0x32927a,_0xf16f6f)['then'](function(_0x1dac4d){_0x264679=_0x264679?_0x264679:_0x3a5d('0x31');var _0x494633={'method':_0x3a5d('0x1b'),'uri':_0x4f1f8e+_0x3a5d('0x32')+_0x264679+_0x3a5d('0x33')+_0x264679+_0x3a5d('0x34')+_0x1fd535[_0x3a5d('0x35')]('+',_0x3a5d('0x36'))+'\x27','headers':{'Authorization':_0x3a5d('0x1d')+_0x1dac4d,'If-None-Match':null,'OData-Version':_0x3a5d('0x2c')},'json':!![]};return rp(_0x494633);})[_0x3a5d('0x16')](function(_0x4456a3){var _0x59bdfa=![];if(!_0x4456a3)return _0x59bdfa;var _0x22cc42=_0x4456a3[_0x3a5d('0x37')];for(var _0x2781f5=0x0;_0x2781f5<_0x22cc42[_0x3a5d('0x21')];_0x2781f5++){if(_0x22cc42[_0x2781f5][_0x264679]===_0x1fd535){_0x59bdfa=!![];_0x36f178['enduserId']=_0x22cc42[_0x2781f5]['contactid'];}}return _0x59bdfa;})[_0x3a5d('0x16')](function(_0x14b9a3){if(_0x14b9a3)return _0x36f178;if(_0x5372e2===_0x3a5d('0x38')){logger[_0x3a5d('0x39')]('['+[_0xf16f6f[_0x3a5d('0x19')]()]+']\x20Enduser\x20NOT\x20Created\x20-\x20ModuleCreate\x20=\x20Nothing');return _0x36f178;}return createEndUser(_0x36f178,_0x5ede5c,_0x32927a,_0x4f1f8e,_0x1323a2,_0xf16f6f,_0x264679)['then'](function(_0x5211fe){logger[_0x3a5d('0x39')]('['+[_0xf16f6f[_0x3a5d('0x19')]()]+_0x3a5d('0x3a'),_0x5211fe['enduserId']);return _0x5211fe;});});}function getCustomFields(_0x5ac593,_0x46e261,_0x385f8e){var _0x5be4f5={};if(_0x5ac593[_0x3a5d('0x21')]>0x0){_[_0x3a5d('0x3b')](_0x5ac593,function(_0xd837f9){if(_[_0x3a5d('0x3c')]([_0x3a5d('0x3d'),_0x3a5d('0x3e')],_0xd837f9[_0x3a5d('0x3f')])&&_0xd837f9[_0x3a5d('0x40')]&&!_0xd837f9[_0x3a5d('0x41')]){var _0x24ccc6=_0xd837f9[_0x3a5d('0x42')][_0x3a5d('0x26')]();var _0x2795a0=_0x24ccc6[_0x3a5d('0x2e')](0x0,_0x24ccc6[_0x3a5d('0x43')]('_'));var _0x56da24=_0x24ccc6[_0x3a5d('0x2e')](_0x24ccc6[_0x3a5d('0x43')]('_')+0x1);if(_0x2795a0===_0x385f8e){_0x5be4f5[_0x56da24]=_0xd837f9[_0x3a5d('0x44')];}}});}return _0x5be4f5;}function getTicket(_0x5beea8,_0xd653c2,_0x4f2553,_0x3cbc49,_0x1d08b9,_0x3fcb88,_0x46dbd){return new Promise(function(_0x911a61,_0x2d342d){var _0x2215f8;return getAuthToken(_0xd653c2,_0x4f2553,_0x46dbd)[_0x3a5d('0x16')](function(_0x412de9){if(_0x3fcb88[_0x3a5d('0x45')]===_0x3a5d('0x46')){_0x2215f8={'method':_0x3a5d('0x11'),'uri':_0x3cbc49+_0x3a5d('0x47'),'body':Object[_0x3a5d('0x48')]({},{'title':intUtil['getString'](_0x3fcb88['Subjects'],_0x1d08b9,'\x20'),'description':intUtil[_0x3a5d('0x49')](_0x3fcb88['Descriptions'],_0x1d08b9,'\x0a'),'customerid_contact@odata.bind':_0x5beea8[_0x3a5d('0x30')]?'/contacts('+_0x5beea8[_0x3a5d('0x30')]+')':undefined,'ownerid@odata.bind':_0x3a5d('0x2b')+_0x5beea8[_0x3a5d('0x25')]+')','caseorigincode':'1'},getCustomFields(_0x3fcb88[_0x3a5d('0x4a')],_0x1d08b9,_0x3fcb88[_0x3a5d('0x45')])),'headers':{'Authorization':_0x3a5d('0x1d')+_0x412de9,'OData-Version':_0x3a5d('0x2c')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x3fcb88['ticketType']===_0x3a5d('0x4b')){var _0x161cf4=_0x5beea8[_0x3a5d('0x30')]?[{'partyid_systemuser@odata.bind':'/systemusers('+_0x5beea8[_0x3a5d('0x25')]+')','participationtypemask':_0x5beea8['callDirection']===_0x3a5d('0x4c')?0x2:0x1},{'partyid_contact@odata.bind':'/contacts('+_0x5beea8[_0x3a5d('0x30')]+')','participationtypemask':_0x5beea8[_0x3a5d('0x4d')]==='queue'?0x1:0x2}]:[{'partyid_systemuser@odata.bind':'/systemusers('+_0x5beea8['userId']+')','participationtypemask':_0x5beea8[_0x3a5d('0x4d')]===_0x3a5d('0x4c')?0x2:0x1}];_0x2215f8={'method':_0x3a5d('0x11'),'uri':_0x3cbc49+'phonecalls','body':Object[_0x3a5d('0x48')]({},{'subject':intUtil['getString'](_0x3fcb88['Subjects'],_0x1d08b9,'\x20'),'phonenumber':String(_0x1d08b9[_0x3a5d('0x29')]),'description':intUtil[_0x3a5d('0x49')](_0x3fcb88[_0x3a5d('0x4e')],_0x1d08b9,'\x0a'),'regardingobjectid_contact@odata.bind':_0x5beea8['enduserId']?_0x3a5d('0x4f')+_0x5beea8['enduserId']+')':undefined,'ownerid@odata.bind':'/systemusers('+_0x5beea8[_0x3a5d('0x25')]+')','directioncode':_0x5beea8[_0x3a5d('0x4d')]===_0x3a5d('0x4c')?![]:!![],'phonecall_activity_parties':_0x161cf4},getCustomFields(_0x3fcb88[_0x3a5d('0x4a')],_0x1d08b9,_0x3fcb88[_0x3a5d('0x45')])),'headers':{'Authorization':_0x3a5d('0x1d')+_0x412de9,'OData-Version':'4.0'},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x2215f8);})[_0x3a5d('0x16')](function(_0x4645ba){var _0xdb4851=_0x4645ba['headers']['odata-entityid'];var _0x270412=_0xdb4851[_0x3a5d('0x2e')](_0xdb4851[_0x3a5d('0x2f')]('(')+0x1,_0xdb4851[_0x3a5d('0x2f')](')'));_0x5beea8['ticketId']=_0x270412;_0x911a61(_0x5beea8);})[_0x3a5d('0x18')](function(_0x2c707d){_0x2d342d(_0x2c707d['message']);});});}function emit(_0x768076,_0x2126a4,_0xfda8fd,_0xf8a7e9){var _0x52d3af={'uri':util[_0x3a5d('0x50')](_0x3a5d('0x51'),_0x768076,_0xfda8fd,_0xf8a7e9)};io['to'](util[_0x3a5d('0x50')]('user:%s',_0x2126a4))['emit'](_0x3a5d('0x52'),_0x52d3af);}exports['cs']=function(_0x38755b,_0x5c554a,_0x4e84ed,_0x39c498,_0x72ddc2,_0x5dca74,_0x235d69,_0x24a6e7){var _0x248264={};_0x5dca74['remoteUri']=_0x5dca74[_0x3a5d('0xa')]?intUtil[_0x3a5d('0x53')](_0x5dca74[_0x3a5d('0xb')][_0x3a5d('0xc')]):intUtil['stripTrailingSlash'](_0x5dca74[_0x3a5d('0x13')]);_0x5dca74['serverUrl']=intUtil[_0x3a5d('0x53')](_0x5dca74[_0x3a5d('0x54')]);_0x248264[_0x3a5d('0x4d')]=_0x24a6e7==='queue'||_0x24a6e7===_0x3a5d('0x55')?_0x3a5d('0x4c'):_0x3a5d('0x27');var _0x590707=_0x5dca74[_0x3a5d('0xa')]?util['format'](_0x3a5d('0x56'),_0x5dca74[_0x3a5d('0xb')][_0x3a5d('0xc')]):util[_0x3a5d('0x50')](_0x3a5d('0x56'),_0x5dca74[_0x3a5d('0x13')]);var _0x2822ad=util[_0x3a5d('0x50')](_0x3a5d('0x57'),_0x5dca74[_0x3a5d('0xd')]);var _0x353846=util[_0x3a5d('0x50')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x5dca74['serverUrl'],_0x5c554a[_0x3a5d('0x58')],md5(_0x5c554a[_0x3a5d('0x58')]));if(_0x72ddc2&&_0x72ddc2[_0x3a5d('0x59')]){logger['info'](_0x3a5d('0x5a'),_0x3a5d('0x5b'));_0x5c554a[_0x3a5d('0x5c')]=_0x353846;}else if(_0x235d69&&_0x235d69['recordingFormat']&&_0x235d69[_0x3a5d('0x5d')]!==_0x3a5d('0x5e')){logger[_0x3a5d('0x39')](_0x3a5d('0x5f'),'Recording\x20is\x20enabled!');_0x5c554a[_0x3a5d('0x5c')]=_0x353846;}else{_0x5c554a['recordingURL']='';}return getUser(_0x248264,_0x5dca74,_0x39c498,_0x2822ad,_0x590707,_0x24a6e7)[_0x3a5d('0x16')](function(_0x2c9e24){logger[_0x3a5d('0x39')]('['+_0x24a6e7['toUpperCase']()+_0x3a5d('0x60'),_0x2c9e24[_0x3a5d('0x25')]);logger[_0x3a5d('0x39')]('['+_0x24a6e7[_0x3a5d('0x19')]()+']\x20The\x20User\x20email\x20is:',_0x2c9e24[_0x3a5d('0x20')]);return getEndUser(_0x2c9e24,_0x5dca74,_0x2822ad,_0x590707,_0x5c554a,_0x24a6e7,_0x4e84ed[_0x3a5d('0x61')],_0x4e84ed['additionalSearchContact']);})[_0x3a5d('0x16')](function(_0x46c204){logger['info']('['+_0x24a6e7[_0x3a5d('0x19')]()+_0x3a5d('0x62'),_0x46c204[_0x3a5d('0x30')]);logger[_0x3a5d('0x39')]('['+_0x24a6e7[_0x3a5d('0x19')]()+_0x3a5d('0x63'),_0x5c554a[_0x3a5d('0x29')]);return getTicket(_0x46c204,_0x5dca74,_0x2822ad,_0x590707,_0x5c554a,_0x4e84ed,_0x24a6e7);})[_0x3a5d('0x16')](function(_0x11ae37){logger[_0x3a5d('0x39')](util[_0x3a5d('0x50')]('['+_0x24a6e7[_0x3a5d('0x19')]()+_0x3a5d('0x64'),_0x4e84ed[_0x3a5d('0x45')],_0x11ae37['ticketId']));logger[_0x3a5d('0x39')](util['format']('['+_0x24a6e7[_0x3a5d('0x19')]()+_0x3a5d('0x65'),_0x24a6e7));if(_0x24a6e7!==_0x3a5d('0x55')&&_0x4e84ed[_0x3a5d('0x66')]){logger[_0x3a5d('0x39')]('['+_0x24a6e7[_0x3a5d('0x19')]()+']',_0x3a5d('0x67'));emit(_0x5dca74['remoteUri'],_0x39c498['name'],_0x4e84ed[_0x3a5d('0x45')],_0x11ae37[_0x3a5d('0x68')]);}})[_0x3a5d('0x18')](function(_0x67d488){logger['error']('['+_0x24a6e7[_0x3a5d('0x19')]()+_0x3a5d('0x69'),_0x67d488['message']);console[_0x3a5d('0x6a')](_0x3a5d('0x6b'),_0x67d488);});};