9731d4c5f8e246eb96e87eab372a878126201cc3
[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 _0xd660=['/contacts(','Fields','phonecall','callDirection','queue','phonecalls','Descriptions','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/','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','monitor_format','[QUEUE]','recordingURL','recordingFormat','none','[OUTBOUND]','Recording\x20is\x20enabled!',']\x20The\x20User\x20email\x20is:','moduleCreate','additionalSearchContact',']\x20The\x20Enduser\x20ID\x20is:',']\x20The\x20Enduser\x20phone\x20is:',']\x20The\x20%s\x20ID\x20is:\x20%s','ticketId',']\x20Call\x20direction:\x20%s','openNewTab','Displaying\x20call\x20in\x20a\x20new\x20tab...','error','Error\x20running\x20Dynamics365\x20integration','lodash','request-promise','util','./util','ioredis','dynamics365','../../../../config/environment','redis','defaults','localhost','socket.io-emitter','remoteUri','CloudProvider','data7','tenantId','resolve','data5','POST','clientId','username','password','then','catch','toUpperCase','message','GET','systemusers?$select=internalemailaddress,isdisabled,systemuserid','Bearer\x20','4.0','email','userEmail','length','isdisabled','info',']\x20Agent\x20found\x20','systemuserid','userId','internalemailaddress','toLowerCase','outbound','calleridnum','/systemusers(','body','headers','odata-entityid','lastIndexOf','enduserId','destcalleridnum','telephone1','contacts?$select=','replace','%2b','contactid','nothing',']\x20Enduser\x20created!','forEach','includes','string','picklist','type','nameField','customField','idField','substring','indexOf','ticketType','incident','incidents','assign','Subjects','getString'];(function(_0x22aa7f,_0x2f6ff6){var _0x591797=function(_0x20441f){while(--_0x20441f){_0x22aa7f['push'](_0x22aa7f['shift']());}};_0x591797(++_0x2f6ff6);}(_0xd660,0x93));var _0x0d66=function(_0x1e03a6,_0xf0349){_0x1e03a6=_0x1e03a6-0x0;var _0x295b64=_0xd660[_0x1e03a6];return _0x295b64;};'use strict';var _=require(_0x0d66('0x0'));var rp=require(_0x0d66('0x1'));var util=require(_0x0d66('0x2'));var intUtil=require(_0x0d66('0x3'));var md5=require('md5');var Redis=require(_0x0d66('0x4'));var logger=require('../../../../config/logger')(_0x0d66('0x5'));var config=require(_0x0d66('0x6'));config[_0x0d66('0x7')]=_[_0x0d66('0x8')](config[_0x0d66('0x7')],{'host':_0x0d66('0x9'),'port':0x18eb});var io=require(_0x0d66('0xa'))(new Redis(config[_0x0d66('0x7')]));function getAuthToken(_0x3c5607,_0x58d90a,_0x439c3b){if(_0x3c5607['modernAuthentication']){_0x3c5607[_0x0d66('0xb')]=_0x3c5607[_0x0d66('0xc')][_0x0d66('0xd')];_0x3c5607[_0x0d66('0xe')]=_0x3c5607['CloudProvider']['data2'];return Promise[_0x0d66('0xf')](_0x3c5607['CloudProvider'][_0x0d66('0x10')]);}var _0x4f8093={'method':_0x0d66('0x11'),'uri':_0x58d90a,'form':{'client_id':_0x3c5607[_0x0d66('0x12')],'resource':_0x3c5607[_0x0d66('0xb')],'username':_0x3c5607[_0x0d66('0x13')],'password':_0x3c5607[_0x0d66('0x14')],'grant_type':_0x0d66('0x14'),'client_secret':_0x3c5607['clientSecret']},'json':!![]};return rp(_0x4f8093)[_0x0d66('0x15')](function(_0x430c44){return _0x430c44['access_token'];})[_0x0d66('0x16')](function(_0x4dcadc){logger['error']('['+[_0x439c3b[_0x0d66('0x17')]()]+']\x20Wrong\x20credentials!');return _0x4dcadc[_0x0d66('0x18')];});}function getUser(_0x3d9770,_0x278b58,_0x70eeca,_0x761d6b,_0x3a3a48,_0x368fdd){return new Promise(function(_0x2fdd66,_0x250e9e){return getAuthToken(_0x278b58,_0x761d6b,_0x368fdd)['then'](function(_0x1ee1c6){var _0x41b129={'method':_0x0d66('0x19'),'uri':_0x3a3a48+_0x0d66('0x1a'),'headers':{'Authorization':_0x0d66('0x1b')+_0x1ee1c6,'OData-Version':_0x0d66('0x1c')},'json':!![]};return rp(_0x41b129);})[_0x0d66('0x15')](function(_0x523ac9){var _0x1dbd95=_0x523ac9['value'];var _0x40cd41=![];var _0xd08ec0=null;if(!_['isNil'](_0x70eeca)){if(intUtil['validateEmail'](_0x70eeca[_0x0d66('0x1d')])){_0x3d9770[_0x0d66('0x1e')]=_0x70eeca['email'];for(_0xd08ec0=0x0;_0xd08ec0<_0x1dbd95[_0x0d66('0x1f')];_0xd08ec0++){if(_0x1dbd95[_0xd08ec0]['internalemailaddress']===_0x70eeca['email']&&!_0x1dbd95[_0xd08ec0][_0x0d66('0x20')]){_0x40cd41=!![];logger[_0x0d66('0x21')]('['+[_0x368fdd[_0x0d66('0x17')]()]+_0x0d66('0x22')+_0x1dbd95[_0xd08ec0][_0x0d66('0x23')]+'!');_0x3d9770[_0x0d66('0x24')]=_0x1dbd95[_0xd08ec0]['systemuserid'];}}}}if(!_0x40cd41){logger[_0x0d66('0x21')]('['+[_0x368fdd[_0x0d66('0x17')]()]+']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');_0x3d9770['userEmail']=_0x278b58[_0x0d66('0x13')];for(_0xd08ec0=0x0;_0xd08ec0<_0x1dbd95[_0x0d66('0x1f')];_0xd08ec0++){if(_0x1dbd95[_0xd08ec0][_0x0d66('0x25')]===_0x278b58['username']){_0x3d9770[_0x0d66('0x24')]=_0x1dbd95[_0xd08ec0][_0x0d66('0x23')];}}}_0x2fdd66(_0x3d9770);})['catch'](function(_0x42d9ce){_0x250e9e(_0x42d9ce['message']);});});}function createEndUser(_0x3d53ad,_0x53a818,_0x5236dc,_0x5d1e0e,_0x517ec8,_0x1b6ed7,_0x3b1467){return new Promise(function(_0x4095cf,_0x3a846a){return getAuthToken(_0x53a818,_0x5236dc,_0x1b6ed7)[_0x0d66('0x15')](function(_0x40349d){var _0x23173b=_0x1b6ed7[_0x0d66('0x26')]()===_0x0d66('0x27')?_0x517ec8['destcalleridnum']:_0x517ec8[_0x0d66('0x28')];var _0x309364={'method':'POST','uri':_0x5d1e0e+'contacts','body':{'fullname':_0x23173b,'firstname':_0x23173b,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':_0x0d66('0x29')+_0x3d53ad[_0x0d66('0x24')]+')'},'headers':{'Authorization':_0x0d66('0x1b')+_0x40349d,'OData-Version':_0x0d66('0x1c')},'json':!![],'resolveWithFullResponse':!![]};_0x309364[_0x0d66('0x2a')][_0x3b1467]=_0x23173b;return rp(_0x309364);})['then'](function(_0x5c1ad5){var _0xf90c8e=_0x5c1ad5[_0x0d66('0x2b')][_0x0d66('0x2c')];var _0x5c152c=_0xf90c8e['substring'](_0xf90c8e['lastIndexOf']('(')+0x1,_0xf90c8e[_0x0d66('0x2d')](')'));_0x3d53ad[_0x0d66('0x2e')]=_0x5c152c;_0x4095cf(_0x3d53ad);})['catch'](function(_0x47175c){_0x3a846a(_0x47175c[_0x0d66('0x18')]);});});}function getEndUser(_0x359504,_0x56928f,_0x35bc20,_0x46807a,_0x23190e,_0x4f6736,_0x54ca19,_0x5321b2){var _0x10537e=_0x4f6736[_0x0d66('0x26')]()===_0x0d66('0x27')?_0x23190e[_0x0d66('0x2f')]:_0x23190e['calleridnum'];return getAuthToken(_0x56928f,_0x35bc20,_0x4f6736)[_0x0d66('0x15')](function(_0x3034af){_0x5321b2=_0x5321b2?_0x5321b2:_0x0d66('0x30');var _0x3c1301={'method':_0x0d66('0x19'),'uri':_0x46807a+_0x0d66('0x31')+_0x5321b2+'&$filter='+_0x5321b2+'\x20eq\x20\x27'+_0x10537e[_0x0d66('0x32')]('+',_0x0d66('0x33'))+'\x27','headers':{'Authorization':'Bearer\x20'+_0x3034af,'If-None-Match':null,'OData-Version':'4.0'},'json':!![]};return rp(_0x3c1301);})[_0x0d66('0x15')](function(_0x17b893){var _0x304277=![];if(!_0x17b893)return _0x304277;var _0x32cd97=_0x17b893['value'];for(var _0x335177=0x0;_0x335177<_0x32cd97[_0x0d66('0x1f')];_0x335177++){if(_0x32cd97[_0x335177][_0x5321b2]===_0x10537e){_0x304277=!![];_0x359504['enduserId']=_0x32cd97[_0x335177][_0x0d66('0x34')];}}return _0x304277;})[_0x0d66('0x15')](function(_0x24e01a){if(_0x24e01a)return _0x359504;if(_0x54ca19===_0x0d66('0x35')){logger[_0x0d66('0x21')]('['+[_0x4f6736[_0x0d66('0x17')]()]+']\x20Enduser\x20NOT\x20Created\x20-\x20ModuleCreate\x20=\x20Nothing');return _0x359504;}return createEndUser(_0x359504,_0x56928f,_0x35bc20,_0x46807a,_0x23190e,_0x4f6736,_0x5321b2)[_0x0d66('0x15')](function(_0x4f864f){logger[_0x0d66('0x21')]('['+[_0x4f6736[_0x0d66('0x17')]()]+_0x0d66('0x36'),_0x4f864f[_0x0d66('0x2e')]);return _0x4f864f;});});}function getCustomFields(_0x3563d8,_0x204342,_0x90a81c){var _0x5e513d={};if(_0x3563d8['length']>0x0){_[_0x0d66('0x37')](_0x3563d8,function(_0x55c2d9){if(_[_0x0d66('0x38')]([_0x0d66('0x39'),_0x0d66('0x3a')],_0x55c2d9[_0x0d66('0x3b')])&&_0x55c2d9[_0x0d66('0x3c')]&&!_0x55c2d9[_0x0d66('0x3d')]){var _0xbd52cf=_0x55c2d9[_0x0d66('0x3e')]['toLowerCase']();var _0x1fd114=_0xbd52cf[_0x0d66('0x3f')](0x0,_0xbd52cf[_0x0d66('0x40')]('_'));var _0x161d83=_0xbd52cf[_0x0d66('0x3f')](_0xbd52cf[_0x0d66('0x40')]('_')+0x1);if(_0x1fd114===_0x90a81c){_0x5e513d[_0x161d83]=_0x55c2d9['content'];}}});}return _0x5e513d;}function getTicket(_0x5da665,_0x1158d9,_0x351f3a,_0x8e9f52,_0x53e558,_0x115e32,_0x249fbd){return new Promise(function(_0x58400a,_0x21170d){var _0x30f29a;return getAuthToken(_0x1158d9,_0x351f3a,_0x249fbd)[_0x0d66('0x15')](function(_0x5afc35){if(_0x115e32[_0x0d66('0x41')]===_0x0d66('0x42')){_0x30f29a={'method':_0x0d66('0x11'),'uri':_0x8e9f52+_0x0d66('0x43'),'body':Object[_0x0d66('0x44')]({},{'title':intUtil['getString'](_0x115e32[_0x0d66('0x45')],_0x53e558,'\x20'),'description':intUtil[_0x0d66('0x46')](_0x115e32['Descriptions'],_0x53e558,'\x0a'),'customerid_contact@odata.bind':_0x5da665['enduserId']?_0x0d66('0x47')+_0x5da665['enduserId']+')':undefined,'ownerid@odata.bind':_0x0d66('0x29')+_0x5da665['userId']+')','caseorigincode':'1'},getCustomFields(_0x115e32[_0x0d66('0x48')],_0x53e558,_0x115e32['ticketType'])),'headers':{'Authorization':_0x0d66('0x1b')+_0x5afc35,'OData-Version':'4.0'},'json':!![],'resolveWithFullResponse':!![]};}if(_0x115e32[_0x0d66('0x41')]===_0x0d66('0x49')){var _0x862ba3=_0x5da665[_0x0d66('0x2e')]?[{'partyid_systemuser@odata.bind':_0x0d66('0x29')+_0x5da665[_0x0d66('0x24')]+')','participationtypemask':_0x5da665[_0x0d66('0x4a')]==='queue'?0x2:0x1},{'partyid_contact@odata.bind':_0x0d66('0x47')+_0x5da665[_0x0d66('0x2e')]+')','participationtypemask':_0x5da665[_0x0d66('0x4a')]===_0x0d66('0x4b')?0x1:0x2}]:[{'partyid_systemuser@odata.bind':_0x0d66('0x29')+_0x5da665[_0x0d66('0x24')]+')','participationtypemask':_0x5da665[_0x0d66('0x4a')]===_0x0d66('0x4b')?0x2:0x1}];_0x30f29a={'method':'POST','uri':_0x8e9f52+_0x0d66('0x4c'),'body':Object[_0x0d66('0x44')]({},{'subject':intUtil[_0x0d66('0x46')](_0x115e32['Subjects'],_0x53e558,'\x20'),'phonenumber':String(_0x53e558[_0x0d66('0x28')]),'description':intUtil[_0x0d66('0x46')](_0x115e32[_0x0d66('0x4d')],_0x53e558,'\x0a'),'regardingobjectid_contact@odata.bind':_0x5da665[_0x0d66('0x2e')]?_0x0d66('0x47')+_0x5da665[_0x0d66('0x2e')]+')':undefined,'ownerid@odata.bind':'/systemusers('+_0x5da665['userId']+')','directioncode':_0x5da665['callDirection']===_0x0d66('0x4b')?![]:!![],'phonecall_activity_parties':_0x862ba3},getCustomFields(_0x115e32[_0x0d66('0x48')],_0x53e558,_0x115e32['ticketType'])),'headers':{'Authorization':_0x0d66('0x1b')+_0x5afc35,'OData-Version':_0x0d66('0x1c')},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x30f29a);})[_0x0d66('0x15')](function(_0x2b0d3c){var _0x38605d=_0x2b0d3c[_0x0d66('0x2b')]['odata-entityid'];var _0x3f0940=_0x38605d[_0x0d66('0x3f')](_0x38605d[_0x0d66('0x2d')]('(')+0x1,_0x38605d[_0x0d66('0x2d')](')'));_0x5da665['ticketId']=_0x3f0940;_0x58400a(_0x5da665);})[_0x0d66('0x16')](function(_0x7af3f1){_0x21170d(_0x7af3f1[_0x0d66('0x18')]);});});}function emit(_0x2624bd,_0x3de6c0,_0x426c5c,_0x2bbdde){var _0x5d4f41={'uri':util[_0x0d66('0x4e')](_0x0d66('0x4f'),_0x2624bd,_0x426c5c,_0x2bbdde)};io['to'](util[_0x0d66('0x4e')](_0x0d66('0x50'),_0x3de6c0))[_0x0d66('0x51')](_0x0d66('0x52'),_0x5d4f41);}exports['cs']=function(_0x25c341,_0x3bb2ab,_0x2a6c95,_0x17783e,_0x3a5be9,_0xfcfb89,_0xcb2c7e,_0x160619){var _0x427ac9={};_0xfcfb89[_0x0d66('0xb')]=_0xfcfb89[_0x0d66('0x53')]?intUtil[_0x0d66('0x54')](_0xfcfb89[_0x0d66('0xc')][_0x0d66('0xd')]):intUtil[_0x0d66('0x54')](_0xfcfb89['remoteUri']);_0xfcfb89[_0x0d66('0x55')]=intUtil['stripTrailingSlash'](_0xfcfb89[_0x0d66('0x55')]);_0x427ac9[_0x0d66('0x4a')]=_0x160619===_0x0d66('0x4b')||_0x160619===_0x0d66('0x56')?'queue':_0x0d66('0x27');var _0x46d6b0=_0xfcfb89['modernAuthentication']?util[_0x0d66('0x4e')](_0x0d66('0x57'),_0xfcfb89[_0x0d66('0xc')][_0x0d66('0xd')]):util[_0x0d66('0x4e')](_0x0d66('0x57'),_0xfcfb89[_0x0d66('0xb')]);var _0x18bfdd=util[_0x0d66('0x4e')]('https://login.microsoftonline.com/%s/oauth2/token',_0xfcfb89[_0x0d66('0xe')]);var _0xc6b943=util[_0x0d66('0x4e')](_0x0d66('0x58'),_0xfcfb89[_0x0d66('0x55')],_0x3bb2ab[_0x0d66('0x59')],md5(_0x3bb2ab[_0x0d66('0x59')]));if(_0x3a5be9&&_0x3a5be9[_0x0d66('0x5a')]){logger[_0x0d66('0x21')](_0x0d66('0x5b'),'Recording\x20is\x20enabled!');_0x3bb2ab[_0x0d66('0x5c')]=_0xc6b943;}else if(_0xcb2c7e&&_0xcb2c7e[_0x0d66('0x5d')]&&_0xcb2c7e['recordingFormat']!==_0x0d66('0x5e')){logger[_0x0d66('0x21')](_0x0d66('0x5f'),_0x0d66('0x60'));_0x3bb2ab[_0x0d66('0x5c')]=_0xc6b943;}else{_0x3bb2ab[_0x0d66('0x5c')]='';}return getUser(_0x427ac9,_0xfcfb89,_0x17783e,_0x18bfdd,_0x46d6b0,_0x160619)['then'](function(_0x5c9cb7){logger[_0x0d66('0x21')]('['+_0x160619[_0x0d66('0x17')]()+']\x20The\x20User\x20ID\x20is:',_0x5c9cb7[_0x0d66('0x24')]);logger['info']('['+_0x160619[_0x0d66('0x17')]()+_0x0d66('0x61'),_0x5c9cb7[_0x0d66('0x1e')]);return getEndUser(_0x5c9cb7,_0xfcfb89,_0x18bfdd,_0x46d6b0,_0x3bb2ab,_0x160619,_0x2a6c95[_0x0d66('0x62')],_0x2a6c95[_0x0d66('0x63')]);})[_0x0d66('0x15')](function(_0x43fbbd){logger[_0x0d66('0x21')]('['+_0x160619['toUpperCase']()+_0x0d66('0x64'),_0x43fbbd['enduserId']);logger[_0x0d66('0x21')]('['+_0x160619[_0x0d66('0x17')]()+_0x0d66('0x65'),_0x3bb2ab['calleridnum']);return getTicket(_0x43fbbd,_0xfcfb89,_0x18bfdd,_0x46d6b0,_0x3bb2ab,_0x2a6c95,_0x160619);})[_0x0d66('0x15')](function(_0x52d012){logger['info'](util['format']('['+_0x160619[_0x0d66('0x17')]()+_0x0d66('0x66'),_0x2a6c95[_0x0d66('0x41')],_0x52d012[_0x0d66('0x67')]));logger[_0x0d66('0x21')](util['format']('['+_0x160619[_0x0d66('0x17')]()+_0x0d66('0x68'),_0x160619));if(_0x160619!==_0x0d66('0x56')&&_0x2a6c95[_0x0d66('0x69')]){logger[_0x0d66('0x21')]('['+_0x160619[_0x0d66('0x17')]()+']',_0x0d66('0x6a'));emit(_0xfcfb89[_0x0d66('0xb')],_0x17783e['name'],_0x2a6c95[_0x0d66('0x41')],_0x52d012['ticketId']);}})['catch'](function(_0x13a79c){logger['error']('['+_0x160619['toUpperCase']()+']\x20Error\x20running\x20Dynamics365\x20integration',_0x13a79c[_0x0d66('0x18')]);console[_0x0d66('0x6b')](_0x0d66('0x6c'),_0x13a79c);});};