Built motion from commit b0a9a629.|2.6.33
[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 _0x9b3e=['phonecall','callDirection','queue','phonecalls','assign','ticketId','format','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','user:%s','trigger:browser:url','modernAuthentication','stripTrailingSlash','serverUrl','unmanaged','%s/api/data/v9.0/','tenantId','uniqueid','monitor_format','recordingFormat','none','[OUTBOUND]','Recording\x20is\x20enabled!','recordingURL',']\x20The\x20User\x20ID\x20is:',']\x20The\x20User\x20email\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...','name','lodash','request-promise','util','./util','ioredis','../../../../config/logger','../../../../config/environment','defaults','redis','localhost','socket.io-emitter','remoteUri','CloudProvider','data7','data2','data5','POST','password','clientSecret','access_token','error','toUpperCase',']\x20Wrong\x20credentials!','message','GET','4.0','value','isNil','validateEmail','email','userEmail','internalemailaddress','isdisabled','info',']\x20Agent\x20found\x20','systemuserid',']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','length','userId','catch','toLowerCase','outbound','destcalleridnum','calleridnum','contacts','/systemusers(','body','then','headers','odata-entityid','lastIndexOf','enduserId','telephone1','contacts?$select=','&$filter=','replace','contactid','nothing',']\x20Enduser\x20NOT\x20Created\x20-\x20ModuleCreate\x20=\x20Nothing',']\x20Enduser\x20created!','includes','string','nameField','customField','idField','substring','indexOf','ticketType','incident','getString','Subjects','Descriptions','/contacts(','Fields','Bearer\x20'];(function(_0x3ecaed,_0x6a02f6){var _0x5906b7=function(_0x4d6d73){while(--_0x4d6d73){_0x3ecaed['push'](_0x3ecaed['shift']());}};_0x5906b7(++_0x6a02f6);}(_0x9b3e,0x165));var _0xe9b3=function(_0x3b7e2b,_0x12b5e2){_0x3b7e2b=_0x3b7e2b-0x0;var _0x2d6dc1=_0x9b3e[_0x3b7e2b];return _0x2d6dc1;};'use strict';var _=require(_0xe9b3('0x0'));var rp=require(_0xe9b3('0x1'));var util=require(_0xe9b3('0x2'));var intUtil=require(_0xe9b3('0x3'));var md5=require('md5');var Redis=require(_0xe9b3('0x4'));var logger=require(_0xe9b3('0x5'))('dynamics365');var config=require(_0xe9b3('0x6'));config['redis']=_[_0xe9b3('0x7')](config[_0xe9b3('0x8')],{'host':_0xe9b3('0x9'),'port':0x18eb});var io=require(_0xe9b3('0xa'))(new Redis(config[_0xe9b3('0x8')]));function getAuthToken(_0xf63adb,_0x3ab781,_0x3e6dfd){if(_0xf63adb['modernAuthentication']){_0xf63adb[_0xe9b3('0xb')]=_0xf63adb[_0xe9b3('0xc')][_0xe9b3('0xd')];_0xf63adb['tenantId']=_0xf63adb[_0xe9b3('0xc')][_0xe9b3('0xe')];return Promise['resolve'](_0xf63adb[_0xe9b3('0xc')][_0xe9b3('0xf')]);}var _0x4570d3={'method':_0xe9b3('0x10'),'uri':_0x3ab781,'form':{'client_id':_0xf63adb['clientId'],'resource':_0xf63adb[_0xe9b3('0xb')],'username':_0xf63adb['username'],'password':_0xf63adb[_0xe9b3('0x11')],'grant_type':_0xe9b3('0x11'),'client_secret':_0xf63adb[_0xe9b3('0x12')]},'json':!![]};return rp(_0x4570d3)['then'](function(_0x449c83){return _0x449c83[_0xe9b3('0x13')];})['catch'](function(_0x491f31){logger[_0xe9b3('0x14')]('['+[_0x3e6dfd[_0xe9b3('0x15')]()]+_0xe9b3('0x16'));return _0x491f31[_0xe9b3('0x17')];});}function getUser(_0x3eb74f,_0x2eee15,_0x58427a,_0x29a6d4,_0x3710d1,_0x17c061){return new Promise(function(_0x1fe1a2,_0x399311){return getAuthToken(_0x2eee15,_0x29a6d4,_0x17c061)['then'](function(_0x46c8f1){var _0x2f89e6={'method':_0xe9b3('0x18'),'uri':_0x3710d1+'systemusers?$select=internalemailaddress,isdisabled,systemuserid','headers':{'Authorization':'Bearer\x20'+_0x46c8f1,'OData-Version':_0xe9b3('0x19')},'json':!![]};return rp(_0x2f89e6);})['then'](function(_0x5b0ebe){var _0x7350d3=_0x5b0ebe[_0xe9b3('0x1a')];var _0x3841e=![];var _0x3bfd50=null;if(!_[_0xe9b3('0x1b')](_0x58427a)){if(intUtil[_0xe9b3('0x1c')](_0x58427a[_0xe9b3('0x1d')])){_0x3eb74f[_0xe9b3('0x1e')]=_0x58427a[_0xe9b3('0x1d')];for(_0x3bfd50=0x0;_0x3bfd50<_0x7350d3['length'];_0x3bfd50++){if(_0x7350d3[_0x3bfd50][_0xe9b3('0x1f')]===_0x58427a[_0xe9b3('0x1d')]&&!_0x7350d3[_0x3bfd50][_0xe9b3('0x20')]){_0x3841e=!![];logger[_0xe9b3('0x21')]('['+[_0x17c061[_0xe9b3('0x15')]()]+_0xe9b3('0x22')+_0x7350d3[_0x3bfd50]['systemuserid']+'!');_0x3eb74f['userId']=_0x7350d3[_0x3bfd50][_0xe9b3('0x23')];}}}}if(!_0x3841e){logger[_0xe9b3('0x21')]('['+[_0x17c061['toUpperCase']()]+_0xe9b3('0x24'));_0x3eb74f['userEmail']=_0x2eee15['username'];for(_0x3bfd50=0x0;_0x3bfd50<_0x7350d3[_0xe9b3('0x25')];_0x3bfd50++){if(_0x7350d3[_0x3bfd50][_0xe9b3('0x1f')]===_0x2eee15['username']){_0x3eb74f[_0xe9b3('0x26')]=_0x7350d3[_0x3bfd50][_0xe9b3('0x23')];}}}_0x1fe1a2(_0x3eb74f);})[_0xe9b3('0x27')](function(_0x3e91e6){_0x399311(_0x3e91e6[_0xe9b3('0x17')]);});});}function createEndUser(_0x381cfb,_0x175dc1,_0x1567a9,_0x3d3253,_0x350de5,_0x135815,_0x41e191){return new Promise(function(_0xab2ca,_0x62563a){return getAuthToken(_0x175dc1,_0x1567a9,_0x135815)['then'](function(_0x493070){var _0x248ee7=_0x135815[_0xe9b3('0x28')]()===_0xe9b3('0x29')?_0x350de5[_0xe9b3('0x2a')]:_0x350de5[_0xe9b3('0x2b')];var _0x5199fb={'method':_0xe9b3('0x10'),'uri':_0x3d3253+_0xe9b3('0x2c'),'body':{'fullname':_0x248ee7,'firstname':_0x248ee7,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':_0xe9b3('0x2d')+_0x381cfb[_0xe9b3('0x26')]+')'},'headers':{'Authorization':'Bearer\x20'+_0x493070,'OData-Version':_0xe9b3('0x19')},'json':!![],'resolveWithFullResponse':!![]};_0x5199fb[_0xe9b3('0x2e')][_0x41e191]=_0x248ee7;return rp(_0x5199fb);})[_0xe9b3('0x2f')](function(_0x545fda){var _0x112512=_0x545fda[_0xe9b3('0x30')][_0xe9b3('0x31')];var _0x281ca0=_0x112512['substring'](_0x112512[_0xe9b3('0x32')]('(')+0x1,_0x112512[_0xe9b3('0x32')](')'));_0x381cfb[_0xe9b3('0x33')]=_0x281ca0;_0xab2ca(_0x381cfb);})[_0xe9b3('0x27')](function(_0x4df749){_0x62563a(_0x4df749['message']);});});}function getEndUser(_0x4ef1ee,_0x4551bf,_0xdd489e,_0x425bdd,_0x263752,_0x2f9a0e,_0x6286ca,_0x299d2e){var _0x2374f9=_0x2f9a0e[_0xe9b3('0x28')]()===_0xe9b3('0x29')?_0x263752[_0xe9b3('0x2a')]:_0x263752['calleridnum'];return getAuthToken(_0x4551bf,_0xdd489e,_0x2f9a0e)['then'](function(_0x5a954a){_0x299d2e=_0x299d2e?_0x299d2e:_0xe9b3('0x34');var _0x10e8dc={'method':_0xe9b3('0x18'),'uri':_0x425bdd+_0xe9b3('0x35')+_0x299d2e+_0xe9b3('0x36')+_0x299d2e+'\x20eq\x20\x27'+_0x2374f9[_0xe9b3('0x37')]('+','%2b')+'\x27','headers':{'Authorization':'Bearer\x20'+_0x5a954a,'If-None-Match':null,'OData-Version':_0xe9b3('0x19')},'json':!![]};return rp(_0x10e8dc);})[_0xe9b3('0x2f')](function(_0x33cad2){var _0x121c1a=![];if(!_0x33cad2)return _0x121c1a;var _0x2888c1=_0x33cad2[_0xe9b3('0x1a')];for(var _0x4973bd=0x0;_0x4973bd<_0x2888c1[_0xe9b3('0x25')];_0x4973bd++){if(_0x2888c1[_0x4973bd][_0x299d2e]===_0x2374f9){_0x121c1a=!![];_0x4ef1ee['enduserId']=_0x2888c1[_0x4973bd][_0xe9b3('0x38')];}}return _0x121c1a;})['then'](function(_0x4f3f48){if(_0x4f3f48)return _0x4ef1ee;if(_0x6286ca===_0xe9b3('0x39')){logger[_0xe9b3('0x21')]('['+[_0x2f9a0e['toUpperCase']()]+_0xe9b3('0x3a'));return _0x4ef1ee;}return createEndUser(_0x4ef1ee,_0x4551bf,_0xdd489e,_0x425bdd,_0x263752,_0x2f9a0e,_0x299d2e)[_0xe9b3('0x2f')](function(_0x225f1d){logger[_0xe9b3('0x21')]('['+[_0x2f9a0e['toUpperCase']()]+_0xe9b3('0x3b'),_0x225f1d[_0xe9b3('0x33')]);return _0x225f1d;});});}function getCustomFields(_0x19f737,_0x4e2064,_0x214318){var _0x1302b1={};if(_0x19f737[_0xe9b3('0x25')]>0x0){_['forEach'](_0x19f737,function(_0x676968){if(_[_0xe9b3('0x3c')]([_0xe9b3('0x3d'),'picklist'],_0x676968['type'])&&_0x676968[_0xe9b3('0x3e')]&&!_0x676968[_0xe9b3('0x3f')]){var _0x2fef1f=_0x676968[_0xe9b3('0x40')]['toLowerCase']();var _0x1982b3=_0x2fef1f[_0xe9b3('0x41')](0x0,_0x2fef1f[_0xe9b3('0x42')]('_'));var _0x54145e=_0x2fef1f[_0xe9b3('0x41')](_0x2fef1f[_0xe9b3('0x42')]('_')+0x1);if(_0x1982b3===_0x214318){_0x1302b1[_0x54145e]=_0x676968['content'];}}});}return _0x1302b1;}function getTicket(_0x3efb53,_0xb403e2,_0x4df1fc,_0x377e4d,_0x25a4f5,_0x4fc1ed,_0x3a3b4a){return new Promise(function(_0x55d0f5,_0x51b15a){var _0x1f088c;return getAuthToken(_0xb403e2,_0x4df1fc,_0x3a3b4a)[_0xe9b3('0x2f')](function(_0x4549ee){if(_0x4fc1ed[_0xe9b3('0x43')]===_0xe9b3('0x44')){_0x1f088c={'method':_0xe9b3('0x10'),'uri':_0x377e4d+'incidents','body':Object['assign']({},{'title':intUtil[_0xe9b3('0x45')](_0x4fc1ed[_0xe9b3('0x46')],_0x25a4f5,'\x20'),'description':intUtil['getString'](_0x4fc1ed[_0xe9b3('0x47')],_0x25a4f5,'\x0a'),'customerid_contact@odata.bind':_0x3efb53[_0xe9b3('0x33')]?_0xe9b3('0x48')+_0x3efb53[_0xe9b3('0x33')]+')':undefined,'ownerid@odata.bind':_0xe9b3('0x2d')+_0x3efb53[_0xe9b3('0x26')]+')','caseorigincode':'1'},getCustomFields(_0x4fc1ed[_0xe9b3('0x49')],_0x25a4f5,_0x4fc1ed[_0xe9b3('0x43')])),'headers':{'Authorization':_0xe9b3('0x4a')+_0x4549ee,'OData-Version':_0xe9b3('0x19')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x4fc1ed[_0xe9b3('0x43')]===_0xe9b3('0x4b')){var _0x4cecb1=_0x3efb53['enduserId']?[{'partyid_systemuser@odata.bind':'/systemusers('+_0x3efb53[_0xe9b3('0x26')]+')','participationtypemask':_0x3efb53[_0xe9b3('0x4c')]==='queue'?0x2:0x1},{'partyid_contact@odata.bind':_0xe9b3('0x48')+_0x3efb53[_0xe9b3('0x33')]+')','participationtypemask':_0x3efb53[_0xe9b3('0x4c')]==='queue'?0x1:0x2}]:[{'partyid_systemuser@odata.bind':_0xe9b3('0x2d')+_0x3efb53[_0xe9b3('0x26')]+')','participationtypemask':_0x3efb53[_0xe9b3('0x4c')]===_0xe9b3('0x4d')?0x2:0x1}];_0x1f088c={'method':_0xe9b3('0x10'),'uri':_0x377e4d+_0xe9b3('0x4e'),'body':Object[_0xe9b3('0x4f')]({},{'subject':intUtil[_0xe9b3('0x45')](_0x4fc1ed[_0xe9b3('0x46')],_0x25a4f5,'\x20'),'phonenumber':String(_0x25a4f5[_0xe9b3('0x2b')]),'description':intUtil[_0xe9b3('0x45')](_0x4fc1ed[_0xe9b3('0x47')],_0x25a4f5,'\x0a'),'regardingobjectid_contact@odata.bind':_0x3efb53[_0xe9b3('0x33')]?_0xe9b3('0x48')+_0x3efb53['enduserId']+')':undefined,'ownerid@odata.bind':_0xe9b3('0x2d')+_0x3efb53['userId']+')','directioncode':_0x3efb53[_0xe9b3('0x4c')]===_0xe9b3('0x4d')?![]:!![],'phonecall_activity_parties':_0x4cecb1},getCustomFields(_0x4fc1ed['Fields'],_0x25a4f5,_0x4fc1ed['ticketType'])),'headers':{'Authorization':_0xe9b3('0x4a')+_0x4549ee,'OData-Version':_0xe9b3('0x19')},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x1f088c);})['then'](function(_0x16f5be){var _0x214c91=_0x16f5be['headers']['odata-entityid'];var _0x513794=_0x214c91[_0xe9b3('0x41')](_0x214c91[_0xe9b3('0x32')]('(')+0x1,_0x214c91[_0xe9b3('0x32')](')'));_0x3efb53[_0xe9b3('0x50')]=_0x513794;_0x55d0f5(_0x3efb53);})['catch'](function(_0x3535e7){_0x51b15a(_0x3535e7[_0xe9b3('0x17')]);});});}function emit(_0x4917e5,_0x3551f5,_0x5a0046,_0x360738){var _0x14b2f6={'uri':util[_0xe9b3('0x51')](_0xe9b3('0x52'),_0x4917e5,_0x5a0046,_0x360738)};io['to'](util['format'](_0xe9b3('0x53'),_0x3551f5))['emit'](_0xe9b3('0x54'),_0x14b2f6);}exports['cs']=function(_0x348fa0,_0x5153ae,_0xc5b627,_0x67e168,_0xe9b85e,_0x2589b4,_0x45ea50,_0x46067b){var _0x2baf01={};_0x2589b4[_0xe9b3('0xb')]=_0x2589b4[_0xe9b3('0x55')]?intUtil[_0xe9b3('0x56')](_0x2589b4[_0xe9b3('0xc')]['data7']):intUtil['stripTrailingSlash'](_0x2589b4[_0xe9b3('0xb')]);_0x2589b4[_0xe9b3('0x57')]=intUtil['stripTrailingSlash'](_0x2589b4['serverUrl']);_0x2baf01['callDirection']=_0x46067b==='queue'||_0x46067b===_0xe9b3('0x58')?_0xe9b3('0x4d'):_0xe9b3('0x29');var _0x2a4833=_0x2589b4['modernAuthentication']?util[_0xe9b3('0x51')](_0xe9b3('0x59'),_0x2589b4[_0xe9b3('0xc')][_0xe9b3('0xd')]):util[_0xe9b3('0x51')](_0xe9b3('0x59'),_0x2589b4[_0xe9b3('0xb')]);var _0x4af2fe=util[_0xe9b3('0x51')]('https://login.microsoftonline.com/%s/oauth2/token',_0x2589b4[_0xe9b3('0x5a')]);var _0x1379b1=util[_0xe9b3('0x51')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x2589b4[_0xe9b3('0x57')],_0x5153ae[_0xe9b3('0x5b')],md5(_0x5153ae['uniqueid']));if(_0xe9b85e&&_0xe9b85e[_0xe9b3('0x5c')]){logger[_0xe9b3('0x21')]('[QUEUE]','Recording\x20is\x20enabled!');_0x5153ae['recordingURL']=_0x1379b1;}else if(_0x45ea50&&_0x45ea50[_0xe9b3('0x5d')]&&_0x45ea50[_0xe9b3('0x5d')]!==_0xe9b3('0x5e')){logger[_0xe9b3('0x21')](_0xe9b3('0x5f'),_0xe9b3('0x60'));_0x5153ae['recordingURL']=_0x1379b1;}else{_0x5153ae[_0xe9b3('0x61')]='';}return getUser(_0x2baf01,_0x2589b4,_0x67e168,_0x4af2fe,_0x2a4833,_0x46067b)['then'](function(_0x32d884){logger['info']('['+_0x46067b[_0xe9b3('0x15')]()+_0xe9b3('0x62'),_0x32d884[_0xe9b3('0x26')]);logger[_0xe9b3('0x21')]('['+_0x46067b[_0xe9b3('0x15')]()+_0xe9b3('0x63'),_0x32d884[_0xe9b3('0x1e')]);return getEndUser(_0x32d884,_0x2589b4,_0x4af2fe,_0x2a4833,_0x5153ae,_0x46067b,_0xc5b627[_0xe9b3('0x64')],_0xc5b627['additionalSearchContact']);})[_0xe9b3('0x2f')](function(_0x67c429){logger[_0xe9b3('0x21')]('['+_0x46067b['toUpperCase']()+_0xe9b3('0x65'),_0x67c429['enduserId']);logger[_0xe9b3('0x21')]('['+_0x46067b[_0xe9b3('0x15')]()+_0xe9b3('0x66'),_0x5153ae[_0xe9b3('0x2b')]);return getTicket(_0x67c429,_0x2589b4,_0x4af2fe,_0x2a4833,_0x5153ae,_0xc5b627,_0x46067b);})['then'](function(_0x2ea217){logger[_0xe9b3('0x21')](util[_0xe9b3('0x51')]('['+_0x46067b[_0xe9b3('0x15')]()+_0xe9b3('0x67'),_0xc5b627['ticketType'],_0x2ea217['ticketId']));logger[_0xe9b3('0x21')](util[_0xe9b3('0x51')]('['+_0x46067b['toUpperCase']()+_0xe9b3('0x68'),_0x46067b));if(_0x46067b!==_0xe9b3('0x58')&&_0xc5b627[_0xe9b3('0x69')]){logger['info']('['+_0x46067b[_0xe9b3('0x15')]()+']',_0xe9b3('0x6a'));emit(_0x2589b4[_0xe9b3('0xb')],_0x67e168[_0xe9b3('0x6b')],_0xc5b627[_0xe9b3('0x43')],_0x2ea217[_0xe9b3('0x50')]);}})[_0xe9b3('0x27')](function(_0x4a8817){logger['error']('['+_0x46067b[_0xe9b3('0x15')]()+']\x20Error\x20running\x20Dynamics365\x20integration',_0x4a8817[_0xe9b3('0x17')]);console[_0xe9b3('0x14')]('Error\x20running\x20Dynamics365\x20integration',_0x4a8817);});};