Built motion from commit 753c950e.|2.5.42
[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 _0x1261=['rawAttributes','fieldName','type','key','query','user','agent','nolimit','sort','UserProfile','getResources','findAndCountAll','rows','merge','omit','globalStatus','pauseTypeFilter','getQueues','chat','sms','openchannel','fax','whatsapp','channel','includes','toLowerCase','Invalid\x20channel','getOptions','role','userProfileId','QueueCampaigns','all','lodash','jayson/promise','../../components/parsers/qs','../../config/logger','api','../../mysqldb','client','http','undefined','limit','count','offset','set','json','error','stack','name','status','request','Agents','Unable\x20to\x20retrieve\x20RPC\x20agents\x20(AMI)','result','then','Unable\x20to\x20retrieve\x20RPC\x20agents\x20(Routing)','catch','startCase','Queues','format','Unable\x20to\x20retrieve\x20RPC\x20%s\x20queues','VoiceQueuesChannels','Unable\x20to\x20retrieve\x20voice\x20queues\x20channels','loggedIn','available','talking','paused','outbound','pTalking','message','dialMethod','erlangCalls','erlangCallToSecond','erlangAbandonmentRate','dialPredictiveInterval','dialPredictiveIntervalMaxThreshold','predictiveIntervalAvailable','predictiveIntervalTotalCalls','predictiveIntervalAnsweredCalls','predictiveIntervalDroppedCallsTimeout','predictiveIntervalAvgTalktime','map','agents','loggedInDb','voice','busy','find','pick','filter','queue','length','some','internal','toString','getMembers','UserId','accountcode','online','voiceStatus','User','Queue','Pause','findAll','idle','unavailable','ringing','chatPause','faxPause','mailPause','smsPause','voicePause','whatsappPause','every','chatStatus','faxStatus','openchannelStatus','smsStatus','whatsappStatus','unknown','getAgents','userpic','lastPauseAt','pauseType','address','openchannelPause','chatCapacity','openchannelCapacity','smsCapacity','whatsappCapacity','faxCapacity','openchannelCurrentCapacity','mailCurrentCapacity','smsCurrentCapacity','whatsappCurrentCapacity','faxCurrentCapacity','mailStatus','chatStatusTime','openchannelStatusTime','smsStatusTime','whatsappStatusTime','voiceStatusTime','destconnectedlinenum','screenrecording','phoneBarEnableAutomaticScreenRecording','routealias','resolve'];(function(_0x4370c7,_0x5dbfb0){var _0xce78a9=function(_0x157b2c){while(--_0x157b2c){_0x4370c7['push'](_0x4370c7['shift']());}};_0xce78a9(++_0x5dbfb0);}(_0x1261,0x144));var _0x1126=function(_0x12e3e3,_0x501eaf){_0x12e3e3=_0x12e3e3-0x0;var _0x26602e=_0x1261[_0x12e3e3];return _0x26602e;};'use strict';var util=require('util');var _=require(_0x1126('0x0'));var jayson=require(_0x1126('0x1'));var qs=require(_0x1126('0x2'));var logger=require(_0x1126('0x3'))(_0x1126('0x4'));var db=require(_0x1126('0x5'))['db'];var amiClient=jayson[_0x1126('0x6')][_0x1126('0x7')]({'port':0x232a});var routingClient=jayson[_0x1126('0x6')][_0x1126('0x7')]({'port':0x232c});function respondWithFilteredResult(_0x5a2189,_0x5c68c8){return function(_0x40ba58){if(_0x40ba58){var _0x907180=typeof _0x5c68c8['offset']===_0x1126('0x8')&&typeof _0x5c68c8[_0x1126('0x9')]===_0x1126('0x8');var _0x3abb0b=_0x40ba58[_0x1126('0xa')];var _0x59cfa1=_0x907180?0x0:_0x5c68c8[_0x1126('0xb')];var _0x18dbe6=_0x907180?_0x40ba58[_0x1126('0xa')]:_0x5c68c8['offset']+_0x5c68c8[_0x1126('0x9')];var _0x5d581b;if(_0x18dbe6>=_0x3abb0b){_0x18dbe6=_0x3abb0b;_0x5d581b=0xc8;}else{_0x5d581b=0xce;}_0x5a2189['status'](_0x5d581b);return _0x5a2189[_0x1126('0xc')]('Content-Range',_0x59cfa1+'-'+_0x18dbe6+'/'+_0x3abb0b)[_0x1126('0xd')](_0x40ba58);}return null;};}function handleError(_0x1b364a,_0xd26a32){_0xd26a32=_0xd26a32||0x1f4;return function(_0x273896){logger[_0x1126('0xe')](_0x273896[_0x1126('0xf')]);if(_0x273896[_0x1126('0x10')]){delete _0x273896[_0x1126('0x10')];}_0x1b364a[_0x1126('0x11')](_0xd26a32)['send'](_0x273896);};}function getRealtimeAgents(){return new Promise(function(_0x5de9a7,_0x1af673){return amiClient[_0x1126('0x12')](_0x1126('0x13'),{})['then'](function(_0x45149c){if(_0x45149c['error'])throw new Error(_0x1126('0x14'));var _0x42f379=_0x45149c[_0x1126('0x15')];return routingClient['request'](_0x1126('0x13'),{})[_0x1126('0x16')](function(_0x4a7b49){if(_0x4a7b49['error'])throw new Error(_0x1126('0x17'));var _0x2b2487=_0x4a7b49['result'];return _0x5de9a7(_['merge']({},_0x42f379,_0x2b2487));});})[_0x1126('0x18')](function(_0x58b109){_0x1af673(_0x58b109);});});}function getRealtimeQueues(_0x22ed37,_0x1d6d19){return new Promise(function(_0x2f70ac,_0x54400a){var _0x2a08ba=_0x1d6d19==='voice'?amiClient:routingClient;return _0x2a08ba['request'](_[_0x1126('0x19')](_0x1d6d19)+_0x1126('0x1a'),_0x22ed37)[_0x1126('0x16')](function(_0x36d254){if(_0x36d254['error'])throw new Error(util[_0x1126('0x1b')](_0x1126('0x1c'),_0x1d6d19));return _0x2f70ac(_0x36d254['result']);})[_0x1126('0x18')](function(_0x59cd8e){_0x54400a(_0x59cd8e);});});}function getRealtimeVoiceQueueChannels(){return new Promise(function(_0x529dd9,_0x4b57ab){return amiClient[_0x1126('0x12')](_0x1126('0x1d'),{})[_0x1126('0x16')](function(_0x34bcf1){if(_0x34bcf1[_0x1126('0xe')])throw new Error(_0x1126('0x1e'));return _0x529dd9(_0x34bcf1[_0x1126('0x15')]);})[_0x1126('0x18')](function(_0x589725){_0x4b57ab(_0x589725);});});}function initializeQueues(_0x35eec3,_0x375e59,_0xa293f4,_0x5ddf63){var _0x541bc9=[_0x1126('0x1f'),_0x1126('0x20'),'waiting',_0x1126('0x21'),_0x1126('0x22')];if(_0xa293f4==='voice'&&_0x5ddf63===_0x1126('0x23')){_0x541bc9['push'](_0x1126('0x24'),'originated',_0x1126('0x25'),'dialActive',_0x1126('0x26'),'Trunk','startPredictive','startProgressive',_0x1126('0x27'),_0x1126('0x28'),_0x1126('0x29'),'erlangBusyFactor',_0x1126('0x2a'),_0x1126('0x2b'),'dialPredictiveIntervalMinThreshold',_0x1126('0x2c'),_0x1126('0x2d'),_0x1126('0x2e'),_0x1126('0x2f'),'predictiveIntervalDroppedCallsCallersExit','predictiveIntervalAvgHoldtime',_0x1126('0x30'));}return _0x35eec3[_0x1126('0x31')](function(_0x2d9bd2){var _0x2c67eb=_0x2d9bd2['get']({'plain':!![]});_0x2c67eb[_0x1126('0x32')]=[];_0x2c67eb[_0x1126('0x22')]=0x0;_0x2c67eb[_0x1126('0x33')]=0x0;_0x2c67eb[_0x1126('0x1f')]=0x0;_0x2c67eb[_0x1126('0x20')]=0x0;_0x2c67eb['waiting']=0x0;if(_0xa293f4===_0x1126('0x34')){_0x2c67eb[_0x1126('0x21')]=0x0;_0x2c67eb[_0x1126('0x35')]=0x0;if(_0x5ddf63===_0x1126('0x23')){_0x2c67eb['pTalking']=0x0;_0x2c67eb['originated']=0x0;}}var _0x22827a=_[_0x1126('0x36')](_0x375e59,['id',_0x2c67eb['id']]);if(_0x22827a)_['merge'](_0x2c67eb,_[_0x1126('0x37')](_0x22827a,_0x541bc9));return _0x2c67eb;});}function updateAgentVoiceStatus(_0xf3c21b,_0x11b0f6,_0x5c08b9){var _0x4b3859=_[_0x1126('0x38')](_0x5c08b9,[_0x1126('0x39'),_0x11b0f6[_0x1126('0x10')]]);if(_0x4b3859[_0x1126('0x3a')]===0x0)return _0xf3c21b['busy']=!![];if(_[_0x1126('0x3b')](_0x4b3859,['connectedlinenum',_0xf3c21b[_0x1126('0x3c')][_0x1126('0x3d')]()]))return _0xf3c21b[_0x1126('0x21')]=!![];if(!_0xf3c21b[_0x1126('0x21')])return _0xf3c21b[_0x1126('0x35')]=!![];}function getVoiceQueueAgents(_0x5746f6,_0x1da59f,_0x3ea9de,_0x2939a9){var _0x397e3b=_[_0x1126('0x36')](_0x1da59f,['id',_0x5746f6['id']]);if(!_0x397e3b)return _0x5746f6;return _0x397e3b[_0x1126('0x3e')]({'raw':!![]})[_0x1126('0x16')](function(_0x4faaa3){for(var _0x1c8d8a=0x0;_0x1c8d8a<_0x4faaa3[_0x1126('0x3a')];_0x1c8d8a++){var _0x227a6b=_[_0x1126('0x36')](_0x3ea9de,['id',_0x4faaa3[_0x1c8d8a][_0x1126('0x3f')]]);if(!_0x227a6b){_0x227a6b={'id':_0x4faaa3[_0x1c8d8a]['UserId'],'name':_0x4faaa3[_0x1c8d8a]['UserId'],'accountcode':'','online':![]};}var _0x1c4f06={'id':_0x227a6b['id'],'name':_0x227a6b[_0x1126('0x10')],'internal':_0x227a6b[_0x1126('0x40')],'online':Boolean(_0x227a6b[_0x1126('0x41')]),'paused':Boolean(_0x4faaa3[_0x1c8d8a][_0x1126('0x22')])};if(_0x227a6b[_0x1126('0x42')]==='talking')updateAgentVoiceStatus(_0x1c4f06,_0x5746f6,_0x2939a9);if(_0x1c4f06['online'])_0x5746f6['loggedInDb']++;if(_0x1c4f06[_0x1126('0x35')])_0x5746f6['busy']++;if(_0x1c4f06[_0x1126('0x22')]&&!_0x1c4f06[_0x1126('0x35')]&&!_0x1c4f06[_0x1126('0x21')])_0x5746f6[_0x1126('0x22')]++;_0x5746f6['agents']['push'](_0x1c4f06);}return _0x5746f6;});}function getQueueAgents(_0x353042,_0xa93167,_0x1d63b9){var _0x5f5d3a=_0x1126('0x43')+_['startCase'](_0x1d63b9)+_0x1126('0x44');var _0x51a5be=_0x1d63b9+_0x1126('0x45');return db[_0x5f5d3a][_0x1126('0x46')]({'where':{[_[_0x1126('0x19')](_0x1d63b9)+'QueueId']:_0x353042['id']},'raw':!![]})[_0x1126('0x16')](function(_0x2ffccc){for(var _0xf8ec5f=0x0;_0xf8ec5f<_0x2ffccc['length'];_0xf8ec5f++){var _0x58ff3a=_['find'](_0xa93167,['id',_0x2ffccc[_0xf8ec5f][_0x1126('0x3f')]]);if(!_0x58ff3a){_0x58ff3a={'id':_0x2ffccc[_0xf8ec5f]['UserId'],'name':_0x2ffccc[_0xf8ec5f][_0x1126('0x3f')],'online':![],['pauseField']:![]};}var _0x507568={'id':_0x58ff3a['id'],'name':_0x58ff3a[_0x1126('0x10')],'online':Boolean(_0x58ff3a[_0x1126('0x41')]),'paused':Boolean(_0x58ff3a[_0x51a5be])};if(_0x507568[_0x1126('0x41')])_0x353042[_0x1126('0x33')]++;_0x353042[_0x1126('0x32')]['push'](_0x507568);}return _0x353042;});}function isIdle(_0x198173){return _0x198173===_0x1126('0x47')||_0x198173==='unknown'||_0x198173===_0x1126('0x48')||_0x198173===_0x1126('0x49')||_['isNil'](_0x198173);}function isAgentPaused(_0x5f6d73,_0x1ffa2b){var _0x518e0a=[_0x5f6d73[_0x1126('0x4a')],_0x5f6d73[_0x1126('0x4b')],_0x5f6d73[_0x1126('0x4c')],_0x5f6d73['openchannelPause'],_0x5f6d73[_0x1126('0x4d')],_0x5f6d73[_0x1126('0x4e')],_0x5f6d73[_0x1126('0x4f')]];if(!_0x1ffa2b)return _[_0x1126('0x50')](_0x518e0a);var _0x224456=_[_0x1126('0x38')](_0x518e0a);return _0x224456[_0x1126('0x3a')]>0x0&&_0x224456[_0x1126('0x3a')]<_0x518e0a['length']?!![]:![];}function isAgentIdle(_0x1b8b83){if(_0x1b8b83['voiceStatus']!==_0x1126('0x47')&&_0x1b8b83[_0x1126('0x4e')]){_0x1b8b83['voiceStatus']='pause';return![];}return _[_0x1126('0x50')]([_0x1b8b83[_0x1126('0x51')],_0x1b8b83[_0x1126('0x52')],_0x1b8b83['mailStatus'],_0x1b8b83[_0x1126('0x53')],_0x1b8b83[_0x1126('0x54')],_0x1b8b83[_0x1126('0x42')],_0x1b8b83[_0x1126('0x55')]],isIdle);}function getAgentStatus(_0x533e25){var _0x30d1b3=_0x1126('0x56');if(isAgentPaused(_0x533e25))_0x30d1b3='pause';else if(isAgentPaused(_0x533e25,!![]))_0x30d1b3='*pause';else if(isAgentIdle(_0x533e25))_0x30d1b3='idle';else _0x30d1b3='busy';return _0x30d1b3;}exports[_0x1126('0x57')]=function(_0x3bf090,_0x4dc8cd){var _0x16552b={'count':0x0,'rows':[]},_0x1c7a2b={},_0x38093e,_0x38f521,_0x29bc7d=[_0x1126('0x58'),_0x1126('0x41'),'lastLoginAt',_0x1126('0x59'),_0x1126('0x5a'),_0x1126('0x59'),_0x1126('0x3c'),_0x1126('0x5b'),'chatPause',_0x1126('0x5c'),'mailPause',_0x1126('0x4d'),_0x1126('0x4f'),_0x1126('0x4b'),'voicePause',_0x1126('0x5d'),_0x1126('0x5e'),'mailCapacity',_0x1126('0x5f'),_0x1126('0x60'),_0x1126('0x61'),'chatCurrentCapacity',_0x1126('0x62'),_0x1126('0x63'),_0x1126('0x64'),_0x1126('0x65'),_0x1126('0x66'),_0x1126('0x51'),_0x1126('0x53'),_0x1126('0x67'),'smsStatus',_0x1126('0x55'),_0x1126('0x52'),_0x1126('0x42'),_0x1126('0x68'),_0x1126('0x69'),'mailStatusTime',_0x1126('0x6a'),_0x1126('0x6b'),'faxStatusTime',_0x1126('0x6c'),'queue',_0x1126('0x6d'),_0x1126('0x6e'),'phoneBarEnableScreenRecordingByAgent',_0x1126('0x6f'),_0x1126('0x70')],_0x4e4d49=[_0x1126('0x4a'),'openchannelPause',_0x1126('0x4c'),'smsPause','whatsappPause',_0x1126('0x4b'),_0x1126('0x4e'),_0x1126('0x41')];Promise[_0x1126('0x71')]()[_0x1126('0x16')](function(){var _0x1b4ebf=_[_0x1126('0x31')](db['User'][_0x1126('0x72')],function(_0x43ec00){return{'name':_0x43ec00[_0x1126('0x73')],'type':_0x43ec00[_0x1126('0x74')][_0x1126('0x75')]};});_0x3bf090[_0x1126('0x76')]['role']='agent';_0x3bf090[_0x1126('0x76')][_0x1126('0x41')]=!![];_0x1c7a2b=qs['getOptions'](_0x1b4ebf,_0x3bf090);_0x1c7a2b['raw']=!![];if(_0x3bf090['user']['role']===_0x1126('0x77')){var _0x37b1ab={'params':{'id':_0x3bf090[_0x1126('0x77')]['userProfileId']},'query':{'section':_0x1126('0x13'),'role':_0x1126('0x78'),'online':!![],'nolimit':_0x3bf090[_0x1126('0x76')][_0x1126('0x79')],'sort':_0x3bf090[_0x1126('0x76')][_0x1126('0x7a')],'filter':_0x3bf090[_0x1126('0x76')]['filter'],'raw':!![]}};return db[_0x1126('0x7b')][_0x1126('0x7c')](_0x37b1ab);}return db[_0x1126('0x43')][_0x1126('0x7d')](_0x1c7a2b);})[_0x1126('0x16')](function(_0x56c003){_0x16552b['count']=_0x56c003[_0x1126('0xa')];_0x38093e=_0x56c003[_0x1126('0x7e')];return getRealtimeAgents();})['then'](function(_0x3bf25d){_0x38f521=_0x3bf25d[_0x1126('0x7e')];return _0x38093e[_0x1126('0x31')](function(_0x6a41c0){var _0x2828d4=_[_0x1126('0x36')](_0x38f521,['id',_0x6a41c0['id']]);if(_0x2828d4)_[_0x1126('0x7f')](_0x6a41c0,_[_0x1126('0x37')](_[_0x1126('0x80')](_0x2828d4,_0x4e4d49),_0x29bc7d));_0x6a41c0[_0x1126('0x81')]=getAgentStatus(_0x6a41c0);return _0x6a41c0;});})[_0x1126('0x16')](function(_0x1228cf){if(_0x3bf090[_0x1126('0x76')]['globalStatusFilter']){var _0x111f49=_[_0x1126('0x38')](_0x1228cf,[_0x1126('0x81'),_0x3bf090['query']['globalStatusFilter']]);if(_0x3bf090[_0x1126('0x76')][_0x1126('0x82')]){_0x111f49=_[_0x1126('0x38')](_0x111f49,[_0x1126('0x5a'),_0x3bf090['query']['pauseTypeFilter']]);}}_0x16552b['rows']=_0x111f49||_0x1228cf;return _0x16552b;})[_0x1126('0x16')](respondWithFilteredResult(_0x4dc8cd,_0x1c7a2b))[_0x1126('0x18')](handleError(_0x4dc8cd,null));};exports[_0x1126('0x83')]=function(_0xdedb8f,_0x54a72e){var _0x1870ed=['mail',_0x1126('0x84'),_0x1126('0x85'),_0x1126('0x86'),_0x1126('0x87'),_0x1126('0x88'),_0x1126('0x34')];var _0x9a61b1={'count':0x0,'rows':[]},_0x5f5a36={},_0xfd2d9,_0x57ece2,_0x3c1dda,_0x906531,_0x4dd275;Promise[_0x1126('0x71')]()[_0x1126('0x16')](function(){if(_0xdedb8f['query'][_0x1126('0x89')]){if(!_[_0x1126('0x8a')](_0x1870ed,_0xdedb8f['query']['channel'][_0x1126('0x8b')]()))throw new Error(_0x1126('0x8c'));_0xfd2d9=_0xdedb8f[_0x1126('0x76')]['channel']['toLowerCase']();}var _0x4b0fab=_[_0x1126('0x19')](_0xfd2d9)+'Queue';var _0x4cfbed=_[_0x1126('0x31')](db[_0x4b0fab]['rawAttributes'],function(_0x1f320e){return{'name':_0x1f320e[_0x1126('0x73')],'type':_0x1f320e['type'][_0x1126('0x75')]};});_0x5f5a36=qs[_0x1126('0x8d')](_0x4cfbed,_0xdedb8f);if(_0xdedb8f[_0x1126('0x77')][_0x1126('0x8e')]===_0x1126('0x77')){var _0x5e9872={'params':{'id':_0xdedb8f[_0x1126('0x77')][_0x1126('0x8f')]},'query':{'section':_0xfd2d9==='voice'&&_0xdedb8f[_0x1126('0x76')][_0x1126('0x74')]===_0x1126('0x23')?_0x1126('0x90'):_[_0x1126('0x19')](_0xfd2d9)+_0x1126('0x1a'),'type':_0xdedb8f[_0x1126('0x76')][_0x1126('0x74')],'nolimit':!![],'sort':_0x1126('0x10'),'filter':_0xdedb8f[_0x1126('0x76')][_0x1126('0x38')]}};return db[_0x1126('0x7b')][_0x1126('0x7c')](_0x5e9872);}return db[_0x4b0fab][_0x1126('0x7d')](_0x5f5a36);})[_0x1126('0x16')](function(_0x171210){_0x9a61b1['count']=_0x171210[_0x1126('0xa')];_0x57ece2=_0x171210[_0x1126('0x7e')];return getRealtimeQueues(_0xdedb8f,_0xfd2d9);})[_0x1126('0x16')](function(_0x1483f4){_0x906531=_0x1483f4[_0x1126('0x7e')];return getRealtimeAgents();})['then'](function(_0xd11e1f){_0x3c1dda=_0xd11e1f['rows'];if(_0xfd2d9!='voice')return;return getRealtimeVoiceQueueChannels();})[_0x1126('0x16')](function(_0x2b1884){_0x4dd275=_0x2b1884?_0x2b1884['rows']:[];return initializeQueues(_0x57ece2,_0x906531,_0xfd2d9,_0xdedb8f['query'][_0x1126('0x74')]);})[_0x1126('0x16')](function(_0x228552){var _0x1ee970=_0x228552[_0x1126('0x31')](function(_0x37c7ee){if(_0xfd2d9===_0x1126('0x34'))return getVoiceQueueAgents(_0x37c7ee,_0x57ece2,_0x3c1dda,_0x4dd275);else return getQueueAgents(_0x37c7ee,_0x3c1dda,_0xfd2d9);});return Promise[_0x1126('0x91')](_0x1ee970);})[_0x1126('0x16')](function(_0x5644ea){_0x9a61b1[_0x1126('0x7e')]=_0x5644ea;return _0x9a61b1;})[_0x1126('0x16')](respondWithFilteredResult(_0x54a72e,_0x5f5a36))[_0x1126('0x18')](handleError(_0x54a72e,null));};