488ef2d0f69e1ac4f5f2af1696eda441f28aca38
[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 _0x323a=['status','send','voice','request','startCase','then','format','Unable\x20to\x20retrieve\x20RPC\x20%s\x20queues','result','VoiceQueuesChannels','Unable\x20to\x20retrieve\x20voice\x20queues\x20channels','catch','available','waiting','paused','outbound','push','pTalking','message','dialActive','Trunk','startPredictive','startProgressive','erlangCallToSecond','erlangAbandonmentRate','erlangBusyFactor','dialPredictiveInterval','dialPredictiveIntervalMaxThreshold','dialPredictiveIntervalMinThreshold','predictiveIntervalTotalCalls','predictiveIntervalAnsweredCalls','predictiveIntervalDroppedCallsTimeout','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','map','get','agents','talking','busy','originated','find','pick','queue','length','internal','toString','getMembers','UserId','online','voiceStatus','loggedInDb','User','Queue','Pause','findAll','QueueId','toLowerCase','getAgents','getChannels','query','globalQueueFilter','pause','*pause','resolve','channel','sort','validateSortParameter','getUpdatedSortOptions','join','order','getAgentIdsByQueues','getRealtimeAgents','rows','getSortedAgentsIdsByStatus','rawAttributes','type','key','role','agent','getOptions','literal','FIELD(id,','forEach','where','merge','user','Agents','extraQueryConditions','assign','getResources','findAndCountAll','globalStatus','getAgentStatus','Status','sortAgentsByStatus','getQueues','fieldName','userProfileId','QueueCampaigns','Queues','filter','UserProfile','all','lodash','jayson/promise','../../components/realtime/agents','../../components/parsers/qs','../../config/utils','../../config/logger','../../mysqldb','http','offset','undefined','limit','count','set','Content-Range','error','stack','name'];(function(_0x221ba2,_0x79208){var _0x47d08e=function(_0xaf14ee){while(--_0xaf14ee){_0x221ba2['push'](_0x221ba2['shift']());}};_0x47d08e(++_0x79208);}(_0x323a,0x68));var _0xa323=function(_0x5d31f3,_0x4239b0){_0x5d31f3=_0x5d31f3-0x0;var _0x1cc88c=_0x323a[_0x5d31f3];return _0x1cc88c;};'use strict';var util=require('util');var _=require(_0xa323('0x0'));var jayson=require(_0xa323('0x1'));var rta=require(_0xa323('0x2'));var qs=require(_0xa323('0x3'));var utils=require(_0xa323('0x4'));var logger=require(_0xa323('0x5'))('api');var db=require(_0xa323('0x6'))['db'];var amiClient=jayson['client'][_0xa323('0x7')]({'port':0x232a});var routingClient=jayson['client'][_0xa323('0x7')]({'port':0x232c});function respondWithFilteredResult(_0x288dc6,_0xbf5055){return function(_0x2568ea){if(_0x2568ea){var _0x174014=typeof _0xbf5055[_0xa323('0x8')]===_0xa323('0x9')&&typeof _0xbf5055[_0xa323('0xa')]===_0xa323('0x9');var _0x209f87=_0x2568ea[_0xa323('0xb')];var _0x4a916d=_0x174014?0x0:_0xbf5055[_0xa323('0x8')];var _0x4bf2ef=_0x174014?_0x2568ea[_0xa323('0xb')]:_0xbf5055[_0xa323('0x8')]+_0xbf5055[_0xa323('0xa')];var _0x28787b;if(_0x4bf2ef>=_0x209f87){_0x4bf2ef=_0x209f87;_0x28787b=0xc8;}else{_0x28787b=0xce;}_0x288dc6['status'](_0x28787b);return _0x288dc6[_0xa323('0xc')](_0xa323('0xd'),_0x4a916d+'-'+_0x4bf2ef+'/'+_0x209f87)['json'](_0x2568ea);}return null;};}function handleError(_0x1ec74f,_0x340dfe){_0x340dfe=_0x340dfe||0x1f4;return function(_0x4a9aa4){logger[_0xa323('0xe')](_0x4a9aa4[_0xa323('0xf')]);if(_0x4a9aa4[_0xa323('0x10')]){delete _0x4a9aa4[_0xa323('0x10')];}_0x1ec74f[_0xa323('0x11')](_0x340dfe)[_0xa323('0x12')](_0x4a9aa4);};}function getRealtimeQueues(_0x4967b5,_0x4e5685){return new Promise(function(_0x3b7395,_0x304797){var _0x543d8a=_0x4e5685===_0xa323('0x13')?amiClient:routingClient;return _0x543d8a[_0xa323('0x14')](_[_0xa323('0x15')](_0x4e5685)+'Queues',_0x4967b5)[_0xa323('0x16')](function(_0x2e9ef2){if(_0x2e9ef2[_0xa323('0xe')])throw new Error(util[_0xa323('0x17')](_0xa323('0x18'),_0x4e5685));return _0x3b7395(_0x2e9ef2[_0xa323('0x19')]);})['catch'](function(_0x43c20b){_0x304797(_0x43c20b);});});}function getRealtimeVoiceQueueChannels(){return new Promise(function(_0x401b34,_0xc739cf){return amiClient[_0xa323('0x14')](_0xa323('0x1a'),{})[_0xa323('0x16')](function(_0x11f3a8){if(_0x11f3a8[_0xa323('0xe')])throw new Error(_0xa323('0x1b'));return _0x401b34(_0x11f3a8[_0xa323('0x19')]);})[_0xa323('0x1c')](function(_0x242d0a){_0xc739cf(_0x242d0a);});});}function initializeQueues(_0x5c4c98,_0x5c3b51,_0x2b810b,_0x3fad7d){var _0xda3640=['loggedIn',_0xa323('0x1d'),_0xa323('0x1e'),'talking',_0xa323('0x1f')];if(_0x2b810b===_0xa323('0x13')&&_0x3fad7d===_0xa323('0x20')){_0xda3640[_0xa323('0x21')](_0xa323('0x22'),'originated',_0xa323('0x23'),_0xa323('0x24'),'dialMethod',_0xa323('0x25'),_0xa323('0x26'),_0xa323('0x27'),'erlangCalls',_0xa323('0x28'),_0xa323('0x29'),_0xa323('0x2a'),_0xa323('0x2b'),_0xa323('0x2c'),_0xa323('0x2d'),'predictiveIntervalAvailable',_0xa323('0x2e'),_0xa323('0x2f'),_0xa323('0x30'),_0xa323('0x31'),_0xa323('0x32'),_0xa323('0x33'));}return _0x5c4c98[_0xa323('0x34')](function(_0x241591){var _0x2518fd=_0x241591[_0xa323('0x35')]({'plain':!![]});_0x2518fd[_0xa323('0x36')]=[];_0x2518fd[_0xa323('0x1f')]=0x0;_0x2518fd['loggedInDb']=0x0;_0x2518fd['loggedIn']=0x0;_0x2518fd['available']=0x0;_0x2518fd[_0xa323('0x1e')]=0x0;if(_0x2b810b==='voice'){_0x2518fd[_0xa323('0x37')]=0x0;_0x2518fd[_0xa323('0x38')]=0x0;if(_0x3fad7d===_0xa323('0x20')){_0x2518fd[_0xa323('0x22')]=0x0;_0x2518fd[_0xa323('0x39')]=0x0;}}var _0x5cdef1=_[_0xa323('0x3a')](_0x5c3b51,['id',_0x2518fd['id']]);if(_0x5cdef1)_['merge'](_0x2518fd,_[_0xa323('0x3b')](_0x5cdef1,_0xda3640));return _0x2518fd;});}function updateAgentVoiceStatus(_0x4952b0,_0x5a13b3,_0x281d80){var _0x502094=_['filter'](_0x281d80,[_0xa323('0x3c'),_0x5a13b3[_0xa323('0x10')]]);if(_0x502094[_0xa323('0x3d')]===0x0)return _0x4952b0[_0xa323('0x38')]=!![];if(_['some'](_0x502094,['connectedlinenum',_0x4952b0[_0xa323('0x3e')][_0xa323('0x3f')]()]))return _0x4952b0[_0xa323('0x37')]=!![];if(!_0x4952b0[_0xa323('0x37')])return _0x4952b0[_0xa323('0x38')]=!![];}function getVoiceQueueAgents(_0x562553,_0x2b2639,_0x47ec56,_0x3e1689){var _0x134e2e=_[_0xa323('0x3a')](_0x2b2639,['id',_0x562553['id']]);if(!_0x134e2e)return _0x562553;return _0x134e2e[_0xa323('0x40')]({'raw':!![]})[_0xa323('0x16')](function(_0x58dbc7){for(var _0x44fa89=0x0;_0x44fa89<_0x58dbc7['length'];_0x44fa89++){var _0x26e362=_['find'](_0x47ec56,['id',_0x58dbc7[_0x44fa89]['UserId']]);if(!_0x26e362){_0x26e362={'id':_0x58dbc7[_0x44fa89][_0xa323('0x41')],'name':_0x58dbc7[_0x44fa89]['UserId'],'accountcode':'','online':![]};}var _0x244a88={'id':_0x26e362['id'],'name':_0x26e362[_0xa323('0x10')],'internal':_0x26e362['accountcode'],'online':Boolean(_0x26e362[_0xa323('0x42')]),'paused':Boolean(_0x58dbc7[_0x44fa89][_0xa323('0x1f')])};if(_0x26e362[_0xa323('0x43')]===_0xa323('0x37'))updateAgentVoiceStatus(_0x244a88,_0x562553,_0x3e1689);if(_0x244a88[_0xa323('0x42')])_0x562553[_0xa323('0x44')]++;if(_0x244a88[_0xa323('0x38')])_0x562553['busy']++;if(_0x244a88[_0xa323('0x1f')]&&!_0x244a88[_0xa323('0x38')]&&!_0x244a88['talking'])_0x562553[_0xa323('0x1f')]++;_0x562553[_0xa323('0x36')]['push'](_0x244a88);}return _0x562553;});}function getQueueAgents(_0x66bafb,_0x20d734,_0x36b578){var _0x98e9c0=_0xa323('0x45')+_[_0xa323('0x15')](_0x36b578)+_0xa323('0x46');var _0x279b1c=_0x36b578+_0xa323('0x47');return db[_0x98e9c0][_0xa323('0x48')]({'where':{[_['startCase'](_0x36b578)+_0xa323('0x49')]:_0x66bafb['id']},'raw':!![]})['then'](function(_0x3d42ab){for(var _0x541ac3=0x0;_0x541ac3<_0x3d42ab['length'];_0x541ac3++){var _0x5a59bc=_[_0xa323('0x3a')](_0x20d734,['id',_0x3d42ab[_0x541ac3][_0xa323('0x41')]]);if(!_0x5a59bc){_0x5a59bc={'id':_0x3d42ab[_0x541ac3][_0xa323('0x41')],'name':_0x3d42ab[_0x541ac3]['UserId'],'online':![],['pauseField']:![]};}var _0x414cc9={'id':_0x5a59bc['id'],'name':_0x5a59bc[_0xa323('0x10')],'online':Boolean(_0x5a59bc['online']),'paused':Boolean(_0x5a59bc[_0x279b1c])};if(_0x414cc9[_0xa323('0x42')])_0x66bafb['loggedInDb']++;_0x66bafb[_0xa323('0x36')][_0xa323('0x21')](_0x414cc9);}return _0x66bafb;});}function validateChannel(_0x189557){var _0x5e9ea3=utils['getChannels']();if(!_['includes'](_0x5e9ea3,_0x189557[_0xa323('0x4a')]()))throw new Error('Invalid\x20channel');return _0x189557['toLowerCase']();}exports[_0xa323('0x4b')]=function(_0x15ff1c,_0x1bb700){var _0x3c8557={'count':0x0,'rows':[]};var _0x193d7a={};var _0x2d4487;var _0x1bb992;var _0x4805c7;var _0x4a85fa;var _0x560d4d=utils[_0xa323('0x4c')]();var _0x52de6d=_0x15ff1c[_0xa323('0x4d')][_0xa323('0x4e')];var _0x227d47=_0x15ff1c[_0xa323('0x4d')]['globalStatusFilter'];var _0x217603=_0x15ff1c['query']['pauseTypeFilter'];var _0xc8a842=_0x227d47===_0xa323('0x4f')||_0x227d47===_0xa323('0x50')?!![]:![];var _0x2f3930=[];var _0x37e277;Promise[_0xa323('0x51')]()[_0xa323('0x16')](function(){if(_0x15ff1c[_0xa323('0x4d')]['channel']){_0x2d4487=validateChannel(_0x15ff1c[_0xa323('0x4d')][_0xa323('0x52')]);}if(!_0x15ff1c[_0xa323('0x4d')][_0xa323('0x53')]||!_0x15ff1c[_0xa323('0x4d')]['sort']['includes']('globalStatus')){_0x15ff1c[_0xa323('0x4d')][_0xa323('0x53')]=rta[_0xa323('0x54')](_0x15ff1c[_0xa323('0x4d')][_0xa323('0x53')]);return;}var _0x3000e3=rta[_0xa323('0x55')](_0x15ff1c['query'][_0xa323('0x53')]);_0x15ff1c[_0xa323('0x4d')]['sort']=_0x3000e3['fields'][_0xa323('0x56')](',');_0x1bb992=_0x3000e3[_0xa323('0x57')];})['then'](function(){if(!_0x52de6d){return[];}return rta[_0xa323('0x58')](_0x52de6d,_0x2d4487);})[_0xa323('0x16')](function(_0x566032){_0x2f3930=_0x566032;return rta[_0xa323('0x59')]();})[_0xa323('0x16')](function(_0x546c20){_0x4a85fa=_0x546c20[_0xa323('0x5a')];if((!_0x227d47||_0xc8a842)&&!_0x1bb992){return _0x2f3930;}if(_0x1bb992&&!_0x227d47){return rta[_0xa323('0x5b')](_0x4a85fa,_0x2f3930,_0x1bb992);}else{return rta['getAgentIdsByStatus'](_0x4a85fa,_0x2f3930,_0x227d47);}})[_0xa323('0x16')](function(_0x476e19){_0x2f3930=_0x476e19;var _0x4191d5=![];if(_0x2f3930[_0xa323('0x3d')]===0x0){if(_0x52de6d||_0x227d47){_0x4191d5=!![];}if(_0xc8a842){_0x4191d5=![];}}if(_0x4191d5){return _0x3c8557;}var _0x2579ef=_['map'](db['User'][_0xa323('0x5c')],function(_0x2adf31){return{'name':_0x2adf31['fieldName'],'type':_0x2adf31[_0xa323('0x5d')][_0xa323('0x5e')]};});_0x15ff1c[_0xa323('0x4d')][_0xa323('0x5f')]=_0xa323('0x60');_0x15ff1c[_0xa323('0x4d')][_0xa323('0x42')]=!![];_0x193d7a=qs[_0xa323('0x61')](_0x2579ef,_0x15ff1c);_0x193d7a['raw']=!![];var _0x149c3c=[];if(_0x2f3930['length']>0x0){_0x149c3c[_0xa323('0x21')]({'id':{'$in':_0x2f3930}});if(_0x1bb992&&!_0x227d47){_0x37e277=[db['sequelize'][_0xa323('0x62')](_0xa323('0x63')+_0x2f3930+')')];_0x193d7a[_0xa323('0x57')]=_0x37e277;}}if(_0xc8a842){_0x560d4d['forEach'](function(_0xa583a9){var _0x220438=!![];if(_0x227d47===_0xa323('0x50')&&_0x2d4487!==_0xa583a9){_0x220438=![];}_0x149c3c[_0xa323('0x21')]({[_0xa583a9+_0xa323('0x47')]:_0x220438});});if(_0x217603){_0x149c3c['push']({'pauseType':_0x217603});}}else if(_0x227d47){_0x560d4d[_0xa323('0x64')](function(_0xc09fd1){_0x149c3c[_0xa323('0x21')]({[_0xc09fd1+_0xa323('0x47')]:![]});});}_0x193d7a[_0xa323('0x65')]=_[_0xa323('0x66')](_0x193d7a[_0xa323('0x65')],{'$and':_0x149c3c});if(_0x15ff1c[_0xa323('0x67')][_0xa323('0x5f')]===_0xa323('0x67')){var _0x310d45={'params':{'id':_0x15ff1c[_0xa323('0x67')]['userProfileId']},'query':{'section':_0xa323('0x68'),'role':_0xa323('0x60'),'online':!![],'raw':!![],'ids':_0x2f3930,'customSorting':_0x37e277}};if(_0xc8a842){_0x310d45['query'][_0xa323('0x69')]=_0x149c3c;}_0x310d45['query']=Object[_0xa323('0x6a')](_0x310d45[_0xa323('0x4d')],_0x15ff1c[_0xa323('0x4d')]);delete _0x310d45[_0xa323('0x4d')]['id'];return db['UserProfile'][_0xa323('0x6b')](_0x310d45);}return db[_0xa323('0x45')][_0xa323('0x6c')](_0x193d7a);})[_0xa323('0x16')](function(_0x405111){_0x3c8557[_0xa323('0xb')]=_0x405111['count'];_0x4805c7=_0x405111[_0xa323('0x5a')];return _0x4805c7[_0xa323('0x34')](function(_0x9ed99d){var _0x49608e=_[_0xa323('0x3a')](_0x4a85fa,['id',_0x9ed99d['id']]);if(_0x49608e){var _0x4edb71=rta['filterAgentAttributes'](_0x49608e);_[_0xa323('0x66')](_0x9ed99d,_0x4edb71);}_0x9ed99d[_0xa323('0x6d')]=rta[_0xa323('0x6e')](_0x9ed99d);if(_0x9ed99d[_0xa323('0x6d')]['includes'](_0xa323('0x4f'))){_0x560d4d[_0xa323('0x64')](function(_0x573276){if(_0x9ed99d[_0x573276+'Pause']){_0x9ed99d[_0x573276+_0xa323('0x6f')]=_0xa323('0x4f');}});}return _0x9ed99d;});})[_0xa323('0x16')](function(_0x62c0e2){if(!_0x1bb992||_0x37e277){return _0x62c0e2;}return rta[_0xa323('0x70')](_0x62c0e2,_0x1bb992);})[_0xa323('0x16')](function(_0x4ad9a1){_0x3c8557[_0xa323('0x5a')]=_0x4ad9a1;return _0x3c8557;})['then'](respondWithFilteredResult(_0x1bb700,_0x193d7a))[_0xa323('0x1c')](handleError(_0x1bb700,null));};exports[_0xa323('0x71')]=function(_0x1c0eec,_0x29dab5){var _0x3f143b={'count':0x0,'rows':[]},_0x205698={},_0x3330d7,_0x543245,_0x14c03b,_0x22dc61,_0x53dd59;Promise['resolve']()[_0xa323('0x16')](function(){if(_0x1c0eec[_0xa323('0x4d')]['channel'])_0x3330d7=validateChannel(_0x1c0eec[_0xa323('0x4d')]['channel']);var _0x1db954=_[_0xa323('0x15')](_0x3330d7)+_0xa323('0x46');var _0x1182ba=_[_0xa323('0x34')](db[_0x1db954]['rawAttributes'],function(_0x5cac39){return{'name':_0x5cac39[_0xa323('0x72')],'type':_0x5cac39['type'][_0xa323('0x5e')]};});_0x205698=qs['getOptions'](_0x1182ba,_0x1c0eec);if(_0x1c0eec['user'][_0xa323('0x5f')]===_0xa323('0x67')){var _0x55c37a={'params':{'id':_0x1c0eec[_0xa323('0x67')][_0xa323('0x73')]},'query':{'section':_0x3330d7===_0xa323('0x13')&&_0x1c0eec[_0xa323('0x4d')][_0xa323('0x5d')]===_0xa323('0x20')?_0xa323('0x74'):_[_0xa323('0x15')](_0x3330d7)+_0xa323('0x75'),'type':_0x1c0eec[_0xa323('0x4d')][_0xa323('0x5d')],'nolimit':!![],'sort':_0xa323('0x10'),'filter':_0x1c0eec[_0xa323('0x4d')][_0xa323('0x76')]}};return db[_0xa323('0x77')][_0xa323('0x6b')](_0x55c37a);}return db[_0x1db954][_0xa323('0x6c')](_0x205698);})[_0xa323('0x16')](function(_0x5dcf5d){_0x3f143b[_0xa323('0xb')]=_0x5dcf5d[_0xa323('0xb')];_0x543245=_0x5dcf5d[_0xa323('0x5a')];return getRealtimeQueues(_0x1c0eec,_0x3330d7);})[_0xa323('0x16')](function(_0x95c94f){_0x22dc61=_0x95c94f[_0xa323('0x5a')];return rta[_0xa323('0x59')]();})[_0xa323('0x16')](function(_0x5c55e9){_0x14c03b=_0x5c55e9[_0xa323('0x5a')];if(_0x3330d7!=_0xa323('0x13'))return;return getRealtimeVoiceQueueChannels();})[_0xa323('0x16')](function(_0x43afd7){_0x53dd59=_0x43afd7?_0x43afd7[_0xa323('0x5a')]:[];return initializeQueues(_0x543245,_0x22dc61,_0x3330d7,_0x1c0eec[_0xa323('0x4d')][_0xa323('0x5d')]);})[_0xa323('0x16')](function(_0x14f486){var _0x4340db=_0x14f486['map'](function(_0x3029ad){if(_0x3330d7===_0xa323('0x13'))return getVoiceQueueAgents(_0x3029ad,_0x543245,_0x14c03b,_0x53dd59);else return getQueueAgents(_0x3029ad,_0x14c03b,_0x3330d7);});return Promise[_0xa323('0x78')](_0x4340db);})[_0xa323('0x16')](function(_0x9d3e5d){_0x3f143b['rows']=_0x9d3e5d;return _0x3f143b;})[_0xa323('0x16')](respondWithFilteredResult(_0x29dab5,_0x205698))['catch'](handleError(_0x29dab5,null));};