Built motion from commit 5ae82ce5.|2.6.7
[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 _0x8541=['validateSortParameter','getUpdatedSortOptions','fields','join','order','getAgentIdsByQueues','getRealtimeAgents','getSortedAgentsIdsByStatus','map','fieldName','key','role','agent','getOptions','sequelize','literal','forEach','Pause','where','user','userProfileId','Agents','extraQueryConditions','assign','getResources','findAndCountAll','rows','getAgentStatus','Status','sortAgentsByStatus','getQueues','resolve','rawAttributes','type','QueueCampaigns','UserProfile','all','util','lodash','../../components/parsers/qs','../../config/utils','../../config/logger','api','../../mysqldb','client','http','offset','undefined','limit','count','status','set','Content-Range','json','name','send','voice','request','startCase','Queues','then','catch','Unable\x20to\x20retrieve\x20voice\x20queues\x20channels','result','waiting','paused','pTalking','originated','message','dialActive','dialMethod','Trunk','startPredictive','startProgressive','erlangCalls','erlangCallToSecond','erlangAbandonmentRate','erlangBusyFactor','dialPredictiveInterval','dialPredictiveIntervalMaxThreshold','dialPredictiveIntervalMinThreshold','predictiveIntervalAvailable','predictiveIntervalTotalCalls','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','get','agents','loggedInDb','loggedIn','talking','busy','outbound','find','merge','pick','queue','length','some','internal','toString','UserId','online','User','Queue','findAll','push','includes','Invalid\x20channel','toLowerCase','getAgents','getChannels','query','globalQueueFilter','globalStatusFilter','pauseTypeFilter','pause','*pause','channel','sort','globalStatus'];(function(_0x2e4e19,_0x493b50){var _0x9ba20b=function(_0x2f6456){while(--_0x2f6456){_0x2e4e19['push'](_0x2e4e19['shift']());}};_0x9ba20b(++_0x493b50);}(_0x8541,0x9e));var _0x1854=function(_0x5b44f8,_0x4972e3){_0x5b44f8=_0x5b44f8-0x0;var _0x2483e0=_0x8541[_0x5b44f8];return _0x2483e0;};'use strict';var util=require(_0x1854('0x0'));var _=require(_0x1854('0x1'));var jayson=require('jayson/promise');var rta=require('../../components/realtime/agents');var qs=require(_0x1854('0x2'));var utils=require(_0x1854('0x3'));var logger=require(_0x1854('0x4'))(_0x1854('0x5'));var db=require(_0x1854('0x6'))['db'];var amiClient=jayson[_0x1854('0x7')][_0x1854('0x8')]({'port':0x232a});var routingClient=jayson['client'][_0x1854('0x8')]({'port':0x232c});function respondWithFilteredResult(_0x36bad1,_0x477042){return function(_0x49dc4e){if(_0x49dc4e){var _0x3bcb3a=typeof _0x477042[_0x1854('0x9')]===_0x1854('0xa')&&typeof _0x477042[_0x1854('0xb')]==='undefined';var _0x10684d=_0x49dc4e[_0x1854('0xc')];var _0x1bc922=_0x3bcb3a?0x0:_0x477042[_0x1854('0x9')];var _0x4efc8e=_0x3bcb3a?_0x49dc4e['count']:_0x477042[_0x1854('0x9')]+_0x477042[_0x1854('0xb')];var _0x46e665;if(_0x4efc8e>=_0x10684d){_0x4efc8e=_0x10684d;_0x46e665=0xc8;}else{_0x46e665=0xce;}_0x36bad1[_0x1854('0xd')](_0x46e665);return _0x36bad1[_0x1854('0xe')](_0x1854('0xf'),_0x1bc922+'-'+_0x4efc8e+'/'+_0x10684d)[_0x1854('0x10')](_0x49dc4e);}return null;};}function handleError(_0x3b928e,_0x2dc6fb){_0x2dc6fb=_0x2dc6fb||0x1f4;return function(_0x31ead2){logger['error'](_0x31ead2['stack']);if(_0x31ead2[_0x1854('0x11')]){delete _0x31ead2[_0x1854('0x11')];}_0x3b928e[_0x1854('0xd')](_0x2dc6fb)[_0x1854('0x12')](_0x31ead2);};}function getRealtimeQueues(_0x43f1dd,_0x46cb2e){return new Promise(function(_0x33cb82,_0x4ae798){var _0x4e7d9d=_0x46cb2e===_0x1854('0x13')?amiClient:routingClient;return _0x4e7d9d[_0x1854('0x14')](_[_0x1854('0x15')](_0x46cb2e)+_0x1854('0x16'),_0x43f1dd)[_0x1854('0x17')](function(_0x1c8303){if(_0x1c8303['error'])throw new Error(util['format']('Unable\x20to\x20retrieve\x20RPC\x20%s\x20queues',_0x46cb2e));return _0x33cb82(_0x1c8303['result']);})[_0x1854('0x18')](function(_0x39b322){_0x4ae798(_0x39b322);});});}function getRealtimeVoiceQueueChannels(){return new Promise(function(_0x221ff0,_0x3bf681){return amiClient[_0x1854('0x14')]('VoiceQueuesChannels',{})[_0x1854('0x17')](function(_0x1ad4f9){if(_0x1ad4f9['error'])throw new Error(_0x1854('0x19'));return _0x221ff0(_0x1ad4f9[_0x1854('0x1a')]);})[_0x1854('0x18')](function(_0x1a1647){_0x3bf681(_0x1a1647);});});}function initializeQueues(_0x48415e,_0x54ec3c,_0x46ab21,_0x1af846){var _0x58a5cc=['loggedIn','available',_0x1854('0x1b'),'talking',_0x1854('0x1c')];if(_0x46ab21===_0x1854('0x13')&&_0x1af846==='outbound'){_0x58a5cc['push'](_0x1854('0x1d'),_0x1854('0x1e'),_0x1854('0x1f'),_0x1854('0x20'),_0x1854('0x21'),_0x1854('0x22'),_0x1854('0x23'),_0x1854('0x24'),_0x1854('0x25'),_0x1854('0x26'),_0x1854('0x27'),_0x1854('0x28'),_0x1854('0x29'),_0x1854('0x2a'),_0x1854('0x2b'),_0x1854('0x2c'),_0x1854('0x2d'),'predictiveIntervalAnsweredCalls','predictiveIntervalDroppedCallsTimeout',_0x1854('0x2e'),_0x1854('0x2f'),_0x1854('0x30'));}return _0x48415e['map'](function(_0x714865){var _0x97cb79=_0x714865[_0x1854('0x31')]({'plain':!![]});_0x97cb79[_0x1854('0x32')]=[];_0x97cb79[_0x1854('0x1c')]=0x0;_0x97cb79[_0x1854('0x33')]=0x0;_0x97cb79[_0x1854('0x34')]=0x0;_0x97cb79['available']=0x0;_0x97cb79[_0x1854('0x1b')]=0x0;if(_0x46ab21==='voice'){_0x97cb79[_0x1854('0x35')]=0x0;_0x97cb79[_0x1854('0x36')]=0x0;if(_0x1af846===_0x1854('0x37')){_0x97cb79[_0x1854('0x1d')]=0x0;_0x97cb79['originated']=0x0;}}var _0x226f2a=_[_0x1854('0x38')](_0x54ec3c,['id',_0x97cb79['id']]);if(_0x226f2a)_[_0x1854('0x39')](_0x97cb79,_[_0x1854('0x3a')](_0x226f2a,_0x58a5cc));return _0x97cb79;});}function updateAgentVoiceStatus(_0x2d942a,_0x355c5c,_0x376f9c){var _0x43152a=_['filter'](_0x376f9c,[_0x1854('0x3b'),_0x355c5c['name']]);if(_0x43152a[_0x1854('0x3c')]===0x0)return _0x2d942a[_0x1854('0x36')]=!![];if(_[_0x1854('0x3d')](_0x43152a,['connectedlinenum',_0x2d942a[_0x1854('0x3e')][_0x1854('0x3f')]()]))return _0x2d942a[_0x1854('0x35')]=!![];if(!_0x2d942a[_0x1854('0x35')])return _0x2d942a['busy']=!![];}function getVoiceQueueAgents(_0x16ffc2,_0x46ae8d,_0xbdc8c9,_0x5d37ad){var _0x451f85=_[_0x1854('0x38')](_0x46ae8d,['id',_0x16ffc2['id']]);if(!_0x451f85)return _0x16ffc2;return _0x451f85['getMembers']({'raw':!![]})[_0x1854('0x17')](function(_0x1f0728){for(var _0x584376=0x0;_0x584376<_0x1f0728[_0x1854('0x3c')];_0x584376++){var _0x5e6270=_[_0x1854('0x38')](_0xbdc8c9,['id',_0x1f0728[_0x584376][_0x1854('0x40')]]);if(!_0x5e6270){_0x5e6270={'id':_0x1f0728[_0x584376][_0x1854('0x40')],'name':_0x1f0728[_0x584376][_0x1854('0x40')],'accountcode':'','online':![]};}var _0x2cbcb5={'id':_0x5e6270['id'],'name':_0x5e6270[_0x1854('0x11')],'internal':_0x5e6270['accountcode'],'online':Boolean(_0x5e6270[_0x1854('0x41')]),'paused':Boolean(_0x1f0728[_0x584376][_0x1854('0x1c')])};if(_0x5e6270['voiceStatus']===_0x1854('0x35'))updateAgentVoiceStatus(_0x2cbcb5,_0x16ffc2,_0x5d37ad);if(_0x2cbcb5[_0x1854('0x41')])_0x16ffc2[_0x1854('0x33')]++;if(_0x2cbcb5[_0x1854('0x36')])_0x16ffc2[_0x1854('0x36')]++;if(_0x2cbcb5[_0x1854('0x1c')]&&!_0x2cbcb5[_0x1854('0x36')]&&!_0x2cbcb5[_0x1854('0x35')])_0x16ffc2['paused']++;_0x16ffc2[_0x1854('0x32')]['push'](_0x2cbcb5);}return _0x16ffc2;});}function getQueueAgents(_0x165ce0,_0x3a0f32,_0x1049d5){var _0x391752=_0x1854('0x42')+_[_0x1854('0x15')](_0x1049d5)+_0x1854('0x43');var _0x4b6f47=_0x1049d5+'Pause';return db[_0x391752][_0x1854('0x44')]({'where':{[_[_0x1854('0x15')](_0x1049d5)+'QueueId']:_0x165ce0['id']},'raw':!![]})['then'](function(_0x40dae0){for(var _0x1b5b7c=0x0;_0x1b5b7c<_0x40dae0[_0x1854('0x3c')];_0x1b5b7c++){var _0x55c053=_[_0x1854('0x38')](_0x3a0f32,['id',_0x40dae0[_0x1b5b7c][_0x1854('0x40')]]);if(!_0x55c053){_0x55c053={'id':_0x40dae0[_0x1b5b7c][_0x1854('0x40')],'name':_0x40dae0[_0x1b5b7c][_0x1854('0x40')],'online':![],['pauseField']:![]};}var _0x3193b6={'id':_0x55c053['id'],'name':_0x55c053[_0x1854('0x11')],'online':Boolean(_0x55c053[_0x1854('0x41')]),'paused':Boolean(_0x55c053[_0x4b6f47])};if(_0x3193b6[_0x1854('0x41')])_0x165ce0[_0x1854('0x33')]++;_0x165ce0['agents'][_0x1854('0x45')](_0x3193b6);}return _0x165ce0;});}function validateChannel(_0x58552f){var _0xb428f7=utils['getChannels']();if(!_[_0x1854('0x46')](_0xb428f7,_0x58552f['toLowerCase']()))throw new Error(_0x1854('0x47'));return _0x58552f[_0x1854('0x48')]();}exports[_0x1854('0x49')]=function(_0x1cb758,_0x14e23e){var _0x4cbd49={'count':0x0,'rows':[]};var _0x40bd4e={};var _0x2dcac5;var _0x35490b;var _0x3e184a;var _0x25e818;var _0x2dbcf7=utils[_0x1854('0x4a')]();var _0x5514c4=_0x1cb758[_0x1854('0x4b')][_0x1854('0x4c')];var _0x472c21=_0x1cb758[_0x1854('0x4b')][_0x1854('0x4d')];var _0x13e1fb=_0x1cb758[_0x1854('0x4b')][_0x1854('0x4e')];var _0x276f83=_0x472c21===_0x1854('0x4f')||_0x472c21===_0x1854('0x50')?!![]:![];var _0x3b79bc=[];var _0x2c1efe;Promise['resolve']()['then'](function(){if(_0x1cb758['query']['channel']){_0x2dcac5=validateChannel(_0x1cb758[_0x1854('0x4b')][_0x1854('0x51')]);}if(!_0x1cb758[_0x1854('0x4b')][_0x1854('0x52')]||!_0x1cb758[_0x1854('0x4b')]['sort']['includes'](_0x1854('0x53'))){_0x1cb758[_0x1854('0x4b')][_0x1854('0x52')]=rta[_0x1854('0x54')](_0x1cb758[_0x1854('0x4b')][_0x1854('0x52')]);return;}var _0xfcb14f=rta[_0x1854('0x55')](_0x1cb758[_0x1854('0x4b')][_0x1854('0x52')]);_0x1cb758[_0x1854('0x4b')][_0x1854('0x52')]=_0xfcb14f[_0x1854('0x56')][_0x1854('0x57')](',');_0x35490b=_0xfcb14f[_0x1854('0x58')];})[_0x1854('0x17')](function(){if(!_0x5514c4){return[];}return rta[_0x1854('0x59')](_0x5514c4,_0x2dcac5);})[_0x1854('0x17')](function(_0x347426){_0x3b79bc=_0x347426;return rta[_0x1854('0x5a')]();})[_0x1854('0x17')](function(_0x2edde0){_0x25e818=_0x2edde0['rows'];if((!_0x472c21||_0x276f83)&&!_0x35490b){return _0x3b79bc;}if(_0x35490b&&!_0x472c21){return rta[_0x1854('0x5b')](_0x25e818,_0x3b79bc,_0x35490b);}else{return rta['getAgentIdsByStatus'](_0x25e818,_0x3b79bc,_0x472c21);}})[_0x1854('0x17')](function(_0x270816){_0x3b79bc=_0x270816;var _0x5691ba=![];if(_0x3b79bc[_0x1854('0x3c')]===0x0){if(_0x5514c4||_0x472c21){_0x5691ba=!![];}if(_0x276f83){_0x5691ba=![];}}if(_0x5691ba){return _0x4cbd49;}var _0xce4a82=_[_0x1854('0x5c')](db[_0x1854('0x42')]['rawAttributes'],function(_0x50297e){return{'name':_0x50297e[_0x1854('0x5d')],'type':_0x50297e['type'][_0x1854('0x5e')]};});_0x1cb758[_0x1854('0x4b')][_0x1854('0x5f')]=_0x1854('0x60');_0x1cb758[_0x1854('0x4b')][_0x1854('0x41')]=!![];_0x40bd4e=qs[_0x1854('0x61')](_0xce4a82,_0x1cb758);_0x40bd4e['raw']=!![];var _0x584f0b=[];if(_0x3b79bc[_0x1854('0x3c')]>0x0){_0x584f0b[_0x1854('0x45')]({'id':{'$in':_0x3b79bc}});if(_0x35490b&&!_0x472c21){_0x2c1efe=[db[_0x1854('0x62')][_0x1854('0x63')]('FIELD(id,'+_0x3b79bc+')')];_0x40bd4e[_0x1854('0x58')]=_0x2c1efe;}}if(_0x276f83){_0x2dbcf7[_0x1854('0x64')](function(_0x72ee71){var _0x38c4bc=!![];if(_0x472c21===_0x1854('0x50')&&_0x2dcac5!==_0x72ee71){_0x38c4bc=![];}_0x584f0b[_0x1854('0x45')]({[_0x72ee71+_0x1854('0x65')]:_0x38c4bc});});if(_0x13e1fb){_0x584f0b['push']({'pauseType':_0x13e1fb});}}else if(_0x472c21){_0x2dbcf7[_0x1854('0x64')](function(_0x2e7a4c){_0x584f0b[_0x1854('0x45')]({[_0x2e7a4c+_0x1854('0x65')]:![]});});}_0x40bd4e[_0x1854('0x66')]=_[_0x1854('0x39')](_0x40bd4e[_0x1854('0x66')],{'$and':_0x584f0b});if(_0x1cb758[_0x1854('0x67')]['role']===_0x1854('0x67')){var _0x196267={'params':{'id':_0x1cb758['user'][_0x1854('0x68')]},'query':{'section':_0x1854('0x69'),'role':_0x1854('0x60'),'online':!![],'raw':!![],'ids':_0x3b79bc,'customSorting':_0x2c1efe}};if(_0x276f83){_0x196267[_0x1854('0x4b')][_0x1854('0x6a')]=_0x584f0b;}_0x196267['query']=Object[_0x1854('0x6b')](_0x196267['query'],_0x1cb758[_0x1854('0x4b')]);delete _0x196267['query']['id'];return db['UserProfile'][_0x1854('0x6c')](_0x196267);}return db[_0x1854('0x42')][_0x1854('0x6d')](_0x40bd4e);})[_0x1854('0x17')](function(_0x63342b){_0x4cbd49['count']=_0x63342b[_0x1854('0xc')];_0x3e184a=_0x63342b[_0x1854('0x6e')];return _0x3e184a[_0x1854('0x5c')](function(_0x5e06c1){var _0x3ca969=_[_0x1854('0x38')](_0x25e818,['id',_0x5e06c1['id']]);if(_0x3ca969){var _0x29b8a6=rta['filterAgentAttributes'](_0x3ca969);_[_0x1854('0x39')](_0x5e06c1,_0x29b8a6);}_0x5e06c1['globalStatus']=rta[_0x1854('0x6f')](_0x5e06c1);if(_0x5e06c1[_0x1854('0x53')][_0x1854('0x46')](_0x1854('0x4f'))){_0x2dbcf7[_0x1854('0x64')](function(_0x512f6c){if(_0x5e06c1[_0x512f6c+'Pause']){_0x5e06c1[_0x512f6c+_0x1854('0x70')]='pause';}});}return _0x5e06c1;});})[_0x1854('0x17')](function(_0x3d37e6){if(!_0x35490b||_0x2c1efe){return _0x3d37e6;}return rta[_0x1854('0x71')](_0x3d37e6,_0x35490b);})[_0x1854('0x17')](function(_0x354aa6){_0x4cbd49[_0x1854('0x6e')]=_0x354aa6;return _0x4cbd49;})[_0x1854('0x17')](respondWithFilteredResult(_0x14e23e,_0x40bd4e))[_0x1854('0x18')](handleError(_0x14e23e,null));};exports[_0x1854('0x72')]=function(_0x1cf078,_0x1baeb4){var _0x4888a0={'count':0x0,'rows':[]},_0x1fa8d6={},_0x39fc38,_0x277f3a,_0x8c6289,_0xfe5a81,_0x51de46;Promise[_0x1854('0x73')]()[_0x1854('0x17')](function(){if(_0x1cf078[_0x1854('0x4b')][_0x1854('0x51')])_0x39fc38=validateChannel(_0x1cf078[_0x1854('0x4b')][_0x1854('0x51')]);var _0x5ddf9e=_[_0x1854('0x15')](_0x39fc38)+_0x1854('0x43');var _0x4aa6af=_[_0x1854('0x5c')](db[_0x5ddf9e][_0x1854('0x74')],function(_0x439548){return{'name':_0x439548['fieldName'],'type':_0x439548[_0x1854('0x75')]['key']};});_0x1fa8d6=qs[_0x1854('0x61')](_0x4aa6af,_0x1cf078);if(_0x1cf078[_0x1854('0x67')][_0x1854('0x5f')]===_0x1854('0x67')){var _0x2b0d72={'params':{'id':_0x1cf078[_0x1854('0x67')][_0x1854('0x68')]},'query':{'section':_0x39fc38==='voice'&&_0x1cf078[_0x1854('0x4b')]['type']==='outbound'?_0x1854('0x76'):_[_0x1854('0x15')](_0x39fc38)+_0x1854('0x16'),'type':_0x1cf078[_0x1854('0x4b')]['type'],'nolimit':!![],'sort':'name','filter':_0x1cf078[_0x1854('0x4b')]['filter']}};return db[_0x1854('0x77')][_0x1854('0x6c')](_0x2b0d72);}return db[_0x5ddf9e][_0x1854('0x6d')](_0x1fa8d6);})[_0x1854('0x17')](function(_0x1f44a5){_0x4888a0[_0x1854('0xc')]=_0x1f44a5[_0x1854('0xc')];_0x277f3a=_0x1f44a5['rows'];return getRealtimeQueues(_0x1cf078,_0x39fc38);})[_0x1854('0x17')](function(_0x148d9b){_0xfe5a81=_0x148d9b['rows'];return rta[_0x1854('0x5a')]();})[_0x1854('0x17')](function(_0x2e3680){_0x8c6289=_0x2e3680[_0x1854('0x6e')];if(_0x39fc38!=_0x1854('0x13'))return;return getRealtimeVoiceQueueChannels();})[_0x1854('0x17')](function(_0x1a1ad2){_0x51de46=_0x1a1ad2?_0x1a1ad2[_0x1854('0x6e')]:[];return initializeQueues(_0x277f3a,_0xfe5a81,_0x39fc38,_0x1cf078[_0x1854('0x4b')][_0x1854('0x75')]);})[_0x1854('0x17')](function(_0x4b8090){var _0x582b79=_0x4b8090[_0x1854('0x5c')](function(_0x37c8d3){if(_0x39fc38===_0x1854('0x13'))return getVoiceQueueAgents(_0x37c8d3,_0x277f3a,_0x8c6289,_0x51de46);else return getQueueAgents(_0x37c8d3,_0x8c6289,_0x39fc38);});return Promise[_0x1854('0x78')](_0x582b79);})[_0x1854('0x17')](function(_0x402fd3){_0x4888a0[_0x1854('0x6e')]=_0x402fd3;return _0x4888a0;})[_0x1854('0x17')](respondWithFilteredResult(_0x1baeb4,_0x1fa8d6))['catch'](handleError(_0x1baeb4,null));};