Built motion from commit 775e2a94.|2.6.3
[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 _0x6a44=['telephone1','contacts?$select=','\x20eq\x20\x27','replace','contactid',']\x20Enduser\x20NOT\x20Created\x20-\x20ModuleCreate\x20=\x20Nothing',']\x20Enduser\x20created!','picklist','type','idField','substring','indexOf','content','ticketType','incident','incidents','getString','Descriptions','enduserId','/contacts(','Fields','phonecall','callDirection','queue','phonecalls','assign','Subjects','ticketId','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','user:%s','emit','trigger:browser:url','stripTrailingSlash','serverUrl','unmanaged','format','%s/api/data/v9.0/','https://login.microsoftonline.com/%s/oauth2/token','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Recording\x20is\x20enabled!','recordingURL','recordingFormat','none','[OUTBOUND]','moduleCreate',']\x20The\x20Enduser\x20ID\x20is:',']\x20The\x20%s\x20ID\x20is:\x20%s',']\x20Error\x20running\x20Dynamics365\x20integration','lodash','request-promise','util','./util','md5','../../../../config/logger','dynamics365','../../../../config/environment','redis','localhost','socket.io-emitter','modernAuthentication','CloudProvider','data7','tenantId','data2','resolve','data5','POST','remoteUri','username','clientSecret','then','access_token','catch','error','toUpperCase','message','GET','systemusers?$select=internalemailaddress,isdisabled,systemuserid','Bearer\x20','4.0','value','isNil','email','userEmail','length','internalemailaddress','isdisabled','info',']\x20Agent\x20found\x20','systemuserid','userId','toLowerCase','outbound','destcalleridnum','calleridnum','/systemusers(','body','headers','odata-entityid','lastIndexOf'];(function(_0x6465b0,_0x45653a){var _0x4884fe=function(_0x427085){while(--_0x427085){_0x6465b0['push'](_0x6465b0['shift']());}};_0x4884fe(++_0x45653a);}(_0x6a44,0x160));var _0x46a4=function(_0x3bcad1,_0x4f2abd){_0x3bcad1=_0x3bcad1-0x0;var _0x3f4b37=_0x6a44[_0x3bcad1];return _0x3f4b37;};'use strict';var _=require(_0x46a4('0x0'));var rp=require(_0x46a4('0x1'));var util=require(_0x46a4('0x2'));var intUtil=require(_0x46a4('0x3'));var md5=require(_0x46a4('0x4'));var Redis=require('ioredis');var logger=require(_0x46a4('0x5'))(_0x46a4('0x6'));var config=require(_0x46a4('0x7'));config[_0x46a4('0x8')]=_['defaults'](config['redis'],{'host':_0x46a4('0x9'),'port':0x18eb});var io=require(_0x46a4('0xa'))(new Redis(config[_0x46a4('0x8')]));function getAuthToken(_0x492468,_0x593d81,_0x3e67bb){if(_0x492468[_0x46a4('0xb')]){_0x492468['remoteUri']=_0x492468[_0x46a4('0xc')][_0x46a4('0xd')];_0x492468[_0x46a4('0xe')]=_0x492468[_0x46a4('0xc')][_0x46a4('0xf')];return Promise[_0x46a4('0x10')](_0x492468[_0x46a4('0xc')][_0x46a4('0x11')]);}var _0x4ad591={'method':_0x46a4('0x12'),'uri':_0x593d81,'form':{'client_id':_0x492468['clientId'],'resource':_0x492468[_0x46a4('0x13')],'username':_0x492468[_0x46a4('0x14')],'password':_0x492468['password'],'grant_type':'password','client_secret':_0x492468[_0x46a4('0x15')]},'json':!![]};return rp(_0x4ad591)[_0x46a4('0x16')](function(_0x5167a1){return _0x5167a1[_0x46a4('0x17')];})[_0x46a4('0x18')](function(_0x83bdd6){logger[_0x46a4('0x19')]('['+[_0x3e67bb[_0x46a4('0x1a')]()]+']\x20Wrong\x20credentials!');return _0x83bdd6[_0x46a4('0x1b')];});}function getUser(_0x5abe4c,_0x3574c9,_0x1bd041,_0x4fbeb0,_0x3dbaad,_0x4ce98c){return new Promise(function(_0x17d1bf,_0x25e52b){return getAuthToken(_0x3574c9,_0x4fbeb0,_0x4ce98c)[_0x46a4('0x16')](function(_0x312d86){var _0x51a2ef={'method':_0x46a4('0x1c'),'uri':_0x3dbaad+_0x46a4('0x1d'),'headers':{'Authorization':_0x46a4('0x1e')+_0x312d86,'OData-Version':_0x46a4('0x1f')},'json':!![]};return rp(_0x51a2ef);})[_0x46a4('0x16')](function(_0x4e5b1a){var _0x4ff915=_0x4e5b1a[_0x46a4('0x20')];var _0x44818c=![];var _0x55d9d9=null;if(!_[_0x46a4('0x21')](_0x1bd041)){if(intUtil['validateEmail'](_0x1bd041[_0x46a4('0x22')])){_0x5abe4c[_0x46a4('0x23')]=_0x1bd041['email'];for(_0x55d9d9=0x0;_0x55d9d9<_0x4ff915[_0x46a4('0x24')];_0x55d9d9++){if(_0x4ff915[_0x55d9d9][_0x46a4('0x25')]===_0x1bd041['email']&&!_0x4ff915[_0x55d9d9][_0x46a4('0x26')]){_0x44818c=!![];logger[_0x46a4('0x27')]('['+[_0x4ce98c[_0x46a4('0x1a')]()]+_0x46a4('0x28')+_0x4ff915[_0x55d9d9][_0x46a4('0x29')]+'!');_0x5abe4c[_0x46a4('0x2a')]=_0x4ff915[_0x55d9d9][_0x46a4('0x29')];}}}}if(!_0x44818c){logger[_0x46a4('0x27')]('['+[_0x4ce98c[_0x46a4('0x1a')]()]+']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');_0x5abe4c[_0x46a4('0x23')]=_0x3574c9[_0x46a4('0x14')];for(_0x55d9d9=0x0;_0x55d9d9<_0x4ff915[_0x46a4('0x24')];_0x55d9d9++){if(_0x4ff915[_0x55d9d9][_0x46a4('0x25')]===_0x3574c9[_0x46a4('0x14')]){_0x5abe4c[_0x46a4('0x2a')]=_0x4ff915[_0x55d9d9][_0x46a4('0x29')];}}}_0x17d1bf(_0x5abe4c);})[_0x46a4('0x18')](function(_0x5a0292){_0x25e52b(_0x5a0292[_0x46a4('0x1b')]);});});}function createEndUser(_0x2a6658,_0x164362,_0x1fc272,_0x3de4ba,_0x5f3728,_0x20acae,_0x17f0af){return new Promise(function(_0x16ad2b,_0x9004c2){return getAuthToken(_0x164362,_0x1fc272,_0x20acae)[_0x46a4('0x16')](function(_0x35eb33){var _0x47f0dd=_0x20acae[_0x46a4('0x2b')]()===_0x46a4('0x2c')?_0x5f3728[_0x46a4('0x2d')]:_0x5f3728[_0x46a4('0x2e')];var _0x256e4c={'method':_0x46a4('0x12'),'uri':_0x3de4ba+'contacts','body':{'fullname':_0x47f0dd,'firstname':_0x47f0dd,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':_0x46a4('0x2f')+_0x2a6658['userId']+')'},'headers':{'Authorization':_0x46a4('0x1e')+_0x35eb33,'OData-Version':_0x46a4('0x1f')},'json':!![],'resolveWithFullResponse':!![]};_0x256e4c[_0x46a4('0x30')][_0x17f0af]=_0x47f0dd;return rp(_0x256e4c);})[_0x46a4('0x16')](function(_0x146ce2){var _0x3a2658=_0x146ce2[_0x46a4('0x31')][_0x46a4('0x32')];var _0x48ef74=_0x3a2658['substring'](_0x3a2658['lastIndexOf']('(')+0x1,_0x3a2658[_0x46a4('0x33')](')'));_0x2a6658['enduserId']=_0x48ef74;_0x16ad2b(_0x2a6658);})[_0x46a4('0x18')](function(_0x597550){_0x9004c2(_0x597550['message']);});});}function getEndUser(_0x2f2775,_0x28d2ab,_0x29279f,_0x4b8e03,_0x3b54ec,_0x204b51,_0x5c3b11,_0x3d249b){var _0x44205f=_0x204b51[_0x46a4('0x2b')]()===_0x46a4('0x2c')?_0x3b54ec[_0x46a4('0x2d')]:_0x3b54ec[_0x46a4('0x2e')];return getAuthToken(_0x28d2ab,_0x29279f,_0x204b51)[_0x46a4('0x16')](function(_0x3f3dee){_0x3d249b=_0x3d249b?_0x3d249b:_0x46a4('0x34');var _0x245e18={'method':_0x46a4('0x1c'),'uri':_0x4b8e03+_0x46a4('0x35')+_0x3d249b+'&$filter='+_0x3d249b+_0x46a4('0x36')+_0x44205f[_0x46a4('0x37')]('+','%2b')+'\x27','headers':{'Authorization':_0x46a4('0x1e')+_0x3f3dee,'If-None-Match':null,'OData-Version':_0x46a4('0x1f')},'json':!![]};return rp(_0x245e18);})[_0x46a4('0x16')](function(_0x494b12){var _0x302423=![];if(!_0x494b12)return _0x302423;var _0x11b6fa=_0x494b12[_0x46a4('0x20')];for(var _0xba3214=0x0;_0xba3214<_0x11b6fa['length'];_0xba3214++){if(_0x11b6fa[_0xba3214][_0x3d249b]===_0x44205f){_0x302423=!![];_0x2f2775['enduserId']=_0x11b6fa[_0xba3214][_0x46a4('0x38')];}}return _0x302423;})[_0x46a4('0x16')](function(_0xa72d22){if(_0xa72d22)return _0x2f2775;if(_0x5c3b11==='nothing'){logger[_0x46a4('0x27')]('['+[_0x204b51[_0x46a4('0x1a')]()]+_0x46a4('0x39'));return _0x2f2775;}return createEndUser(_0x2f2775,_0x28d2ab,_0x29279f,_0x4b8e03,_0x3b54ec,_0x204b51,_0x3d249b)[_0x46a4('0x16')](function(_0x490f32){logger[_0x46a4('0x27')]('['+[_0x204b51[_0x46a4('0x1a')]()]+_0x46a4('0x3a'),_0x490f32['enduserId']);return _0x490f32;});});}function getCustomFields(_0x1891cf,_0x198c50,_0x1fe03c){var _0x524b55={};if(_0x1891cf[_0x46a4('0x24')]>0x0){_['forEach'](_0x1891cf,function(_0x44d8ae){if(_['includes'](['string',_0x46a4('0x3b')],_0x44d8ae[_0x46a4('0x3c')])&&_0x44d8ae['nameField']&&!_0x44d8ae['customField']){var _0x4f22a6=_0x44d8ae[_0x46a4('0x3d')][_0x46a4('0x2b')]();var _0x4285cf=_0x4f22a6[_0x46a4('0x3e')](0x0,_0x4f22a6[_0x46a4('0x3f')]('_'));var _0x204f23=_0x4f22a6[_0x46a4('0x3e')](_0x4f22a6[_0x46a4('0x3f')]('_')+0x1);if(_0x4285cf===_0x1fe03c){_0x524b55[_0x204f23]=_0x44d8ae[_0x46a4('0x40')];}}});}return _0x524b55;}function getTicket(_0x2ef1f8,_0x21e3f,_0x5d0c8f,_0x1d27c9,_0xd97f1a,_0x8f12b0,_0x3bafba){return new Promise(function(_0x487961,_0x6fd6fd){var _0x358b79;return getAuthToken(_0x21e3f,_0x5d0c8f,_0x3bafba)[_0x46a4('0x16')](function(_0x1e0738){if(_0x8f12b0[_0x46a4('0x41')]===_0x46a4('0x42')){_0x358b79={'method':_0x46a4('0x12'),'uri':_0x1d27c9+_0x46a4('0x43'),'body':Object['assign']({},{'title':intUtil[_0x46a4('0x44')](_0x8f12b0['Subjects'],_0xd97f1a,'\x20'),'description':intUtil[_0x46a4('0x44')](_0x8f12b0[_0x46a4('0x45')],_0xd97f1a,'\x0a'),'customerid_contact@odata.bind':_0x2ef1f8[_0x46a4('0x46')]?_0x46a4('0x47')+_0x2ef1f8['enduserId']+')':undefined,'ownerid@odata.bind':_0x46a4('0x2f')+_0x2ef1f8[_0x46a4('0x2a')]+')','caseorigincode':'1'},getCustomFields(_0x8f12b0[_0x46a4('0x48')],_0xd97f1a,_0x8f12b0[_0x46a4('0x41')])),'headers':{'Authorization':_0x46a4('0x1e')+_0x1e0738,'OData-Version':_0x46a4('0x1f')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x8f12b0[_0x46a4('0x41')]===_0x46a4('0x49')){var _0x6d3632=_0x2ef1f8[_0x46a4('0x46')]?[{'partyid_systemuser@odata.bind':_0x46a4('0x2f')+_0x2ef1f8[_0x46a4('0x2a')]+')','participationtypemask':_0x2ef1f8[_0x46a4('0x4a')]===_0x46a4('0x4b')?0x2:0x1},{'partyid_contact@odata.bind':_0x46a4('0x47')+_0x2ef1f8[_0x46a4('0x46')]+')','participationtypemask':_0x2ef1f8['callDirection']===_0x46a4('0x4b')?0x1:0x2}]:[{'partyid_systemuser@odata.bind':_0x46a4('0x2f')+_0x2ef1f8[_0x46a4('0x2a')]+')','participationtypemask':_0x2ef1f8[_0x46a4('0x4a')]===_0x46a4('0x4b')?0x2:0x1}];_0x358b79={'method':_0x46a4('0x12'),'uri':_0x1d27c9+_0x46a4('0x4c'),'body':Object[_0x46a4('0x4d')]({},{'subject':intUtil['getString'](_0x8f12b0[_0x46a4('0x4e')],_0xd97f1a,'\x20'),'phonenumber':String(_0xd97f1a[_0x46a4('0x2e')]),'description':intUtil[_0x46a4('0x44')](_0x8f12b0['Descriptions'],_0xd97f1a,'\x0a'),'regardingobjectid_contact@odata.bind':_0x2ef1f8['enduserId']?_0x46a4('0x47')+_0x2ef1f8[_0x46a4('0x46')]+')':undefined,'ownerid@odata.bind':_0x46a4('0x2f')+_0x2ef1f8['userId']+')','directioncode':_0x2ef1f8['callDirection']==='queue'?![]:!![],'phonecall_activity_parties':_0x6d3632},getCustomFields(_0x8f12b0[_0x46a4('0x48')],_0xd97f1a,_0x8f12b0['ticketType'])),'headers':{'Authorization':_0x46a4('0x1e')+_0x1e0738,'OData-Version':_0x46a4('0x1f')},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x358b79);})[_0x46a4('0x16')](function(_0x1fe5e8){var _0x265f06=_0x1fe5e8['headers']['odata-entityid'];var _0x491df3=_0x265f06[_0x46a4('0x3e')](_0x265f06['lastIndexOf']('(')+0x1,_0x265f06[_0x46a4('0x33')](')'));_0x2ef1f8[_0x46a4('0x4f')]=_0x491df3;_0x487961(_0x2ef1f8);})[_0x46a4('0x18')](function(_0x4bec74){_0x6fd6fd(_0x4bec74[_0x46a4('0x1b')]);});});}function emit(_0x1491bd,_0x216722,_0x5c2dfe,_0x5cd511){var _0x4b8c1b={'uri':util['format'](_0x46a4('0x50'),_0x1491bd,_0x5c2dfe,_0x5cd511)};io['to'](util['format'](_0x46a4('0x51'),_0x216722))[_0x46a4('0x52')](_0x46a4('0x53'),_0x4b8c1b);}exports['cs']=function(_0x591e84,_0x292afb,_0x2a6397,_0xad2221,_0x89be22,_0x36b806,_0x37731b,_0x33e3b0){var _0x2912fd={};_0x36b806['remoteUri']=_0x36b806['modernAuthentication']?intUtil[_0x46a4('0x54')](_0x36b806[_0x46a4('0xc')][_0x46a4('0xd')]):intUtil['stripTrailingSlash'](_0x36b806[_0x46a4('0x13')]);_0x36b806[_0x46a4('0x55')]=intUtil[_0x46a4('0x54')](_0x36b806[_0x46a4('0x55')]);_0x2912fd['callDirection']=_0x33e3b0==='queue'||_0x33e3b0===_0x46a4('0x56')?_0x46a4('0x4b'):_0x46a4('0x2c');var _0x353216=_0x36b806[_0x46a4('0xb')]?util[_0x46a4('0x57')](_0x46a4('0x58'),_0x36b806[_0x46a4('0xc')][_0x46a4('0xd')]):util[_0x46a4('0x57')](_0x46a4('0x58'),_0x36b806['remoteUri']);var _0x5dbce1=util['format'](_0x46a4('0x59'),_0x36b806[_0x46a4('0xe')]);var _0x5cb8bf=util[_0x46a4('0x57')](_0x46a4('0x5a'),_0x36b806['serverUrl'],_0x292afb[_0x46a4('0x5b')],md5(_0x292afb['uniqueid']));if(_0x89be22&&_0x89be22['monitor_format']){logger['info']('[QUEUE]',_0x46a4('0x5c'));_0x292afb[_0x46a4('0x5d')]=_0x5cb8bf;}else if(_0x37731b&&_0x37731b['recordingFormat']&&_0x37731b[_0x46a4('0x5e')]!==_0x46a4('0x5f')){logger[_0x46a4('0x27')](_0x46a4('0x60'),_0x46a4('0x5c'));_0x292afb[_0x46a4('0x5d')]=_0x5cb8bf;}else{_0x292afb['recordingURL']='';}return getUser(_0x2912fd,_0x36b806,_0xad2221,_0x5dbce1,_0x353216,_0x33e3b0)[_0x46a4('0x16')](function(_0x58f70f){logger['info']('['+_0x33e3b0['toUpperCase']()+']\x20The\x20User\x20ID\x20is:',_0x58f70f[_0x46a4('0x2a')]);logger['info']('['+_0x33e3b0[_0x46a4('0x1a')]()+']\x20The\x20User\x20email\x20is:',_0x58f70f[_0x46a4('0x23')]);return getEndUser(_0x58f70f,_0x36b806,_0x5dbce1,_0x353216,_0x292afb,_0x33e3b0,_0x2a6397[_0x46a4('0x61')],_0x2a6397['additionalSearchContact']);})[_0x46a4('0x16')](function(_0x29aace){logger[_0x46a4('0x27')]('['+_0x33e3b0[_0x46a4('0x1a')]()+_0x46a4('0x62'),_0x29aace['enduserId']);logger[_0x46a4('0x27')]('['+_0x33e3b0[_0x46a4('0x1a')]()+']\x20The\x20Enduser\x20phone\x20is:',_0x292afb[_0x46a4('0x2e')]);return getTicket(_0x29aace,_0x36b806,_0x5dbce1,_0x353216,_0x292afb,_0x2a6397,_0x33e3b0);})[_0x46a4('0x16')](function(_0x3c7b91){logger[_0x46a4('0x27')](util[_0x46a4('0x57')]('['+_0x33e3b0[_0x46a4('0x1a')]()+_0x46a4('0x63'),_0x2a6397[_0x46a4('0x41')],_0x3c7b91[_0x46a4('0x4f')]));logger[_0x46a4('0x27')](util['format']('['+_0x33e3b0[_0x46a4('0x1a')]()+']\x20Call\x20direction:\x20%s',_0x33e3b0));if(_0x33e3b0!==_0x46a4('0x56')){logger['info']('['+_0x33e3b0[_0x46a4('0x1a')]()+']','Displaying\x20call\x20in\x20a\x20new\x20tab...');emit(_0x36b806['remoteUri'],_0xad2221['name'],_0x2a6397[_0x46a4('0x41')],_0x3c7b91['ticketId']);}})[_0x46a4('0x18')](function(_0x44426a){logger[_0x46a4('0x19')]('['+_0x33e3b0[_0x46a4('0x1a')]()+_0x46a4('0x64'),_0x44426a[_0x46a4('0x1b')]);});};