27573d45e559cbb62892f42a1fa0875e98a771bc
[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 _0xfb1a=['headers','odata-entityid','lastIndexOf','enduserId','contacts?$select=telephone1','destcalleridnum','telephone1','contactid',']\x20Enduser\x20created!',']\x20Enduser\x20Created!','forEach','string','nameField','idField','substring','indexOf','content','ticketType','incident','incidents','Subjects','Descriptions','/contacts(','Fields','phonecall','assign','getString','callDirection','queue','ticketId','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','user:%s','trigger:browser:url','remoteUri','serverUrl','stripTrailingSlash','format','%s/api/data/v9.0/','https://login.microsoftonline.com/%s/oauth2/token','tenantId','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','recordingFormat','none',']\x20The\x20User\x20ID\x20is:',']\x20The\x20User\x20email\x20is:',']\x20The\x20Enduser\x20ID\x20is:',']\x20The\x20Enduser\x20phone\x20is:',']\x20Call\x20direction:\x20%s','Displaying\x20call\x20in\x20a\x20new\x20tab...','name','error',']\x20Error\x20running\x20Dynamics365\x20integration','inspect','lodash','request-promise','util','./util','md5','ioredis','dynamics365','../../../../config/environment','redis','localhost','socket.io-emitter','POST','clientId','username','password','clientSecret','then','toUpperCase',']\x20Wrong\x20credentials!','GET','4.0','value','isNil','validateEmail','userEmail','email','length','isdisabled','info',']\x20Agent\x20found\x20','systemuserid','userId',']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','internalemailaddress','catch','message','toLowerCase','outbound','calleridnum','contacts','/systemusers(','Bearer\x20'];(function(_0x5bb4e2,_0x58b4d2){var _0xe0c3eb=function(_0x275e3c){while(--_0x275e3c){_0x5bb4e2['push'](_0x5bb4e2['shift']());}};_0xe0c3eb(++_0x58b4d2);}(_0xfb1a,0x1c5));var _0xafb1=function(_0x45ff49,_0x73162c){_0x45ff49=_0x45ff49-0x0;var _0x3d1035=_0xfb1a[_0x45ff49];return _0x3d1035;};'use strict';var _=require(_0xafb1('0x0'));var BPromise=require('bluebird');var rp=require(_0xafb1('0x1'));var util=require(_0xafb1('0x2'));var intUtil=require(_0xafb1('0x3'));var md5=require(_0xafb1('0x4'));var Redis=require(_0xafb1('0x5'));var logger=require('../../../../config/logger')(_0xafb1('0x6'));var config=require(_0xafb1('0x7'));config[_0xafb1('0x8')]=_['defaults'](config['redis'],{'host':_0xafb1('0x9'),'port':0x18eb});var io=require(_0xafb1('0xa'))(new Redis(config[_0xafb1('0x8')]));function getAuthToken(_0xaabb89,_0x2a4f92,_0x342393){var _0x439344={'method':_0xafb1('0xb'),'uri':_0x2a4f92,'form':{'client_id':_0xaabb89[_0xafb1('0xc')],'resource':_0xaabb89['remoteUri'],'username':_0xaabb89[_0xafb1('0xd')],'password':_0xaabb89[_0xafb1('0xe')],'grant_type':_0xafb1('0xe'),'client_secret':_0xaabb89[_0xafb1('0xf')]},'json':!![]};return rp(_0x439344)[_0xafb1('0x10')](function(_0x746c){return _0x746c['access_token'];})['catch'](function(_0x51c5de){logger['error']('['+[_0x342393[_0xafb1('0x11')]()]+_0xafb1('0x12'));return _0x51c5de['message'];});}function getUser(_0x208e38,_0x23cccf,_0x6afbca,_0x3daab2,_0x4b0ee2,_0x333bf9){return new BPromise(function(_0x5b0c68,_0x1bc3f1){return getAuthToken(_0x23cccf,_0x3daab2,_0x333bf9)[_0xafb1('0x10')](function(_0x127ec7){var _0x471f84={'method':_0xafb1('0x13'),'uri':_0x4b0ee2+'systemusers?$select=internalemailaddress,isdisabled,systemuserid','headers':{'Authorization':'Bearer\x20'+_0x127ec7,'OData-Version':_0xafb1('0x14')},'json':!![]};return rp(_0x471f84);})[_0xafb1('0x10')](function(_0x20ff79){var _0x14d17b=_0x20ff79[_0xafb1('0x15')];var _0x17a29b=![];var _0x2046f6=null;if(!_[_0xafb1('0x16')](_0x6afbca)){if(intUtil[_0xafb1('0x17')](_0x6afbca['email'])){_0x208e38[_0xafb1('0x18')]=_0x6afbca[_0xafb1('0x19')];for(_0x2046f6=0x0;_0x2046f6<_0x14d17b[_0xafb1('0x1a')];_0x2046f6++){if(_0x14d17b[_0x2046f6]['internalemailaddress']===_0x6afbca['email']&&!_0x14d17b[_0x2046f6][_0xafb1('0x1b')]){_0x17a29b=!![];logger[_0xafb1('0x1c')]('['+[_0x333bf9[_0xafb1('0x11')]()]+_0xafb1('0x1d')+_0x14d17b[_0x2046f6][_0xafb1('0x1e')]+'!');_0x208e38[_0xafb1('0x1f')]=_0x14d17b[_0x2046f6][_0xafb1('0x1e')];}}}}if(!_0x17a29b){logger[_0xafb1('0x1c')]('['+[_0x333bf9[_0xafb1('0x11')]()]+_0xafb1('0x20'));_0x208e38[_0xafb1('0x18')]=_0x23cccf[_0xafb1('0xd')];for(_0x2046f6=0x0;_0x2046f6<_0x14d17b['length'];_0x2046f6++){if(_0x14d17b[_0x2046f6][_0xafb1('0x21')]===_0x23cccf[_0xafb1('0xd')]){_0x208e38[_0xafb1('0x1f')]=_0x14d17b[_0x2046f6][_0xafb1('0x1e')];}}}_0x5b0c68(_0x208e38);})[_0xafb1('0x22')](function(_0x3df53d){_0x1bc3f1(_0x3df53d[_0xafb1('0x23')]);});});}function createEndUser(_0x58cab1,_0x5222f9,_0xcfca0,_0x2fc872,_0x458f71,_0x338250){return new BPromise(function(_0x3e7442,_0x219e84){return getAuthToken(_0x5222f9,_0xcfca0,_0x338250)[_0xafb1('0x10')](function(_0x441020){var _0x31969e=_0x338250[_0xafb1('0x24')]()===_0xafb1('0x25')?_0x458f71['destcalleridnum']:_0x458f71[_0xafb1('0x26')];var _0x3ed83e={'method':_0xafb1('0xb'),'uri':_0x2fc872+_0xafb1('0x27'),'body':{'telephone1':_0x31969e,'fullname':_0x31969e,'firstname':_0x31969e,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':_0xafb1('0x28')+_0x58cab1[_0xafb1('0x1f')]+')'},'headers':{'Authorization':_0xafb1('0x29')+_0x441020,'OData-Version':_0xafb1('0x14')},'json':!![],'resolveWithFullResponse':!![]};return rp(_0x3ed83e);})[_0xafb1('0x10')](function(_0x48d882){var _0x5c583e=_0x48d882[_0xafb1('0x2a')][_0xafb1('0x2b')];var _0x13a8c=_0x5c583e['substring'](_0x5c583e[_0xafb1('0x2c')]('(')+0x1,_0x5c583e[_0xafb1('0x2c')](')'));_0x58cab1[_0xafb1('0x2d')]=_0x13a8c;_0x3e7442(_0x58cab1);})[_0xafb1('0x22')](function(_0x3bdb6b){_0x219e84(_0x3bdb6b[_0xafb1('0x23')]);});});}function getEndUser(_0x3da657,_0x29c6a0,_0x52ee0e,_0x87e2ab,_0x8e01af,_0xbc26cb){return new BPromise(function(_0x3baf61,_0x278d49){return getAuthToken(_0x29c6a0,_0x52ee0e,_0xbc26cb)[_0xafb1('0x10')](function(_0x573ac0){var _0x4460e0={'method':_0xafb1('0x13'),'uri':_0x87e2ab+_0xafb1('0x2e'),'headers':{'Authorization':_0xafb1('0x29')+_0x573ac0,'If-None-Match':null,'OData-Version':_0xafb1('0x14')},'json':!![]};return rp(_0x4460e0);})[_0xafb1('0x10')](function(_0x1e3b1b){var _0x5a70a4=null;if(_0x1e3b1b){var _0x15bc91=_0x1e3b1b[_0xafb1('0x15')];var _0x17efa5=![];for(_0x5a70a4=0x0;_0x5a70a4<_0x15bc91['length'];_0x5a70a4++){var _0x200f59=_0xbc26cb['toLowerCase']()==='outbound'?_0x8e01af[_0xafb1('0x2f')]:_0x8e01af[_0xafb1('0x26')];if(_0x15bc91[_0x5a70a4][_0xafb1('0x30')]===_0x200f59){_0x17efa5=!![];_0x3da657[_0xafb1('0x2d')]=_0x15bc91[_0x5a70a4][_0xafb1('0x31')];}}if(_0x17efa5){_0x3baf61(_0x3da657);}else{return createEndUser(_0x3da657,_0x29c6a0,_0x52ee0e,_0x87e2ab,_0x8e01af,_0xbc26cb)[_0xafb1('0x10')](function(_0x5ddfb8){logger[_0xafb1('0x1c')]('['+[_0xbc26cb[_0xafb1('0x11')]()]+_0xafb1('0x32'),_0x5ddfb8[_0xafb1('0x2d')]);_0x3baf61(_0x5ddfb8);});}}else{return createEndUser(_0x3da657,_0x29c6a0,_0x52ee0e,_0x87e2ab,_0x8e01af,_0xbc26cb)['then'](function(_0x2281ee){logger[_0xafb1('0x1c')]('['+[_0xbc26cb['toUpperCase']()]+_0xafb1('0x33'),_0x2281ee[_0xafb1('0x2d')]);_0x3baf61(_0x2281ee);});}});});}function getCustomFields(_0x5caace,_0x117b5e,_0x4e028d){var _0x1c5f2b={};if(_0x5caace[_0xafb1('0x1a')]>0x0){_[_0xafb1('0x34')](_0x5caace,function(_0x5034c5){if(_0x5034c5['type']===_0xafb1('0x35')&&_0x5034c5[_0xafb1('0x36')]&&!_0x5034c5['customField']){var _0x3e143d=_0x5034c5[_0xafb1('0x37')]['toLowerCase']();var _0x177c40=_0x3e143d[_0xafb1('0x38')](0x0,_0x3e143d['indexOf']('_'));var _0x4ad29c=_0x3e143d[_0xafb1('0x38')](_0x3e143d[_0xafb1('0x39')]('_')+0x1);if(_0x177c40===_0x4e028d){_0x1c5f2b[_0x4ad29c]=_0x5034c5[_0xafb1('0x3a')];}}});}return _0x1c5f2b;}function getTicket(_0x3ee319,_0x355240,_0x54f2db,_0x2e6d36,_0x15aba1,_0x33d49f,_0xde87c5){return new BPromise(function(_0x2f9e9f,_0x3854cb){var _0x1f1c12;return getAuthToken(_0x355240,_0x54f2db,_0xde87c5)[_0xafb1('0x10')](function(_0x77c457){if(_0x33d49f[_0xafb1('0x3b')]===_0xafb1('0x3c')){_0x1f1c12={'method':_0xafb1('0xb'),'uri':_0x2e6d36+_0xafb1('0x3d'),'body':Object['assign']({},{'title':intUtil['getString'](_0x33d49f[_0xafb1('0x3e')],_0x15aba1,'\x20'),'description':intUtil['getString'](_0x33d49f[_0xafb1('0x3f')],_0x15aba1,'\x0a'),'customerid_contact@odata.bind':_0xafb1('0x40')+_0x3ee319['enduserId']+')','ownerid@odata.bind':_0xafb1('0x28')+_0x3ee319[_0xafb1('0x1f')]+')','caseorigincode':'1'},getCustomFields(_0x33d49f[_0xafb1('0x41')],_0x15aba1,_0x33d49f['ticketType'])),'headers':{'Authorization':_0xafb1('0x29')+_0x77c457,'OData-Version':_0xafb1('0x14')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x33d49f[_0xafb1('0x3b')]===_0xafb1('0x42')){_0x1f1c12={'method':_0xafb1('0xb'),'uri':_0x2e6d36+'phonecalls','body':Object[_0xafb1('0x43')]({},{'subject':intUtil[_0xafb1('0x44')](_0x33d49f['Subjects'],_0x15aba1,'\x20'),'phonenumber':String(_0x15aba1[_0xafb1('0x26')]),'description':intUtil[_0xafb1('0x44')](_0x33d49f[_0xafb1('0x3f')],_0x15aba1,'\x0a'),'regardingobjectid_contact@odata.bind':_0xafb1('0x40')+_0x3ee319[_0xafb1('0x2d')]+')','ownerid@odata.bind':'/systemusers('+_0x3ee319[_0xafb1('0x1f')]+')','directioncode':_0x3ee319['callDirection']==='queue'?![]:!![],'phonecall_activity_parties':[{'partyid_systemuser@odata.bind':'/systemusers('+_0x3ee319[_0xafb1('0x1f')]+')','participationtypemask':_0x3ee319[_0xafb1('0x45')]===_0xafb1('0x46')?0x2:0x1},{'partyid_contact@odata.bind':'/contacts('+_0x3ee319[_0xafb1('0x2d')]+')','participationtypemask':_0x3ee319['callDirection']===_0xafb1('0x46')?0x1:0x2}]},getCustomFields(_0x33d49f['Fields'],_0x15aba1,_0x33d49f[_0xafb1('0x3b')])),'headers':{'Authorization':_0xafb1('0x29')+_0x77c457,'OData-Version':'4.0'},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x1f1c12);})[_0xafb1('0x10')](function(_0x4fb2d2){var _0x26e29f=_0x4fb2d2['headers']['odata-entityid'];var _0x507604=_0x26e29f[_0xafb1('0x38')](_0x26e29f[_0xafb1('0x2c')]('(')+0x1,_0x26e29f[_0xafb1('0x2c')](')'));_0x3ee319[_0xafb1('0x47')]=_0x507604;_0x2f9e9f(_0x3ee319);})[_0xafb1('0x22')](function(_0x481c34){_0x3854cb(_0x481c34['message']);});});}function emit(_0x57695b,_0x50ddcc,_0x4d571d,_0x182de9){var _0x55210e={'uri':util['format'](_0xafb1('0x48'),_0x57695b,_0x4d571d,_0x182de9)};io['to'](util['format'](_0xafb1('0x49'),_0x50ddcc))['emit'](_0xafb1('0x4a'),_0x55210e);}exports['cs']=function(_0x24d0d2,_0x4dbb54,_0x4d6feb,_0x5dc0bb,_0x48c670,_0xf21b93,_0x3c1fd0,_0xcf8d1c){var _0x51aed4={};_0xf21b93[_0xafb1('0x4b')]=intUtil['stripTrailingSlash'](_0xf21b93['remoteUri']);_0xf21b93[_0xafb1('0x4c')]=intUtil[_0xafb1('0x4d')](_0xf21b93[_0xafb1('0x4c')]);_0x51aed4['callDirection']=_0xcf8d1c===_0xafb1('0x46')||_0xcf8d1c==='unmanaged'?_0xafb1('0x46'):_0xafb1('0x25');var _0x1af8b1=util[_0xafb1('0x4e')](_0xafb1('0x4f'),_0xf21b93[_0xafb1('0x4b')]);var _0x554520=util[_0xafb1('0x4e')](_0xafb1('0x50'),_0xf21b93[_0xafb1('0x51')]);var _0x236b6a=util[_0xafb1('0x4e')](_0xafb1('0x52'),_0xf21b93[_0xafb1('0x4c')],_0x4dbb54[_0xafb1('0x53')],md5(_0x4dbb54['uniqueid']));if(_0x48c670&&_0x48c670['monitor_format']){logger[_0xafb1('0x1c')](_0xafb1('0x54'),_0xafb1('0x55'));_0x4dbb54[_0xafb1('0x56')]=_0x236b6a;}else if(_0x3c1fd0&&_0x3c1fd0[_0xafb1('0x57')]&&_0x3c1fd0[_0xafb1('0x57')]!==_0xafb1('0x58')){logger[_0xafb1('0x1c')]('[OUTBOUND]','Recording\x20is\x20enabled!');_0x4dbb54[_0xafb1('0x56')]=_0x236b6a;}else{_0x4dbb54[_0xafb1('0x56')]='';}return getUser(_0x51aed4,_0xf21b93,_0x5dc0bb,_0x554520,_0x1af8b1,_0xcf8d1c)[_0xafb1('0x10')](function(_0x565e62){logger[_0xafb1('0x1c')]('['+_0xcf8d1c['toUpperCase']()+_0xafb1('0x59'),_0x565e62[_0xafb1('0x1f')]);logger[_0xafb1('0x1c')]('['+_0xcf8d1c[_0xafb1('0x11')]()+_0xafb1('0x5a'),_0x565e62['userEmail']);return getEndUser(_0x565e62,_0xf21b93,_0x554520,_0x1af8b1,_0x4dbb54,_0xcf8d1c);})[_0xafb1('0x10')](function(_0xcf2e8f){logger[_0xafb1('0x1c')]('['+_0xcf8d1c['toUpperCase']()+_0xafb1('0x5b'),_0xcf2e8f[_0xafb1('0x2d')]);logger[_0xafb1('0x1c')]('['+_0xcf8d1c['toUpperCase']()+_0xafb1('0x5c'),_0x4dbb54[_0xafb1('0x26')]);return getTicket(_0xcf2e8f,_0xf21b93,_0x554520,_0x1af8b1,_0x4dbb54,_0x4d6feb,_0xcf8d1c);})[_0xafb1('0x10')](function(_0x2b2cf7){logger['info'](util['format']('['+_0xcf8d1c[_0xafb1('0x11')]()+']\x20The\x20%s\x20ID\x20is:\x20%s',_0x4d6feb['ticketType'],_0x2b2cf7[_0xafb1('0x47')]));logger[_0xafb1('0x1c')](util['format']('['+_0xcf8d1c[_0xafb1('0x11')]()+_0xafb1('0x5d'),_0xcf8d1c));if(_0xcf8d1c!=='unmanaged'){logger['info']('['+_0xcf8d1c[_0xafb1('0x11')]()+']',_0xafb1('0x5e'));emit(_0xf21b93['remoteUri'],_0x5dc0bb[_0xafb1('0x5f')],_0x4d6feb['ticketType'],_0x2b2cf7[_0xafb1('0x47')]);}})['catch'](function(_0x3e4e6a){logger[_0xafb1('0x60')]('['+_0xcf8d1c[_0xafb1('0x11')]()+_0xafb1('0x61'),util[_0xafb1('0x62')](_0x3e4e6a,{'showHidden':!![],'depth':null}));});};