e8c40e5e3bfd91840a575f2c4bb2bbb46d6ba0d0
[motion2.git] / server / api / realtime / realtime.controller.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 _0x76e3=['Unable\x20to\x20retrieve\x20RPC\x20agents\x20(AMI)','result','error','Unable\x20to\x20retrieve\x20RPC\x20agents\x20(Routing)','merge','catch','startCase','then','format','Unable\x20to\x20retrieve\x20RPC\x20%s\x20queues','VoiceQueuesChannels','loggedIn','available','paused','outbound','originated','message','dialActive','dialMethod','startProgressive','erlangCalls','erlangCallToSecond','erlangAbandonmentRate','erlangBusyFactor','dialPredictiveInterval','dialPredictiveIntervalMaxThreshold','dialPredictiveIntervalMinThreshold','predictiveIntervalAvailable','predictiveIntervalTotalCalls','predictiveIntervalAnsweredCalls','predictiveIntervalDroppedCallsTimeout','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalAvgHoldtime','map','get','agents','loggedInDb','voice','busy','pTalking','find','pick','queue','some','internal','toString','talking','getMembers','length','UserId','accountcode','online','push','Queue','Pause','QueueId','idle','unknown','ringing','isNil','chatPause','mailPause','openchannelPause','voicePause','filter','voiceStatus','pause','faxStatus','mailStatus','openchannelStatus','smsStatus','*pause','getAgents','lastLoginAt','lastPauseAt','pauseType','whatsappPause','faxPause','chatCapacity','whatsappCapacity','faxCapacity','chatCurrentCapacity','mailCurrentCapacity','smsCurrentCapacity','faxCurrentCapacity','chatStatus','whatsappStatus','chatStatusTime','openchannelStatusTime','mailStatusTime','whatsappStatusTime','faxStatusTime','voiceStatusTime','screenrecording','phoneBarEnableScreenRecordingByAgent','phoneBarEnableAutomaticScreenRecording','routealias','smsPause','resolve','User','fieldName','type','key','agent','query','getOptions','raw','user','nolimit','UserProfile','getResources','findAndCountAll','count','rows','omit','globalStatus','globalStatusFilter','pauseTypeFilter','getQueues','mail','chat','openchannel','fax','whatsapp','toLowerCase','Invalid\x20channel','channel','rawAttributes','userProfileId','QueueCampaigns','util','lodash','jayson/promise','../../components/parsers/qs','../../config/logger','client','offset','undefined','limit','status','Content-Range','json','stack','name','send','request','Agents'];(function(_0x28874f,_0x61a6a2){var _0x3ffc2f=function(_0x209b07){while(--_0x209b07){_0x28874f['push'](_0x28874f['shift']());}};_0x3ffc2f(++_0x61a6a2);}(_0x76e3,0x115));var _0x376e=function(_0xfdba05,_0x4448b6){_0xfdba05=_0xfdba05-0x0;var _0x2c7dcd=_0x76e3[_0xfdba05];return _0x2c7dcd;};'use strict';var util=require(_0x376e('0x0'));var _=require(_0x376e('0x1'));var jayson=require(_0x376e('0x2'));var qs=require(_0x376e('0x3'));var logger=require(_0x376e('0x4'))('api');var db=require('../../mysqldb')['db'];var amiClient=jayson[_0x376e('0x5')]['http']({'port':0x232a});var routingClient=jayson[_0x376e('0x5')]['http']({'port':0x232c});function respondWithFilteredResult(_0x415187,_0x5e6c24){return function(_0x5ed198){if(_0x5ed198){var _0x6632e9=typeof _0x5e6c24[_0x376e('0x6')]===_0x376e('0x7')&&typeof _0x5e6c24[_0x376e('0x8')]==='undefined';var _0x523287=_0x5ed198['count'];var _0x333458=_0x6632e9?0x0:_0x5e6c24[_0x376e('0x6')];var _0xe4da37=_0x6632e9?_0x5ed198['count']:_0x5e6c24[_0x376e('0x6')]+_0x5e6c24[_0x376e('0x8')];var _0x372631;if(_0xe4da37>=_0x523287){_0xe4da37=_0x523287;_0x372631=0xc8;}else{_0x372631=0xce;}_0x415187[_0x376e('0x9')](_0x372631);return _0x415187['set'](_0x376e('0xa'),_0x333458+'-'+_0xe4da37+'/'+_0x523287)[_0x376e('0xb')](_0x5ed198);}return null;};}function handleError(_0x596f23,_0x555e54){_0x555e54=_0x555e54||0x1f4;return function(_0x43a180){logger['error'](_0x43a180[_0x376e('0xc')]);if(_0x43a180[_0x376e('0xd')]){delete _0x43a180[_0x376e('0xd')];}_0x596f23[_0x376e('0x9')](_0x555e54)[_0x376e('0xe')](_0x43a180);};}function getRealtimeAgents(){return new Promise(function(_0x5637a9,_0x440950){return amiClient[_0x376e('0xf')](_0x376e('0x10'),{})['then'](function(_0x7e8d44){if(_0x7e8d44['error'])throw new Error(_0x376e('0x11'));var _0xdd6f82=_0x7e8d44[_0x376e('0x12')];return routingClient[_0x376e('0xf')](_0x376e('0x10'),{})['then'](function(_0x3822be){if(_0x3822be[_0x376e('0x13')])throw new Error(_0x376e('0x14'));var _0x548cd1=_0x3822be[_0x376e('0x12')];return _0x5637a9(_[_0x376e('0x15')]({},_0xdd6f82,_0x548cd1));});})[_0x376e('0x16')](function(_0x3946fc){_0x440950(_0x3946fc);});});}function getRealtimeQueues(_0x2c863d,_0x496c0c){return new Promise(function(_0x2fea7e,_0x2bbb37){var _0x13cf6f=_0x496c0c==='voice'?amiClient:routingClient;return _0x13cf6f[_0x376e('0xf')](_[_0x376e('0x17')](_0x496c0c)+'Queues',_0x2c863d)[_0x376e('0x18')](function(_0x2b598f){if(_0x2b598f['error'])throw new Error(util[_0x376e('0x19')](_0x376e('0x1a'),_0x496c0c));return _0x2fea7e(_0x2b598f[_0x376e('0x12')]);})[_0x376e('0x16')](function(_0x31d27d){_0x2bbb37(_0x31d27d);});});}function getRealtimeVoiceQueueChannels(){return new Promise(function(_0x34685b,_0x2a6299){return amiClient[_0x376e('0xf')](_0x376e('0x1b'),{})[_0x376e('0x18')](function(_0x44fab1){if(_0x44fab1['error'])throw new Error('Unable\x20to\x20retrieve\x20voice\x20queues\x20channels');return _0x34685b(_0x44fab1[_0x376e('0x12')]);})[_0x376e('0x16')](function(_0x30d195){_0x2a6299(_0x30d195);});});}function initializeQueues(_0x4c91b2,_0x153006,_0x54820d,_0x246f7d){var _0x24c556=[_0x376e('0x1c'),_0x376e('0x1d'),'waiting','talking',_0x376e('0x1e')];if(_0x54820d==='voice'&&_0x246f7d===_0x376e('0x1f')){_0x24c556['push']('pTalking',_0x376e('0x20'),_0x376e('0x21'),_0x376e('0x22'),_0x376e('0x23'),'Trunk','startPredictive',_0x376e('0x24'),_0x376e('0x25'),_0x376e('0x26'),_0x376e('0x27'),_0x376e('0x28'),_0x376e('0x29'),_0x376e('0x2a'),_0x376e('0x2b'),_0x376e('0x2c'),_0x376e('0x2d'),_0x376e('0x2e'),_0x376e('0x2f'),_0x376e('0x30'),_0x376e('0x31'),'predictiveIntervalAvgTalktime');}return _0x4c91b2[_0x376e('0x32')](function(_0x29e48e){var _0x3f33ab=_0x29e48e[_0x376e('0x33')]({'plain':!![]});_0x3f33ab[_0x376e('0x34')]=[];_0x3f33ab['paused']=0x0;_0x3f33ab[_0x376e('0x35')]=0x0;_0x3f33ab[_0x376e('0x1c')]=0x0;_0x3f33ab[_0x376e('0x1d')]=0x0;_0x3f33ab['waiting']=0x0;if(_0x54820d===_0x376e('0x36')){_0x3f33ab['talking']=0x0;_0x3f33ab[_0x376e('0x37')]=0x0;if(_0x246f7d===_0x376e('0x1f')){_0x3f33ab[_0x376e('0x38')]=0x0;_0x3f33ab[_0x376e('0x20')]=0x0;}}var _0x139754=_[_0x376e('0x39')](_0x153006,['id',_0x3f33ab['id']]);if(_0x139754)_[_0x376e('0x15')](_0x3f33ab,_[_0x376e('0x3a')](_0x139754,_0x24c556));return _0x3f33ab;});}function updateAgentVoiceStatus(_0x4adab2,_0x508b0f,_0x2213fa){var _0x333663=_['filter'](_0x2213fa,[_0x376e('0x3b'),_0x508b0f[_0x376e('0xd')]]);if(_0x333663['length']===0x0)return _0x4adab2[_0x376e('0x37')]=!![];if(_[_0x376e('0x3c')](_0x333663,['connectedlinenum',_0x4adab2[_0x376e('0x3d')][_0x376e('0x3e')]()]))return _0x4adab2[_0x376e('0x3f')]=!![];if(!_0x4adab2[_0x376e('0x3f')])return _0x4adab2[_0x376e('0x37')]=!![];}function getVoiceQueueAgents(_0x291110,_0x3feabe,_0x151776,_0x4046f9){var _0x2c4b9b=_['find'](_0x3feabe,['id',_0x291110['id']]);if(!_0x2c4b9b)return _0x291110;return _0x2c4b9b[_0x376e('0x40')]({'raw':!![]})[_0x376e('0x18')](function(_0x1a8c70){for(var _0x3cd93c=0x0;_0x3cd93c<_0x1a8c70[_0x376e('0x41')];_0x3cd93c++){var _0x22b763=_[_0x376e('0x39')](_0x151776,['id',_0x1a8c70[_0x3cd93c][_0x376e('0x42')]]);if(!_0x22b763){_0x22b763={'id':_0x1a8c70[_0x3cd93c][_0x376e('0x42')],'name':_0x1a8c70[_0x3cd93c]['UserId'],'accountcode':'','online':![]};}var _0xc25d5={'id':_0x22b763['id'],'name':_0x22b763[_0x376e('0xd')],'internal':_0x22b763[_0x376e('0x43')],'online':Boolean(_0x22b763['online']),'paused':Boolean(_0x1a8c70[_0x3cd93c]['paused'])};if(_0x22b763['voiceStatus']===_0x376e('0x3f'))updateAgentVoiceStatus(_0xc25d5,_0x291110,_0x4046f9);if(_0xc25d5[_0x376e('0x44')])_0x291110[_0x376e('0x35')]++;if(_0xc25d5[_0x376e('0x37')])_0x291110[_0x376e('0x37')]++;if(_0xc25d5[_0x376e('0x1e')]&&!_0xc25d5[_0x376e('0x37')]&&!_0xc25d5['talking'])_0x291110['paused']++;_0x291110[_0x376e('0x34')][_0x376e('0x45')](_0xc25d5);}return _0x291110;});}function getQueueAgents(_0x17932f,_0xf93e0c,_0x2a3789){var _0x25131a='User'+_['startCase'](_0x2a3789)+_0x376e('0x46');var _0x43d0ec=_0x2a3789+_0x376e('0x47');return db[_0x25131a]['findAll']({'where':{[_['startCase'](_0x2a3789)+_0x376e('0x48')]:_0x17932f['id']},'raw':!![]})['then'](function(_0x2771e1){for(var _0x20f69b=0x0;_0x20f69b<_0x2771e1['length'];_0x20f69b++){var _0x3403e8=_[_0x376e('0x39')](_0xf93e0c,['id',_0x2771e1[_0x20f69b][_0x376e('0x42')]]);if(!_0x3403e8){_0x3403e8={'id':_0x2771e1[_0x20f69b]['UserId'],'name':_0x2771e1[_0x20f69b][_0x376e('0x42')],'online':![],['pauseField']:![]};}var _0x262409={'id':_0x3403e8['id'],'name':_0x3403e8[_0x376e('0xd')],'online':Boolean(_0x3403e8['online']),'paused':Boolean(_0x3403e8[_0x43d0ec])};if(_0x262409[_0x376e('0x44')])_0x17932f[_0x376e('0x35')]++;_0x17932f[_0x376e('0x34')][_0x376e('0x45')](_0x262409);}return _0x17932f;});}function isIdle(_0x41d860){return _0x41d860===_0x376e('0x49')||_0x41d860===_0x376e('0x4a')||_0x41d860==='unavailable'||_0x41d860===_0x376e('0x4b')||_[_0x376e('0x4c')](_0x41d860);}function isAgentPaused(_0x50fd0d,_0x24b854){var _0x2dd2a9=[_0x50fd0d[_0x376e('0x4d')],_0x50fd0d['faxPause'],_0x50fd0d[_0x376e('0x4e')],_0x50fd0d[_0x376e('0x4f')],_0x50fd0d['smsPause'],_0x50fd0d[_0x376e('0x50')],_0x50fd0d['whatsappPause']];if(!_0x24b854)return _['every'](_0x2dd2a9);var _0x3694c6=_[_0x376e('0x51')](_0x2dd2a9);return _0x3694c6[_0x376e('0x41')]>0x0&&_0x3694c6[_0x376e('0x41')]<_0x2dd2a9[_0x376e('0x41')]?!![]:![];}function isAgentIdle(_0x22e2b3){if(_0x22e2b3[_0x376e('0x52')]!==_0x376e('0x49')&&_0x22e2b3['voicePause']){_0x22e2b3[_0x376e('0x52')]=_0x376e('0x53');return![];}return _['every']([_0x22e2b3['chatStatus'],_0x22e2b3[_0x376e('0x54')],_0x22e2b3[_0x376e('0x55')],_0x22e2b3[_0x376e('0x56')],_0x22e2b3[_0x376e('0x57')],_0x22e2b3['voiceStatus'],_0x22e2b3['whatsappStatus']],isIdle);}function getAgentStatus(_0x3dcb13){var _0x4bc211=_0x376e('0x4a');if(isAgentPaused(_0x3dcb13))_0x4bc211='pause';else if(isAgentPaused(_0x3dcb13,!![]))_0x4bc211=_0x376e('0x58');else if(isAgentIdle(_0x3dcb13))_0x4bc211=_0x376e('0x49');else _0x4bc211='busy';return _0x4bc211;}exports[_0x376e('0x59')]=function(_0x25dde6,_0x416d18){var _0x41a6e9={'count':0x0,'rows':[]},_0x35c89a={},_0x32b607,_0x19e063,_0x1e0157=['userpic',_0x376e('0x44'),_0x376e('0x5a'),_0x376e('0x5b'),_0x376e('0x5c'),'lastPauseAt',_0x376e('0x3d'),'address',_0x376e('0x4d'),_0x376e('0x4f'),_0x376e('0x4e'),'smsPause',_0x376e('0x5d'),_0x376e('0x5e'),'voicePause',_0x376e('0x5f'),'openchannelCapacity','mailCapacity','smsCapacity',_0x376e('0x60'),_0x376e('0x61'),_0x376e('0x62'),'openchannelCurrentCapacity',_0x376e('0x63'),_0x376e('0x64'),'whatsappCurrentCapacity',_0x376e('0x65'),_0x376e('0x66'),_0x376e('0x56'),'mailStatus',_0x376e('0x57'),_0x376e('0x67'),_0x376e('0x54'),_0x376e('0x52'),_0x376e('0x68'),_0x376e('0x69'),_0x376e('0x6a'),'smsStatusTime',_0x376e('0x6b'),_0x376e('0x6c'),_0x376e('0x6d'),'queue','destconnectedlinenum',_0x376e('0x6e'),_0x376e('0x6f'),_0x376e('0x70'),_0x376e('0x71')],_0x493c21=['chatPause',_0x376e('0x4f'),_0x376e('0x4e'),_0x376e('0x72'),_0x376e('0x5d'),_0x376e('0x5e'),_0x376e('0x50'),_0x376e('0x44')];Promise[_0x376e('0x73')]()[_0x376e('0x18')](function(){var _0x4b03db=_[_0x376e('0x32')](db[_0x376e('0x74')]['rawAttributes'],function(_0x589fed){return{'name':_0x589fed[_0x376e('0x75')],'type':_0x589fed[_0x376e('0x76')][_0x376e('0x77')]};});_0x25dde6['query']['role']=_0x376e('0x78');_0x25dde6[_0x376e('0x79')]['online']=!![];_0x35c89a=qs[_0x376e('0x7a')](_0x4b03db,_0x25dde6);_0x35c89a[_0x376e('0x7b')]=!![];if(_0x25dde6[_0x376e('0x7c')]['role']===_0x376e('0x7c')){var _0x180b0f={'params':{'id':_0x25dde6[_0x376e('0x7c')]['userProfileId']},'query':{'section':'Agents','role':_0x376e('0x78'),'online':!![],'nolimit':_0x25dde6[_0x376e('0x79')][_0x376e('0x7d')],'sort':_0x25dde6[_0x376e('0x79')]['sort'],'filter':_0x25dde6['query']['filter']},'raw':!![]};return db[_0x376e('0x7e')][_0x376e('0x7f')](_0x180b0f);}return db['User'][_0x376e('0x80')](_0x35c89a);})[_0x376e('0x18')](function(_0x43494f){_0x41a6e9[_0x376e('0x81')]=_0x43494f[_0x376e('0x81')];_0x32b607=_0x43494f[_0x376e('0x82')];return getRealtimeAgents();})[_0x376e('0x18')](function(_0xff5ab2){_0x19e063=_0xff5ab2[_0x376e('0x82')];return _0x32b607[_0x376e('0x32')](function(_0x4d7890){var _0x31462e=_[_0x376e('0x39')](_0x19e063,['id',_0x4d7890['id']]);if(_0x31462e)_['merge'](_0x4d7890,_['pick'](_[_0x376e('0x83')](_0x31462e,_0x493c21),_0x1e0157));_0x4d7890[_0x376e('0x84')]=getAgentStatus(_0x4d7890);return _0x4d7890;});})[_0x376e('0x18')](function(_0x58f083){if(_0x25dde6['query'][_0x376e('0x85')]){var _0x3c2d8f=_[_0x376e('0x51')](_0x58f083,[_0x376e('0x84'),_0x25dde6[_0x376e('0x79')][_0x376e('0x85')]]);if(_0x25dde6[_0x376e('0x79')][_0x376e('0x86')]){_0x3c2d8f=_[_0x376e('0x51')](_0x3c2d8f,[_0x376e('0x5c'),_0x25dde6[_0x376e('0x79')][_0x376e('0x86')]]);}}_0x41a6e9[_0x376e('0x82')]=_0x3c2d8f||_0x58f083;return _0x41a6e9;})[_0x376e('0x18')](respondWithFilteredResult(_0x416d18,_0x35c89a))[_0x376e('0x16')](handleError(_0x416d18,null));};exports[_0x376e('0x87')]=function(_0x5c02f3,_0x168a6c){var _0x2818dd=[_0x376e('0x88'),_0x376e('0x89'),'sms',_0x376e('0x8a'),_0x376e('0x8b'),_0x376e('0x8c'),'voice'];var _0x1ac6bd={'count':0x0,'rows':[]},_0x53e598={},_0x28779b,_0x156a77,_0x51af5f,_0x35537a,_0x2e2a70;Promise[_0x376e('0x73')]()[_0x376e('0x18')](function(){if(_0x5c02f3[_0x376e('0x79')]['channel']){if(!_['includes'](_0x2818dd,_0x5c02f3['query']['channel'][_0x376e('0x8d')]()))throw new Error(_0x376e('0x8e'));_0x28779b=_0x5c02f3[_0x376e('0x79')][_0x376e('0x8f')][_0x376e('0x8d')]();}var _0x45ba99=_['startCase'](_0x28779b)+'Queue';var _0x333486=_[_0x376e('0x32')](db[_0x45ba99][_0x376e('0x90')],function(_0x352e79){return{'name':_0x352e79[_0x376e('0x75')],'type':_0x352e79[_0x376e('0x76')][_0x376e('0x77')]};});_0x53e598=qs[_0x376e('0x7a')](_0x333486,_0x5c02f3);if(_0x5c02f3['user']['role']===_0x376e('0x7c')){var _0x5840cf={'params':{'id':_0x5c02f3[_0x376e('0x7c')][_0x376e('0x91')]},'query':{'section':_0x28779b===_0x376e('0x36')&&_0x5c02f3[_0x376e('0x79')][_0x376e('0x76')]===_0x376e('0x1f')?_0x376e('0x92'):_['startCase'](_0x28779b)+'Queues','type':_0x5c02f3[_0x376e('0x79')][_0x376e('0x76')],'nolimit':!![],'sort':_0x376e('0xd'),'filter':_0x5c02f3[_0x376e('0x79')][_0x376e('0x51')]}};return db[_0x376e('0x7e')][_0x376e('0x7f')](_0x5840cf);}return db[_0x45ba99]['findAndCountAll'](_0x53e598);})['then'](function(_0x41a9f3){_0x1ac6bd['count']=_0x41a9f3[_0x376e('0x81')];_0x156a77=_0x41a9f3[_0x376e('0x82')];return getRealtimeQueues(_0x5c02f3,_0x28779b);})[_0x376e('0x18')](function(_0x49e56f){_0x35537a=_0x49e56f[_0x376e('0x82')];return getRealtimeAgents();})[_0x376e('0x18')](function(_0x51a5cc){_0x51af5f=_0x51a5cc[_0x376e('0x82')];if(_0x28779b!=_0x376e('0x36'))return;return getRealtimeVoiceQueueChannels();})[_0x376e('0x18')](function(_0x1ceede){_0x2e2a70=_0x1ceede?_0x1ceede[_0x376e('0x82')]:[];return initializeQueues(_0x156a77,_0x35537a,_0x28779b,_0x5c02f3[_0x376e('0x79')]['type']);})['then'](function(_0x4910d){var _0x59af61=_0x4910d[_0x376e('0x32')](function(_0x20e47d){if(_0x28779b==='voice')return getVoiceQueueAgents(_0x20e47d,_0x156a77,_0x51af5f,_0x2e2a70);else return getQueueAgents(_0x20e47d,_0x51af5f,_0x28779b);});return Promise['all'](_0x59af61);})[_0x376e('0x18')](function(_0x45b391){_0x1ac6bd[_0x376e('0x82')]=_0x45b391;return _0x1ac6bd;})[_0x376e('0x18')](respondWithFilteredResult(_0x168a6c,_0x53e598))[_0x376e('0x16')](handleError(_0x168a6c,null));};