78d752a5a92020677fa30e8f7f770d8ced99d9f9
[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 _0x8ef9=['serverUrl','unmanaged','%s/api/data/v9.0/','https://login.microsoftonline.com/%s/oauth2/token','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','recordingFormat','[OUTBOUND]',']\x20The\x20User\x20email\x20is:','moduleCreate','additionalSearchContact',']\x20The\x20Enduser\x20ID\x20is:',']\x20The\x20%s\x20ID\x20is:\x20%s',']\x20Call\x20direction:\x20%s','Displaying\x20call\x20in\x20a\x20new\x20tab...','name',']\x20Error\x20running\x20Dynamics365\x20integration','request-promise','util','./util','ioredis','../../../../config/logger','dynamics365','../../../../config/environment','redis','defaults','localhost','socket.io-emitter','modernAuthentication','remoteUri','data7','tenantId','CloudProvider','data2','resolve','data5','POST','clientId','username','password','clientSecret','then','access_token','error','toUpperCase','GET','systemusers?$select=internalemailaddress,isdisabled,systemuserid','Bearer\x20','4.0','value','isNil','email','length','isdisabled','userId','systemuserid','info',']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','toLowerCase','outbound','destcalleridnum','calleridnum','contacts','/systemusers(','headers','odata-entityid','substring','lastIndexOf','enduserId','catch','message','telephone1','&$filter=','\x20eq\x20\x27','replace','contactid','nothing',']\x20Enduser\x20NOT\x20Created\x20-\x20ModuleCreate\x20=\x20Nothing',']\x20Enduser\x20created!','forEach','string','type','customField','indexOf','content','ticketType','incident','incidents','assign','getString','Descriptions','/contacts(','Fields','phonecall','callDirection','queue','phonecalls','Subjects','ticketId','format','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','emit','trigger:browser:url','stripTrailingSlash'];(function(_0x157416,_0x94217){var _0x1052ea=function(_0x3b153c){while(--_0x3b153c){_0x157416['push'](_0x157416['shift']());}};_0x1052ea(++_0x94217);}(_0x8ef9,0x155));var _0x98ef=function(_0x2a193d,_0x45a856){_0x2a193d=_0x2a193d-0x0;var _0x1ab652=_0x8ef9[_0x2a193d];return _0x1ab652;};'use strict';var _=require('lodash');var rp=require(_0x98ef('0x0'));var util=require(_0x98ef('0x1'));var intUtil=require(_0x98ef('0x2'));var md5=require('md5');var Redis=require(_0x98ef('0x3'));var logger=require(_0x98ef('0x4'))(_0x98ef('0x5'));var config=require(_0x98ef('0x6'));config[_0x98ef('0x7')]=_[_0x98ef('0x8')](config[_0x98ef('0x7')],{'host':_0x98ef('0x9'),'port':0x18eb});var io=require(_0x98ef('0xa'))(new Redis(config['redis']));function getAuthToken(_0x178d22,_0x4fb55d,_0x5e6c9f){if(_0x178d22[_0x98ef('0xb')]){_0x178d22[_0x98ef('0xc')]=_0x178d22['CloudProvider'][_0x98ef('0xd')];_0x178d22[_0x98ef('0xe')]=_0x178d22[_0x98ef('0xf')][_0x98ef('0x10')];return Promise[_0x98ef('0x11')](_0x178d22[_0x98ef('0xf')][_0x98ef('0x12')]);}var _0x2c1e15={'method':_0x98ef('0x13'),'uri':_0x4fb55d,'form':{'client_id':_0x178d22[_0x98ef('0x14')],'resource':_0x178d22['remoteUri'],'username':_0x178d22[_0x98ef('0x15')],'password':_0x178d22[_0x98ef('0x16')],'grant_type':'password','client_secret':_0x178d22[_0x98ef('0x17')]},'json':!![]};return rp(_0x2c1e15)[_0x98ef('0x18')](function(_0x154b78){return _0x154b78[_0x98ef('0x19')];})['catch'](function(_0x5d68b5){logger[_0x98ef('0x1a')]('['+[_0x5e6c9f[_0x98ef('0x1b')]()]+']\x20Wrong\x20credentials!');return _0x5d68b5['message'];});}function getUser(_0x31296a,_0x4c4ab2,_0x2740da,_0x128c6d,_0x2d41b1,_0x29b767){return new Promise(function(_0x4e2688,_0x389728){return getAuthToken(_0x4c4ab2,_0x128c6d,_0x29b767)[_0x98ef('0x18')](function(_0x21d70d){var _0x1a25ea={'method':_0x98ef('0x1c'),'uri':_0x2d41b1+_0x98ef('0x1d'),'headers':{'Authorization':_0x98ef('0x1e')+_0x21d70d,'OData-Version':_0x98ef('0x1f')},'json':!![]};return rp(_0x1a25ea);})[_0x98ef('0x18')](function(_0x2a6bb4){var _0x100838=_0x2a6bb4[_0x98ef('0x20')];var _0x496ff8=![];var _0x137e25=null;if(!_[_0x98ef('0x21')](_0x2740da)){if(intUtil['validateEmail'](_0x2740da['email'])){_0x31296a['userEmail']=_0x2740da[_0x98ef('0x22')];for(_0x137e25=0x0;_0x137e25<_0x100838[_0x98ef('0x23')];_0x137e25++){if(_0x100838[_0x137e25]['internalemailaddress']===_0x2740da['email']&&!_0x100838[_0x137e25][_0x98ef('0x24')]){_0x496ff8=!![];logger['info']('['+[_0x29b767['toUpperCase']()]+']\x20Agent\x20found\x20'+_0x100838[_0x137e25]['systemuserid']+'!');_0x31296a[_0x98ef('0x25')]=_0x100838[_0x137e25][_0x98ef('0x26')];}}}}if(!_0x496ff8){logger[_0x98ef('0x27')]('['+[_0x29b767[_0x98ef('0x1b')]()]+_0x98ef('0x28'));_0x31296a['userEmail']=_0x4c4ab2['username'];for(_0x137e25=0x0;_0x137e25<_0x100838['length'];_0x137e25++){if(_0x100838[_0x137e25]['internalemailaddress']===_0x4c4ab2[_0x98ef('0x15')]){_0x31296a[_0x98ef('0x25')]=_0x100838[_0x137e25][_0x98ef('0x26')];}}}_0x4e2688(_0x31296a);})['catch'](function(_0x3b7f46){_0x389728(_0x3b7f46['message']);});});}function createEndUser(_0x2c463d,_0x95a327,_0x1b32a8,_0x25447a,_0x221612,_0x14306e,_0x24b38f){return new Promise(function(_0x4a1d6d,_0x2e8bde){return getAuthToken(_0x95a327,_0x1b32a8,_0x14306e)[_0x98ef('0x18')](function(_0x306c02){var _0x5d7629=_0x14306e[_0x98ef('0x29')]()===_0x98ef('0x2a')?_0x221612[_0x98ef('0x2b')]:_0x221612[_0x98ef('0x2c')];var _0x4aaebc={'method':'POST','uri':_0x25447a+_0x98ef('0x2d'),'body':{'fullname':_0x5d7629,'firstname':_0x5d7629,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':_0x98ef('0x2e')+_0x2c463d[_0x98ef('0x25')]+')'},'headers':{'Authorization':_0x98ef('0x1e')+_0x306c02,'OData-Version':_0x98ef('0x1f')},'json':!![],'resolveWithFullResponse':!![]};_0x4aaebc['body'][_0x24b38f]=_0x5d7629;return rp(_0x4aaebc);})[_0x98ef('0x18')](function(_0x5db020){var _0x110ee7=_0x5db020[_0x98ef('0x2f')][_0x98ef('0x30')];var _0x24c8c6=_0x110ee7[_0x98ef('0x31')](_0x110ee7[_0x98ef('0x32')]('(')+0x1,_0x110ee7['lastIndexOf'](')'));_0x2c463d[_0x98ef('0x33')]=_0x24c8c6;_0x4a1d6d(_0x2c463d);})[_0x98ef('0x34')](function(_0x5426dc){_0x2e8bde(_0x5426dc[_0x98ef('0x35')]);});});}function getEndUser(_0xb65579,_0x1e8dad,_0x404638,_0x5877ed,_0x19379f,_0x3b0f44,_0xb1e06c,_0x11bd8f){var _0x3b1c77=_0x3b0f44[_0x98ef('0x29')]()===_0x98ef('0x2a')?_0x19379f[_0x98ef('0x2b')]:_0x19379f['calleridnum'];return getAuthToken(_0x1e8dad,_0x404638,_0x3b0f44)[_0x98ef('0x18')](function(_0x33d86e){_0x11bd8f=_0x11bd8f?_0x11bd8f:_0x98ef('0x36');var _0x21a573={'method':_0x98ef('0x1c'),'uri':_0x5877ed+'contacts?$select='+_0x11bd8f+_0x98ef('0x37')+_0x11bd8f+_0x98ef('0x38')+_0x3b1c77[_0x98ef('0x39')]('+','%2b')+'\x27','headers':{'Authorization':_0x98ef('0x1e')+_0x33d86e,'If-None-Match':null,'OData-Version':'4.0'},'json':!![]};return rp(_0x21a573);})[_0x98ef('0x18')](function(_0x2db4cf){var _0xade9be=![];if(!_0x2db4cf)return _0xade9be;var _0x544b58=_0x2db4cf[_0x98ef('0x20')];for(var _0x215c6f=0x0;_0x215c6f<_0x544b58[_0x98ef('0x23')];_0x215c6f++){if(_0x544b58[_0x215c6f][_0x11bd8f]===_0x3b1c77){_0xade9be=!![];_0xb65579[_0x98ef('0x33')]=_0x544b58[_0x215c6f][_0x98ef('0x3a')];}}return _0xade9be;})[_0x98ef('0x18')](function(_0x3caa31){if(_0x3caa31)return _0xb65579;if(_0xb1e06c===_0x98ef('0x3b')){logger[_0x98ef('0x27')]('['+[_0x3b0f44[_0x98ef('0x1b')]()]+_0x98ef('0x3c'));return _0xb65579;}return createEndUser(_0xb65579,_0x1e8dad,_0x404638,_0x5877ed,_0x19379f,_0x3b0f44,_0x11bd8f)[_0x98ef('0x18')](function(_0x57ee9e){logger[_0x98ef('0x27')]('['+[_0x3b0f44['toUpperCase']()]+_0x98ef('0x3d'),_0x57ee9e['enduserId']);return _0x57ee9e;});});}function getCustomFields(_0x1e0346,_0x5b301d,_0x5524ae){var _0x245950={};if(_0x1e0346[_0x98ef('0x23')]>0x0){_[_0x98ef('0x3e')](_0x1e0346,function(_0x66a3d){if(_['includes']([_0x98ef('0x3f'),'picklist'],_0x66a3d[_0x98ef('0x40')])&&_0x66a3d['nameField']&&!_0x66a3d[_0x98ef('0x41')]){var _0x2471a2=_0x66a3d['idField'][_0x98ef('0x29')]();var _0x29f204=_0x2471a2[_0x98ef('0x31')](0x0,_0x2471a2[_0x98ef('0x42')]('_'));var _0x108c30=_0x2471a2[_0x98ef('0x31')](_0x2471a2[_0x98ef('0x42')]('_')+0x1);if(_0x29f204===_0x5524ae){_0x245950[_0x108c30]=_0x66a3d[_0x98ef('0x43')];}}});}return _0x245950;}function getTicket(_0x3d52a7,_0x867845,_0x12cc24,_0x5f2275,_0x533120,_0x3a84a4,_0x12f19f){return new Promise(function(_0x1e232f,_0x2de6be){var _0x126cc3;return getAuthToken(_0x867845,_0x12cc24,_0x12f19f)[_0x98ef('0x18')](function(_0x3f9bd3){if(_0x3a84a4[_0x98ef('0x44')]===_0x98ef('0x45')){_0x126cc3={'method':_0x98ef('0x13'),'uri':_0x5f2275+_0x98ef('0x46'),'body':Object[_0x98ef('0x47')]({},{'title':intUtil[_0x98ef('0x48')](_0x3a84a4['Subjects'],_0x533120,'\x20'),'description':intUtil[_0x98ef('0x48')](_0x3a84a4[_0x98ef('0x49')],_0x533120,'\x0a'),'customerid_contact@odata.bind':_0x3d52a7[_0x98ef('0x33')]?_0x98ef('0x4a')+_0x3d52a7['enduserId']+')':undefined,'ownerid@odata.bind':_0x98ef('0x2e')+_0x3d52a7[_0x98ef('0x25')]+')','caseorigincode':'1'},getCustomFields(_0x3a84a4[_0x98ef('0x4b')],_0x533120,_0x3a84a4[_0x98ef('0x44')])),'headers':{'Authorization':'Bearer\x20'+_0x3f9bd3,'OData-Version':_0x98ef('0x1f')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x3a84a4[_0x98ef('0x44')]===_0x98ef('0x4c')){var _0x49a780=_0x3d52a7[_0x98ef('0x33')]?[{'partyid_systemuser@odata.bind':'/systemusers('+_0x3d52a7[_0x98ef('0x25')]+')','participationtypemask':_0x3d52a7[_0x98ef('0x4d')]===_0x98ef('0x4e')?0x2:0x1},{'partyid_contact@odata.bind':'/contacts('+_0x3d52a7[_0x98ef('0x33')]+')','participationtypemask':_0x3d52a7[_0x98ef('0x4d')]==='queue'?0x1:0x2}]:[{'partyid_systemuser@odata.bind':_0x98ef('0x2e')+_0x3d52a7[_0x98ef('0x25')]+')','participationtypemask':_0x3d52a7[_0x98ef('0x4d')]===_0x98ef('0x4e')?0x2:0x1}];_0x126cc3={'method':_0x98ef('0x13'),'uri':_0x5f2275+_0x98ef('0x4f'),'body':Object['assign']({},{'subject':intUtil[_0x98ef('0x48')](_0x3a84a4[_0x98ef('0x50')],_0x533120,'\x20'),'phonenumber':String(_0x533120[_0x98ef('0x2c')]),'description':intUtil['getString'](_0x3a84a4[_0x98ef('0x49')],_0x533120,'\x0a'),'regardingobjectid_contact@odata.bind':_0x3d52a7['enduserId']?_0x98ef('0x4a')+_0x3d52a7['enduserId']+')':undefined,'ownerid@odata.bind':_0x98ef('0x2e')+_0x3d52a7[_0x98ef('0x25')]+')','directioncode':_0x3d52a7[_0x98ef('0x4d')]==='queue'?![]:!![],'phonecall_activity_parties':_0x49a780},getCustomFields(_0x3a84a4[_0x98ef('0x4b')],_0x533120,_0x3a84a4[_0x98ef('0x44')])),'headers':{'Authorization':'Bearer\x20'+_0x3f9bd3,'OData-Version':_0x98ef('0x1f')},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x126cc3);})[_0x98ef('0x18')](function(_0xc77497){var _0x34700c=_0xc77497[_0x98ef('0x2f')]['odata-entityid'];var _0x514ad3=_0x34700c[_0x98ef('0x31')](_0x34700c[_0x98ef('0x32')]('(')+0x1,_0x34700c[_0x98ef('0x32')](')'));_0x3d52a7[_0x98ef('0x51')]=_0x514ad3;_0x1e232f(_0x3d52a7);})[_0x98ef('0x34')](function(_0x19087a){_0x2de6be(_0x19087a[_0x98ef('0x35')]);});});}function emit(_0x8519a5,_0x30c1b0,_0x54aded,_0x1d35ab){var _0x4a0121={'uri':util[_0x98ef('0x52')](_0x98ef('0x53'),_0x8519a5,_0x54aded,_0x1d35ab)};io['to'](util[_0x98ef('0x52')]('user:%s',_0x30c1b0))[_0x98ef('0x54')](_0x98ef('0x55'),_0x4a0121);}exports['cs']=function(_0x18eeb0,_0x5d5650,_0x401075,_0x17ad91,_0x241fa0,_0x3948bf,_0x11fd48,_0x2bf944){var _0x1c908e={};_0x3948bf[_0x98ef('0xc')]=_0x3948bf[_0x98ef('0xb')]?intUtil['stripTrailingSlash'](_0x3948bf[_0x98ef('0xf')]['data7']):intUtil[_0x98ef('0x56')](_0x3948bf[_0x98ef('0xc')]);_0x3948bf[_0x98ef('0x57')]=intUtil[_0x98ef('0x56')](_0x3948bf[_0x98ef('0x57')]);_0x1c908e[_0x98ef('0x4d')]=_0x2bf944==='queue'||_0x2bf944===_0x98ef('0x58')?'queue':_0x98ef('0x2a');var _0xc72b51=_0x3948bf[_0x98ef('0xb')]?util['format']('%s/api/data/v9.0/',_0x3948bf['CloudProvider'][_0x98ef('0xd')]):util[_0x98ef('0x52')](_0x98ef('0x59'),_0x3948bf[_0x98ef('0xc')]);var _0x5904eb=util[_0x98ef('0x52')](_0x98ef('0x5a'),_0x3948bf[_0x98ef('0xe')]);var _0x47044c=util[_0x98ef('0x52')](_0x98ef('0x5b'),_0x3948bf[_0x98ef('0x57')],_0x5d5650['uniqueid'],md5(_0x5d5650['uniqueid']));if(_0x241fa0&&_0x241fa0[_0x98ef('0x5c')]){logger['info'](_0x98ef('0x5d'),_0x98ef('0x5e'));_0x5d5650[_0x98ef('0x5f')]=_0x47044c;}else if(_0x11fd48&&_0x11fd48[_0x98ef('0x60')]&&_0x11fd48[_0x98ef('0x60')]!=='none'){logger[_0x98ef('0x27')](_0x98ef('0x61'),'Recording\x20is\x20enabled!');_0x5d5650['recordingURL']=_0x47044c;}else{_0x5d5650[_0x98ef('0x5f')]='';}return getUser(_0x1c908e,_0x3948bf,_0x17ad91,_0x5904eb,_0xc72b51,_0x2bf944)[_0x98ef('0x18')](function(_0x3b5007){logger[_0x98ef('0x27')]('['+_0x2bf944[_0x98ef('0x1b')]()+']\x20The\x20User\x20ID\x20is:',_0x3b5007[_0x98ef('0x25')]);logger[_0x98ef('0x27')]('['+_0x2bf944['toUpperCase']()+_0x98ef('0x62'),_0x3b5007['userEmail']);return getEndUser(_0x3b5007,_0x3948bf,_0x5904eb,_0xc72b51,_0x5d5650,_0x2bf944,_0x401075[_0x98ef('0x63')],_0x401075[_0x98ef('0x64')]);})[_0x98ef('0x18')](function(_0x593375){logger[_0x98ef('0x27')]('['+_0x2bf944[_0x98ef('0x1b')]()+_0x98ef('0x65'),_0x593375[_0x98ef('0x33')]);logger[_0x98ef('0x27')]('['+_0x2bf944['toUpperCase']()+']\x20The\x20Enduser\x20phone\x20is:',_0x5d5650[_0x98ef('0x2c')]);return getTicket(_0x593375,_0x3948bf,_0x5904eb,_0xc72b51,_0x5d5650,_0x401075,_0x2bf944);})[_0x98ef('0x18')](function(_0x1b2f4e){logger[_0x98ef('0x27')](util[_0x98ef('0x52')]('['+_0x2bf944['toUpperCase']()+_0x98ef('0x66'),_0x401075[_0x98ef('0x44')],_0x1b2f4e[_0x98ef('0x51')]));logger[_0x98ef('0x27')](util[_0x98ef('0x52')]('['+_0x2bf944[_0x98ef('0x1b')]()+_0x98ef('0x67'),_0x2bf944));if(_0x2bf944!==_0x98ef('0x58')&&_0x401075['openNewTab']){logger[_0x98ef('0x27')]('['+_0x2bf944[_0x98ef('0x1b')]()+']',_0x98ef('0x68'));emit(_0x3948bf['remoteUri'],_0x17ad91[_0x98ef('0x69')],_0x401075['ticketType'],_0x1b2f4e[_0x98ef('0x51')]);}})[_0x98ef('0x34')](function(_0x14249b){logger['error']('['+_0x2bf944[_0x98ef('0x1b')]()+_0x98ef('0x6a'),_0x14249b[_0x98ef('0x35')]);console[_0x98ef('0x1a')]('Error\x20running\x20Dynamics365\x20integration',_0x14249b);});};