c4af0eeb6ecbf1905c113bd3b62b9b28acd195e6
[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 _0x77d1=['util','md5','ioredis','../../../../config/logger','dynamics365','../../../../config/environment','redis','defaults','socket.io-emitter','POST','remoteUri','username','password','then','access_token','catch','error','toUpperCase',']\x20Wrong\x20credentials!','message','GET','systemusers?$select=internalemailaddress,isdisabled,systemuserid','Bearer\x20','isNil','validateEmail','email','userEmail','length','internalemailaddress','isdisabled','info',']\x20Agent\x20found\x20','systemuserid','userId','toLowerCase','calleridnum','contacts','/systemusers(','4.0','headers','odata-entityid','lastIndexOf','enduserId','contacts?$select=telephone1','value','outbound','destcalleridnum','telephone1',']\x20Enduser\x20created!','forEach','string','nameField','idField','substring','indexOf','content','incidents','getString','Descriptions','/contacts(','ticketType','phonecall','phonecalls','assign','Subjects','callDirection','queue','Fields','ticketId','format','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','emit','trigger:browser:url','stripTrailingSlash','serverUrl','unmanaged','%s/api/data/v9.0/','tenantId','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','monitor_format','[QUEUE]','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','request-promise'];(function(_0x204ddc,_0x581ed7){var _0x2ee64f=function(_0x48713a){while(--_0x48713a){_0x204ddc['push'](_0x204ddc['shift']());}};_0x2ee64f(++_0x581ed7);}(_0x77d1,0xbd));var _0x177d=function(_0x3048ea,_0x3838c2){_0x3048ea=_0x3048ea-0x0;var _0x1a13c4=_0x77d1[_0x3048ea];return _0x1a13c4;};'use strict';var _=require('lodash');var BPromise=require('bluebird');var rp=require(_0x177d('0x0'));var util=require(_0x177d('0x1'));var intUtil=require('./util');var md5=require(_0x177d('0x2'));var Redis=require(_0x177d('0x3'));var logger=require(_0x177d('0x4'))(_0x177d('0x5'));var config=require(_0x177d('0x6'));config[_0x177d('0x7')]=_[_0x177d('0x8')](config[_0x177d('0x7')],{'host':'localhost','port':0x18eb});var io=require(_0x177d('0x9'))(new Redis(config['redis']));function getAuthToken(_0x1ab8da,_0x267708,_0x164c62){var _0x407d46={'method':_0x177d('0xa'),'uri':_0x267708,'form':{'client_id':_0x1ab8da['clientId'],'resource':_0x1ab8da[_0x177d('0xb')],'username':_0x1ab8da[_0x177d('0xc')],'password':_0x1ab8da[_0x177d('0xd')],'grant_type':_0x177d('0xd'),'client_secret':_0x1ab8da['clientSecret']},'json':!![]};return rp(_0x407d46)[_0x177d('0xe')](function(_0x4a6a71){return _0x4a6a71[_0x177d('0xf')];})[_0x177d('0x10')](function(_0x1c1a1f){logger[_0x177d('0x11')]('['+[_0x164c62[_0x177d('0x12')]()]+_0x177d('0x13'));return _0x1c1a1f[_0x177d('0x14')];});}function getUser(_0x35cd89,_0x4f636d,_0x3d2122,_0x203eee,_0x3e0ed3,_0x453e40){return new BPromise(function(_0x2a79d6,_0x26d2c0){return getAuthToken(_0x4f636d,_0x203eee,_0x453e40)['then'](function(_0x543d17){var _0x583706={'method':_0x177d('0x15'),'uri':_0x3e0ed3+_0x177d('0x16'),'headers':{'Authorization':_0x177d('0x17')+_0x543d17,'OData-Version':'4.0'},'json':!![]};return rp(_0x583706);})[_0x177d('0xe')](function(_0x1dd5f6){var _0x5bafd8=_0x1dd5f6['value'];var _0x5322db=![];var _0x4fb9d5=null;if(!_[_0x177d('0x18')](_0x3d2122)){if(intUtil[_0x177d('0x19')](_0x3d2122[_0x177d('0x1a')])){_0x35cd89[_0x177d('0x1b')]=_0x3d2122['email'];for(_0x4fb9d5=0x0;_0x4fb9d5<_0x5bafd8[_0x177d('0x1c')];_0x4fb9d5++){if(_0x5bafd8[_0x4fb9d5][_0x177d('0x1d')]===_0x3d2122[_0x177d('0x1a')]&&!_0x5bafd8[_0x4fb9d5][_0x177d('0x1e')]){_0x5322db=!![];logger[_0x177d('0x1f')]('['+[_0x453e40[_0x177d('0x12')]()]+_0x177d('0x20')+_0x5bafd8[_0x4fb9d5][_0x177d('0x21')]+'!');_0x35cd89[_0x177d('0x22')]=_0x5bafd8[_0x4fb9d5]['systemuserid'];}}}}if(!_0x5322db){logger[_0x177d('0x1f')]('['+[_0x453e40['toUpperCase']()]+']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');_0x35cd89[_0x177d('0x1b')]=_0x4f636d[_0x177d('0xc')];for(_0x4fb9d5=0x0;_0x4fb9d5<_0x5bafd8[_0x177d('0x1c')];_0x4fb9d5++){if(_0x5bafd8[_0x4fb9d5][_0x177d('0x1d')]===_0x4f636d['username']){_0x35cd89[_0x177d('0x22')]=_0x5bafd8[_0x4fb9d5][_0x177d('0x21')];}}}_0x2a79d6(_0x35cd89);})[_0x177d('0x10')](function(_0x38cb7d){_0x26d2c0(_0x38cb7d[_0x177d('0x14')]);});});}function createEndUser(_0x403425,_0x4d5864,_0x569443,_0xf3c863,_0x510194,_0x2fda96){return new BPromise(function(_0x4d2598,_0x376084){return getAuthToken(_0x4d5864,_0x569443,_0x2fda96)[_0x177d('0xe')](function(_0x31b8a9){var _0x147456=_0x2fda96[_0x177d('0x23')]()==='outbound'?_0x510194['destcalleridnum']:_0x510194[_0x177d('0x24')];var _0x1cddf1={'method':_0x177d('0xa'),'uri':_0xf3c863+_0x177d('0x25'),'body':{'telephone1':_0x147456,'fullname':_0x147456,'firstname':_0x147456,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':_0x177d('0x26')+_0x403425[_0x177d('0x22')]+')'},'headers':{'Authorization':_0x177d('0x17')+_0x31b8a9,'OData-Version':_0x177d('0x27')},'json':!![],'resolveWithFullResponse':!![]};return rp(_0x1cddf1);})[_0x177d('0xe')](function(_0x150b17){var _0x5eba30=_0x150b17[_0x177d('0x28')][_0x177d('0x29')];var _0x42032d=_0x5eba30['substring'](_0x5eba30[_0x177d('0x2a')]('(')+0x1,_0x5eba30[_0x177d('0x2a')](')'));_0x403425[_0x177d('0x2b')]=_0x42032d;_0x4d2598(_0x403425);})[_0x177d('0x10')](function(_0x46933b){_0x376084(_0x46933b[_0x177d('0x14')]);});});}function getEndUser(_0x3ff84e,_0x15c466,_0xb6f831,_0x42584e,_0x2b36d8,_0x109553){return new BPromise(function(_0x4a8bd7,_0x500535){return getAuthToken(_0x15c466,_0xb6f831,_0x109553)[_0x177d('0xe')](function(_0x176d5c){var _0x2169eb={'method':_0x177d('0x15'),'uri':_0x42584e+_0x177d('0x2c'),'headers':{'Authorization':_0x177d('0x17')+_0x176d5c,'If-None-Match':null,'OData-Version':'4.0'},'json':!![]};return rp(_0x2169eb);})['then'](function(_0x7b0d9f){var _0xa42d20=null;if(_0x7b0d9f){var _0x11b8f5=_0x7b0d9f[_0x177d('0x2d')];var _0xe12412=![];for(_0xa42d20=0x0;_0xa42d20<_0x11b8f5[_0x177d('0x1c')];_0xa42d20++){var _0x30866c=_0x109553[_0x177d('0x23')]()===_0x177d('0x2e')?_0x2b36d8[_0x177d('0x2f')]:_0x2b36d8[_0x177d('0x24')];if(_0x11b8f5[_0xa42d20][_0x177d('0x30')]===_0x30866c){_0xe12412=!![];_0x3ff84e[_0x177d('0x2b')]=_0x11b8f5[_0xa42d20]['contactid'];}}if(_0xe12412){_0x4a8bd7(_0x3ff84e);}else{return createEndUser(_0x3ff84e,_0x15c466,_0xb6f831,_0x42584e,_0x2b36d8,_0x109553)[_0x177d('0xe')](function(_0x563648){logger[_0x177d('0x1f')]('['+[_0x109553[_0x177d('0x12')]()]+_0x177d('0x31'),_0x563648[_0x177d('0x2b')]);_0x4a8bd7(_0x563648);});}}else{return createEndUser(_0x3ff84e,_0x15c466,_0xb6f831,_0x42584e,_0x2b36d8,_0x109553)[_0x177d('0xe')](function(_0x1a62db){logger['info']('['+[_0x109553[_0x177d('0x12')]()]+']\x20Enduser\x20Created!',_0x1a62db['enduserId']);_0x4a8bd7(_0x1a62db);});}});});}function getCustomFields(_0x2be6d5,_0x511101,_0x32ab2d){var _0x2573c8={};if(_0x2be6d5['length']>0x0){_[_0x177d('0x32')](_0x2be6d5,function(_0x1ae683){if(_0x1ae683['type']===_0x177d('0x33')&&_0x1ae683[_0x177d('0x34')]&&!_0x1ae683['customField']){var _0x22101a=_0x1ae683[_0x177d('0x35')][_0x177d('0x23')]();var _0x4457bc=_0x22101a[_0x177d('0x36')](0x0,_0x22101a[_0x177d('0x37')]('_'));var _0x5b7149=_0x22101a[_0x177d('0x36')](_0x22101a[_0x177d('0x37')]('_')+0x1);if(_0x4457bc===_0x32ab2d){_0x2573c8[_0x5b7149]=_0x1ae683[_0x177d('0x38')];}}});}return _0x2573c8;}function getTicket(_0x2e9108,_0x49e61e,_0x12025a,_0x477064,_0x47b8c8,_0x1addd6,_0x34a63f){return new BPromise(function(_0x4ec594,_0x332322){var _0x2e7b0e;return getAuthToken(_0x49e61e,_0x12025a,_0x34a63f)[_0x177d('0xe')](function(_0xa1c56b){if(_0x1addd6['ticketType']==='incident'){_0x2e7b0e={'method':_0x177d('0xa'),'uri':_0x477064+_0x177d('0x39'),'body':Object['assign']({},{'title':intUtil[_0x177d('0x3a')](_0x1addd6['Subjects'],_0x47b8c8,'\x20'),'description':intUtil[_0x177d('0x3a')](_0x1addd6[_0x177d('0x3b')],_0x47b8c8,'\x0a'),'customerid_contact@odata.bind':_0x177d('0x3c')+_0x2e9108[_0x177d('0x2b')]+')','ownerid@odata.bind':_0x177d('0x26')+_0x2e9108[_0x177d('0x22')]+')','caseorigincode':'1'},getCustomFields(_0x1addd6['Fields'],_0x47b8c8,_0x1addd6[_0x177d('0x3d')])),'headers':{'Authorization':_0x177d('0x17')+_0xa1c56b,'OData-Version':_0x177d('0x27')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x1addd6['ticketType']===_0x177d('0x3e')){_0x2e7b0e={'method':_0x177d('0xa'),'uri':_0x477064+_0x177d('0x3f'),'body':Object[_0x177d('0x40')]({},{'subject':intUtil['getString'](_0x1addd6[_0x177d('0x41')],_0x47b8c8,'\x20'),'phonenumber':String(_0x47b8c8['calleridnum']),'description':intUtil['getString'](_0x1addd6[_0x177d('0x3b')],_0x47b8c8,'\x0a'),'regardingobjectid_contact@odata.bind':_0x177d('0x3c')+_0x2e9108[_0x177d('0x2b')]+')','ownerid@odata.bind':_0x177d('0x26')+_0x2e9108['userId']+')','directioncode':_0x2e9108[_0x177d('0x42')]===_0x177d('0x43')?![]:!![],'phonecall_activity_parties':[{'partyid_systemuser@odata.bind':_0x177d('0x26')+_0x2e9108[_0x177d('0x22')]+')','participationtypemask':_0x2e9108[_0x177d('0x42')]===_0x177d('0x43')?0x2:0x1},{'partyid_contact@odata.bind':_0x177d('0x3c')+_0x2e9108[_0x177d('0x2b')]+')','participationtypemask':_0x2e9108['callDirection']===_0x177d('0x43')?0x1:0x2}]},getCustomFields(_0x1addd6[_0x177d('0x44')],_0x47b8c8,_0x1addd6[_0x177d('0x3d')])),'headers':{'Authorization':_0x177d('0x17')+_0xa1c56b,'OData-Version':_0x177d('0x27')},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x2e7b0e);})[_0x177d('0xe')](function(_0x224444){var _0x251335=_0x224444[_0x177d('0x28')][_0x177d('0x29')];var _0x39822c=_0x251335[_0x177d('0x36')](_0x251335[_0x177d('0x2a')]('(')+0x1,_0x251335[_0x177d('0x2a')](')'));_0x2e9108[_0x177d('0x45')]=_0x39822c;_0x4ec594(_0x2e9108);})[_0x177d('0x10')](function(_0x41a6b7){_0x332322(_0x41a6b7[_0x177d('0x14')]);});});}function emit(_0x4eccac,_0x48da9e,_0xeebea7,_0x4543a8){var _0x2e3dba={'uri':util[_0x177d('0x46')](_0x177d('0x47'),_0x4eccac,_0xeebea7,_0x4543a8)};io['to'](util['format']('user:%s',_0x48da9e))[_0x177d('0x48')](_0x177d('0x49'),_0x2e3dba);}exports['cs']=function(_0x37b5e6,_0xadc3c8,_0x476e38,_0xc3cb91,_0x1fc90f,_0x557c7a,_0x19b29f,_0x31201a){var _0x46d450={};_0x557c7a[_0x177d('0xb')]=intUtil[_0x177d('0x4a')](_0x557c7a['remoteUri']);_0x557c7a[_0x177d('0x4b')]=intUtil[_0x177d('0x4a')](_0x557c7a['serverUrl']);_0x46d450[_0x177d('0x42')]=_0x31201a===_0x177d('0x43')||_0x31201a===_0x177d('0x4c')?_0x177d('0x43'):_0x177d('0x2e');var _0x25a72b=util[_0x177d('0x46')](_0x177d('0x4d'),_0x557c7a[_0x177d('0xb')]);var _0xe8091a=util['format']('https://login.microsoftonline.com/%s/oauth2/token',_0x557c7a[_0x177d('0x4e')]);var _0x214b31=util['format'](_0x177d('0x4f'),_0x557c7a[_0x177d('0x4b')],_0xadc3c8[_0x177d('0x50')],md5(_0xadc3c8[_0x177d('0x50')]));if(_0x1fc90f&&_0x1fc90f[_0x177d('0x51')]){logger[_0x177d('0x1f')](_0x177d('0x52'),_0x177d('0x53'));_0xadc3c8[_0x177d('0x54')]=_0x214b31;}else if(_0x19b29f&&_0x19b29f[_0x177d('0x55')]&&_0x19b29f[_0x177d('0x55')]!=='none'){logger[_0x177d('0x1f')](_0x177d('0x56'),_0x177d('0x53'));_0xadc3c8[_0x177d('0x54')]=_0x214b31;}else{_0xadc3c8['recordingURL']='';}return getUser(_0x46d450,_0x557c7a,_0xc3cb91,_0xe8091a,_0x25a72b,_0x31201a)[_0x177d('0xe')](function(_0x5a2af1){logger[_0x177d('0x1f')]('['+_0x31201a[_0x177d('0x12')]()+_0x177d('0x57'),_0x5a2af1['userId']);logger['info']('['+_0x31201a['toUpperCase']()+_0x177d('0x58'),_0x5a2af1['userEmail']);return getEndUser(_0x5a2af1,_0x557c7a,_0xe8091a,_0x25a72b,_0xadc3c8,_0x31201a);})[_0x177d('0xe')](function(_0x57bf54){logger[_0x177d('0x1f')]('['+_0x31201a['toUpperCase']()+_0x177d('0x59'),_0x57bf54['enduserId']);logger[_0x177d('0x1f')]('['+_0x31201a['toUpperCase']()+_0x177d('0x5a'),_0xadc3c8[_0x177d('0x24')]);return getTicket(_0x57bf54,_0x557c7a,_0xe8091a,_0x25a72b,_0xadc3c8,_0x476e38,_0x31201a);})[_0x177d('0xe')](function(_0xffb6cf){logger[_0x177d('0x1f')](util[_0x177d('0x46')]('['+_0x31201a[_0x177d('0x12')]()+_0x177d('0x5b'),_0x476e38['ticketType'],_0xffb6cf[_0x177d('0x45')]));logger['info'](util[_0x177d('0x46')]('['+_0x31201a['toUpperCase']()+_0x177d('0x5c'),_0x31201a));if(_0x31201a!==_0x177d('0x4c')){logger[_0x177d('0x1f')]('['+_0x31201a['toUpperCase']()+']',_0x177d('0x5d'));emit(_0x557c7a[_0x177d('0xb')],_0xc3cb91[_0x177d('0x5e')],_0x476e38[_0x177d('0x3d')],_0xffb6cf[_0x177d('0x45')]);}})[_0x177d('0x10')](function(_0x4071a2){logger[_0x177d('0x11')]('['+_0x31201a[_0x177d('0x12')]()+']\x20Error\x20running\x20Dynamics365\x20integration',util['inspect'](_0x4071a2,{'showHidden':!![],'depth':null}));});};