17200a6547a4cb4343565744352bac0e2c7507eb
[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 _0x0425=['uniqueid','Recording\x20is\x20enabled!','recordingURL','recordingFormat','[OUTBOUND]',']\x20The\x20User\x20ID\x20is:',']\x20The\x20User\x20email\x20is:',']\x20The\x20Enduser\x20ID\x20is:',']\x20The\x20Enduser\x20phone\x20is:',']\x20The\x20%s\x20ID\x20is:\x20%s',']\x20Call\x20direction:\x20%s','Displaying\x20call\x20in\x20a\x20new\x20tab...','name',']\x20Error\x20running\x20Dynamics365\x20integration','inspect','bluebird','request-promise','util','./util','md5','../../../../config/logger','dynamics365','../../../../config/environment','redis','socket.io-emitter','POST','clientId','remoteUri','username','password','clientSecret','access_token','catch','error',']\x20Wrong\x20credentials!','then','GET','systemusers?$select=internalemailaddress,isdisabled,systemuserid','4.0','validateEmail','email','userEmail','length','internalemailaddress','isdisabled','info','systemuserid',']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','userId','message','outbound','destcalleridnum','/systemusers(','Bearer\x20','headers','odata-entityid','substring','lastIndexOf','enduserId','toLowerCase','calleridnum','contacts?$select=telephone1&$filter=telephone1\x20eq\x20\x27','replace','%2b','telephone1','contactid','toUpperCase',']\x20Enduser\x20created!',']\x20Enduser\x20Created!','forEach','includes','string','picklist','type','nameField','customField','idField','indexOf','ticketType','getString','Subjects','Descriptions','/contacts(','Fields','phonecall','callDirection','queue','ticketId','format','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','user:%s','emit','trigger:browser:url','stripTrailingSlash','serverUrl','unmanaged','%s/api/data/v9.0/','https://login.microsoftonline.com/%s/oauth2/token','tenantId','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s'];(function(_0x1050e5,_0x3b97bc){var _0x1fb110=function(_0x19d799){while(--_0x19d799){_0x1050e5['push'](_0x1050e5['shift']());}};_0x1fb110(++_0x3b97bc);}(_0x0425,0x73));var _0x5042=function(_0x1f08a2,_0x5d81a1){_0x1f08a2=_0x1f08a2-0x0;var _0x4301d6=_0x0425[_0x1f08a2];return _0x4301d6;};'use strict';var _=require('lodash');var BPromise=require(_0x5042('0x0'));var rp=require(_0x5042('0x1'));var util=require(_0x5042('0x2'));var intUtil=require(_0x5042('0x3'));var md5=require(_0x5042('0x4'));var Redis=require('ioredis');var logger=require(_0x5042('0x5'))(_0x5042('0x6'));var config=require(_0x5042('0x7'));config[_0x5042('0x8')]=_['defaults'](config[_0x5042('0x8')],{'host':'localhost','port':0x18eb});var io=require(_0x5042('0x9'))(new Redis(config['redis']));function getAuthToken(_0x53bdff,_0x56eaa4,_0x2ecb31){var _0x93928b={'method':_0x5042('0xa'),'uri':_0x56eaa4,'form':{'client_id':_0x53bdff[_0x5042('0xb')],'resource':_0x53bdff[_0x5042('0xc')],'username':_0x53bdff[_0x5042('0xd')],'password':_0x53bdff[_0x5042('0xe')],'grant_type':_0x5042('0xe'),'client_secret':_0x53bdff[_0x5042('0xf')]},'json':!![]};return rp(_0x93928b)['then'](function(_0x4c1fc1){return _0x4c1fc1[_0x5042('0x10')];})[_0x5042('0x11')](function(_0x3244d1){logger[_0x5042('0x12')]('['+[_0x2ecb31['toUpperCase']()]+_0x5042('0x13'));return _0x3244d1['message'];});}function getUser(_0x1c504b,_0x3f272d,_0x280774,_0x1301fe,_0x4a1381,_0x58799e){return new BPromise(function(_0x1a9abc,_0x435252){return getAuthToken(_0x3f272d,_0x1301fe,_0x58799e)[_0x5042('0x14')](function(_0x3e42d4){var _0x27a2d9={'method':_0x5042('0x15'),'uri':_0x4a1381+_0x5042('0x16'),'headers':{'Authorization':'Bearer\x20'+_0x3e42d4,'OData-Version':_0x5042('0x17')},'json':!![]};return rp(_0x27a2d9);})['then'](function(_0x2a50c6){var _0x473079=_0x2a50c6['value'];var _0x1c0cbb=![];var _0x226d1c=null;if(!_['isNil'](_0x280774)){if(intUtil[_0x5042('0x18')](_0x280774[_0x5042('0x19')])){_0x1c504b[_0x5042('0x1a')]=_0x280774[_0x5042('0x19')];for(_0x226d1c=0x0;_0x226d1c<_0x473079[_0x5042('0x1b')];_0x226d1c++){if(_0x473079[_0x226d1c][_0x5042('0x1c')]===_0x280774[_0x5042('0x19')]&&!_0x473079[_0x226d1c][_0x5042('0x1d')]){_0x1c0cbb=!![];logger[_0x5042('0x1e')]('['+[_0x58799e['toUpperCase']()]+']\x20Agent\x20found\x20'+_0x473079[_0x226d1c]['systemuserid']+'!');_0x1c504b['userId']=_0x473079[_0x226d1c][_0x5042('0x1f')];}}}}if(!_0x1c0cbb){logger[_0x5042('0x1e')]('['+[_0x58799e['toUpperCase']()]+_0x5042('0x20'));_0x1c504b[_0x5042('0x1a')]=_0x3f272d[_0x5042('0xd')];for(_0x226d1c=0x0;_0x226d1c<_0x473079[_0x5042('0x1b')];_0x226d1c++){if(_0x473079[_0x226d1c][_0x5042('0x1c')]===_0x3f272d['username']){_0x1c504b[_0x5042('0x21')]=_0x473079[_0x226d1c][_0x5042('0x1f')];}}}_0x1a9abc(_0x1c504b);})['catch'](function(_0x147c9f){_0x435252(_0x147c9f[_0x5042('0x22')]);});});}function createEndUser(_0x5859a1,_0x519e92,_0x31a59a,_0x5368de,_0x4c3451,_0x2ca91e){return new BPromise(function(_0x5b2a7e,_0x47834a){return getAuthToken(_0x519e92,_0x31a59a,_0x2ca91e)[_0x5042('0x14')](function(_0x71c782){var _0x3ef0e9=_0x2ca91e['toLowerCase']()===_0x5042('0x23')?_0x4c3451[_0x5042('0x24')]:_0x4c3451['calleridnum'];var _0x552119={'method':_0x5042('0xa'),'uri':_0x5368de+'contacts','body':{'telephone1':_0x3ef0e9,'fullname':_0x3ef0e9,'firstname':_0x3ef0e9,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':_0x5042('0x25')+_0x5859a1['userId']+')'},'headers':{'Authorization':_0x5042('0x26')+_0x71c782,'OData-Version':_0x5042('0x17')},'json':!![],'resolveWithFullResponse':!![]};return rp(_0x552119);})[_0x5042('0x14')](function(_0x110a27){var _0x24a5eb=_0x110a27[_0x5042('0x27')][_0x5042('0x28')];var _0x3dc3d6=_0x24a5eb[_0x5042('0x29')](_0x24a5eb['lastIndexOf']('(')+0x1,_0x24a5eb[_0x5042('0x2a')](')'));_0x5859a1[_0x5042('0x2b')]=_0x3dc3d6;_0x5b2a7e(_0x5859a1);})[_0x5042('0x11')](function(_0x51622b){_0x47834a(_0x51622b[_0x5042('0x22')]);});});}function getEndUser(_0x1a46e6,_0xb4ca48,_0x354cb0,_0x2ecb5f,_0x5e649b,_0x5a2ce2){return new BPromise(function(_0x15db87,_0x1dd9ee){var _0x48b06d=_0x5a2ce2[_0x5042('0x2c')]()===_0x5042('0x23')?_0x5e649b['destcalleridnum']:_0x5e649b[_0x5042('0x2d')];return getAuthToken(_0xb4ca48,_0x354cb0,_0x5a2ce2)[_0x5042('0x14')](function(_0x5d5e8f){var _0x4e68cd={'method':_0x5042('0x15'),'uri':_0x2ecb5f+_0x5042('0x2e')+_0x48b06d[_0x5042('0x2f')]('+',_0x5042('0x30'))+'\x27','headers':{'Authorization':_0x5042('0x26')+_0x5d5e8f,'If-None-Match':null,'OData-Version':_0x5042('0x17')},'json':!![]};return rp(_0x4e68cd);})[_0x5042('0x14')](function(_0x105745){var _0x818891=null;if(_0x105745){var _0x164657=_0x105745['value'];var _0x26f0a3=![];for(_0x818891=0x0;_0x818891<_0x164657[_0x5042('0x1b')];_0x818891++){if(_0x164657[_0x818891][_0x5042('0x31')]===_0x48b06d){_0x26f0a3=!![];_0x1a46e6[_0x5042('0x2b')]=_0x164657[_0x818891][_0x5042('0x32')];}}if(_0x26f0a3){_0x15db87(_0x1a46e6);}else{return createEndUser(_0x1a46e6,_0xb4ca48,_0x354cb0,_0x2ecb5f,_0x5e649b,_0x5a2ce2)[_0x5042('0x14')](function(_0x15c385){logger[_0x5042('0x1e')]('['+[_0x5a2ce2[_0x5042('0x33')]()]+_0x5042('0x34'),_0x15c385[_0x5042('0x2b')]);_0x15db87(_0x15c385);});}}else{return createEndUser(_0x1a46e6,_0xb4ca48,_0x354cb0,_0x2ecb5f,_0x5e649b,_0x5a2ce2)[_0x5042('0x14')](function(_0x34fa07){logger[_0x5042('0x1e')]('['+[_0x5a2ce2['toUpperCase']()]+_0x5042('0x35'),_0x34fa07['enduserId']);_0x15db87(_0x34fa07);});}});});}function getCustomFields(_0x3ba99a,_0x425bf1,_0x465c4d){var _0x23a5d6={};if(_0x3ba99a[_0x5042('0x1b')]>0x0){_[_0x5042('0x36')](_0x3ba99a,function(_0x18f34c){if(_[_0x5042('0x37')]([_0x5042('0x38'),_0x5042('0x39')],_0x18f34c[_0x5042('0x3a')])&&_0x18f34c[_0x5042('0x3b')]&&!_0x18f34c[_0x5042('0x3c')]){var _0x136a18=_0x18f34c[_0x5042('0x3d')][_0x5042('0x2c')]();var _0x4f101b=_0x136a18['substring'](0x0,_0x136a18[_0x5042('0x3e')]('_'));var _0x23d5f4=_0x136a18[_0x5042('0x29')](_0x136a18[_0x5042('0x3e')]('_')+0x1);if(_0x4f101b===_0x465c4d){_0x23a5d6[_0x23d5f4]=_0x18f34c['content'];}}});}return _0x23a5d6;}function getTicket(_0x1c2358,_0x532862,_0x2856a9,_0x4f7ceb,_0x2c6eae,_0x29f4db,_0x3120fd){return new BPromise(function(_0x13d58f,_0x3b00cf){var _0x40b652;return getAuthToken(_0x532862,_0x2856a9,_0x3120fd)[_0x5042('0x14')](function(_0x45e529){if(_0x29f4db[_0x5042('0x3f')]==='incident'){_0x40b652={'method':_0x5042('0xa'),'uri':_0x4f7ceb+'incidents','body':Object['assign']({},{'title':intUtil[_0x5042('0x40')](_0x29f4db[_0x5042('0x41')],_0x2c6eae,'\x20'),'description':intUtil[_0x5042('0x40')](_0x29f4db[_0x5042('0x42')],_0x2c6eae,'\x0a'),'customerid_contact@odata.bind':_0x5042('0x43')+_0x1c2358[_0x5042('0x2b')]+')','ownerid@odata.bind':_0x5042('0x25')+_0x1c2358[_0x5042('0x21')]+')','caseorigincode':'1'},getCustomFields(_0x29f4db[_0x5042('0x44')],_0x2c6eae,_0x29f4db[_0x5042('0x3f')])),'headers':{'Authorization':_0x5042('0x26')+_0x45e529,'OData-Version':_0x5042('0x17')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x29f4db[_0x5042('0x3f')]===_0x5042('0x45')){_0x40b652={'method':_0x5042('0xa'),'uri':_0x4f7ceb+'phonecalls','body':Object['assign']({},{'subject':intUtil['getString'](_0x29f4db[_0x5042('0x41')],_0x2c6eae,'\x20'),'phonenumber':String(_0x2c6eae[_0x5042('0x2d')]),'description':intUtil[_0x5042('0x40')](_0x29f4db[_0x5042('0x42')],_0x2c6eae,'\x0a'),'regardingobjectid_contact@odata.bind':_0x5042('0x43')+_0x1c2358[_0x5042('0x2b')]+')','ownerid@odata.bind':'/systemusers('+_0x1c2358['userId']+')','directioncode':_0x1c2358[_0x5042('0x46')]===_0x5042('0x47')?![]:!![],'phonecall_activity_parties':[{'partyid_systemuser@odata.bind':_0x5042('0x25')+_0x1c2358[_0x5042('0x21')]+')','participationtypemask':_0x1c2358['callDirection']==='queue'?0x2:0x1},{'partyid_contact@odata.bind':'/contacts('+_0x1c2358[_0x5042('0x2b')]+')','participationtypemask':_0x1c2358[_0x5042('0x46')]===_0x5042('0x47')?0x1:0x2}]},getCustomFields(_0x29f4db[_0x5042('0x44')],_0x2c6eae,_0x29f4db['ticketType'])),'headers':{'Authorization':'Bearer\x20'+_0x45e529,'OData-Version':_0x5042('0x17')},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x40b652);})[_0x5042('0x14')](function(_0x394d9f){var _0x170621=_0x394d9f[_0x5042('0x27')]['odata-entityid'];var _0x13f23e=_0x170621[_0x5042('0x29')](_0x170621[_0x5042('0x2a')]('(')+0x1,_0x170621[_0x5042('0x2a')](')'));_0x1c2358[_0x5042('0x48')]=_0x13f23e;_0x13d58f(_0x1c2358);})[_0x5042('0x11')](function(_0x256f5f){_0x3b00cf(_0x256f5f[_0x5042('0x22')]);});});}function emit(_0x352e75,_0x4260fa,_0x339014,_0x31232c){var _0x171ca9={'uri':util[_0x5042('0x49')](_0x5042('0x4a'),_0x352e75,_0x339014,_0x31232c)};io['to'](util[_0x5042('0x49')](_0x5042('0x4b'),_0x4260fa))[_0x5042('0x4c')](_0x5042('0x4d'),_0x171ca9);}exports['cs']=function(_0x3ebbd,_0xd0ad45,_0x3e9edb,_0x868b0a,_0x566283,_0x16a9dc,_0x36cd03,_0x1cf2bf){var _0x5dc9dc={};_0x16a9dc[_0x5042('0xc')]=intUtil[_0x5042('0x4e')](_0x16a9dc[_0x5042('0xc')]);_0x16a9dc['serverUrl']=intUtil[_0x5042('0x4e')](_0x16a9dc[_0x5042('0x4f')]);_0x5dc9dc[_0x5042('0x46')]=_0x1cf2bf===_0x5042('0x47')||_0x1cf2bf===_0x5042('0x50')?_0x5042('0x47'):'outbound';var _0x4c84b0=util['format'](_0x5042('0x51'),_0x16a9dc[_0x5042('0xc')]);var _0x76db4c=util[_0x5042('0x49')](_0x5042('0x52'),_0x16a9dc[_0x5042('0x53')]);var _0x132555=util[_0x5042('0x49')](_0x5042('0x54'),_0x16a9dc[_0x5042('0x4f')],_0xd0ad45[_0x5042('0x55')],md5(_0xd0ad45['uniqueid']));if(_0x566283&&_0x566283['monitor_format']){logger[_0x5042('0x1e')]('[QUEUE]',_0x5042('0x56'));_0xd0ad45[_0x5042('0x57')]=_0x132555;}else if(_0x36cd03&&_0x36cd03[_0x5042('0x58')]&&_0x36cd03['recordingFormat']!=='none'){logger[_0x5042('0x1e')](_0x5042('0x59'),_0x5042('0x56'));_0xd0ad45[_0x5042('0x57')]=_0x132555;}else{_0xd0ad45['recordingURL']='';}return getUser(_0x5dc9dc,_0x16a9dc,_0x868b0a,_0x76db4c,_0x4c84b0,_0x1cf2bf)['then'](function(_0x54993c){logger[_0x5042('0x1e')]('['+_0x1cf2bf[_0x5042('0x33')]()+_0x5042('0x5a'),_0x54993c[_0x5042('0x21')]);logger[_0x5042('0x1e')]('['+_0x1cf2bf[_0x5042('0x33')]()+_0x5042('0x5b'),_0x54993c[_0x5042('0x1a')]);return getEndUser(_0x54993c,_0x16a9dc,_0x76db4c,_0x4c84b0,_0xd0ad45,_0x1cf2bf);})[_0x5042('0x14')](function(_0x3e0f20){logger[_0x5042('0x1e')]('['+_0x1cf2bf[_0x5042('0x33')]()+_0x5042('0x5c'),_0x3e0f20[_0x5042('0x2b')]);logger['info']('['+_0x1cf2bf[_0x5042('0x33')]()+_0x5042('0x5d'),_0xd0ad45[_0x5042('0x2d')]);return getTicket(_0x3e0f20,_0x16a9dc,_0x76db4c,_0x4c84b0,_0xd0ad45,_0x3e9edb,_0x1cf2bf);})[_0x5042('0x14')](function(_0x33de87){logger['info'](util[_0x5042('0x49')]('['+_0x1cf2bf[_0x5042('0x33')]()+_0x5042('0x5e'),_0x3e9edb['ticketType'],_0x33de87[_0x5042('0x48')]));logger[_0x5042('0x1e')](util[_0x5042('0x49')]('['+_0x1cf2bf['toUpperCase']()+_0x5042('0x5f'),_0x1cf2bf));if(_0x1cf2bf!==_0x5042('0x50')){logger[_0x5042('0x1e')]('['+_0x1cf2bf[_0x5042('0x33')]()+']',_0x5042('0x60'));emit(_0x16a9dc[_0x5042('0xc')],_0x868b0a[_0x5042('0x61')],_0x3e9edb[_0x5042('0x3f')],_0x33de87[_0x5042('0x48')]);}})[_0x5042('0x11')](function(_0x26f0b7){logger['error']('['+_0x1cf2bf['toUpperCase']()+_0x5042('0x62'),util[_0x5042('0x63')](_0x26f0b7,{'showHidden':!![],'depth':null}));});};