Built motion from commit fe909640.|2.6.8
[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 _0x4032=['incidents','getString','Descriptions','/contacts(','Fields','ticketType','phonecall','callDirection','queue','assign','calleridnum','ticketId','format','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','user:%s','emit','trigger:browser:url','modernAuthentication','stripTrailingSlash','serverUrl','unmanaged','%s/api/data/v9.0/','https://login.microsoftonline.com/%s/oauth2/token','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','recordingFormat','none','[OUTBOUND]','userEmail','moduleCreate','additionalSearchContact',']\x20The\x20Enduser\x20ID\x20is:',']\x20The\x20%s\x20ID\x20is:\x20%s','openNewTab','Displaying\x20call\x20in\x20a\x20new\x20tab...','name',']\x20Error\x20running\x20Dynamics365\x20integration','request-promise','util','./util','md5','../../../../config/logger','dynamics365','../../../../config/environment','redis','defaults','localhost','socket.io-emitter','remoteUri','data7','tenantId','CloudProvider','data2','data5','POST','clientId','username','password','clientSecret','then','access_token','error',']\x20Wrong\x20credentials!','GET','systemusers?$select=internalemailaddress,isdisabled,systemuserid','Bearer\x20','4.0','isNil','email','length','internalemailaddress','isdisabled','toUpperCase','systemuserid','userId','info','catch','message','toLowerCase','outbound','contacts','/systemusers(','body','headers','odata-entityid','lastIndexOf','enduserId','destcalleridnum','telephone1','contacts?$select=','\x20eq\x20\x27','replace','%2b','value','contactid',']\x20Enduser\x20NOT\x20Created\x20-\x20ModuleCreate\x20=\x20Nothing','forEach','includes','string','picklist','type','nameField','customField','idField','substring','indexOf','content','incident'];(function(_0x3bad00,_0x211831){var _0x372769=function(_0x2e68b1){while(--_0x2e68b1){_0x3bad00['push'](_0x3bad00['shift']());}};_0x372769(++_0x211831);}(_0x4032,0x109));var _0x2403=function(_0x39e808,_0x1766cb){_0x39e808=_0x39e808-0x0;var _0xb42ac=_0x4032[_0x39e808];return _0xb42ac;};'use strict';var _=require('lodash');var rp=require(_0x2403('0x0'));var util=require(_0x2403('0x1'));var intUtil=require(_0x2403('0x2'));var md5=require(_0x2403('0x3'));var Redis=require('ioredis');var logger=require(_0x2403('0x4'))(_0x2403('0x5'));var config=require(_0x2403('0x6'));config[_0x2403('0x7')]=_[_0x2403('0x8')](config['redis'],{'host':_0x2403('0x9'),'port':0x18eb});var io=require(_0x2403('0xa'))(new Redis(config[_0x2403('0x7')]));function getAuthToken(_0x317593,_0x10609b,_0x550097){if(_0x317593['modernAuthentication']){_0x317593[_0x2403('0xb')]=_0x317593['CloudProvider'][_0x2403('0xc')];_0x317593[_0x2403('0xd')]=_0x317593[_0x2403('0xe')][_0x2403('0xf')];return Promise['resolve'](_0x317593['CloudProvider'][_0x2403('0x10')]);}var _0x12786b={'method':_0x2403('0x11'),'uri':_0x10609b,'form':{'client_id':_0x317593[_0x2403('0x12')],'resource':_0x317593['remoteUri'],'username':_0x317593[_0x2403('0x13')],'password':_0x317593[_0x2403('0x14')],'grant_type':_0x2403('0x14'),'client_secret':_0x317593[_0x2403('0x15')]},'json':!![]};return rp(_0x12786b)[_0x2403('0x16')](function(_0x4d0596){return _0x4d0596[_0x2403('0x17')];})['catch'](function(_0x55e514){logger[_0x2403('0x18')]('['+[_0x550097['toUpperCase']()]+_0x2403('0x19'));return _0x55e514['message'];});}function getUser(_0x239a9d,_0x41d187,_0xdc2c35,_0x5307a5,_0x34dcbd,_0x4caf34){return new Promise(function(_0x470321,_0x36bbe4){return getAuthToken(_0x41d187,_0x5307a5,_0x4caf34)[_0x2403('0x16')](function(_0x4c354b){var _0x35a014={'method':_0x2403('0x1a'),'uri':_0x34dcbd+_0x2403('0x1b'),'headers':{'Authorization':_0x2403('0x1c')+_0x4c354b,'OData-Version':_0x2403('0x1d')},'json':!![]};return rp(_0x35a014);})[_0x2403('0x16')](function(_0x2fb1fc){var _0x9c0c48=_0x2fb1fc['value'];var _0x54e95b=![];var _0x3a974a=null;if(!_[_0x2403('0x1e')](_0xdc2c35)){if(intUtil['validateEmail'](_0xdc2c35[_0x2403('0x1f')])){_0x239a9d['userEmail']=_0xdc2c35[_0x2403('0x1f')];for(_0x3a974a=0x0;_0x3a974a<_0x9c0c48[_0x2403('0x20')];_0x3a974a++){if(_0x9c0c48[_0x3a974a][_0x2403('0x21')]===_0xdc2c35[_0x2403('0x1f')]&&!_0x9c0c48[_0x3a974a][_0x2403('0x22')]){_0x54e95b=!![];logger['info']('['+[_0x4caf34[_0x2403('0x23')]()]+']\x20Agent\x20found\x20'+_0x9c0c48[_0x3a974a][_0x2403('0x24')]+'!');_0x239a9d[_0x2403('0x25')]=_0x9c0c48[_0x3a974a]['systemuserid'];}}}}if(!_0x54e95b){logger[_0x2403('0x26')]('['+[_0x4caf34[_0x2403('0x23')]()]+']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');_0x239a9d['userEmail']=_0x41d187[_0x2403('0x13')];for(_0x3a974a=0x0;_0x3a974a<_0x9c0c48[_0x2403('0x20')];_0x3a974a++){if(_0x9c0c48[_0x3a974a][_0x2403('0x21')]===_0x41d187[_0x2403('0x13')]){_0x239a9d[_0x2403('0x25')]=_0x9c0c48[_0x3a974a][_0x2403('0x24')];}}}_0x470321(_0x239a9d);})[_0x2403('0x27')](function(_0x55245d){_0x36bbe4(_0x55245d[_0x2403('0x28')]);});});}function createEndUser(_0x476fc1,_0x3d5aa8,_0x237573,_0x55885c,_0x328706,_0x1e304b,_0x2697c3){return new Promise(function(_0x38f876,_0x20b563){return getAuthToken(_0x3d5aa8,_0x237573,_0x1e304b)['then'](function(_0x4d8579){var _0x401303=_0x1e304b[_0x2403('0x29')]()===_0x2403('0x2a')?_0x328706['destcalleridnum']:_0x328706['calleridnum'];var _0x30fcbb={'method':_0x2403('0x11'),'uri':_0x55885c+_0x2403('0x2b'),'body':{'fullname':_0x401303,'firstname':_0x401303,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':_0x2403('0x2c')+_0x476fc1[_0x2403('0x25')]+')'},'headers':{'Authorization':_0x2403('0x1c')+_0x4d8579,'OData-Version':_0x2403('0x1d')},'json':!![],'resolveWithFullResponse':!![]};_0x30fcbb[_0x2403('0x2d')][_0x2697c3]=_0x401303;return rp(_0x30fcbb);})['then'](function(_0x176967){var _0x527fa7=_0x176967[_0x2403('0x2e')][_0x2403('0x2f')];var _0x18225d=_0x527fa7['substring'](_0x527fa7['lastIndexOf']('(')+0x1,_0x527fa7[_0x2403('0x30')](')'));_0x476fc1[_0x2403('0x31')]=_0x18225d;_0x38f876(_0x476fc1);})[_0x2403('0x27')](function(_0x23b61a){_0x20b563(_0x23b61a['message']);});});}function getEndUser(_0x228a6b,_0x2332c3,_0x39c5ad,_0x2d7795,_0x53ca5b,_0x193996,_0x2c7779,_0xb542a0){var _0x51d46a=_0x193996['toLowerCase']()==='outbound'?_0x53ca5b[_0x2403('0x32')]:_0x53ca5b['calleridnum'];return getAuthToken(_0x2332c3,_0x39c5ad,_0x193996)['then'](function(_0x57fbb3){_0xb542a0=_0xb542a0?_0xb542a0:_0x2403('0x33');var _0x4af990={'method':_0x2403('0x1a'),'uri':_0x2d7795+_0x2403('0x34')+_0xb542a0+'&$filter='+_0xb542a0+_0x2403('0x35')+_0x51d46a[_0x2403('0x36')]('+',_0x2403('0x37'))+'\x27','headers':{'Authorization':_0x2403('0x1c')+_0x57fbb3,'If-None-Match':null,'OData-Version':_0x2403('0x1d')},'json':!![]};return rp(_0x4af990);})[_0x2403('0x16')](function(_0x1b61cd){var _0x6114c=![];if(!_0x1b61cd)return _0x6114c;var _0x98580d=_0x1b61cd[_0x2403('0x38')];for(var _0x1854d8=0x0;_0x1854d8<_0x98580d[_0x2403('0x20')];_0x1854d8++){if(_0x98580d[_0x1854d8][_0xb542a0]===_0x51d46a){_0x6114c=!![];_0x228a6b[_0x2403('0x31')]=_0x98580d[_0x1854d8][_0x2403('0x39')];}}return _0x6114c;})[_0x2403('0x16')](function(_0x548a01){if(_0x548a01)return _0x228a6b;if(_0x2c7779==='nothing'){logger[_0x2403('0x26')]('['+[_0x193996[_0x2403('0x23')]()]+_0x2403('0x3a'));return _0x228a6b;}return createEndUser(_0x228a6b,_0x2332c3,_0x39c5ad,_0x2d7795,_0x53ca5b,_0x193996,_0xb542a0)[_0x2403('0x16')](function(_0x104bcd){logger[_0x2403('0x26')]('['+[_0x193996['toUpperCase']()]+']\x20Enduser\x20created!',_0x104bcd[_0x2403('0x31')]);return _0x104bcd;});});}function getCustomFields(_0x3a39e8,_0x42b288,_0x1c10ea){var _0xee4927={};if(_0x3a39e8[_0x2403('0x20')]>0x0){_[_0x2403('0x3b')](_0x3a39e8,function(_0x3f552b){if(_[_0x2403('0x3c')]([_0x2403('0x3d'),_0x2403('0x3e')],_0x3f552b[_0x2403('0x3f')])&&_0x3f552b[_0x2403('0x40')]&&!_0x3f552b[_0x2403('0x41')]){var _0x4786c0=_0x3f552b[_0x2403('0x42')][_0x2403('0x29')]();var _0x491af8=_0x4786c0[_0x2403('0x43')](0x0,_0x4786c0['indexOf']('_'));var _0x1697c0=_0x4786c0[_0x2403('0x43')](_0x4786c0[_0x2403('0x44')]('_')+0x1);if(_0x491af8===_0x1c10ea){_0xee4927[_0x1697c0]=_0x3f552b[_0x2403('0x45')];}}});}return _0xee4927;}function getTicket(_0x36b98c,_0x593f88,_0x435ab5,_0x19ea18,_0x1aec53,_0x1ebc3e,_0xf66e7f){return new Promise(function(_0x231c75,_0x321c5c){var _0x22b360;return getAuthToken(_0x593f88,_0x435ab5,_0xf66e7f)[_0x2403('0x16')](function(_0x1ab5b7){if(_0x1ebc3e['ticketType']===_0x2403('0x46')){_0x22b360={'method':_0x2403('0x11'),'uri':_0x19ea18+_0x2403('0x47'),'body':Object['assign']({},{'title':intUtil['getString'](_0x1ebc3e['Subjects'],_0x1aec53,'\x20'),'description':intUtil[_0x2403('0x48')](_0x1ebc3e[_0x2403('0x49')],_0x1aec53,'\x0a'),'customerid_contact@odata.bind':_0x36b98c[_0x2403('0x31')]?_0x2403('0x4a')+_0x36b98c[_0x2403('0x31')]+')':undefined,'ownerid@odata.bind':'/systemusers('+_0x36b98c['userId']+')','caseorigincode':'1'},getCustomFields(_0x1ebc3e[_0x2403('0x4b')],_0x1aec53,_0x1ebc3e[_0x2403('0x4c')])),'headers':{'Authorization':_0x2403('0x1c')+_0x1ab5b7,'OData-Version':'4.0'},'json':!![],'resolveWithFullResponse':!![]};}if(_0x1ebc3e[_0x2403('0x4c')]===_0x2403('0x4d')){var _0xea4adc=_0x36b98c['enduserId']?[{'partyid_systemuser@odata.bind':'/systemusers('+_0x36b98c['userId']+')','participationtypemask':_0x36b98c[_0x2403('0x4e')]==='queue'?0x2:0x1},{'partyid_contact@odata.bind':_0x2403('0x4a')+_0x36b98c[_0x2403('0x31')]+')','participationtypemask':_0x36b98c[_0x2403('0x4e')]==='queue'?0x1:0x2}]:[{'partyid_systemuser@odata.bind':_0x2403('0x2c')+_0x36b98c[_0x2403('0x25')]+')','participationtypemask':_0x36b98c['callDirection']===_0x2403('0x4f')?0x2:0x1}];_0x22b360={'method':_0x2403('0x11'),'uri':_0x19ea18+'phonecalls','body':Object[_0x2403('0x50')]({},{'subject':intUtil['getString'](_0x1ebc3e['Subjects'],_0x1aec53,'\x20'),'phonenumber':String(_0x1aec53[_0x2403('0x51')]),'description':intUtil[_0x2403('0x48')](_0x1ebc3e[_0x2403('0x49')],_0x1aec53,'\x0a'),'regardingobjectid_contact@odata.bind':_0x36b98c[_0x2403('0x31')]?'/contacts('+_0x36b98c[_0x2403('0x31')]+')':undefined,'ownerid@odata.bind':_0x2403('0x2c')+_0x36b98c[_0x2403('0x25')]+')','directioncode':_0x36b98c[_0x2403('0x4e')]==='queue'?![]:!![],'phonecall_activity_parties':_0xea4adc},getCustomFields(_0x1ebc3e[_0x2403('0x4b')],_0x1aec53,_0x1ebc3e[_0x2403('0x4c')])),'headers':{'Authorization':'Bearer\x20'+_0x1ab5b7,'OData-Version':_0x2403('0x1d')},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x22b360);})['then'](function(_0x21295a){var _0x5214a9=_0x21295a[_0x2403('0x2e')][_0x2403('0x2f')];var _0x2507ae=_0x5214a9[_0x2403('0x43')](_0x5214a9['lastIndexOf']('(')+0x1,_0x5214a9[_0x2403('0x30')](')'));_0x36b98c[_0x2403('0x52')]=_0x2507ae;_0x231c75(_0x36b98c);})[_0x2403('0x27')](function(_0x23e6b8){_0x321c5c(_0x23e6b8[_0x2403('0x28')]);});});}function emit(_0x15f0ad,_0xafdaff,_0x1eeeeb,_0x2cc805){var _0x584f8f={'uri':util[_0x2403('0x53')](_0x2403('0x54'),_0x15f0ad,_0x1eeeeb,_0x2cc805)};io['to'](util[_0x2403('0x53')](_0x2403('0x55'),_0xafdaff))[_0x2403('0x56')](_0x2403('0x57'),_0x584f8f);}exports['cs']=function(_0x3835ce,_0x121d4e,_0x3f90b4,_0x1eb6e9,_0xf4ff9a,_0x3e2ad8,_0x4c12e0,_0x3e402a){var _0x3fd03e={};_0x3e2ad8[_0x2403('0xb')]=_0x3e2ad8[_0x2403('0x58')]?intUtil[_0x2403('0x59')](_0x3e2ad8[_0x2403('0xe')][_0x2403('0xc')]):intUtil[_0x2403('0x59')](_0x3e2ad8['remoteUri']);_0x3e2ad8[_0x2403('0x5a')]=intUtil[_0x2403('0x59')](_0x3e2ad8['serverUrl']);_0x3fd03e[_0x2403('0x4e')]=_0x3e402a===_0x2403('0x4f')||_0x3e402a===_0x2403('0x5b')?_0x2403('0x4f'):_0x2403('0x2a');var _0x12bf83=_0x3e2ad8[_0x2403('0x58')]?util[_0x2403('0x53')](_0x2403('0x5c'),_0x3e2ad8[_0x2403('0xe')][_0x2403('0xc')]):util['format'](_0x2403('0x5c'),_0x3e2ad8[_0x2403('0xb')]);var _0x1366df=util[_0x2403('0x53')](_0x2403('0x5d'),_0x3e2ad8[_0x2403('0xd')]);var _0x296552=util['format'](_0x2403('0x5e'),_0x3e2ad8[_0x2403('0x5a')],_0x121d4e[_0x2403('0x5f')],md5(_0x121d4e[_0x2403('0x5f')]));if(_0xf4ff9a&&_0xf4ff9a[_0x2403('0x60')]){logger[_0x2403('0x26')](_0x2403('0x61'),_0x2403('0x62'));_0x121d4e[_0x2403('0x63')]=_0x296552;}else if(_0x4c12e0&&_0x4c12e0['recordingFormat']&&_0x4c12e0[_0x2403('0x64')]!==_0x2403('0x65')){logger['info'](_0x2403('0x66'),_0x2403('0x62'));_0x121d4e[_0x2403('0x63')]=_0x296552;}else{_0x121d4e['recordingURL']='';}return getUser(_0x3fd03e,_0x3e2ad8,_0x1eb6e9,_0x1366df,_0x12bf83,_0x3e402a)[_0x2403('0x16')](function(_0x499615){logger[_0x2403('0x26')]('['+_0x3e402a[_0x2403('0x23')]()+']\x20The\x20User\x20ID\x20is:',_0x499615[_0x2403('0x25')]);logger[_0x2403('0x26')]('['+_0x3e402a[_0x2403('0x23')]()+']\x20The\x20User\x20email\x20is:',_0x499615[_0x2403('0x67')]);return getEndUser(_0x499615,_0x3e2ad8,_0x1366df,_0x12bf83,_0x121d4e,_0x3e402a,_0x3f90b4[_0x2403('0x68')],_0x3f90b4[_0x2403('0x69')]);})[_0x2403('0x16')](function(_0x351a26){logger['info']('['+_0x3e402a['toUpperCase']()+_0x2403('0x6a'),_0x351a26[_0x2403('0x31')]);logger[_0x2403('0x26')]('['+_0x3e402a[_0x2403('0x23')]()+']\x20The\x20Enduser\x20phone\x20is:',_0x121d4e[_0x2403('0x51')]);return getTicket(_0x351a26,_0x3e2ad8,_0x1366df,_0x12bf83,_0x121d4e,_0x3f90b4,_0x3e402a);})[_0x2403('0x16')](function(_0x2508d0){logger[_0x2403('0x26')](util['format']('['+_0x3e402a[_0x2403('0x23')]()+_0x2403('0x6b'),_0x3f90b4[_0x2403('0x4c')],_0x2508d0[_0x2403('0x52')]));logger[_0x2403('0x26')](util[_0x2403('0x53')]('['+_0x3e402a['toUpperCase']()+']\x20Call\x20direction:\x20%s',_0x3e402a));if(_0x3e402a!=='unmanaged'&&_0x3f90b4[_0x2403('0x6c')]){logger[_0x2403('0x26')]('['+_0x3e402a['toUpperCase']()+']',_0x2403('0x6d'));emit(_0x3e2ad8[_0x2403('0xb')],_0x1eb6e9[_0x2403('0x6e')],_0x3f90b4[_0x2403('0x4c')],_0x2508d0[_0x2403('0x52')]);}})[_0x2403('0x27')](function(_0x49fb62){logger[_0x2403('0x18')]('['+_0x3e402a['toUpperCase']()+_0x2403('0x6f'),_0x49fb62['message']);console['error']('Error\x20running\x20Dynamics365\x20integration',_0x49fb62);});};