924d7ecbe472e47d25d359764fded321b0ab2825
[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 _0x3010=['format','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','user:%s','emit','trigger:browser:url','stripTrailingSlash','serverUrl','%s/api/data/v9.0/','https://login.microsoftonline.com/%s/oauth2/token','tenantId','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','recordingFormat','[OUTBOUND]',']\x20The\x20User\x20email\x20is:',']\x20The\x20Enduser\x20ID\x20is:',']\x20The\x20Enduser\x20phone\x20is:',']\x20The\x20%s\x20ID\x20is:\x20%s',']\x20Call\x20direction:\x20%s','abandoned','name','error',']\x20Error\x20running\x20Dynamics365\x20integration','inspect','lodash','bluebird','util','./util','md5','../../../../config/logger','dynamics365','redis','defaults','localhost','socket.io-emitter','POST','clientId','remoteUri','username','password','then','access_token','toUpperCase',']\x20Wrong\x20credentials!','GET','Bearer\x20','4.0','isNil','validateEmail','email','userEmail','length','isdisabled','info','systemuserid','userId','internalemailaddress','catch','toLowerCase','destcalleridnum','contacts','/systemusers(','headers','odata-entityid','substring','lastIndexOf','enduserId','message','outbound','calleridnum','telephone1','contactid',']\x20Enduser\x20created!',']\x20Enduser\x20Created!','type','string','customField','indexOf','incident','incidents','assign','getString','Subjects','Descriptions','Fields','ticketType','phonecall','phonecalls','queue','/contacts(','callDirection','ticketId'];(function(_0x5e28bd,_0x1ac89d){var _0x11cfca=function(_0x300732){while(--_0x300732){_0x5e28bd['push'](_0x5e28bd['shift']());}};_0x11cfca(++_0x1ac89d);}(_0x3010,0x7c));var _0x0301=function(_0x4ff775,_0x2c4d7a){_0x4ff775=_0x4ff775-0x0;var _0x431df0=_0x3010[_0x4ff775];return _0x431df0;};'use strict';var _=require(_0x0301('0x0'));var BPromise=require(_0x0301('0x1'));var rp=require('request-promise');var util=require(_0x0301('0x2'));var intUtil=require(_0x0301('0x3'));var md5=require(_0x0301('0x4'));var Redis=require('ioredis');var logger=require(_0x0301('0x5'))(_0x0301('0x6'));var config=require('../../../../config/environment');config[_0x0301('0x7')]=_[_0x0301('0x8')](config['redis'],{'host':_0x0301('0x9'),'port':0x18eb});var io=require(_0x0301('0xa'))(new Redis(config[_0x0301('0x7')]));function getAuthToken(_0x596535,_0x14dad7,_0x283700){var _0x294a75={'method':_0x0301('0xb'),'uri':_0x14dad7,'form':{'client_id':_0x596535[_0x0301('0xc')],'resource':_0x596535[_0x0301('0xd')],'username':_0x596535[_0x0301('0xe')],'password':_0x596535['password'],'grant_type':_0x0301('0xf'),'client_secret':_0x596535['clientSecret']},'json':!![]};return rp(_0x294a75)[_0x0301('0x10')](function(_0x4886df){return _0x4886df[_0x0301('0x11')];})['catch'](function(_0x2a82b7){logger['error']('['+[_0x283700[_0x0301('0x12')]()]+_0x0301('0x13'));return _0x2a82b7['message'];});}function getUser(_0x159b2d,_0xcfa041,_0x545a48,_0x47a78b,_0xd90845,_0x4f7c7a){return new BPromise(function(_0x28bd68,_0x21c0f5){return getAuthToken(_0xcfa041,_0x47a78b,_0x4f7c7a)[_0x0301('0x10')](function(_0x2ad710){var _0x26107d={'method':_0x0301('0x14'),'uri':_0xd90845+'systemusers?$select=internalemailaddress,isdisabled,systemuserid','headers':{'Authorization':_0x0301('0x15')+_0x2ad710,'OData-Version':_0x0301('0x16')},'json':!![]};return rp(_0x26107d);})['then'](function(_0x57092a){var _0x2dd39d=_0x57092a['value'];var _0x239a48=![];var _0x279bd6=null;if(!_[_0x0301('0x17')](_0x545a48)){if(intUtil[_0x0301('0x18')](_0x545a48[_0x0301('0x19')])){_0x159b2d[_0x0301('0x1a')]=_0x545a48[_0x0301('0x19')];for(_0x279bd6=0x0;_0x279bd6<_0x2dd39d[_0x0301('0x1b')];_0x279bd6++){if(_0x2dd39d[_0x279bd6]['internalemailaddress']===_0x545a48[_0x0301('0x19')]&&!_0x2dd39d[_0x279bd6][_0x0301('0x1c')]){_0x239a48=!![];logger[_0x0301('0x1d')]('['+[_0x4f7c7a[_0x0301('0x12')]()]+']\x20Agent\x20found\x20'+_0x2dd39d[_0x279bd6][_0x0301('0x1e')]+'!');_0x159b2d[_0x0301('0x1f')]=_0x2dd39d[_0x279bd6]['systemuserid'];}}}}if(!_0x239a48){logger[_0x0301('0x1d')]('['+[_0x4f7c7a[_0x0301('0x12')]()]+']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');_0x159b2d['userEmail']=_0xcfa041['username'];for(_0x279bd6=0x0;_0x279bd6<_0x2dd39d[_0x0301('0x1b')];_0x279bd6++){if(_0x2dd39d[_0x279bd6][_0x0301('0x20')]===_0xcfa041[_0x0301('0xe')]){_0x159b2d[_0x0301('0x1f')]=_0x2dd39d[_0x279bd6][_0x0301('0x1e')];}}}_0x28bd68(_0x159b2d);})[_0x0301('0x21')](function(_0x63fa24){_0x21c0f5(_0x63fa24['message']);});});}function createEndUser(_0xc74150,_0x300caa,_0x116662,_0x974b75,_0x22f840,_0x55fc5e){return new BPromise(function(_0x593785,_0x365fa3){return getAuthToken(_0x300caa,_0x116662,_0x55fc5e)['then'](function(_0x15d4dc){var _0x1e4e6e=_0x55fc5e[_0x0301('0x22')]()==='outbound'?_0x22f840[_0x0301('0x23')]:_0x22f840['calleridnum'];var _0x39c899={'method':'POST','uri':_0x974b75+_0x0301('0x24'),'body':{'telephone1':_0x1e4e6e,'fullname':_0x1e4e6e,'firstname':_0x1e4e6e,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':_0x0301('0x25')+_0xc74150['userId']+')'},'headers':{'Authorization':_0x0301('0x15')+_0x15d4dc,'OData-Version':_0x0301('0x16')},'json':!![],'resolveWithFullResponse':!![]};return rp(_0x39c899);})[_0x0301('0x10')](function(_0x15de1d){var _0x5d6ab5=_0x15de1d[_0x0301('0x26')][_0x0301('0x27')];var _0x398227=_0x5d6ab5[_0x0301('0x28')](_0x5d6ab5['lastIndexOf']('(')+0x1,_0x5d6ab5[_0x0301('0x29')](')'));_0xc74150[_0x0301('0x2a')]=_0x398227;_0x593785(_0xc74150);})[_0x0301('0x21')](function(_0x52baea){_0x365fa3(_0x52baea[_0x0301('0x2b')]);});});}function getEndUser(_0x3c1407,_0x17d99b,_0x20f61e,_0x2cd32f,_0x61a442,_0x39701d){return new BPromise(function(_0x52267e,_0x6dfc6a){return getAuthToken(_0x17d99b,_0x20f61e,_0x39701d)[_0x0301('0x10')](function(_0x5301f5){var _0x2d9cc5={'method':_0x0301('0x14'),'uri':_0x2cd32f+'contacts?$select=telephone1','headers':{'Authorization':_0x0301('0x15')+_0x5301f5,'If-None-Match':null,'OData-Version':_0x0301('0x16')},'json':!![]};return rp(_0x2d9cc5);})[_0x0301('0x10')](function(_0x271c18){var _0xc9af2=null;if(_0x271c18){var _0x3becec=_0x271c18['value'];var _0x5276da=![];for(_0xc9af2=0x0;_0xc9af2<_0x3becec[_0x0301('0x1b')];_0xc9af2++){var _0x38f9a7=_0x39701d[_0x0301('0x22')]()===_0x0301('0x2c')?_0x61a442[_0x0301('0x23')]:_0x61a442[_0x0301('0x2d')];if(_0x3becec[_0xc9af2][_0x0301('0x2e')]===_0x38f9a7){_0x5276da=!![];_0x3c1407[_0x0301('0x2a')]=_0x3becec[_0xc9af2][_0x0301('0x2f')];}}if(_0x5276da){_0x52267e(_0x3c1407);}else{return createEndUser(_0x3c1407,_0x17d99b,_0x20f61e,_0x2cd32f,_0x61a442,_0x39701d)['then'](function(_0x10cc53){logger[_0x0301('0x1d')]('['+[_0x39701d[_0x0301('0x12')]()]+_0x0301('0x30'),_0x10cc53[_0x0301('0x2a')]);_0x52267e(_0x10cc53);});}}else{return createEndUser(_0x3c1407,_0x17d99b,_0x20f61e,_0x2cd32f,_0x61a442,_0x39701d)['then'](function(_0x1099e9){logger[_0x0301('0x1d')]('['+[_0x39701d['toUpperCase']()]+_0x0301('0x31'),_0x1099e9['enduserId']);_0x52267e(_0x1099e9);});}});});}function getCustomFields(_0x51ce7f,_0x4365fa,_0x25ced9){var _0x3532fb={};if(_0x51ce7f['length']>0x0){_['forEach'](_0x51ce7f,function(_0x3588b8){if(_0x3588b8[_0x0301('0x32')]===_0x0301('0x33')&&_0x3588b8['nameField']&&!_0x3588b8[_0x0301('0x34')]){var _0x4c7a86=_0x3588b8['idField']['toLowerCase']();var _0x6487f6=_0x4c7a86[_0x0301('0x28')](0x0,_0x4c7a86[_0x0301('0x35')]('_'));var _0x1c5919=_0x4c7a86['substring'](_0x4c7a86['indexOf']('_')+0x1);if(_0x6487f6===_0x25ced9){_0x3532fb[_0x1c5919]=_0x3588b8['content'];}}});}return _0x3532fb;}function getTicket(_0x533d5e,_0x3c8072,_0x57f7d4,_0x350440,_0x1d58dc,_0x5cb06a,_0x3331a3){return new BPromise(function(_0x5357a9,_0x5850c3){var _0x132d50;return getAuthToken(_0x3c8072,_0x57f7d4,_0x3331a3)[_0x0301('0x10')](function(_0x37d9b8){if(_0x5cb06a['ticketType']===_0x0301('0x36')){_0x132d50={'method':_0x0301('0xb'),'uri':_0x350440+_0x0301('0x37'),'body':Object[_0x0301('0x38')]({},{'title':intUtil[_0x0301('0x39')](_0x5cb06a[_0x0301('0x3a')],_0x1d58dc,'\x20'),'description':intUtil[_0x0301('0x39')](_0x5cb06a[_0x0301('0x3b')],_0x1d58dc,'\x0a'),'customerid_contact@odata.bind':'/contacts('+_0x533d5e['enduserId']+')','ownerid@odata.bind':_0x0301('0x25')+_0x533d5e[_0x0301('0x1f')]+')','caseorigincode':'1'},getCustomFields(_0x5cb06a[_0x0301('0x3c')],_0x1d58dc,_0x5cb06a[_0x0301('0x3d')])),'headers':{'Authorization':_0x0301('0x15')+_0x37d9b8,'OData-Version':_0x0301('0x16')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x5cb06a['ticketType']===_0x0301('0x3e')){_0x132d50={'method':'POST','uri':_0x350440+_0x0301('0x3f'),'body':Object[_0x0301('0x38')]({},{'subject':intUtil[_0x0301('0x39')](_0x5cb06a['Subjects'],_0x1d58dc,'\x20'),'phonenumber':String(_0x1d58dc[_0x0301('0x2d')]),'description':intUtil[_0x0301('0x39')](_0x5cb06a[_0x0301('0x3b')],_0x1d58dc,'\x0a'),'regardingobjectid_contact@odata.bind':'/contacts('+_0x533d5e['enduserId']+')','ownerid@odata.bind':_0x0301('0x25')+_0x533d5e[_0x0301('0x1f')]+')','directioncode':_0x533d5e['callDirection']===_0x0301('0x40')?![]:!![],'phonecall_activity_parties':[{'partyid_systemuser@odata.bind':_0x0301('0x25')+_0x533d5e[_0x0301('0x1f')]+')','participationtypemask':_0x533d5e['callDirection']===_0x0301('0x40')?0x2:0x1},{'partyid_contact@odata.bind':_0x0301('0x41')+_0x533d5e[_0x0301('0x2a')]+')','participationtypemask':_0x533d5e[_0x0301('0x42')]===_0x0301('0x40')?0x1:0x2}]},getCustomFields(_0x5cb06a['Fields'],_0x1d58dc,_0x5cb06a[_0x0301('0x3d')])),'headers':{'Authorization':_0x0301('0x15')+_0x37d9b8,'OData-Version':_0x0301('0x16')},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x132d50);})[_0x0301('0x10')](function(_0x4aa0fa){var _0x3f9ec9=_0x4aa0fa[_0x0301('0x26')][_0x0301('0x27')];var _0x29a17c=_0x3f9ec9[_0x0301('0x28')](_0x3f9ec9[_0x0301('0x29')]('(')+0x1,_0x3f9ec9[_0x0301('0x29')](')'));_0x533d5e[_0x0301('0x43')]=_0x29a17c;_0x5357a9(_0x533d5e);})[_0x0301('0x21')](function(_0xa1b711){_0x5850c3(_0xa1b711['message']);});});}function emit(_0x2e25c8,_0x48a807,_0x209fe5,_0x1586b6){var _0x333a7d={'uri':util[_0x0301('0x44')](_0x0301('0x45'),_0x2e25c8,_0x209fe5,_0x1586b6)};io['to'](util['format'](_0x0301('0x46'),_0x48a807))[_0x0301('0x47')](_0x0301('0x48'),_0x333a7d);}exports['cs']=function(_0x154c0e,_0x328ed6,_0x39157d,_0x4e2dcb,_0x153348,_0x361e63,_0x20dc5c,_0xe2abf6){var _0x34f9fd={};_0x361e63[_0x0301('0xd')]=intUtil['stripTrailingSlash'](_0x361e63[_0x0301('0xd')]);_0x361e63['serverUrl']=intUtil[_0x0301('0x49')](_0x361e63[_0x0301('0x4a')]);_0x34f9fd[_0x0301('0x42')]=_0xe2abf6==='queue'||_0xe2abf6==='abandoned'?_0x0301('0x40'):_0x0301('0x2c');var _0x31fc68=util['format'](_0x0301('0x4b'),_0x361e63[_0x0301('0xd')]);var _0x265dcb=util[_0x0301('0x44')](_0x0301('0x4c'),_0x361e63[_0x0301('0x4d')]);var _0x49290a=util[_0x0301('0x44')](_0x0301('0x4e'),_0x361e63['serverUrl'],_0x328ed6[_0x0301('0x4f')],md5(_0x328ed6['uniqueid']));if(_0x153348&&_0x153348[_0x0301('0x50')]){logger[_0x0301('0x1d')](_0x0301('0x51'),_0x0301('0x52'));_0x328ed6[_0x0301('0x53')]=_0x49290a;}else if(_0x20dc5c&&_0x20dc5c[_0x0301('0x54')]&&_0x20dc5c[_0x0301('0x54')]!=='none'){logger[_0x0301('0x1d')](_0x0301('0x55'),'Recording\x20is\x20enabled!');_0x328ed6[_0x0301('0x53')]=_0x49290a;}else{_0x328ed6['recordingURL']='';}return getUser(_0x34f9fd,_0x361e63,_0x4e2dcb,_0x265dcb,_0x31fc68,_0xe2abf6)[_0x0301('0x10')](function(_0x3670f3){logger['info']('['+_0xe2abf6[_0x0301('0x12')]()+']\x20The\x20User\x20ID\x20is:',_0x3670f3[_0x0301('0x1f')]);logger[_0x0301('0x1d')]('['+_0xe2abf6[_0x0301('0x12')]()+_0x0301('0x56'),_0x3670f3['userEmail']);return getEndUser(_0x3670f3,_0x361e63,_0x265dcb,_0x31fc68,_0x328ed6,_0xe2abf6);})[_0x0301('0x10')](function(_0xfcec68){logger[_0x0301('0x1d')]('['+_0xe2abf6[_0x0301('0x12')]()+_0x0301('0x57'),_0xfcec68[_0x0301('0x2a')]);logger[_0x0301('0x1d')]('['+_0xe2abf6['toUpperCase']()+_0x0301('0x58'),_0x328ed6[_0x0301('0x2d')]);return getTicket(_0xfcec68,_0x361e63,_0x265dcb,_0x31fc68,_0x328ed6,_0x39157d,_0xe2abf6);})[_0x0301('0x10')](function(_0x155b9f){logger[_0x0301('0x1d')](util['format']('['+_0xe2abf6[_0x0301('0x12')]()+_0x0301('0x59'),_0x39157d[_0x0301('0x3d')],_0x155b9f[_0x0301('0x43')]));logger[_0x0301('0x1d')](util[_0x0301('0x44')]('['+_0xe2abf6[_0x0301('0x12')]()+_0x0301('0x5a'),_0xe2abf6));if(_0xe2abf6!==_0x0301('0x5b')){logger[_0x0301('0x1d')]('['+_0xe2abf6[_0x0301('0x12')]()+']','Displaying\x20call\x20in\x20a\x20new\x20tab...');emit(_0x361e63['remoteUri'],_0x4e2dcb[_0x0301('0x5c')],_0x39157d[_0x0301('0x3d')],_0x155b9f['ticketId']);}})[_0x0301('0x21')](function(_0x1dbd46){logger[_0x0301('0x5d')]('['+_0xe2abf6[_0x0301('0x12')]()+_0x0301('0x5e'),util[_0x0301('0x5f')](_0x1dbd46,{'showHidden':!![],'depth':null}));});};