Built motion from commit (unavailable).|2.5.30
[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 _0x49fe=['callDirection','headers','ticketId','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','format','emit','trigger:browser:url','remoteUri','stripTrailingSlash','serverUrl','unmanaged','uniqueid','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingFormat','[OUTBOUND]','recordingURL',']\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...','lodash','./util','md5','ioredis','../../../../config/logger','dynamics365','../../../../config/environment','redis','defaults','localhost','socket.io-emitter','clientId','username','password','clientSecret','then','access_token','catch','error','toUpperCase','message','GET','systemusers?$select=internalemailaddress,isdisabled,systemuserid','Bearer\x20','4.0','value','isNil','validateEmail','userEmail','length','email','systemuserid','userId','info',']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','internalemailaddress','toLowerCase','calleridnum','POST','contacts','odata-entityid','substring','lastIndexOf','outbound','destcalleridnum','telephone1','enduserId','contactid',']\x20Enduser\x20created!',']\x20Enduser\x20Created!','forEach','string','nameField','customField','idField','indexOf','content','ticketType','incident','assign','Subjects','getString','Descriptions','/contacts(','/systemusers(','Fields','queue'];(function(_0x321c52,_0x3ca335){var _0x1a530c=function(_0xd1a0ec){while(--_0xd1a0ec){_0x321c52['push'](_0x321c52['shift']());}};_0x1a530c(++_0x3ca335);}(_0x49fe,0x75));var _0xe49f=function(_0x481251,_0x22f73a){_0x481251=_0x481251-0x0;var _0x25404f=_0x49fe[_0x481251];return _0x25404f;};'use strict';var _=require(_0xe49f('0x0'));var BPromise=require('bluebird');var rp=require('request-promise');var util=require('util');var intUtil=require(_0xe49f('0x1'));var md5=require(_0xe49f('0x2'));var Redis=require(_0xe49f('0x3'));var logger=require(_0xe49f('0x4'))(_0xe49f('0x5'));var config=require(_0xe49f('0x6'));config[_0xe49f('0x7')]=_[_0xe49f('0x8')](config[_0xe49f('0x7')],{'host':_0xe49f('0x9'),'port':0x18eb});var io=require(_0xe49f('0xa'))(new Redis(config[_0xe49f('0x7')]));function getAuthToken(_0x6f1120,_0x574f52,_0x306059){var _0x573515={'method':'POST','uri':_0x574f52,'form':{'client_id':_0x6f1120[_0xe49f('0xb')],'resource':_0x6f1120['remoteUri'],'username':_0x6f1120[_0xe49f('0xc')],'password':_0x6f1120[_0xe49f('0xd')],'grant_type':'password','client_secret':_0x6f1120[_0xe49f('0xe')]},'json':!![]};return rp(_0x573515)[_0xe49f('0xf')](function(_0x1a54a2){return _0x1a54a2[_0xe49f('0x10')];})[_0xe49f('0x11')](function(_0x5f0066){logger[_0xe49f('0x12')]('['+[_0x306059[_0xe49f('0x13')]()]+']\x20Wrong\x20credentials!');return _0x5f0066[_0xe49f('0x14')];});}function getUser(_0x3be989,_0x447ef0,_0x2319ec,_0x44c7fe,_0x5708d9,_0x3645e8){return new BPromise(function(_0x2f7fb6,_0x534473){return getAuthToken(_0x447ef0,_0x44c7fe,_0x3645e8)['then'](function(_0xfe24b7){var _0x3e5fb3={'method':_0xe49f('0x15'),'uri':_0x5708d9+_0xe49f('0x16'),'headers':{'Authorization':_0xe49f('0x17')+_0xfe24b7,'OData-Version':_0xe49f('0x18')},'json':!![]};return rp(_0x3e5fb3);})['then'](function(_0x7831f1){var _0x50655f=_0x7831f1[_0xe49f('0x19')];var _0x4df1cc=![];var _0x58f852=null;if(!_[_0xe49f('0x1a')](_0x2319ec)){if(intUtil[_0xe49f('0x1b')](_0x2319ec['email'])){_0x3be989[_0xe49f('0x1c')]=_0x2319ec['email'];for(_0x58f852=0x0;_0x58f852<_0x50655f[_0xe49f('0x1d')];_0x58f852++){if(_0x50655f[_0x58f852]['internalemailaddress']===_0x2319ec[_0xe49f('0x1e')]&&!_0x50655f[_0x58f852]['isdisabled']){_0x4df1cc=!![];logger['info']('['+[_0x3645e8[_0xe49f('0x13')]()]+']\x20Agent\x20found\x20'+_0x50655f[_0x58f852][_0xe49f('0x1f')]+'!');_0x3be989[_0xe49f('0x20')]=_0x50655f[_0x58f852][_0xe49f('0x1f')];}}}}if(!_0x4df1cc){logger[_0xe49f('0x21')]('['+[_0x3645e8[_0xe49f('0x13')]()]+_0xe49f('0x22'));_0x3be989[_0xe49f('0x1c')]=_0x447ef0[_0xe49f('0xc')];for(_0x58f852=0x0;_0x58f852<_0x50655f[_0xe49f('0x1d')];_0x58f852++){if(_0x50655f[_0x58f852][_0xe49f('0x23')]===_0x447ef0[_0xe49f('0xc')]){_0x3be989[_0xe49f('0x20')]=_0x50655f[_0x58f852][_0xe49f('0x1f')];}}}_0x2f7fb6(_0x3be989);})['catch'](function(_0x2eab5b){_0x534473(_0x2eab5b[_0xe49f('0x14')]);});});}function createEndUser(_0xbe357,_0x14d820,_0x5424d9,_0x4ca90a,_0x1ff78c,_0x44b702){return new BPromise(function(_0x543c77,_0x300a1c){return getAuthToken(_0x14d820,_0x5424d9,_0x44b702)['then'](function(_0x76b6f8){var _0x4465cd=_0x44b702[_0xe49f('0x24')]()==='outbound'?_0x1ff78c['destcalleridnum']:_0x1ff78c[_0xe49f('0x25')];var _0x32406b={'method':_0xe49f('0x26'),'uri':_0x4ca90a+_0xe49f('0x27'),'body':{'telephone1':_0x4465cd,'fullname':_0x4465cd,'firstname':_0x4465cd,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':'/systemusers('+_0xbe357[_0xe49f('0x20')]+')'},'headers':{'Authorization':_0xe49f('0x17')+_0x76b6f8,'OData-Version':_0xe49f('0x18')},'json':!![],'resolveWithFullResponse':!![]};return rp(_0x32406b);})[_0xe49f('0xf')](function(_0x2f6d1d){var _0x183125=_0x2f6d1d['headers'][_0xe49f('0x28')];var _0x26a9c3=_0x183125[_0xe49f('0x29')](_0x183125[_0xe49f('0x2a')]('(')+0x1,_0x183125['lastIndexOf'](')'));_0xbe357['enduserId']=_0x26a9c3;_0x543c77(_0xbe357);})[_0xe49f('0x11')](function(_0x825a4d){_0x300a1c(_0x825a4d[_0xe49f('0x14')]);});});}function getEndUser(_0x4833c3,_0x4b8da8,_0x33954a,_0x1dcf95,_0x5d152a,_0x523221){return new BPromise(function(_0x2c08af,_0x4ec015){return getAuthToken(_0x4b8da8,_0x33954a,_0x523221)['then'](function(_0x18b501){var _0x100d21={'method':_0xe49f('0x15'),'uri':_0x1dcf95+'contacts?$select=telephone1','headers':{'Authorization':_0xe49f('0x17')+_0x18b501,'If-None-Match':null,'OData-Version':_0xe49f('0x18')},'json':!![]};return rp(_0x100d21);})['then'](function(_0x564d13){var _0xecace=null;if(_0x564d13){var _0x46175c=_0x564d13[_0xe49f('0x19')];var _0x298a63=![];for(_0xecace=0x0;_0xecace<_0x46175c['length'];_0xecace++){var _0x956796=_0x523221[_0xe49f('0x24')]()===_0xe49f('0x2b')?_0x5d152a[_0xe49f('0x2c')]:_0x5d152a[_0xe49f('0x25')];if(_0x46175c[_0xecace][_0xe49f('0x2d')]===_0x956796){_0x298a63=!![];_0x4833c3[_0xe49f('0x2e')]=_0x46175c[_0xecace][_0xe49f('0x2f')];}}if(_0x298a63){_0x2c08af(_0x4833c3);}else{return createEndUser(_0x4833c3,_0x4b8da8,_0x33954a,_0x1dcf95,_0x5d152a,_0x523221)[_0xe49f('0xf')](function(_0xed7375){logger[_0xe49f('0x21')]('['+[_0x523221[_0xe49f('0x13')]()]+_0xe49f('0x30'),_0xed7375[_0xe49f('0x2e')]);_0x2c08af(_0xed7375);});}}else{return createEndUser(_0x4833c3,_0x4b8da8,_0x33954a,_0x1dcf95,_0x5d152a,_0x523221)[_0xe49f('0xf')](function(_0x8ae272){logger[_0xe49f('0x21')]('['+[_0x523221[_0xe49f('0x13')]()]+_0xe49f('0x31'),_0x8ae272[_0xe49f('0x2e')]);_0x2c08af(_0x8ae272);});}});});}function getCustomFields(_0x2ee879,_0x231ff2,_0x42081c){var _0x49ad16={};if(_0x2ee879[_0xe49f('0x1d')]>0x0){_[_0xe49f('0x32')](_0x2ee879,function(_0x291d4f){if(_['includes']([_0xe49f('0x33'),'picklist'],_0x291d4f['type'])&&_0x291d4f[_0xe49f('0x34')]&&!_0x291d4f[_0xe49f('0x35')]){var _0x56b1d6=_0x291d4f[_0xe49f('0x36')][_0xe49f('0x24')]();var _0x349893=_0x56b1d6[_0xe49f('0x29')](0x0,_0x56b1d6[_0xe49f('0x37')]('_'));var _0x28d30a=_0x56b1d6[_0xe49f('0x29')](_0x56b1d6['indexOf']('_')+0x1);if(_0x349893===_0x42081c){_0x49ad16[_0x28d30a]=_0x291d4f[_0xe49f('0x38')];}}});}return _0x49ad16;}function getTicket(_0xbe91d2,_0x370162,_0x2fb5f4,_0xd4341f,_0x167bc2,_0x58bc4c,_0x189b94){return new BPromise(function(_0x1fba2d,_0x2cebba){var _0xe53805;return getAuthToken(_0x370162,_0x2fb5f4,_0x189b94)[_0xe49f('0xf')](function(_0x38e857){if(_0x58bc4c[_0xe49f('0x39')]===_0xe49f('0x3a')){_0xe53805={'method':'POST','uri':_0xd4341f+'incidents','body':Object[_0xe49f('0x3b')]({},{'title':intUtil['getString'](_0x58bc4c[_0xe49f('0x3c')],_0x167bc2,'\x20'),'description':intUtil[_0xe49f('0x3d')](_0x58bc4c[_0xe49f('0x3e')],_0x167bc2,'\x0a'),'customerid_contact@odata.bind':_0xe49f('0x3f')+_0xbe91d2['enduserId']+')','ownerid@odata.bind':_0xe49f('0x40')+_0xbe91d2[_0xe49f('0x20')]+')','caseorigincode':'1'},getCustomFields(_0x58bc4c[_0xe49f('0x41')],_0x167bc2,_0x58bc4c['ticketType'])),'headers':{'Authorization':_0xe49f('0x17')+_0x38e857,'OData-Version':'4.0'},'json':!![],'resolveWithFullResponse':!![]};}if(_0x58bc4c[_0xe49f('0x39')]==='phonecall'){_0xe53805={'method':_0xe49f('0x26'),'uri':_0xd4341f+'phonecalls','body':Object[_0xe49f('0x3b')]({},{'subject':intUtil[_0xe49f('0x3d')](_0x58bc4c[_0xe49f('0x3c')],_0x167bc2,'\x20'),'phonenumber':String(_0x167bc2[_0xe49f('0x25')]),'description':intUtil[_0xe49f('0x3d')](_0x58bc4c[_0xe49f('0x3e')],_0x167bc2,'\x0a'),'regardingobjectid_contact@odata.bind':_0xe49f('0x3f')+_0xbe91d2[_0xe49f('0x2e')]+')','ownerid@odata.bind':_0xe49f('0x40')+_0xbe91d2['userId']+')','directioncode':_0xbe91d2['callDirection']===_0xe49f('0x42')?![]:!![],'phonecall_activity_parties':[{'partyid_systemuser@odata.bind':_0xe49f('0x40')+_0xbe91d2[_0xe49f('0x20')]+')','participationtypemask':_0xbe91d2[_0xe49f('0x43')]===_0xe49f('0x42')?0x2:0x1},{'partyid_contact@odata.bind':_0xe49f('0x3f')+_0xbe91d2[_0xe49f('0x2e')]+')','participationtypemask':_0xbe91d2[_0xe49f('0x43')]===_0xe49f('0x42')?0x1:0x2}]},getCustomFields(_0x58bc4c[_0xe49f('0x41')],_0x167bc2,_0x58bc4c[_0xe49f('0x39')])),'headers':{'Authorization':'Bearer\x20'+_0x38e857,'OData-Version':_0xe49f('0x18')},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0xe53805);})['then'](function(_0x10fcb0){var _0x1daf27=_0x10fcb0[_0xe49f('0x44')][_0xe49f('0x28')];var _0x25f681=_0x1daf27[_0xe49f('0x29')](_0x1daf27[_0xe49f('0x2a')]('(')+0x1,_0x1daf27[_0xe49f('0x2a')](')'));_0xbe91d2[_0xe49f('0x45')]=_0x25f681;_0x1fba2d(_0xbe91d2);})[_0xe49f('0x11')](function(_0x5deced){_0x2cebba(_0x5deced[_0xe49f('0x14')]);});});}function emit(_0x51a5c2,_0x16e6a7,_0xea7961,_0x57b0b5){var _0x1c9aa7={'uri':util['format'](_0xe49f('0x46'),_0x51a5c2,_0xea7961,_0x57b0b5)};io['to'](util[_0xe49f('0x47')]('user:%s',_0x16e6a7))[_0xe49f('0x48')](_0xe49f('0x49'),_0x1c9aa7);}exports['cs']=function(_0x2aaa1e,_0x4cb44c,_0x54a170,_0x53ce31,_0x4e58f6,_0x5b4516,_0x5c72b8,_0x8e0a53){var _0x4186b4={};_0x5b4516[_0xe49f('0x4a')]=intUtil[_0xe49f('0x4b')](_0x5b4516[_0xe49f('0x4a')]);_0x5b4516[_0xe49f('0x4c')]=intUtil[_0xe49f('0x4b')](_0x5b4516[_0xe49f('0x4c')]);_0x4186b4['callDirection']=_0x8e0a53===_0xe49f('0x42')||_0x8e0a53===_0xe49f('0x4d')?'queue':_0xe49f('0x2b');var _0x3043e1=util[_0xe49f('0x47')]('%s/api/data/v9.0/',_0x5b4516['remoteUri']);var _0x21dcdf=util[_0xe49f('0x47')]('https://login.microsoftonline.com/%s/oauth2/token',_0x5b4516['tenantId']);var _0x26084c=util['format']('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x5b4516[_0xe49f('0x4c')],_0x4cb44c[_0xe49f('0x4e')],md5(_0x4cb44c['uniqueid']));if(_0x4e58f6&&_0x4e58f6[_0xe49f('0x4f')]){logger[_0xe49f('0x21')](_0xe49f('0x50'),_0xe49f('0x51'));_0x4cb44c['recordingURL']=_0x26084c;}else if(_0x5c72b8&&_0x5c72b8['recordingFormat']&&_0x5c72b8[_0xe49f('0x52')]!=='none'){logger['info'](_0xe49f('0x53'),_0xe49f('0x51'));_0x4cb44c[_0xe49f('0x54')]=_0x26084c;}else{_0x4cb44c[_0xe49f('0x54')]='';}return getUser(_0x4186b4,_0x5b4516,_0x53ce31,_0x21dcdf,_0x3043e1,_0x8e0a53)[_0xe49f('0xf')](function(_0x1c3dde){logger[_0xe49f('0x21')]('['+_0x8e0a53[_0xe49f('0x13')]()+_0xe49f('0x55'),_0x1c3dde[_0xe49f('0x20')]);logger[_0xe49f('0x21')]('['+_0x8e0a53[_0xe49f('0x13')]()+_0xe49f('0x56'),_0x1c3dde[_0xe49f('0x1c')]);return getEndUser(_0x1c3dde,_0x5b4516,_0x21dcdf,_0x3043e1,_0x4cb44c,_0x8e0a53);})[_0xe49f('0xf')](function(_0x19156f){logger['info']('['+_0x8e0a53[_0xe49f('0x13')]()+_0xe49f('0x57'),_0x19156f[_0xe49f('0x2e')]);logger['info']('['+_0x8e0a53[_0xe49f('0x13')]()+_0xe49f('0x58'),_0x4cb44c[_0xe49f('0x25')]);return getTicket(_0x19156f,_0x5b4516,_0x21dcdf,_0x3043e1,_0x4cb44c,_0x54a170,_0x8e0a53);})[_0xe49f('0xf')](function(_0x332b10){logger['info'](util[_0xe49f('0x47')]('['+_0x8e0a53['toUpperCase']()+_0xe49f('0x59'),_0x54a170['ticketType'],_0x332b10[_0xe49f('0x45')]));logger['info'](util['format']('['+_0x8e0a53[_0xe49f('0x13')]()+_0xe49f('0x5a'),_0x8e0a53));if(_0x8e0a53!==_0xe49f('0x4d')){logger['info']('['+_0x8e0a53['toUpperCase']()+']',_0xe49f('0x5b'));emit(_0x5b4516[_0xe49f('0x4a')],_0x53ce31['name'],_0x54a170[_0xe49f('0x39')],_0x332b10[_0xe49f('0x45')]);}})[_0xe49f('0x11')](function(_0xf3a873){logger['error']('['+_0x8e0a53[_0xe49f('0x13')]()+']\x20Error\x20running\x20Dynamics365\x20integration',util['inspect'](_0xf3a873,{'showHidden':!![],'depth':null}));});};