40be49cb31b6c7bc3a1dbd45301ae5320c618f0e
[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 _0x65b7=['assign','callDirection','queue','odata-entityid','format','user:%s','emit','stripTrailingSlash','serverUrl','unmanaged','%s/api/data/v9.0/','uniqueid','monitor_format','[QUEUE]','recordingURL','recordingFormat','[OUTBOUND]','Recording\x20is\x20enabled!',']\x20The\x20User\x20ID\x20is:',']\x20The\x20User\x20email\x20is:',']\x20The\x20Enduser\x20phone\x20is:',']\x20The\x20%s\x20ID\x20is:\x20%s','ticketId',']\x20Call\x20direction:\x20%s','Displaying\x20call\x20in\x20a\x20new\x20tab...',']\x20Error\x20running\x20Dynamics365\x20integration','inspect','bluebird','request-promise','util','./util','md5','../../../../config/logger','../../../../config/environment','redis','defaults','localhost','POST','clientId','remoteUri','username','password','clientSecret','access_token','error','toUpperCase',']\x20Wrong\x20credentials!','message','GET','systemusers?$select=internalemailaddress,isdisabled,systemuserid','Bearer\x20','4.0','then','value','isNil','userEmail','length','internalemailaddress','email','info',']\x20Agent\x20found\x20','systemuserid','userId','catch','toLowerCase','outbound','destcalleridnum','calleridnum','contacts','/systemusers(','headers','substring','lastIndexOf','enduserId','contacts?$select=telephone1','telephone1','contactid',']\x20Enduser\x20created!',']\x20Enduser\x20Created!','forEach','type','string','nameField','idField','indexOf','ticketType','incident','incidents','getString','Subjects','Descriptions','/contacts(','Fields','phonecall','phonecalls'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x65b7,0x197));var _0x765b=function(_0x1a3083,_0x5bfa95){_0x1a3083=_0x1a3083-0x0;var _0xe8fea5=_0x65b7[_0x1a3083];return _0xe8fea5;};'use strict';var _=require('lodash');var BPromise=require(_0x765b('0x0'));var rp=require(_0x765b('0x1'));var util=require(_0x765b('0x2'));var intUtil=require(_0x765b('0x3'));var md5=require(_0x765b('0x4'));var Redis=require('ioredis');var logger=require(_0x765b('0x5'))('dynamics365');var config=require(_0x765b('0x6'));config[_0x765b('0x7')]=_[_0x765b('0x8')](config[_0x765b('0x7')],{'host':_0x765b('0x9'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x765b('0x7')]));function getAuthToken(_0x504eee,_0x1ef61a,_0x3ae025){var _0x171bd5={'method':_0x765b('0xa'),'uri':_0x1ef61a,'form':{'client_id':_0x504eee[_0x765b('0xb')],'resource':_0x504eee[_0x765b('0xc')],'username':_0x504eee[_0x765b('0xd')],'password':_0x504eee[_0x765b('0xe')],'grant_type':_0x765b('0xe'),'client_secret':_0x504eee[_0x765b('0xf')]},'json':!![]};return rp(_0x171bd5)['then'](function(_0x282d92){return _0x282d92[_0x765b('0x10')];})['catch'](function(_0x30b10a){logger[_0x765b('0x11')]('['+[_0x3ae025[_0x765b('0x12')]()]+_0x765b('0x13'));return _0x30b10a[_0x765b('0x14')];});}function getUser(_0x445a97,_0x4873b7,_0x13940b,_0x48e949,_0x38ce35,_0x2583e1){return new BPromise(function(_0x215b66,_0x5e741b){return getAuthToken(_0x4873b7,_0x48e949,_0x2583e1)['then'](function(_0x4b9c37){var _0x24271c={'method':_0x765b('0x15'),'uri':_0x38ce35+_0x765b('0x16'),'headers':{'Authorization':_0x765b('0x17')+_0x4b9c37,'OData-Version':_0x765b('0x18')},'json':!![]};return rp(_0x24271c);})[_0x765b('0x19')](function(_0x4ac926){var _0x418e33=_0x4ac926[_0x765b('0x1a')];var _0x56bde0=![];var _0x3c2e2f=null;if(!_[_0x765b('0x1b')](_0x13940b)){if(intUtil['validateEmail'](_0x13940b['email'])){_0x445a97[_0x765b('0x1c')]=_0x13940b['email'];for(_0x3c2e2f=0x0;_0x3c2e2f<_0x418e33[_0x765b('0x1d')];_0x3c2e2f++){if(_0x418e33[_0x3c2e2f][_0x765b('0x1e')]===_0x13940b[_0x765b('0x1f')]&&!_0x418e33[_0x3c2e2f]['isdisabled']){_0x56bde0=!![];logger[_0x765b('0x20')]('['+[_0x2583e1[_0x765b('0x12')]()]+_0x765b('0x21')+_0x418e33[_0x3c2e2f][_0x765b('0x22')]+'!');_0x445a97[_0x765b('0x23')]=_0x418e33[_0x3c2e2f][_0x765b('0x22')];}}}}if(!_0x56bde0){logger[_0x765b('0x20')]('['+[_0x2583e1[_0x765b('0x12')]()]+']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');_0x445a97[_0x765b('0x1c')]=_0x4873b7[_0x765b('0xd')];for(_0x3c2e2f=0x0;_0x3c2e2f<_0x418e33[_0x765b('0x1d')];_0x3c2e2f++){if(_0x418e33[_0x3c2e2f][_0x765b('0x1e')]===_0x4873b7[_0x765b('0xd')]){_0x445a97[_0x765b('0x23')]=_0x418e33[_0x3c2e2f][_0x765b('0x22')];}}}_0x215b66(_0x445a97);})[_0x765b('0x24')](function(_0x223df4){_0x5e741b(_0x223df4[_0x765b('0x14')]);});});}function createEndUser(_0x4ecb42,_0x1e535a,_0x17c4d9,_0x2bacba,_0x352318,_0x1c40c0){return new BPromise(function(_0x2868c8,_0x42b3be){return getAuthToken(_0x1e535a,_0x17c4d9,_0x1c40c0)['then'](function(_0x1202b9){var _0x4df8ca=_0x1c40c0[_0x765b('0x25')]()===_0x765b('0x26')?_0x352318[_0x765b('0x27')]:_0x352318[_0x765b('0x28')];var _0x20dff1={'method':_0x765b('0xa'),'uri':_0x2bacba+_0x765b('0x29'),'body':{'telephone1':_0x4df8ca,'fullname':_0x4df8ca,'firstname':_0x4df8ca,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':_0x765b('0x2a')+_0x4ecb42[_0x765b('0x23')]+')'},'headers':{'Authorization':_0x765b('0x17')+_0x1202b9,'OData-Version':'4.0'},'json':!![],'resolveWithFullResponse':!![]};return rp(_0x20dff1);})[_0x765b('0x19')](function(_0x1cf889){var _0x26b3b6=_0x1cf889[_0x765b('0x2b')]['odata-entityid'];var _0x44ea2f=_0x26b3b6[_0x765b('0x2c')](_0x26b3b6['lastIndexOf']('(')+0x1,_0x26b3b6[_0x765b('0x2d')](')'));_0x4ecb42[_0x765b('0x2e')]=_0x44ea2f;_0x2868c8(_0x4ecb42);})[_0x765b('0x24')](function(_0x1d17be){_0x42b3be(_0x1d17be[_0x765b('0x14')]);});});}function getEndUser(_0x519156,_0x53cf5d,_0x2ed7e7,_0xfd4616,_0x5947ae,_0x53b48f){return new BPromise(function(_0x2a1074,_0x78cdf9){return getAuthToken(_0x53cf5d,_0x2ed7e7,_0x53b48f)[_0x765b('0x19')](function(_0x5bcdcc){var _0xebd93={'method':_0x765b('0x15'),'uri':_0xfd4616+_0x765b('0x2f'),'headers':{'Authorization':_0x765b('0x17')+_0x5bcdcc,'If-None-Match':null,'OData-Version':'4.0'},'json':!![]};return rp(_0xebd93);})['then'](function(_0xa43794){var _0x7940f1=null;if(_0xa43794){var _0x44dec8=_0xa43794['value'];var _0x5c1039=![];for(_0x7940f1=0x0;_0x7940f1<_0x44dec8[_0x765b('0x1d')];_0x7940f1++){var _0x126e57=_0x53b48f['toLowerCase']()===_0x765b('0x26')?_0x5947ae[_0x765b('0x27')]:_0x5947ae[_0x765b('0x28')];if(_0x44dec8[_0x7940f1][_0x765b('0x30')]===_0x126e57){_0x5c1039=!![];_0x519156[_0x765b('0x2e')]=_0x44dec8[_0x7940f1][_0x765b('0x31')];}}if(_0x5c1039){_0x2a1074(_0x519156);}else{return createEndUser(_0x519156,_0x53cf5d,_0x2ed7e7,_0xfd4616,_0x5947ae,_0x53b48f)[_0x765b('0x19')](function(_0x4ae5e2){logger[_0x765b('0x20')]('['+[_0x53b48f[_0x765b('0x12')]()]+_0x765b('0x32'),_0x4ae5e2['enduserId']);_0x2a1074(_0x4ae5e2);});}}else{return createEndUser(_0x519156,_0x53cf5d,_0x2ed7e7,_0xfd4616,_0x5947ae,_0x53b48f)[_0x765b('0x19')](function(_0x44b52f){logger[_0x765b('0x20')]('['+[_0x53b48f['toUpperCase']()]+_0x765b('0x33'),_0x44b52f[_0x765b('0x2e')]);_0x2a1074(_0x44b52f);});}});});}function getCustomFields(_0x251819,_0x22c9cb,_0x476062){var _0x1db7d2={};if(_0x251819[_0x765b('0x1d')]>0x0){_[_0x765b('0x34')](_0x251819,function(_0x105cdb){if(_0x105cdb[_0x765b('0x35')]===_0x765b('0x36')&&_0x105cdb[_0x765b('0x37')]&&!_0x105cdb['customField']){var _0x2cf8ed=_0x105cdb[_0x765b('0x38')][_0x765b('0x25')]();var _0x2218b6=_0x2cf8ed['substring'](0x0,_0x2cf8ed['indexOf']('_'));var _0x4556f6=_0x2cf8ed[_0x765b('0x2c')](_0x2cf8ed[_0x765b('0x39')]('_')+0x1);if(_0x2218b6===_0x476062){_0x1db7d2[_0x4556f6]=_0x105cdb['content'];}}});}return _0x1db7d2;}function getTicket(_0x1102d6,_0x522091,_0xa4378e,_0x5d683e,_0x51cc06,_0x5459b8,_0xf54b98){return new BPromise(function(_0x39b353,_0x250c82){var _0x22a28d;return getAuthToken(_0x522091,_0xa4378e,_0xf54b98)[_0x765b('0x19')](function(_0x210d48){if(_0x5459b8[_0x765b('0x3a')]===_0x765b('0x3b')){_0x22a28d={'method':_0x765b('0xa'),'uri':_0x5d683e+_0x765b('0x3c'),'body':Object['assign']({},{'title':intUtil[_0x765b('0x3d')](_0x5459b8[_0x765b('0x3e')],_0x51cc06,'\x20'),'description':intUtil['getString'](_0x5459b8[_0x765b('0x3f')],_0x51cc06,'\x0a'),'customerid_contact@odata.bind':_0x765b('0x40')+_0x1102d6[_0x765b('0x2e')]+')','ownerid@odata.bind':'/systemusers('+_0x1102d6['userId']+')','caseorigincode':'1'},getCustomFields(_0x5459b8[_0x765b('0x41')],_0x51cc06,_0x5459b8['ticketType'])),'headers':{'Authorization':_0x765b('0x17')+_0x210d48,'OData-Version':_0x765b('0x18')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x5459b8['ticketType']===_0x765b('0x42')){_0x22a28d={'method':'POST','uri':_0x5d683e+_0x765b('0x43'),'body':Object[_0x765b('0x44')]({},{'subject':intUtil['getString'](_0x5459b8[_0x765b('0x3e')],_0x51cc06,'\x20'),'phonenumber':String(_0x51cc06[_0x765b('0x28')]),'description':intUtil[_0x765b('0x3d')](_0x5459b8[_0x765b('0x3f')],_0x51cc06,'\x0a'),'regardingobjectid_contact@odata.bind':_0x765b('0x40')+_0x1102d6[_0x765b('0x2e')]+')','ownerid@odata.bind':_0x765b('0x2a')+_0x1102d6[_0x765b('0x23')]+')','directioncode':_0x1102d6[_0x765b('0x45')]===_0x765b('0x46')?![]:!![],'phonecall_activity_parties':[{'partyid_systemuser@odata.bind':_0x765b('0x2a')+_0x1102d6['userId']+')','participationtypemask':_0x1102d6['callDirection']==='queue'?0x2:0x1},{'partyid_contact@odata.bind':_0x765b('0x40')+_0x1102d6[_0x765b('0x2e')]+')','participationtypemask':_0x1102d6[_0x765b('0x45')]===_0x765b('0x46')?0x1:0x2}]},getCustomFields(_0x5459b8[_0x765b('0x41')],_0x51cc06,_0x5459b8[_0x765b('0x3a')])),'headers':{'Authorization':_0x765b('0x17')+_0x210d48,'OData-Version':_0x765b('0x18')},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x22a28d);})['then'](function(_0x15fb06){var _0x1db35c=_0x15fb06[_0x765b('0x2b')][_0x765b('0x47')];var _0x556d86=_0x1db35c[_0x765b('0x2c')](_0x1db35c[_0x765b('0x2d')]('(')+0x1,_0x1db35c[_0x765b('0x2d')](')'));_0x1102d6['ticketId']=_0x556d86;_0x39b353(_0x1102d6);})[_0x765b('0x24')](function(_0x27a3cd){_0x250c82(_0x27a3cd['message']);});});}function emit(_0x326c14,_0x77f099,_0x288c61,_0x41a610){var _0x1db3b1={'uri':util[_0x765b('0x48')]('%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s',_0x326c14,_0x288c61,_0x41a610)};io['to'](util['format'](_0x765b('0x49'),_0x77f099))[_0x765b('0x4a')]('trigger:browser:url',_0x1db3b1);}exports['cs']=function(_0x591474,_0xd00e8,_0x36835f,_0x23a62a,_0x508b27,_0x3314d9,_0x36fd2f,_0x486649){var _0x15e5bb={};_0x3314d9[_0x765b('0xc')]=intUtil[_0x765b('0x4b')](_0x3314d9['remoteUri']);_0x3314d9['serverUrl']=intUtil['stripTrailingSlash'](_0x3314d9[_0x765b('0x4c')]);_0x15e5bb[_0x765b('0x45')]=_0x486649===_0x765b('0x46')||_0x486649===_0x765b('0x4d')?_0x765b('0x46'):_0x765b('0x26');var _0x51a297=util[_0x765b('0x48')](_0x765b('0x4e'),_0x3314d9['remoteUri']);var _0x3ea2b8=util[_0x765b('0x48')]('https://login.microsoftonline.com/%s/oauth2/token',_0x3314d9['tenantId']);var _0x21d704=util[_0x765b('0x48')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x3314d9['serverUrl'],_0xd00e8[_0x765b('0x4f')],md5(_0xd00e8[_0x765b('0x4f')]));if(_0x508b27&&_0x508b27[_0x765b('0x50')]){logger[_0x765b('0x20')](_0x765b('0x51'),'Recording\x20is\x20enabled!');_0xd00e8[_0x765b('0x52')]=_0x21d704;}else if(_0x36fd2f&&_0x36fd2f[_0x765b('0x53')]&&_0x36fd2f['recordingFormat']!=='none'){logger['info'](_0x765b('0x54'),_0x765b('0x55'));_0xd00e8[_0x765b('0x52')]=_0x21d704;}else{_0xd00e8[_0x765b('0x52')]='';}return getUser(_0x15e5bb,_0x3314d9,_0x23a62a,_0x3ea2b8,_0x51a297,_0x486649)[_0x765b('0x19')](function(_0x4c9919){logger[_0x765b('0x20')]('['+_0x486649[_0x765b('0x12')]()+_0x765b('0x56'),_0x4c9919['userId']);logger[_0x765b('0x20')]('['+_0x486649[_0x765b('0x12')]()+_0x765b('0x57'),_0x4c9919[_0x765b('0x1c')]);return getEndUser(_0x4c9919,_0x3314d9,_0x3ea2b8,_0x51a297,_0xd00e8,_0x486649);})[_0x765b('0x19')](function(_0x32074c){logger[_0x765b('0x20')]('['+_0x486649[_0x765b('0x12')]()+']\x20The\x20Enduser\x20ID\x20is:',_0x32074c[_0x765b('0x2e')]);logger[_0x765b('0x20')]('['+_0x486649[_0x765b('0x12')]()+_0x765b('0x58'),_0xd00e8[_0x765b('0x28')]);return getTicket(_0x32074c,_0x3314d9,_0x3ea2b8,_0x51a297,_0xd00e8,_0x36835f,_0x486649);})['then'](function(_0x33852a){logger[_0x765b('0x20')](util[_0x765b('0x48')]('['+_0x486649[_0x765b('0x12')]()+_0x765b('0x59'),_0x36835f[_0x765b('0x3a')],_0x33852a[_0x765b('0x5a')]));logger[_0x765b('0x20')](util[_0x765b('0x48')]('['+_0x486649[_0x765b('0x12')]()+_0x765b('0x5b'),_0x486649));if(_0x486649!=='unmanaged'){logger[_0x765b('0x20')]('['+_0x486649[_0x765b('0x12')]()+']',_0x765b('0x5c'));emit(_0x3314d9[_0x765b('0xc')],_0x23a62a['name'],_0x36835f['ticketType'],_0x33852a['ticketId']);}})[_0x765b('0x24')](function(_0x34530b){logger[_0x765b('0x11')]('['+_0x486649[_0x765b('0x12')]()+_0x765b('0x5d'),util[_0x765b('0x5e')](_0x34530b,{'showHidden':!![],'depth':null}));});};