Built motion from commit ede67897.|2.6.29
[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 _0x7614=['POST','clientId','username','password','clientSecret','then','access_token','catch','toUpperCase','message','systemusers?$select=internalemailaddress,isdisabled,systemuserid','Bearer\x20','4.0','isNil','validateEmail','userEmail','internalemailaddress','isdisabled','info',']\x20Agent\x20found\x20','systemuserid','userId','length','toLowerCase','outbound','destcalleridnum','contacts','body','headers','substring','lastIndexOf','enduserId','GET','contacts?$select=','&$filter=','replace','%2b','value','contactid','nothing',']\x20Enduser\x20NOT\x20Created\x20-\x20ModuleCreate\x20=\x20Nothing',']\x20Enduser\x20created!','forEach','picklist','nameField','customField','idField','indexOf','ticketType','incident','incidents','assign','getString','/contacts(','/systemusers(','Fields','callDirection','queue','phonecalls','Subjects','calleridnum','Descriptions','odata-entityid','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','uniqueid','monitor_format','recordingURL','recordingFormat','none','[OUTBOUND]',']\x20The\x20User\x20ID\x20is:',']\x20The\x20User\x20email\x20is:','moduleCreate',']\x20The\x20Enduser\x20ID\x20is:',']\x20The\x20Enduser\x20phone\x20is:',']\x20The\x20%s\x20ID\x20is:\x20%s','ticketId',']\x20Call\x20direction:\x20%s','openNewTab','Displaying\x20call\x20in\x20a\x20new\x20tab...','name','error',']\x20Error\x20running\x20Dynamics365\x20integration','Error\x20running\x20Dynamics365\x20integration','request-promise','util','./util','md5','ioredis','../../../../config/logger','dynamics365','../../../../config/environment','defaults','localhost','socket.io-emitter','redis','modernAuthentication','remoteUri','CloudProvider','data7','resolve','data5'];(function(_0x54d80c,_0x27104e){var _0x1481f5=function(_0x5c0e41){while(--_0x5c0e41){_0x54d80c['push'](_0x54d80c['shift']());}};_0x1481f5(++_0x27104e);}(_0x7614,0xcc));var _0x4761=function(_0x57306c,_0xdeff85){_0x57306c=_0x57306c-0x0;var _0x413cfb=_0x7614[_0x57306c];return _0x413cfb;};'use strict';var _=require('lodash');var rp=require(_0x4761('0x0'));var util=require(_0x4761('0x1'));var intUtil=require(_0x4761('0x2'));var md5=require(_0x4761('0x3'));var Redis=require(_0x4761('0x4'));var logger=require(_0x4761('0x5'))(_0x4761('0x6'));var config=require(_0x4761('0x7'));config['redis']=_[_0x4761('0x8')](config['redis'],{'host':_0x4761('0x9'),'port':0x18eb});var io=require(_0x4761('0xa'))(new Redis(config[_0x4761('0xb')]));function getAuthToken(_0x12c4a6,_0x3837e8,_0x2df407){if(_0x12c4a6[_0x4761('0xc')]){_0x12c4a6[_0x4761('0xd')]=_0x12c4a6[_0x4761('0xe')][_0x4761('0xf')];_0x12c4a6['tenantId']=_0x12c4a6[_0x4761('0xe')]['data2'];return Promise[_0x4761('0x10')](_0x12c4a6[_0x4761('0xe')][_0x4761('0x11')]);}var _0x3e39c1={'method':_0x4761('0x12'),'uri':_0x3837e8,'form':{'client_id':_0x12c4a6[_0x4761('0x13')],'resource':_0x12c4a6['remoteUri'],'username':_0x12c4a6[_0x4761('0x14')],'password':_0x12c4a6[_0x4761('0x15')],'grant_type':'password','client_secret':_0x12c4a6[_0x4761('0x16')]},'json':!![]};return rp(_0x3e39c1)[_0x4761('0x17')](function(_0x224177){return _0x224177[_0x4761('0x18')];})[_0x4761('0x19')](function(_0x149e2b){logger['error']('['+[_0x2df407[_0x4761('0x1a')]()]+']\x20Wrong\x20credentials!');return _0x149e2b[_0x4761('0x1b')];});}function getUser(_0x56cbe9,_0x41747a,_0x34d1aa,_0x5af63c,_0x284e03,_0x182f4d){return new Promise(function(_0x16dc24,_0x28aba0){return getAuthToken(_0x41747a,_0x5af63c,_0x182f4d)[_0x4761('0x17')](function(_0x1e48ec){var _0x16287d={'method':'GET','uri':_0x284e03+_0x4761('0x1c'),'headers':{'Authorization':_0x4761('0x1d')+_0x1e48ec,'OData-Version':_0x4761('0x1e')},'json':!![]};return rp(_0x16287d);})[_0x4761('0x17')](function(_0x1d0c91){var _0x5725df=_0x1d0c91['value'];var _0x468085=![];var _0x18b5cd=null;if(!_[_0x4761('0x1f')](_0x34d1aa)){if(intUtil[_0x4761('0x20')](_0x34d1aa['email'])){_0x56cbe9[_0x4761('0x21')]=_0x34d1aa['email'];for(_0x18b5cd=0x0;_0x18b5cd<_0x5725df['length'];_0x18b5cd++){if(_0x5725df[_0x18b5cd][_0x4761('0x22')]===_0x34d1aa['email']&&!_0x5725df[_0x18b5cd][_0x4761('0x23')]){_0x468085=!![];logger[_0x4761('0x24')]('['+[_0x182f4d['toUpperCase']()]+_0x4761('0x25')+_0x5725df[_0x18b5cd][_0x4761('0x26')]+'!');_0x56cbe9[_0x4761('0x27')]=_0x5725df[_0x18b5cd][_0x4761('0x26')];}}}}if(!_0x468085){logger['info']('['+[_0x182f4d[_0x4761('0x1a')]()]+']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');_0x56cbe9['userEmail']=_0x41747a[_0x4761('0x14')];for(_0x18b5cd=0x0;_0x18b5cd<_0x5725df[_0x4761('0x28')];_0x18b5cd++){if(_0x5725df[_0x18b5cd][_0x4761('0x22')]===_0x41747a[_0x4761('0x14')]){_0x56cbe9['userId']=_0x5725df[_0x18b5cd][_0x4761('0x26')];}}}_0x16dc24(_0x56cbe9);})[_0x4761('0x19')](function(_0x1c660d){_0x28aba0(_0x1c660d[_0x4761('0x1b')]);});});}function createEndUser(_0x3abb51,_0x2fb1ea,_0x1f46a1,_0x22ac42,_0xe46fcc,_0x42b174,_0x354224){return new Promise(function(_0x2d2909,_0x2d05b5){return getAuthToken(_0x2fb1ea,_0x1f46a1,_0x42b174)['then'](function(_0xdd6eda){var _0xfebfc3=_0x42b174[_0x4761('0x29')]()===_0x4761('0x2a')?_0xe46fcc[_0x4761('0x2b')]:_0xe46fcc['calleridnum'];var _0x55ac50={'method':_0x4761('0x12'),'uri':_0x22ac42+_0x4761('0x2c'),'body':{'fullname':_0xfebfc3,'firstname':_0xfebfc3,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':'/systemusers('+_0x3abb51['userId']+')'},'headers':{'Authorization':_0x4761('0x1d')+_0xdd6eda,'OData-Version':_0x4761('0x1e')},'json':!![],'resolveWithFullResponse':!![]};_0x55ac50[_0x4761('0x2d')][_0x354224]=_0xfebfc3;return rp(_0x55ac50);})[_0x4761('0x17')](function(_0x22b1bb){var _0x556dfe=_0x22b1bb[_0x4761('0x2e')]['odata-entityid'];var _0x8240e4=_0x556dfe[_0x4761('0x2f')](_0x556dfe[_0x4761('0x30')]('(')+0x1,_0x556dfe[_0x4761('0x30')](')'));_0x3abb51[_0x4761('0x31')]=_0x8240e4;_0x2d2909(_0x3abb51);})[_0x4761('0x19')](function(_0x5af258){_0x2d05b5(_0x5af258[_0x4761('0x1b')]);});});}function getEndUser(_0xb1e048,_0x184574,_0x3c4f0d,_0x32d90e,_0x1a6716,_0x14cd7d,_0x54e7f5,_0x3ef468){var _0x2f91e6=_0x14cd7d['toLowerCase']()===_0x4761('0x2a')?_0x1a6716[_0x4761('0x2b')]:_0x1a6716['calleridnum'];return getAuthToken(_0x184574,_0x3c4f0d,_0x14cd7d)[_0x4761('0x17')](function(_0x747820){_0x3ef468=_0x3ef468?_0x3ef468:'telephone1';var _0x3a4052={'method':_0x4761('0x32'),'uri':_0x32d90e+_0x4761('0x33')+_0x3ef468+_0x4761('0x34')+_0x3ef468+'\x20eq\x20\x27'+_0x2f91e6[_0x4761('0x35')]('+',_0x4761('0x36'))+'\x27','headers':{'Authorization':_0x4761('0x1d')+_0x747820,'If-None-Match':null,'OData-Version':_0x4761('0x1e')},'json':!![]};return rp(_0x3a4052);})[_0x4761('0x17')](function(_0x15574b){var _0x4a1ce7=![];if(!_0x15574b)return _0x4a1ce7;var _0x22af90=_0x15574b[_0x4761('0x37')];for(var _0x12af13=0x0;_0x12af13<_0x22af90[_0x4761('0x28')];_0x12af13++){if(_0x22af90[_0x12af13][_0x3ef468]===_0x2f91e6){_0x4a1ce7=!![];_0xb1e048['enduserId']=_0x22af90[_0x12af13][_0x4761('0x38')];}}return _0x4a1ce7;})[_0x4761('0x17')](function(_0x264f58){if(_0x264f58)return _0xb1e048;if(_0x54e7f5===_0x4761('0x39')){logger[_0x4761('0x24')]('['+[_0x14cd7d['toUpperCase']()]+_0x4761('0x3a'));return _0xb1e048;}return createEndUser(_0xb1e048,_0x184574,_0x3c4f0d,_0x32d90e,_0x1a6716,_0x14cd7d,_0x3ef468)[_0x4761('0x17')](function(_0x5ac4d4){logger[_0x4761('0x24')]('['+[_0x14cd7d[_0x4761('0x1a')]()]+_0x4761('0x3b'),_0x5ac4d4['enduserId']);return _0x5ac4d4;});});}function getCustomFields(_0x38251d,_0x11a9e7,_0x4b90a6){var _0x5b80e6={};if(_0x38251d[_0x4761('0x28')]>0x0){_[_0x4761('0x3c')](_0x38251d,function(_0x252919){if(_['includes'](['string',_0x4761('0x3d')],_0x252919['type'])&&_0x252919[_0x4761('0x3e')]&&!_0x252919[_0x4761('0x3f')]){var _0x45a38b=_0x252919[_0x4761('0x40')][_0x4761('0x29')]();var _0x1c027f=_0x45a38b[_0x4761('0x2f')](0x0,_0x45a38b[_0x4761('0x41')]('_'));var _0x2644dd=_0x45a38b[_0x4761('0x2f')](_0x45a38b['indexOf']('_')+0x1);if(_0x1c027f===_0x4b90a6){_0x5b80e6[_0x2644dd]=_0x252919['content'];}}});}return _0x5b80e6;}function getTicket(_0xb18df6,_0x13cc5a,_0x103ac0,_0x43939c,_0x2e5a97,_0x2edfa9,_0x4541ad){return new Promise(function(_0x47acf5,_0x4beec8){var _0x5b5328;return getAuthToken(_0x13cc5a,_0x103ac0,_0x4541ad)[_0x4761('0x17')](function(_0x214ad4){if(_0x2edfa9[_0x4761('0x42')]===_0x4761('0x43')){_0x5b5328={'method':'POST','uri':_0x43939c+_0x4761('0x44'),'body':Object[_0x4761('0x45')]({},{'title':intUtil['getString'](_0x2edfa9['Subjects'],_0x2e5a97,'\x20'),'description':intUtil[_0x4761('0x46')](_0x2edfa9['Descriptions'],_0x2e5a97,'\x0a'),'customerid_contact@odata.bind':_0xb18df6[_0x4761('0x31')]?_0x4761('0x47')+_0xb18df6[_0x4761('0x31')]+')':undefined,'ownerid@odata.bind':_0x4761('0x48')+_0xb18df6[_0x4761('0x27')]+')','caseorigincode':'1'},getCustomFields(_0x2edfa9[_0x4761('0x49')],_0x2e5a97,_0x2edfa9[_0x4761('0x42')])),'headers':{'Authorization':_0x4761('0x1d')+_0x214ad4,'OData-Version':'4.0'},'json':!![],'resolveWithFullResponse':!![]};}if(_0x2edfa9[_0x4761('0x42')]==='phonecall'){var _0x44faad=_0xb18df6[_0x4761('0x31')]?[{'partyid_systemuser@odata.bind':_0x4761('0x48')+_0xb18df6[_0x4761('0x27')]+')','participationtypemask':_0xb18df6[_0x4761('0x4a')]===_0x4761('0x4b')?0x2:0x1},{'partyid_contact@odata.bind':_0x4761('0x47')+_0xb18df6['enduserId']+')','participationtypemask':_0xb18df6[_0x4761('0x4a')]===_0x4761('0x4b')?0x1:0x2}]:[{'partyid_systemuser@odata.bind':'/systemusers('+_0xb18df6['userId']+')','participationtypemask':_0xb18df6['callDirection']===_0x4761('0x4b')?0x2:0x1}];_0x5b5328={'method':_0x4761('0x12'),'uri':_0x43939c+_0x4761('0x4c'),'body':Object[_0x4761('0x45')]({},{'subject':intUtil[_0x4761('0x46')](_0x2edfa9[_0x4761('0x4d')],_0x2e5a97,'\x20'),'phonenumber':String(_0x2e5a97[_0x4761('0x4e')]),'description':intUtil[_0x4761('0x46')](_0x2edfa9[_0x4761('0x4f')],_0x2e5a97,'\x0a'),'regardingobjectid_contact@odata.bind':_0xb18df6[_0x4761('0x31')]?_0x4761('0x47')+_0xb18df6[_0x4761('0x31')]+')':undefined,'ownerid@odata.bind':'/systemusers('+_0xb18df6[_0x4761('0x27')]+')','directioncode':_0xb18df6[_0x4761('0x4a')]===_0x4761('0x4b')?![]:!![],'phonecall_activity_parties':_0x44faad},getCustomFields(_0x2edfa9[_0x4761('0x49')],_0x2e5a97,_0x2edfa9[_0x4761('0x42')])),'headers':{'Authorization':_0x4761('0x1d')+_0x214ad4,'OData-Version':_0x4761('0x1e')},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x5b5328);})['then'](function(_0x157c65){var _0x371c9b=_0x157c65['headers'][_0x4761('0x50')];var _0x5c08f5=_0x371c9b['substring'](_0x371c9b[_0x4761('0x30')]('(')+0x1,_0x371c9b['lastIndexOf'](')'));_0xb18df6['ticketId']=_0x5c08f5;_0x47acf5(_0xb18df6);})[_0x4761('0x19')](function(_0x1a7a5f){_0x4beec8(_0x1a7a5f[_0x4761('0x1b')]);});});}function emit(_0x347ca4,_0x3a153a,_0x4a5c3f,_0x13e460){var _0x1add6e={'uri':util[_0x4761('0x51')](_0x4761('0x52'),_0x347ca4,_0x4a5c3f,_0x13e460)};io['to'](util['format'](_0x4761('0x53'),_0x3a153a))[_0x4761('0x54')](_0x4761('0x55'),_0x1add6e);}exports['cs']=function(_0x574e85,_0x8f8e2f,_0x242ae8,_0x41bda7,_0x287a0d,_0x251977,_0x2d979d,_0x185c15){var _0x1224db={};_0x251977[_0x4761('0xd')]=_0x251977[_0x4761('0xc')]?intUtil[_0x4761('0x56')](_0x251977[_0x4761('0xe')][_0x4761('0xf')]):intUtil[_0x4761('0x56')](_0x251977[_0x4761('0xd')]);_0x251977[_0x4761('0x57')]=intUtil[_0x4761('0x56')](_0x251977[_0x4761('0x57')]);_0x1224db['callDirection']=_0x185c15===_0x4761('0x4b')||_0x185c15===_0x4761('0x58')?_0x4761('0x4b'):_0x4761('0x2a');var _0x3cbc6a=_0x251977[_0x4761('0xc')]?util[_0x4761('0x51')]('%s/api/data/v9.0/',_0x251977[_0x4761('0xe')]['data7']):util[_0x4761('0x51')](_0x4761('0x59'),_0x251977[_0x4761('0xd')]);var _0x2f6157=util[_0x4761('0x51')](_0x4761('0x5a'),_0x251977['tenantId']);var _0x37ea38=util[_0x4761('0x51')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x251977[_0x4761('0x57')],_0x8f8e2f[_0x4761('0x5b')],md5(_0x8f8e2f[_0x4761('0x5b')]));if(_0x287a0d&&_0x287a0d[_0x4761('0x5c')]){logger[_0x4761('0x24')]('[QUEUE]','Recording\x20is\x20enabled!');_0x8f8e2f[_0x4761('0x5d')]=_0x37ea38;}else if(_0x2d979d&&_0x2d979d[_0x4761('0x5e')]&&_0x2d979d[_0x4761('0x5e')]!==_0x4761('0x5f')){logger[_0x4761('0x24')](_0x4761('0x60'),'Recording\x20is\x20enabled!');_0x8f8e2f['recordingURL']=_0x37ea38;}else{_0x8f8e2f[_0x4761('0x5d')]='';}return getUser(_0x1224db,_0x251977,_0x41bda7,_0x2f6157,_0x3cbc6a,_0x185c15)[_0x4761('0x17')](function(_0xfaf054){logger[_0x4761('0x24')]('['+_0x185c15['toUpperCase']()+_0x4761('0x61'),_0xfaf054['userId']);logger[_0x4761('0x24')]('['+_0x185c15[_0x4761('0x1a')]()+_0x4761('0x62'),_0xfaf054[_0x4761('0x21')]);return getEndUser(_0xfaf054,_0x251977,_0x2f6157,_0x3cbc6a,_0x8f8e2f,_0x185c15,_0x242ae8[_0x4761('0x63')],_0x242ae8['additionalSearchContact']);})['then'](function(_0x8d13ac){logger[_0x4761('0x24')]('['+_0x185c15[_0x4761('0x1a')]()+_0x4761('0x64'),_0x8d13ac['enduserId']);logger[_0x4761('0x24')]('['+_0x185c15[_0x4761('0x1a')]()+_0x4761('0x65'),_0x8f8e2f[_0x4761('0x4e')]);return getTicket(_0x8d13ac,_0x251977,_0x2f6157,_0x3cbc6a,_0x8f8e2f,_0x242ae8,_0x185c15);})['then'](function(_0x32e3fb){logger['info'](util[_0x4761('0x51')]('['+_0x185c15[_0x4761('0x1a')]()+_0x4761('0x66'),_0x242ae8[_0x4761('0x42')],_0x32e3fb[_0x4761('0x67')]));logger['info'](util['format']('['+_0x185c15[_0x4761('0x1a')]()+_0x4761('0x68'),_0x185c15));if(_0x185c15!==_0x4761('0x58')&&_0x242ae8[_0x4761('0x69')]){logger[_0x4761('0x24')]('['+_0x185c15[_0x4761('0x1a')]()+']',_0x4761('0x6a'));emit(_0x251977[_0x4761('0xd')],_0x41bda7[_0x4761('0x6b')],_0x242ae8['ticketType'],_0x32e3fb[_0x4761('0x67')]);}})[_0x4761('0x19')](function(_0x173dd4){logger[_0x4761('0x6c')]('['+_0x185c15['toUpperCase']()+_0x4761('0x6d'),_0x173dd4['message']);console['error'](_0x4761('0x6e'),_0x173dd4);});};