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 _0x9536=['talking','busy','pick','filter','queue','length','some','connectedlinenum','internal','toString','find','UserId','accountcode','online','voiceStatus','agents','push','Pause','findAll','loggedInDb','idle','unknown','unavailable','isNil','chatPause','faxPause','mailPause','openchannelPause','smsPause','voicePause','whatsappPause','every','pause','chatStatus','faxStatus','whatsappStatus','*pause','userpic','lastPauseAt','pauseType','chatCapacity','smsCapacity','whatsappCapacity','faxCapacity','mailCurrentCapacity','smsCurrentCapacity','faxCurrentCapacity','mailStatus','smsStatus','openchannelStatusTime','mailStatusTime','smsStatusTime','voiceStatusTime','destconnectedlinenum','screenrecording','phoneBarEnableScreenRecordingByAgent','routealias','resolve','rawAttributes','fieldName','type','key','agent','getOptions','raw','user','userProfileId','query','nolimit','sort','UserProfile','getResources','User','rows','globalStatusFilter','globalStatus','pauseTypeFilter','mail','sms','openchannel','fax','whatsapp','channel','includes','toLowerCase','Queue','role','QueueCampaigns','Queues','findAndCountAll','all','util','lodash','jayson/promise','../../components/parsers/qs','api','client','http','offset','undefined','limit','count','status','set','Content-Range','json','error','stack','name','send','request','Agents','then','Unable\x20to\x20retrieve\x20RPC\x20agents\x20(AMI)','result','Unable\x20to\x20retrieve\x20RPC\x20agents\x20(Routing)','merge','catch','startCase','format','VoiceQueuesChannels','loggedIn','waiting','paused','voice','outbound','pTalking','originated','message','dialMethod','Trunk','erlangCalls','erlangCallToSecond','erlangAbandonmentRate','erlangBusyFactor','dialPredictiveInterval','dialPredictiveIntervalMinThreshold','predictiveIntervalTotalCalls','predictiveIntervalAnsweredCalls','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','map','available'];(function(_0x31b47a,_0x217713){var _0x2b3a23=function(_0x25a3ea){while(--_0x25a3ea){_0x31b47a['push'](_0x31b47a['shift']());}};_0x2b3a23(++_0x217713);}(_0x9536,0x179));var _0x6953=function(_0x4d82ea,_0x4d459f){_0x4d82ea=_0x4d82ea-0x0;var _0x257f4a=_0x9536[_0x4d82ea];return _0x257f4a;};'use strict';var util=require(_0x6953('0x0'));var _=require(_0x6953('0x1'));var jayson=require(_0x6953('0x2'));var qs=require(_0x6953('0x3'));var logger=require('../../config/logger')(_0x6953('0x4'));var db=require('../../mysqldb')['db'];var amiClient=jayson[_0x6953('0x5')][_0x6953('0x6')]({'port':0x232a});var routingClient=jayson[_0x6953('0x5')][_0x6953('0x6')]({'port':0x232c});function respondWithFilteredResult(_0x2f3cc3,_0x494ac2){return function(_0x2b273e){if(_0x2b273e){var _0x2bb026=typeof _0x494ac2[_0x6953('0x7')]===_0x6953('0x8')&&typeof _0x494ac2[_0x6953('0x9')]==='undefined';var _0x3e8786=_0x2b273e[_0x6953('0xa')];var _0x449acb=_0x2bb026?0x0:_0x494ac2['offset'];var _0x41f41b=_0x2bb026?_0x2b273e[_0x6953('0xa')]:_0x494ac2[_0x6953('0x7')]+_0x494ac2[_0x6953('0x9')];var _0x448c89;if(_0x41f41b>=_0x3e8786){_0x41f41b=_0x3e8786;_0x448c89=0xc8;}else{_0x448c89=0xce;}_0x2f3cc3[_0x6953('0xb')](_0x448c89);return _0x2f3cc3[_0x6953('0xc')](_0x6953('0xd'),_0x449acb+'-'+_0x41f41b+'/'+_0x3e8786)[_0x6953('0xe')](_0x2b273e);}return null;};}function handleError(_0x57652e,_0x358388){_0x358388=_0x358388||0x1f4;return function(_0x513dd0){logger[_0x6953('0xf')](_0x513dd0[_0x6953('0x10')]);if(_0x513dd0[_0x6953('0x11')]){delete _0x513dd0[_0x6953('0x11')];}_0x57652e[_0x6953('0xb')](_0x358388)[_0x6953('0x12')](_0x513dd0);};}function getRealtimeAgents(){return new Promise(function(_0x175fa9,_0x27a57c){return amiClient[_0x6953('0x13')](_0x6953('0x14'),{})[_0x6953('0x15')](function(_0x548473){if(_0x548473['error'])throw new Error(_0x6953('0x16'));var _0x44e8a2=_0x548473[_0x6953('0x17')];return routingClient[_0x6953('0x13')]('Agents',{})[_0x6953('0x15')](function(_0x2da771){if(_0x2da771['error'])throw new Error(_0x6953('0x18'));var _0x3207dd=_0x2da771[_0x6953('0x17')];return _0x175fa9(_[_0x6953('0x19')]({},_0x44e8a2,_0x3207dd));});})[_0x6953('0x1a')](function(_0x4a450c){_0x27a57c(_0x4a450c);});});}function getRealtimeQueues(_0x3a93e1,_0x1b7123){return new Promise(function(_0x31d5fd,_0x2ba433){var _0x41f021=_0x1b7123==='voice'?amiClient:routingClient;return _0x41f021[_0x6953('0x13')](_[_0x6953('0x1b')](_0x1b7123)+'Queues',_0x3a93e1)[_0x6953('0x15')](function(_0x40c9d1){if(_0x40c9d1[_0x6953('0xf')])throw new Error(util[_0x6953('0x1c')]('Unable\x20to\x20retrieve\x20RPC\x20%s\x20queues',_0x1b7123));return _0x31d5fd(_0x40c9d1[_0x6953('0x17')]);})[_0x6953('0x1a')](function(_0x2a7f6a){_0x2ba433(_0x2a7f6a);});});}function getRealtimeVoiceQueueChannels(){return new Promise(function(_0x508ea7,_0x495ebd){return amiClient['request'](_0x6953('0x1d'),{})[_0x6953('0x15')](function(_0x550be4){if(_0x550be4[_0x6953('0xf')])throw new Error('Unable\x20to\x20retrieve\x20voice\x20queues\x20channels');return _0x508ea7(_0x550be4[_0x6953('0x17')]);})[_0x6953('0x1a')](function(_0xcdbce8){_0x495ebd(_0xcdbce8);});});}function initializeQueues(_0x2cc01e,_0x191d80,_0x1497e3,_0x53d3dc){var _0x3dd890=[_0x6953('0x1e'),'available',_0x6953('0x1f'),'talking',_0x6953('0x20')];if(_0x1497e3===_0x6953('0x21')&&_0x53d3dc===_0x6953('0x22')){_0x3dd890['push'](_0x6953('0x23'),_0x6953('0x24'),_0x6953('0x25'),'dialActive',_0x6953('0x26'),_0x6953('0x27'),'startPredictive','startProgressive',_0x6953('0x28'),_0x6953('0x29'),_0x6953('0x2a'),_0x6953('0x2b'),_0x6953('0x2c'),'dialPredictiveIntervalMaxThreshold',_0x6953('0x2d'),'predictiveIntervalAvailable',_0x6953('0x2e'),_0x6953('0x2f'),'predictiveIntervalDroppedCallsTimeout','predictiveIntervalDroppedCallsCallersExit',_0x6953('0x30'),_0x6953('0x31'));}return _0x2cc01e[_0x6953('0x32')](function(_0x4ffa69){var _0x28cb92=_0x4ffa69['get']({'plain':!![]});_0x28cb92['agents']=[];_0x28cb92['paused']=0x0;_0x28cb92['loggedInDb']=0x0;_0x28cb92[_0x6953('0x1e')]=0x0;_0x28cb92[_0x6953('0x33')]=0x0;_0x28cb92[_0x6953('0x1f')]=0x0;if(_0x1497e3===_0x6953('0x21')){_0x28cb92[_0x6953('0x34')]=0x0;_0x28cb92[_0x6953('0x35')]=0x0;if(_0x53d3dc==='outbound'){_0x28cb92[_0x6953('0x23')]=0x0;_0x28cb92['originated']=0x0;}}var _0x199c67=_['find'](_0x191d80,['id',_0x28cb92['id']]);if(_0x199c67)_[_0x6953('0x19')](_0x28cb92,_[_0x6953('0x36')](_0x199c67,_0x3dd890));return _0x28cb92;});}function updateAgentVoiceStatus(_0xd81149,_0x248fe7,_0x562792){var _0x13c677=_[_0x6953('0x37')](_0x562792,[_0x6953('0x38'),_0x248fe7[_0x6953('0x11')]]);if(_0x13c677[_0x6953('0x39')]===0x0)return _0xd81149[_0x6953('0x35')]=!![];if(_[_0x6953('0x3a')](_0x13c677,[_0x6953('0x3b'),_0xd81149[_0x6953('0x3c')][_0x6953('0x3d')]()]))return _0xd81149[_0x6953('0x34')]=!![];if(!_0xd81149['talking'])return _0xd81149[_0x6953('0x35')]=!![];}function getVoiceQueueAgents(_0x3c03ab,_0x1f6571,_0x5dff18,_0x47e7e7){var _0x44faff=_['find'](_0x1f6571,['id',_0x3c03ab['id']]);if(!_0x44faff)return _0x3c03ab;return _0x44faff['getMembers']({'raw':!![]})[_0x6953('0x15')](function(_0x7e7b68){for(var _0x4b5e1c=0x0;_0x4b5e1c<_0x7e7b68[_0x6953('0x39')];_0x4b5e1c++){var _0x263728=_[_0x6953('0x3e')](_0x5dff18,['id',_0x7e7b68[_0x4b5e1c][_0x6953('0x3f')]]);if(!_0x263728){_0x263728={'id':_0x7e7b68[_0x4b5e1c][_0x6953('0x3f')],'name':_0x7e7b68[_0x4b5e1c][_0x6953('0x3f')],'accountcode':'','online':![]};}var _0x51137b={'id':_0x263728['id'],'name':_0x263728[_0x6953('0x11')],'internal':_0x263728[_0x6953('0x40')],'online':Boolean(_0x263728[_0x6953('0x41')]),'paused':Boolean(_0x7e7b68[_0x4b5e1c][_0x6953('0x20')])};if(_0x263728[_0x6953('0x42')]===_0x6953('0x34'))updateAgentVoiceStatus(_0x51137b,_0x3c03ab,_0x47e7e7);if(_0x51137b['online'])_0x3c03ab['loggedInDb']++;if(_0x51137b[_0x6953('0x35')])_0x3c03ab['busy']++;if(_0x51137b['paused']&&!_0x51137b[_0x6953('0x35')]&&!_0x51137b[_0x6953('0x34')])_0x3c03ab[_0x6953('0x20')]++;_0x3c03ab[_0x6953('0x43')][_0x6953('0x44')](_0x51137b);}return _0x3c03ab;});}function getQueueAgents(_0x5ac8f7,_0x4d43fd,_0x1de4e4){var _0x452b69='User'+_[_0x6953('0x1b')](_0x1de4e4)+'Queue';var _0x166b13=_0x1de4e4+_0x6953('0x45');return db[_0x452b69][_0x6953('0x46')]({'where':{[_[_0x6953('0x1b')](_0x1de4e4)+'QueueId']:_0x5ac8f7['id']},'raw':!![]})[_0x6953('0x15')](function(_0x424621){for(var _0x4d3868=0x0;_0x4d3868<_0x424621[_0x6953('0x39')];_0x4d3868++){var _0x296d81=_[_0x6953('0x3e')](_0x4d43fd,['id',_0x424621[_0x4d3868][_0x6953('0x3f')]]);if(!_0x296d81){_0x296d81={'id':_0x424621[_0x4d3868][_0x6953('0x3f')],'name':_0x424621[_0x4d3868][_0x6953('0x3f')],'online':![],['pauseField']:![]};}var _0x13d1a6={'id':_0x296d81['id'],'name':_0x296d81[_0x6953('0x11')],'online':Boolean(_0x296d81[_0x6953('0x41')]),'paused':Boolean(_0x296d81[_0x166b13])};if(_0x13d1a6[_0x6953('0x41')])_0x5ac8f7[_0x6953('0x47')]++;_0x5ac8f7['agents'][_0x6953('0x44')](_0x13d1a6);}return _0x5ac8f7;});}function isIdle(_0x4c9d36){return _0x4c9d36===_0x6953('0x48')||_0x4c9d36===_0x6953('0x49')||_0x4c9d36===_0x6953('0x4a')||_0x4c9d36==='ringing'||_[_0x6953('0x4b')](_0x4c9d36);}function isAgentPaused(_0x2a4e54,_0x506561){var _0x525145=[_0x2a4e54[_0x6953('0x4c')],_0x2a4e54[_0x6953('0x4d')],_0x2a4e54[_0x6953('0x4e')],_0x2a4e54[_0x6953('0x4f')],_0x2a4e54[_0x6953('0x50')],_0x2a4e54[_0x6953('0x51')],_0x2a4e54[_0x6953('0x52')]];if(!_0x506561)return _[_0x6953('0x53')](_0x525145);var _0x2baf90=_[_0x6953('0x37')](_0x525145);return _0x2baf90[_0x6953('0x39')]>0x0&&_0x2baf90['length']<_0x525145['length']?!![]:![];}function isAgentIdle(_0x14a7bf){if(_0x14a7bf[_0x6953('0x42')]!==_0x6953('0x48')&&_0x14a7bf[_0x6953('0x51')]){_0x14a7bf[_0x6953('0x42')]=_0x6953('0x54');return![];}return _[_0x6953('0x53')]([_0x14a7bf[_0x6953('0x55')],_0x14a7bf[_0x6953('0x56')],_0x14a7bf['mailStatus'],_0x14a7bf['openchannelStatus'],_0x14a7bf['smsStatus'],_0x14a7bf['voiceStatus'],_0x14a7bf[_0x6953('0x57')]],isIdle);}function getAgentStatus(_0x20ceda){var _0x51372b='unknown';if(isAgentPaused(_0x20ceda))_0x51372b='pause';else if(isAgentPaused(_0x20ceda,!![]))_0x51372b=_0x6953('0x58');else if(isAgentIdle(_0x20ceda))_0x51372b=_0x6953('0x48');else _0x51372b=_0x6953('0x35');return _0x51372b;}exports['getAgents']=function(_0x5b696e,_0x400486){var _0x40033a={'count':0x0,'rows':[]},_0x53e631={},_0x58fcb3,_0x29937b,_0xafbd35=[_0x6953('0x59'),_0x6953('0x41'),'lastLoginAt',_0x6953('0x5a'),_0x6953('0x5b'),'lastPauseAt',_0x6953('0x3c'),'address',_0x6953('0x4c'),_0x6953('0x4f'),_0x6953('0x4e'),_0x6953('0x50'),'whatsappPause',_0x6953('0x4d'),_0x6953('0x51'),_0x6953('0x5c'),'openchannelCapacity','mailCapacity',_0x6953('0x5d'),_0x6953('0x5e'),_0x6953('0x5f'),'chatCurrentCapacity','openchannelCurrentCapacity',_0x6953('0x60'),_0x6953('0x61'),'whatsappCurrentCapacity',_0x6953('0x62'),_0x6953('0x55'),'openchannelStatus',_0x6953('0x63'),_0x6953('0x64'),_0x6953('0x57'),_0x6953('0x56'),_0x6953('0x42'),'chatStatusTime',_0x6953('0x65'),_0x6953('0x66'),_0x6953('0x67'),'whatsappStatusTime','faxStatusTime',_0x6953('0x68'),_0x6953('0x38'),_0x6953('0x69'),_0x6953('0x6a'),_0x6953('0x6b'),'phoneBarEnableAutomaticScreenRecording',_0x6953('0x6c')],_0x414096=[_0x6953('0x4c'),_0x6953('0x4f'),_0x6953('0x4e'),_0x6953('0x50'),_0x6953('0x52'),_0x6953('0x4d'),_0x6953('0x51'),_0x6953('0x41')];Promise[_0x6953('0x6d')]()[_0x6953('0x15')](function(){var _0x390ba0=_[_0x6953('0x32')](db['User'][_0x6953('0x6e')],function(_0x1d264a){return{'name':_0x1d264a[_0x6953('0x6f')],'type':_0x1d264a[_0x6953('0x70')][_0x6953('0x71')]};});_0x5b696e['query']['role']=_0x6953('0x72');_0x5b696e['query'][_0x6953('0x41')]=!![];_0x53e631=qs[_0x6953('0x73')](_0x390ba0,_0x5b696e);_0x53e631[_0x6953('0x74')]=!![];if(_0x5b696e[_0x6953('0x75')]['role']===_0x6953('0x75')){var _0x3091fc={'params':{'id':_0x5b696e[_0x6953('0x75')][_0x6953('0x76')]},'query':{'section':_0x6953('0x14'),'role':_0x6953('0x72'),'online':!![],'nolimit':_0x5b696e[_0x6953('0x77')][_0x6953('0x78')],'sort':_0x5b696e[_0x6953('0x77')][_0x6953('0x79')],'filter':_0x5b696e[_0x6953('0x77')][_0x6953('0x37')],'raw':!![]}};return db[_0x6953('0x7a')][_0x6953('0x7b')](_0x3091fc);}return db[_0x6953('0x7c')]['findAndCountAll'](_0x53e631);})[_0x6953('0x15')](function(_0x3624fc){_0x40033a[_0x6953('0xa')]=_0x3624fc[_0x6953('0xa')];_0x58fcb3=_0x3624fc[_0x6953('0x7d')];return getRealtimeAgents();})[_0x6953('0x15')](function(_0x3e19f1){_0x29937b=_0x3e19f1['rows'];return _0x58fcb3[_0x6953('0x32')](function(_0x403d81){var _0x4eba55=_[_0x6953('0x3e')](_0x29937b,['id',_0x403d81['id']]);if(_0x4eba55)_[_0x6953('0x19')](_0x403d81,_[_0x6953('0x36')](_['omit'](_0x4eba55,_0x414096),_0xafbd35));_0x403d81['globalStatus']=getAgentStatus(_0x403d81);return _0x403d81;});})[_0x6953('0x15')](function(_0x12987e){if(_0x5b696e[_0x6953('0x77')][_0x6953('0x7e')]){var _0x1ad883=_[_0x6953('0x37')](_0x12987e,[_0x6953('0x7f'),_0x5b696e[_0x6953('0x77')][_0x6953('0x7e')]]);if(_0x5b696e['query'][_0x6953('0x80')]){_0x1ad883=_[_0x6953('0x37')](_0x1ad883,[_0x6953('0x5b'),_0x5b696e[_0x6953('0x77')]['pauseTypeFilter']]);}}_0x40033a[_0x6953('0x7d')]=_0x1ad883||_0x12987e;return _0x40033a;})[_0x6953('0x15')](respondWithFilteredResult(_0x400486,_0x53e631))[_0x6953('0x1a')](handleError(_0x400486,null));};exports['getQueues']=function(_0x16898a,_0x12285e){var _0x208038=[_0x6953('0x81'),'chat',_0x6953('0x82'),_0x6953('0x83'),_0x6953('0x84'),_0x6953('0x85'),'voice'];var _0x4eaebb={'count':0x0,'rows':[]},_0x513495={},_0x2310b2,_0x5c9f02,_0x5a7607,_0x3ebd20,_0x147cd4;Promise[_0x6953('0x6d')]()[_0x6953('0x15')](function(){if(_0x16898a['query'][_0x6953('0x86')]){if(!_[_0x6953('0x87')](_0x208038,_0x16898a['query'][_0x6953('0x86')][_0x6953('0x88')]()))throw new Error('Invalid\x20channel');_0x2310b2=_0x16898a['query']['channel'][_0x6953('0x88')]();}var _0x1cdee0=_[_0x6953('0x1b')](_0x2310b2)+_0x6953('0x89');var _0x1efbb9=_[_0x6953('0x32')](db[_0x1cdee0][_0x6953('0x6e')],function(_0x24b888){return{'name':_0x24b888['fieldName'],'type':_0x24b888[_0x6953('0x70')][_0x6953('0x71')]};});_0x513495=qs[_0x6953('0x73')](_0x1efbb9,_0x16898a);if(_0x16898a[_0x6953('0x75')][_0x6953('0x8a')]===_0x6953('0x75')){var _0x481102={'params':{'id':_0x16898a[_0x6953('0x75')]['userProfileId']},'query':{'section':_0x2310b2===_0x6953('0x21')&&_0x16898a['query'][_0x6953('0x70')]===_0x6953('0x22')?_0x6953('0x8b'):_['startCase'](_0x2310b2)+_0x6953('0x8c'),'type':_0x16898a[_0x6953('0x77')][_0x6953('0x70')],'nolimit':!![],'sort':_0x6953('0x11'),'filter':_0x16898a[_0x6953('0x77')][_0x6953('0x37')]}};return db['UserProfile'][_0x6953('0x7b')](_0x481102);}return db[_0x1cdee0][_0x6953('0x8d')](_0x513495);})[_0x6953('0x15')](function(_0x4464d1){_0x4eaebb[_0x6953('0xa')]=_0x4464d1[_0x6953('0xa')];_0x5c9f02=_0x4464d1[_0x6953('0x7d')];return getRealtimeQueues(_0x16898a,_0x2310b2);})[_0x6953('0x15')](function(_0xefb593){_0x3ebd20=_0xefb593[_0x6953('0x7d')];return getRealtimeAgents();})[_0x6953('0x15')](function(_0x47c935){_0x5a7607=_0x47c935[_0x6953('0x7d')];if(_0x2310b2!=_0x6953('0x21'))return;return getRealtimeVoiceQueueChannels();})[_0x6953('0x15')](function(_0x396a9f){_0x147cd4=_0x396a9f?_0x396a9f[_0x6953('0x7d')]:[];return initializeQueues(_0x5c9f02,_0x3ebd20,_0x2310b2,_0x16898a[_0x6953('0x77')][_0x6953('0x70')]);})[_0x6953('0x15')](function(_0x384021){var _0x39dd70=_0x384021[_0x6953('0x32')](function(_0x590d1f){if(_0x2310b2===_0x6953('0x21'))return getVoiceQueueAgents(_0x590d1f,_0x5c9f02,_0x5a7607,_0x147cd4);else return getQueueAgents(_0x590d1f,_0x5a7607,_0x2310b2);});return Promise[_0x6953('0x8e')](_0x39dd70);})[_0x6953('0x15')](function(_0x5a74ab){_0x4eaebb[_0x6953('0x7d')]=_0x5a74ab;return _0x4eaebb;})['then'](respondWithFilteredResult(_0x12285e,_0x513495))['catch'](handleError(_0x12285e,null));};