d1a8265206db4f438a3897702320eb6a5aa2238a
[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 _0x4cd8=['filter','queue','length','some','internal','toString','getMembers','UserId','voiceStatus','online','findAll','QueueId','getChannels','toLowerCase','Invalid\x20channel','getAgents','query','globalQueueFilter','globalStatusFilter','pauseTypeFilter','pause','*pause','resolve','channel','sort','includes','globalStatus','getUpdatedSortOptions','fields','join','order','getAgentIdsByQueues','getRealtimeAgents','rows','getAgentIdsByStatus','User','type','key','role','agent','getOptions','raw','sequelize','literal','FIELD(id,','Pause','forEach','where','user','userProfileId','extraQueryConditions','assign','UserProfile','getResources','findAndCountAll','filterAgentAttributes','getAgentStatus','Status','sortAgentsByStatus','getQueues','Queue','rawAttributes','fieldName','QueueCampaigns','Queues','all','lodash','jayson/promise','../../components/realtime/agents','../../components/parsers/qs','../../config/logger','api','client','http','offset','undefined','limit','count','status','Content-Range','json','error','stack','name','send','voice','request','startCase','then','format','Unable\x20to\x20retrieve\x20RPC\x20%s\x20queues','result','VoiceQueuesChannels','Unable\x20to\x20retrieve\x20voice\x20queues\x20channels','catch','available','waiting','talking','paused','outbound','push','pTalking','originated','message','dialActive','dialMethod','Trunk','startPredictive','startProgressive','erlangCalls','erlangCallToSecond','erlangAbandonmentRate','erlangBusyFactor','dialPredictiveInterval','dialPredictiveIntervalMinThreshold','predictiveIntervalAvailable','predictiveIntervalAnsweredCalls','predictiveIntervalDroppedCallsTimeout','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalAvgTalktime','map','agents','loggedInDb','loggedIn','busy','find','merge','pick'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x4cd8,0x1c2));var _0x84cd=function(_0x1eb82d,_0x1e23cb){_0x1eb82d=_0x1eb82d-0x0;var _0x2c9502=_0x4cd8[_0x1eb82d];return _0x2c9502;};'use strict';var util=require('util');var _=require(_0x84cd('0x0'));var jayson=require(_0x84cd('0x1'));var rta=require(_0x84cd('0x2'));var qs=require(_0x84cd('0x3'));var utils=require('../../config/utils');var logger=require(_0x84cd('0x4'))(_0x84cd('0x5'));var db=require('../../mysqldb')['db'];var amiClient=jayson[_0x84cd('0x6')][_0x84cd('0x7')]({'port':0x232a});var routingClient=jayson['client'][_0x84cd('0x7')]({'port':0x232c});function respondWithFilteredResult(_0x1c1502,_0xb8d2fc){return function(_0x2488bd){if(_0x2488bd){var _0x18d6d2=typeof _0xb8d2fc[_0x84cd('0x8')]===_0x84cd('0x9')&&typeof _0xb8d2fc[_0x84cd('0xa')]==='undefined';var _0x520ac1=_0x2488bd[_0x84cd('0xb')];var _0x3f294f=_0x18d6d2?0x0:_0xb8d2fc[_0x84cd('0x8')];var _0x1c26bf=_0x18d6d2?_0x2488bd['count']:_0xb8d2fc[_0x84cd('0x8')]+_0xb8d2fc[_0x84cd('0xa')];var _0x36dd38;if(_0x1c26bf>=_0x520ac1){_0x1c26bf=_0x520ac1;_0x36dd38=0xc8;}else{_0x36dd38=0xce;}_0x1c1502[_0x84cd('0xc')](_0x36dd38);return _0x1c1502['set'](_0x84cd('0xd'),_0x3f294f+'-'+_0x1c26bf+'/'+_0x520ac1)[_0x84cd('0xe')](_0x2488bd);}return null;};}function handleError(_0x26bb3c,_0x5108bb){_0x5108bb=_0x5108bb||0x1f4;return function(_0x4e76c7){logger[_0x84cd('0xf')](_0x4e76c7[_0x84cd('0x10')]);if(_0x4e76c7[_0x84cd('0x11')]){delete _0x4e76c7['name'];}_0x26bb3c['status'](_0x5108bb)[_0x84cd('0x12')](_0x4e76c7);};}function getRealtimeQueues(_0x4b5458,_0x189fdf){return new Promise(function(_0x3a7c80,_0x358690){var _0x5e2efb=_0x189fdf===_0x84cd('0x13')?amiClient:routingClient;return _0x5e2efb[_0x84cd('0x14')](_[_0x84cd('0x15')](_0x189fdf)+'Queues',_0x4b5458)[_0x84cd('0x16')](function(_0x1e2707){if(_0x1e2707['error'])throw new Error(util[_0x84cd('0x17')](_0x84cd('0x18'),_0x189fdf));return _0x3a7c80(_0x1e2707[_0x84cd('0x19')]);})['catch'](function(_0x22c709){_0x358690(_0x22c709);});});}function getRealtimeVoiceQueueChannels(){return new Promise(function(_0xc7d6fb,_0x14dd25){return amiClient['request'](_0x84cd('0x1a'),{})[_0x84cd('0x16')](function(_0x188cff){if(_0x188cff[_0x84cd('0xf')])throw new Error(_0x84cd('0x1b'));return _0xc7d6fb(_0x188cff['result']);})[_0x84cd('0x1c')](function(_0x258bc9){_0x14dd25(_0x258bc9);});});}function initializeQueues(_0x2b1c95,_0x562e8f,_0x5835c8,_0x50610d){var _0x2b59c4=['loggedIn',_0x84cd('0x1d'),_0x84cd('0x1e'),_0x84cd('0x1f'),_0x84cd('0x20')];if(_0x5835c8===_0x84cd('0x13')&&_0x50610d===_0x84cd('0x21')){_0x2b59c4[_0x84cd('0x22')](_0x84cd('0x23'),_0x84cd('0x24'),_0x84cd('0x25'),_0x84cd('0x26'),_0x84cd('0x27'),_0x84cd('0x28'),_0x84cd('0x29'),_0x84cd('0x2a'),_0x84cd('0x2b'),_0x84cd('0x2c'),_0x84cd('0x2d'),_0x84cd('0x2e'),_0x84cd('0x2f'),'dialPredictiveIntervalMaxThreshold',_0x84cd('0x30'),_0x84cd('0x31'),'predictiveIntervalTotalCalls',_0x84cd('0x32'),_0x84cd('0x33'),_0x84cd('0x34'),'predictiveIntervalAvgHoldtime',_0x84cd('0x35'));}return _0x2b1c95[_0x84cd('0x36')](function(_0x3109ab){var _0x3028d8=_0x3109ab['get']({'plain':!![]});_0x3028d8[_0x84cd('0x37')]=[];_0x3028d8[_0x84cd('0x20')]=0x0;_0x3028d8[_0x84cd('0x38')]=0x0;_0x3028d8[_0x84cd('0x39')]=0x0;_0x3028d8[_0x84cd('0x1d')]=0x0;_0x3028d8['waiting']=0x0;if(_0x5835c8===_0x84cd('0x13')){_0x3028d8[_0x84cd('0x1f')]=0x0;_0x3028d8[_0x84cd('0x3a')]=0x0;if(_0x50610d===_0x84cd('0x21')){_0x3028d8[_0x84cd('0x23')]=0x0;_0x3028d8['originated']=0x0;}}var _0x242d21=_[_0x84cd('0x3b')](_0x562e8f,['id',_0x3028d8['id']]);if(_0x242d21)_[_0x84cd('0x3c')](_0x3028d8,_[_0x84cd('0x3d')](_0x242d21,_0x2b59c4));return _0x3028d8;});}function updateAgentVoiceStatus(_0x314e72,_0x5b00ee,_0x1b0044){var _0x36a8b4=_[_0x84cd('0x3e')](_0x1b0044,[_0x84cd('0x3f'),_0x5b00ee['name']]);if(_0x36a8b4[_0x84cd('0x40')]===0x0)return _0x314e72[_0x84cd('0x3a')]=!![];if(_[_0x84cd('0x41')](_0x36a8b4,['connectedlinenum',_0x314e72[_0x84cd('0x42')][_0x84cd('0x43')]()]))return _0x314e72[_0x84cd('0x1f')]=!![];if(!_0x314e72[_0x84cd('0x1f')])return _0x314e72[_0x84cd('0x3a')]=!![];}function getVoiceQueueAgents(_0x384616,_0x41916d,_0x4a8a5a,_0x46064c){var _0xaf42f=_[_0x84cd('0x3b')](_0x41916d,['id',_0x384616['id']]);if(!_0xaf42f)return _0x384616;return _0xaf42f[_0x84cd('0x44')]({'raw':!![]})[_0x84cd('0x16')](function(_0x52887b){for(var _0x29cc37=0x0;_0x29cc37<_0x52887b[_0x84cd('0x40')];_0x29cc37++){var _0x73fde=_['find'](_0x4a8a5a,['id',_0x52887b[_0x29cc37][_0x84cd('0x45')]]);if(!_0x73fde){_0x73fde={'id':_0x52887b[_0x29cc37]['UserId'],'name':_0x52887b[_0x29cc37][_0x84cd('0x45')],'accountcode':'','online':![]};}var _0x5dcf2c={'id':_0x73fde['id'],'name':_0x73fde[_0x84cd('0x11')],'internal':_0x73fde['accountcode'],'online':Boolean(_0x73fde['online']),'paused':Boolean(_0x52887b[_0x29cc37][_0x84cd('0x20')])};if(_0x73fde[_0x84cd('0x46')]===_0x84cd('0x1f'))updateAgentVoiceStatus(_0x5dcf2c,_0x384616,_0x46064c);if(_0x5dcf2c[_0x84cd('0x47')])_0x384616[_0x84cd('0x38')]++;if(_0x5dcf2c[_0x84cd('0x3a')])_0x384616[_0x84cd('0x3a')]++;if(_0x5dcf2c['paused']&&!_0x5dcf2c[_0x84cd('0x3a')]&&!_0x5dcf2c[_0x84cd('0x1f')])_0x384616[_0x84cd('0x20')]++;_0x384616[_0x84cd('0x37')][_0x84cd('0x22')](_0x5dcf2c);}return _0x384616;});}function getQueueAgents(_0x4cf2f1,_0x215bc7,_0x4ab5cc){var _0x511a3d='User'+_[_0x84cd('0x15')](_0x4ab5cc)+'Queue';var _0x5859f2=_0x4ab5cc+'Pause';return db[_0x511a3d][_0x84cd('0x48')]({'where':{[_[_0x84cd('0x15')](_0x4ab5cc)+_0x84cd('0x49')]:_0x4cf2f1['id']},'raw':!![]})[_0x84cd('0x16')](function(_0x2cfc5e){for(var _0x1b43bb=0x0;_0x1b43bb<_0x2cfc5e[_0x84cd('0x40')];_0x1b43bb++){var _0x244a15=_[_0x84cd('0x3b')](_0x215bc7,['id',_0x2cfc5e[_0x1b43bb][_0x84cd('0x45')]]);if(!_0x244a15){_0x244a15={'id':_0x2cfc5e[_0x1b43bb]['UserId'],'name':_0x2cfc5e[_0x1b43bb][_0x84cd('0x45')],'online':![],['pauseField']:![]};}var _0x4ef8b2={'id':_0x244a15['id'],'name':_0x244a15[_0x84cd('0x11')],'online':Boolean(_0x244a15[_0x84cd('0x47')]),'paused':Boolean(_0x244a15[_0x5859f2])};if(_0x4ef8b2['online'])_0x4cf2f1[_0x84cd('0x38')]++;_0x4cf2f1['agents'][_0x84cd('0x22')](_0x4ef8b2);}return _0x4cf2f1;});}function validateChannel(_0x15b200){var _0x408bf9=utils[_0x84cd('0x4a')]();if(!_['includes'](_0x408bf9,_0x15b200[_0x84cd('0x4b')]()))throw new Error(_0x84cd('0x4c'));return _0x15b200[_0x84cd('0x4b')]();}exports[_0x84cd('0x4d')]=function(_0x1e2e13,_0x42f8aa){var _0x3fd48e={'count':0x0,'rows':[]};var _0x8e7a2b={};var _0x1955de;var _0x6e924d;var _0x2c1eb7;var _0x64577c;var _0x52c107=utils[_0x84cd('0x4a')]();var _0x3ac7e2=_0x1e2e13[_0x84cd('0x4e')][_0x84cd('0x4f')];var _0x322b4f=_0x1e2e13['query'][_0x84cd('0x50')];var _0x49211e=_0x1e2e13['query'][_0x84cd('0x51')];var _0x66c35d=_0x322b4f===_0x84cd('0x52')||_0x322b4f===_0x84cd('0x53')?!![]:![];var _0x96b025=[];var _0x3bdc74;Promise[_0x84cd('0x54')]()[_0x84cd('0x16')](function(){if(_0x1e2e13[_0x84cd('0x4e')][_0x84cd('0x55')]){_0x1955de=validateChannel(_0x1e2e13['query']['channel']);}if(!_0x1e2e13['query'][_0x84cd('0x56')]||!_0x1e2e13['query'][_0x84cd('0x56')][_0x84cd('0x57')](_0x84cd('0x58'))){_0x1e2e13[_0x84cd('0x4e')][_0x84cd('0x56')]=rta['validateSortParameter'](_0x1e2e13[_0x84cd('0x4e')][_0x84cd('0x56')]);return;}var _0x183b54=rta[_0x84cd('0x59')](_0x1e2e13['query']['sort']);_0x1e2e13[_0x84cd('0x4e')][_0x84cd('0x56')]=_0x183b54[_0x84cd('0x5a')][_0x84cd('0x5b')](',');_0x6e924d=_0x183b54[_0x84cd('0x5c')];})[_0x84cd('0x16')](function(){if(!_0x3ac7e2){return[];}return rta[_0x84cd('0x5d')](_0x3ac7e2,_0x1955de);})['then'](function(_0x4c0a9c){_0x96b025=_0x4c0a9c;return rta[_0x84cd('0x5e')]();})['then'](function(_0x19f88c){_0x64577c=_0x19f88c[_0x84cd('0x5f')];if((!_0x322b4f||_0x66c35d)&&!_0x6e924d){return _0x96b025;}if(_0x6e924d&&!_0x322b4f){return rta['getSortedAgentsIdsByStatus'](_0x64577c,_0x96b025,_0x6e924d);}else{return rta[_0x84cd('0x60')](_0x64577c,_0x96b025,_0x322b4f);}})[_0x84cd('0x16')](function(_0x11260d){_0x96b025=_0x11260d;var _0x3843dd=![];if(_0x96b025[_0x84cd('0x40')]===0x0){if(_0x3ac7e2||_0x322b4f){_0x3843dd=!![];}if(_0x66c35d){_0x3843dd=![];}}if(_0x3843dd){return _0x3fd48e;}var _0x70e83=_[_0x84cd('0x36')](db[_0x84cd('0x61')]['rawAttributes'],function(_0x3f34a5){return{'name':_0x3f34a5['fieldName'],'type':_0x3f34a5[_0x84cd('0x62')][_0x84cd('0x63')]};});_0x1e2e13[_0x84cd('0x4e')][_0x84cd('0x64')]=_0x84cd('0x65');_0x1e2e13[_0x84cd('0x4e')]['online']=!![];_0x8e7a2b=qs[_0x84cd('0x66')](_0x70e83,_0x1e2e13);_0x8e7a2b[_0x84cd('0x67')]=!![];var _0x3f738d=[];if(_0x96b025[_0x84cd('0x40')]>0x0){_0x3f738d[_0x84cd('0x22')]({'id':{'$in':_0x96b025}});if(_0x6e924d&&!_0x322b4f){_0x3bdc74=[db[_0x84cd('0x68')][_0x84cd('0x69')](_0x84cd('0x6a')+_0x96b025+')')];_0x8e7a2b[_0x84cd('0x5c')]=_0x3bdc74;}}if(_0x66c35d){_0x52c107['forEach'](function(_0x254832){var _0x8bcad6=!![];if(_0x322b4f===_0x84cd('0x53')&&_0x1955de!==_0x254832){_0x8bcad6=![];}_0x3f738d[_0x84cd('0x22')]({[_0x254832+_0x84cd('0x6b')]:_0x8bcad6});});if(_0x49211e){_0x3f738d['push']({'pauseType':_0x49211e});}}else if(_0x322b4f){_0x52c107[_0x84cd('0x6c')](function(_0x14e51d){_0x3f738d['push']({[_0x14e51d+_0x84cd('0x6b')]:![]});});}_0x8e7a2b[_0x84cd('0x6d')]=_['merge'](_0x8e7a2b['where'],{'$and':_0x3f738d});if(_0x1e2e13[_0x84cd('0x6e')]['role']===_0x84cd('0x6e')){var _0x83ad41={'params':{'id':_0x1e2e13[_0x84cd('0x6e')][_0x84cd('0x6f')]},'query':{'section':'Agents','role':'agent','online':!![],'raw':!![],'ids':_0x96b025,'customSorting':_0x3bdc74}};if(_0x66c35d){_0x83ad41[_0x84cd('0x4e')][_0x84cd('0x70')]=_0x3f738d;}_0x83ad41['query']=Object[_0x84cd('0x71')](_0x83ad41[_0x84cd('0x4e')],_0x1e2e13[_0x84cd('0x4e')]);delete _0x83ad41[_0x84cd('0x4e')]['id'];return db[_0x84cd('0x72')][_0x84cd('0x73')](_0x83ad41);}return db[_0x84cd('0x61')][_0x84cd('0x74')](_0x8e7a2b);})['then'](function(_0x35b6e7){_0x3fd48e[_0x84cd('0xb')]=_0x35b6e7[_0x84cd('0xb')];_0x2c1eb7=_0x35b6e7[_0x84cd('0x5f')];return _0x2c1eb7[_0x84cd('0x36')](function(_0x49d85a){var _0x58fbaa=_['find'](_0x64577c,['id',_0x49d85a['id']]);if(_0x58fbaa){var _0x5d38e2=rta[_0x84cd('0x75')](_0x58fbaa);_[_0x84cd('0x3c')](_0x49d85a,_0x5d38e2);}_0x49d85a[_0x84cd('0x58')]=rta[_0x84cd('0x76')](_0x49d85a);if(_0x49d85a[_0x84cd('0x58')][_0x84cd('0x57')]('pause')){_0x52c107[_0x84cd('0x6c')](function(_0x3d0117){if(_0x49d85a[_0x3d0117+_0x84cd('0x6b')]){_0x49d85a[_0x3d0117+_0x84cd('0x77')]='pause';}});}return _0x49d85a;});})[_0x84cd('0x16')](function(_0x595843){if(!_0x6e924d||_0x3bdc74){return _0x595843;}return rta[_0x84cd('0x78')](_0x595843,_0x6e924d);})[_0x84cd('0x16')](function(_0x3ab152){_0x3fd48e[_0x84cd('0x5f')]=_0x3ab152;return _0x3fd48e;})[_0x84cd('0x16')](respondWithFilteredResult(_0x42f8aa,_0x8e7a2b))[_0x84cd('0x1c')](handleError(_0x42f8aa,null));};exports[_0x84cd('0x79')]=function(_0x54b33a,_0x7e15bf){var _0x156f35={'count':0x0,'rows':[]},_0x393660={},_0x55bd4b,_0x27600f,_0xb3035d,_0x493c69,_0x52aa2a;Promise[_0x84cd('0x54')]()['then'](function(){if(_0x54b33a[_0x84cd('0x4e')]['channel'])_0x55bd4b=validateChannel(_0x54b33a['query']['channel']);var _0x168c5b=_[_0x84cd('0x15')](_0x55bd4b)+_0x84cd('0x7a');var _0x224637=_['map'](db[_0x168c5b][_0x84cd('0x7b')],function(_0x1833b0){return{'name':_0x1833b0[_0x84cd('0x7c')],'type':_0x1833b0[_0x84cd('0x62')][_0x84cd('0x63')]};});_0x393660=qs['getOptions'](_0x224637,_0x54b33a);if(_0x54b33a[_0x84cd('0x6e')]['role']===_0x84cd('0x6e')){var _0x1334b0={'params':{'id':_0x54b33a['user'][_0x84cd('0x6f')]},'query':{'section':_0x55bd4b===_0x84cd('0x13')&&_0x54b33a[_0x84cd('0x4e')]['type']===_0x84cd('0x21')?_0x84cd('0x7d'):_[_0x84cd('0x15')](_0x55bd4b)+_0x84cd('0x7e'),'type':_0x54b33a[_0x84cd('0x4e')][_0x84cd('0x62')],'nolimit':!![],'sort':_0x84cd('0x11'),'filter':_0x54b33a[_0x84cd('0x4e')]['filter']}};return db['UserProfile'][_0x84cd('0x73')](_0x1334b0);}return db[_0x168c5b]['findAndCountAll'](_0x393660);})[_0x84cd('0x16')](function(_0x788412){_0x156f35['count']=_0x788412[_0x84cd('0xb')];_0x27600f=_0x788412[_0x84cd('0x5f')];return getRealtimeQueues(_0x54b33a,_0x55bd4b);})[_0x84cd('0x16')](function(_0x40ed63){_0x493c69=_0x40ed63[_0x84cd('0x5f')];return rta[_0x84cd('0x5e')]();})[_0x84cd('0x16')](function(_0xe15fe8){_0xb3035d=_0xe15fe8[_0x84cd('0x5f')];if(_0x55bd4b!=_0x84cd('0x13'))return;return getRealtimeVoiceQueueChannels();})['then'](function(_0x3b9a8e){_0x52aa2a=_0x3b9a8e?_0x3b9a8e[_0x84cd('0x5f')]:[];return initializeQueues(_0x27600f,_0x493c69,_0x55bd4b,_0x54b33a[_0x84cd('0x4e')][_0x84cd('0x62')]);})[_0x84cd('0x16')](function(_0x34429e){var _0x1623df=_0x34429e['map'](function(_0x44315d){if(_0x55bd4b===_0x84cd('0x13'))return getVoiceQueueAgents(_0x44315d,_0x27600f,_0xb3035d,_0x52aa2a);else return getQueueAgents(_0x44315d,_0xb3035d,_0x55bd4b);});return Promise[_0x84cd('0x7f')](_0x1623df);})['then'](function(_0x3b38a1){_0x156f35[_0x84cd('0x5f')]=_0x3b38a1;return _0x156f35;})['then'](respondWithFilteredResult(_0x7e15bf,_0x393660))['catch'](handleError(_0x7e15bf,null));};