e4459e3d95ebd61fe45e0c445955b37f1cea347d
[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 _0xd0e7=['accountcode','online','voiceStatus','User','Queue','Pause','getChannels','includes','Invalid\x20channel','toLowerCase','getAgents','globalQueueFilter','query','globalStatusFilter','pauseTypeFilter','*pause','resolve','channel','sort','validateSortParameter','fields','join','order','getAgentIdsByQueues','rows','getSortedAgentsIdsByStatus','getAgentIdsByStatus','rawAttributes','fieldName','type','role','agent','getOptions','literal','FIELD(id,','forEach','where','user','Agents','extraQueryConditions','assign','UserProfile','getResources','findAndCountAll','map','filterAgentAttributes','globalStatus','getAgentStatus','pause','getQueues','key','userProfileId','QueueCampaigns','getRealtimeAgents','all','jayson/promise','../../mysqldb','http','client','offset','undefined','limit','count','status','set','json','error','stack','name','send','voice','startCase','Queues','then','format','Unable\x20to\x20retrieve\x20RPC\x20%s\x20queues','result','catch','request','loggedIn','waiting','paused','outbound','push','originated','message','dialActive','dialMethod','startPredictive','startProgressive','erlangCallToSecond','erlangAbandonmentRate','erlangBusyFactor','dialPredictiveInterval','dialPredictiveIntervalMaxThreshold','dialPredictiveIntervalMinThreshold','predictiveIntervalAvailable','predictiveIntervalTotalCalls','predictiveIntervalAnsweredCalls','predictiveIntervalDroppedCallsTimeout','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalAvgTalktime','agents','loggedInDb','available','talking','busy','merge','filter','some','connectedlinenum','internal','toString','getMembers','length','find','UserId'];(function(_0x264c84,_0x598700){var _0x1fd84c=function(_0x271c3d){while(--_0x271c3d){_0x264c84['push'](_0x264c84['shift']());}};_0x1fd84c(++_0x598700);}(_0xd0e7,0x121));var _0x7d0e=function(_0x3c22e0,_0x1dc6ea){_0x3c22e0=_0x3c22e0-0x0;var _0x215811=_0xd0e7[_0x3c22e0];return _0x215811;};'use strict';var util=require('util');var _=require('lodash');var jayson=require(_0x7d0e('0x0'));var rta=require('../../components/realtime/agents');var qs=require('../../components/parsers/qs');var utils=require('../../config/utils');var logger=require('../../config/logger')('api');var db=require(_0x7d0e('0x1'))['db'];var amiClient=jayson['client'][_0x7d0e('0x2')]({'port':0x232a});var routingClient=jayson[_0x7d0e('0x3')][_0x7d0e('0x2')]({'port':0x232c});function respondWithFilteredResult(_0x513da9,_0x49f42c){return function(_0x1988f1){if(_0x1988f1){var _0x3669dc=typeof _0x49f42c[_0x7d0e('0x4')]===_0x7d0e('0x5')&&typeof _0x49f42c[_0x7d0e('0x6')]===_0x7d0e('0x5');var _0x404c6b=_0x1988f1['count'];var _0x5d5771=_0x3669dc?0x0:_0x49f42c['offset'];var _0x33a632=_0x3669dc?_0x1988f1[_0x7d0e('0x7')]:_0x49f42c[_0x7d0e('0x4')]+_0x49f42c[_0x7d0e('0x6')];var _0x2fb0d7;if(_0x33a632>=_0x404c6b){_0x33a632=_0x404c6b;_0x2fb0d7=0xc8;}else{_0x2fb0d7=0xce;}_0x513da9[_0x7d0e('0x8')](_0x2fb0d7);return _0x513da9[_0x7d0e('0x9')]('Content-Range',_0x5d5771+'-'+_0x33a632+'/'+_0x404c6b)[_0x7d0e('0xa')](_0x1988f1);}return null;};}function handleError(_0x5a7d2e,_0x330fcb){_0x330fcb=_0x330fcb||0x1f4;return function(_0x313e8f){logger[_0x7d0e('0xb')](_0x313e8f[_0x7d0e('0xc')]);if(_0x313e8f[_0x7d0e('0xd')]){delete _0x313e8f['name'];}_0x5a7d2e[_0x7d0e('0x8')](_0x330fcb)[_0x7d0e('0xe')](_0x313e8f);};}function getRealtimeQueues(_0x17648f,_0x4a3129){return new Promise(function(_0x140c32,_0x31ccd8){var _0x356cdd=_0x4a3129===_0x7d0e('0xf')?amiClient:routingClient;return _0x356cdd['request'](_[_0x7d0e('0x10')](_0x4a3129)+_0x7d0e('0x11'),_0x17648f)[_0x7d0e('0x12')](function(_0x5d31b0){if(_0x5d31b0[_0x7d0e('0xb')])throw new Error(util[_0x7d0e('0x13')](_0x7d0e('0x14'),_0x4a3129));return _0x140c32(_0x5d31b0[_0x7d0e('0x15')]);})[_0x7d0e('0x16')](function(_0x58bd58){_0x31ccd8(_0x58bd58);});});}function getRealtimeVoiceQueueChannels(){return new Promise(function(_0xb8cc89,_0x5c29f8){return amiClient[_0x7d0e('0x17')]('VoiceQueuesChannels',{})[_0x7d0e('0x12')](function(_0x1b0ab1){if(_0x1b0ab1['error'])throw new Error('Unable\x20to\x20retrieve\x20voice\x20queues\x20channels');return _0xb8cc89(_0x1b0ab1[_0x7d0e('0x15')]);})[_0x7d0e('0x16')](function(_0x4b9cfc){_0x5c29f8(_0x4b9cfc);});});}function initializeQueues(_0x14bb45,_0x191f32,_0x235f9d,_0xad0fca){var _0x5a6896=[_0x7d0e('0x18'),'available',_0x7d0e('0x19'),'talking',_0x7d0e('0x1a')];if(_0x235f9d===_0x7d0e('0xf')&&_0xad0fca===_0x7d0e('0x1b')){_0x5a6896[_0x7d0e('0x1c')]('pTalking',_0x7d0e('0x1d'),_0x7d0e('0x1e'),_0x7d0e('0x1f'),_0x7d0e('0x20'),'Trunk',_0x7d0e('0x21'),_0x7d0e('0x22'),'erlangCalls',_0x7d0e('0x23'),_0x7d0e('0x24'),_0x7d0e('0x25'),_0x7d0e('0x26'),_0x7d0e('0x27'),_0x7d0e('0x28'),_0x7d0e('0x29'),_0x7d0e('0x2a'),_0x7d0e('0x2b'),_0x7d0e('0x2c'),_0x7d0e('0x2d'),'predictiveIntervalAvgHoldtime',_0x7d0e('0x2e'));}return _0x14bb45['map'](function(_0x3a7f93){var _0x3d35dc=_0x3a7f93['get']({'plain':!![]});_0x3d35dc[_0x7d0e('0x2f')]=[];_0x3d35dc[_0x7d0e('0x1a')]=0x0;_0x3d35dc[_0x7d0e('0x30')]=0x0;_0x3d35dc['loggedIn']=0x0;_0x3d35dc[_0x7d0e('0x31')]=0x0;_0x3d35dc['waiting']=0x0;if(_0x235f9d===_0x7d0e('0xf')){_0x3d35dc[_0x7d0e('0x32')]=0x0;_0x3d35dc[_0x7d0e('0x33')]=0x0;if(_0xad0fca===_0x7d0e('0x1b')){_0x3d35dc['pTalking']=0x0;_0x3d35dc['originated']=0x0;}}var _0x1c8cf7=_['find'](_0x191f32,['id',_0x3d35dc['id']]);if(_0x1c8cf7)_[_0x7d0e('0x34')](_0x3d35dc,_['pick'](_0x1c8cf7,_0x5a6896));return _0x3d35dc;});}function updateAgentVoiceStatus(_0x5310bd,_0x518449,_0x115a67){var _0x1ccbbc=_[_0x7d0e('0x35')](_0x115a67,['queue',_0x518449['name']]);if(_0x1ccbbc['length']===0x0)return _0x5310bd[_0x7d0e('0x33')]=!![];if(_[_0x7d0e('0x36')](_0x1ccbbc,[_0x7d0e('0x37'),_0x5310bd[_0x7d0e('0x38')][_0x7d0e('0x39')]()]))return _0x5310bd[_0x7d0e('0x32')]=!![];if(!_0x5310bd['talking'])return _0x5310bd[_0x7d0e('0x33')]=!![];}function getVoiceQueueAgents(_0x1314ff,_0x32f48f,_0x149e31,_0x43dd69){var _0x509afd=_['find'](_0x32f48f,['id',_0x1314ff['id']]);if(!_0x509afd)return _0x1314ff;return _0x509afd[_0x7d0e('0x3a')]({'raw':!![]})[_0x7d0e('0x12')](function(_0x21fc35){for(var _0x184246=0x0;_0x184246<_0x21fc35[_0x7d0e('0x3b')];_0x184246++){var _0x417d6d=_[_0x7d0e('0x3c')](_0x149e31,['id',_0x21fc35[_0x184246][_0x7d0e('0x3d')]]);if(!_0x417d6d){_0x417d6d={'id':_0x21fc35[_0x184246][_0x7d0e('0x3d')],'name':_0x21fc35[_0x184246][_0x7d0e('0x3d')],'accountcode':'','online':![]};}var _0x3d6762={'id':_0x417d6d['id'],'name':_0x417d6d['name'],'internal':_0x417d6d[_0x7d0e('0x3e')],'online':Boolean(_0x417d6d[_0x7d0e('0x3f')]),'paused':Boolean(_0x21fc35[_0x184246][_0x7d0e('0x1a')])};if(_0x417d6d[_0x7d0e('0x40')]===_0x7d0e('0x32'))updateAgentVoiceStatus(_0x3d6762,_0x1314ff,_0x43dd69);if(_0x3d6762['online'])_0x1314ff[_0x7d0e('0x30')]++;if(_0x3d6762[_0x7d0e('0x33')])_0x1314ff[_0x7d0e('0x33')]++;if(_0x3d6762['paused']&&!_0x3d6762[_0x7d0e('0x33')]&&!_0x3d6762[_0x7d0e('0x32')])_0x1314ff['paused']++;_0x1314ff[_0x7d0e('0x2f')]['push'](_0x3d6762);}return _0x1314ff;});}function getQueueAgents(_0x165c4c,_0x4cdfbe,_0x57aed4){var _0x2b2a4c=_0x7d0e('0x41')+_['startCase'](_0x57aed4)+_0x7d0e('0x42');var _0x5ea9f6=_0x57aed4+_0x7d0e('0x43');return db[_0x2b2a4c]['findAll']({'where':{[_[_0x7d0e('0x10')](_0x57aed4)+'QueueId']:_0x165c4c['id']},'raw':!![]})[_0x7d0e('0x12')](function(_0x3a4220){for(var _0x32a79d=0x0;_0x32a79d<_0x3a4220[_0x7d0e('0x3b')];_0x32a79d++){var _0x2303fd=_['find'](_0x4cdfbe,['id',_0x3a4220[_0x32a79d][_0x7d0e('0x3d')]]);if(!_0x2303fd){_0x2303fd={'id':_0x3a4220[_0x32a79d][_0x7d0e('0x3d')],'name':_0x3a4220[_0x32a79d]['UserId'],'online':![],['pauseField']:![]};}var _0x10d365={'id':_0x2303fd['id'],'name':_0x2303fd[_0x7d0e('0xd')],'online':Boolean(_0x2303fd[_0x7d0e('0x3f')]),'paused':Boolean(_0x2303fd[_0x5ea9f6])};if(_0x10d365[_0x7d0e('0x3f')])_0x165c4c['loggedInDb']++;_0x165c4c['agents']['push'](_0x10d365);}return _0x165c4c;});}function validateChannel(_0x1e3222){var _0x2d13a7=utils[_0x7d0e('0x44')]();if(!_[_0x7d0e('0x45')](_0x2d13a7,_0x1e3222['toLowerCase']()))throw new Error(_0x7d0e('0x46'));return _0x1e3222[_0x7d0e('0x47')]();}exports[_0x7d0e('0x48')]=function(_0x22ecca,_0x1d7eea){var _0x508150={'count':0x0,'rows':[]};var _0x121b3c={};var _0x336aac;var _0x53cfdb;var _0x2af987;var _0x2b5369;var _0x11a498=utils[_0x7d0e('0x44')]();var _0xdaa818=_0x22ecca['query'][_0x7d0e('0x49')];var _0x4c02ab=_0x22ecca[_0x7d0e('0x4a')][_0x7d0e('0x4b')];var _0x364711=_0x22ecca[_0x7d0e('0x4a')][_0x7d0e('0x4c')];var _0x20585=_0x4c02ab==='pause'||_0x4c02ab===_0x7d0e('0x4d')?!![]:![];var _0x204487=[];var _0x5519a6;Promise[_0x7d0e('0x4e')]()[_0x7d0e('0x12')](function(){if(_0x22ecca[_0x7d0e('0x4a')][_0x7d0e('0x4f')]){_0x336aac=validateChannel(_0x22ecca[_0x7d0e('0x4a')][_0x7d0e('0x4f')]);}if(!_0x22ecca['query'][_0x7d0e('0x50')]||!_0x22ecca[_0x7d0e('0x4a')][_0x7d0e('0x50')]['includes']('globalStatus')){_0x22ecca[_0x7d0e('0x4a')][_0x7d0e('0x50')]=rta[_0x7d0e('0x51')](_0x22ecca['query'][_0x7d0e('0x50')]);return;}var _0x56eaa7=rta['getUpdatedSortOptions'](_0x22ecca[_0x7d0e('0x4a')][_0x7d0e('0x50')]);_0x22ecca['query'][_0x7d0e('0x50')]=_0x56eaa7[_0x7d0e('0x52')][_0x7d0e('0x53')](',');_0x53cfdb=_0x56eaa7[_0x7d0e('0x54')];})[_0x7d0e('0x12')](function(){if(!_0xdaa818){return[];}return rta[_0x7d0e('0x55')](_0xdaa818,_0x336aac);})[_0x7d0e('0x12')](function(_0x362c6d){_0x204487=_0x362c6d;return rta['getRealtimeAgents']();})[_0x7d0e('0x12')](function(_0x98109b){_0x2b5369=_0x98109b[_0x7d0e('0x56')];if((!_0x4c02ab||_0x20585)&&!_0x53cfdb){return _0x204487;}if(_0x53cfdb&&!_0x4c02ab){return rta[_0x7d0e('0x57')](_0x2b5369,_0x204487,_0x53cfdb);}else{return rta[_0x7d0e('0x58')](_0x2b5369,_0x204487,_0x4c02ab);}})[_0x7d0e('0x12')](function(_0x3d1c61){_0x204487=_0x3d1c61;var _0x250022=![];if(_0x204487['length']===0x0){if(_0xdaa818||_0x4c02ab){_0x250022=!![];}if(_0x20585){_0x250022=![];}}if(_0x250022){return _0x508150;}var _0x54c2a8=_['map'](db[_0x7d0e('0x41')][_0x7d0e('0x59')],function(_0x124d29){return{'name':_0x124d29[_0x7d0e('0x5a')],'type':_0x124d29[_0x7d0e('0x5b')]['key']};});_0x22ecca[_0x7d0e('0x4a')][_0x7d0e('0x5c')]=_0x7d0e('0x5d');_0x22ecca[_0x7d0e('0x4a')][_0x7d0e('0x3f')]=!![];_0x121b3c=qs[_0x7d0e('0x5e')](_0x54c2a8,_0x22ecca);_0x121b3c['raw']=!![];var _0x37c4f6=[];if(_0x204487[_0x7d0e('0x3b')]>0x0){_0x37c4f6[_0x7d0e('0x1c')]({'id':{'$in':_0x204487}});if(_0x53cfdb&&!_0x4c02ab){_0x5519a6=[db['sequelize'][_0x7d0e('0x5f')](_0x7d0e('0x60')+_0x204487+')')];_0x121b3c['order']=_0x5519a6;}}if(_0x20585){_0x11a498[_0x7d0e('0x61')](function(_0x54cd0f){var _0x288f68=!![];if(_0x4c02ab===_0x7d0e('0x4d')&&_0x336aac!==_0x54cd0f){_0x288f68=![];}_0x37c4f6[_0x7d0e('0x1c')]({[_0x54cd0f+'Pause']:_0x288f68});});if(_0x364711){_0x37c4f6['push']({'pauseType':_0x364711});}}else if(_0x4c02ab){_0x11a498[_0x7d0e('0x61')](function(_0x599ccf){_0x37c4f6['push']({[_0x599ccf+_0x7d0e('0x43')]:![]});});}_0x121b3c[_0x7d0e('0x62')]=_[_0x7d0e('0x34')](_0x121b3c['where'],{'$and':_0x37c4f6});if(_0x22ecca[_0x7d0e('0x63')][_0x7d0e('0x5c')]===_0x7d0e('0x63')){var _0x3a042c={'params':{'id':_0x22ecca[_0x7d0e('0x63')]['userProfileId']},'query':{'section':_0x7d0e('0x64'),'role':_0x7d0e('0x5d'),'online':!![],'raw':!![],'ids':_0x204487,'customSorting':_0x5519a6}};if(_0x20585){_0x3a042c[_0x7d0e('0x4a')][_0x7d0e('0x65')]=_0x37c4f6;}_0x3a042c[_0x7d0e('0x4a')]=Object[_0x7d0e('0x66')](_0x3a042c[_0x7d0e('0x4a')],_0x22ecca[_0x7d0e('0x4a')]);delete _0x3a042c[_0x7d0e('0x4a')]['id'];return db[_0x7d0e('0x67')][_0x7d0e('0x68')](_0x3a042c);}return db[_0x7d0e('0x41')][_0x7d0e('0x69')](_0x121b3c);})[_0x7d0e('0x12')](function(_0x12ac1a){_0x508150[_0x7d0e('0x7')]=_0x12ac1a['count'];_0x2af987=_0x12ac1a['rows'];return _0x2af987[_0x7d0e('0x6a')](function(_0x583fbb){var _0x59d181=_['find'](_0x2b5369,['id',_0x583fbb['id']]);if(_0x59d181){var _0x2b1b35=rta[_0x7d0e('0x6b')](_0x59d181);_[_0x7d0e('0x34')](_0x583fbb,_0x2b1b35);}_0x583fbb[_0x7d0e('0x6c')]=rta[_0x7d0e('0x6d')](_0x583fbb);if(_0x583fbb[_0x7d0e('0x6c')][_0x7d0e('0x45')](_0x7d0e('0x6e'))){_0x11a498[_0x7d0e('0x61')](function(_0x4119e7){if(_0x583fbb[_0x4119e7+_0x7d0e('0x43')]){_0x583fbb[_0x4119e7+'Status']=_0x7d0e('0x6e');}});}return _0x583fbb;});})[_0x7d0e('0x12')](function(_0x30f9eb){if(!_0x53cfdb||_0x5519a6){return _0x30f9eb;}return rta['sortAgentsByStatus'](_0x30f9eb,_0x53cfdb);})[_0x7d0e('0x12')](function(_0x2f1e5f){_0x508150['rows']=_0x2f1e5f;return _0x508150;})[_0x7d0e('0x12')](respondWithFilteredResult(_0x1d7eea,_0x121b3c))[_0x7d0e('0x16')](handleError(_0x1d7eea,null));};exports[_0x7d0e('0x6f')]=function(_0x487ba5,_0x491231){var _0x5a252e={'count':0x0,'rows':[]},_0x6e0d4={},_0x437e9d,_0x270614,_0x314add,_0x3fcd3a,_0x57b022;Promise[_0x7d0e('0x4e')]()[_0x7d0e('0x12')](function(){if(_0x487ba5[_0x7d0e('0x4a')][_0x7d0e('0x4f')])_0x437e9d=validateChannel(_0x487ba5['query'][_0x7d0e('0x4f')]);var _0x3a38e1=_[_0x7d0e('0x10')](_0x437e9d)+'Queue';var _0x33aac4=_[_0x7d0e('0x6a')](db[_0x3a38e1][_0x7d0e('0x59')],function(_0x23522c){return{'name':_0x23522c[_0x7d0e('0x5a')],'type':_0x23522c['type'][_0x7d0e('0x70')]};});_0x6e0d4=qs['getOptions'](_0x33aac4,_0x487ba5);if(_0x487ba5[_0x7d0e('0x63')][_0x7d0e('0x5c')]===_0x7d0e('0x63')){var _0x15177d={'params':{'id':_0x487ba5['user'][_0x7d0e('0x71')]},'query':{'section':_0x437e9d===_0x7d0e('0xf')&&_0x487ba5['query']['type']===_0x7d0e('0x1b')?_0x7d0e('0x72'):_[_0x7d0e('0x10')](_0x437e9d)+_0x7d0e('0x11'),'type':_0x487ba5[_0x7d0e('0x4a')]['type'],'nolimit':!![],'sort':_0x7d0e('0xd'),'filter':_0x487ba5[_0x7d0e('0x4a')][_0x7d0e('0x35')]}};return db['UserProfile']['getResources'](_0x15177d);}return db[_0x3a38e1]['findAndCountAll'](_0x6e0d4);})['then'](function(_0x16c35c){_0x5a252e[_0x7d0e('0x7')]=_0x16c35c[_0x7d0e('0x7')];_0x270614=_0x16c35c['rows'];return getRealtimeQueues(_0x487ba5,_0x437e9d);})[_0x7d0e('0x12')](function(_0x5f6b57){_0x3fcd3a=_0x5f6b57['rows'];return rta[_0x7d0e('0x73')]();})[_0x7d0e('0x12')](function(_0x7eb7c9){_0x314add=_0x7eb7c9['rows'];if(_0x437e9d!=_0x7d0e('0xf'))return;return getRealtimeVoiceQueueChannels();})[_0x7d0e('0x12')](function(_0x33adbd){_0x57b022=_0x33adbd?_0x33adbd[_0x7d0e('0x56')]:[];return initializeQueues(_0x270614,_0x3fcd3a,_0x437e9d,_0x487ba5['query'][_0x7d0e('0x5b')]);})[_0x7d0e('0x12')](function(_0x1990ae){var _0x54a4be=_0x1990ae['map'](function(_0x13db28){if(_0x437e9d===_0x7d0e('0xf'))return getVoiceQueueAgents(_0x13db28,_0x270614,_0x314add,_0x57b022);else return getQueueAgents(_0x13db28,_0x314add,_0x437e9d);});return Promise[_0x7d0e('0x74')](_0x54a4be);})['then'](function(_0x5e7f51){_0x5a252e['rows']=_0x5e7f51;return _0x5a252e;})['then'](respondWithFilteredResult(_0x491231,_0x6e0d4))['catch'](handleError(_0x491231,null));};