dafaf212ed98863f679d162b8f98459c0a9bb4a7
[motion2.git] / server / services / routing / server / applications / queue.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 _0x5d17=['toLowerCase','consequence','length','[%s][QUEUE]\x20%s','join','find','timeout','createQueue','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','stop','complete','[%s][QUEUE]\x20APPLICATION\x20END','close','next','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','validate','lodash','util','seq-queue','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','redis','defaults','socket.io-emitter','queue_id','queue','from','joinAt','emit','clone','account','format','%sQueuesWaitingInteractions','pick','%s:queue:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','body','contact','list','QueueId','upperFirst','channel','InteractionId','interaction','MessageId','message','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','create\x20queue\x20report','YYYY-MM-DD\x20HH:mm:ss','accepted','[%s][STOP:QUEUE][NAME:%s]','update','update\x20queue\x20report'];(function(_0x56d189,_0x36df1c){var _0x1bcec1=function(_0x4273ff){while(--_0x4273ff){_0x56d189['push'](_0x56d189['shift']());}};_0x1bcec1(++_0x36df1c);}(_0x5d17,0xb8));var _0x75d1=function(_0xe1441d,_0x36fb8e){_0xe1441d=_0xe1441d-0x0;var _0x2ef242=_0x5d17[_0xe1441d];return _0x2ef242;};'use strict';var schema=require(_0x75d1('0x0'));var _=require(_0x75d1('0x1'));var util=require(_0x75d1('0x2'));var seqqueue=require(_0x75d1('0x3'));var moment=require(_0x75d1('0x4'));var Redis=require(_0x75d1('0x5'));var config=require(_0x75d1('0x6'));var logger=require(_0x75d1('0x7'))(_0x75d1('0x8'));var strategy=require('./strategy');config[_0x75d1('0x9')]=_[_0x75d1('0xa')](config['redis'],{'host':'localhost','port':0x18eb});var io=require(_0x75d1('0xb'))(new Redis(config['redis']));var attributes=['id',_0x75d1('0xc'),'account',_0x75d1('0xd'),_0x75d1('0xe'),_0x75d1('0xf')];function emit(_0x5f5910,_0x2e5c31,_0x4c5bf3){io['to'](_0x5f5910)[_0x75d1('0x10')](_0x2e5c31,_0x4c5bf3);}function emitChannelQueueInteraction(_0x3cd46b,_0x5a3af0,_0x58a059,_0x15f81c,_0x582342,_0x53a8df,_0x1b7be4,_0x579ca2){var _0x5dd630=_[_0x75d1('0x11')](_0x58a059);_0x5dd630['queue_id']=_0x579ca2;_0x5dd630[_0x75d1('0xd')]=_0x5a3af0;_0x5dd630[_0x75d1('0x12')]=_0x15f81c;_0x5dd630['id']=_0x582342;if(_0x53a8df){_0x1b7be4[util[_0x75d1('0x13')](_0x75d1('0x14'),_0x3cd46b)][_0x582342]=_[_0x75d1('0x15')](_0x5dd630,attributes);}else{delete _0x1b7be4[util[_0x75d1('0x13')]('%sQueuesWaitingInteractions',_0x3cd46b)][_0x582342];}emit(util[_0x75d1('0x13')](_0x75d1('0x16'),_0x3cd46b,_0x5a3af0),util[_0x75d1('0x13')]('%s_queue_waiting_interaction:%s',_0x3cd46b,_0x53a8df?_0x75d1('0x17'):_0x75d1('0x18')),_[_0x75d1('0x15')](_0x5dd630,attributes));}var rpc={'openchannelQueueReport':require(_0x75d1('0x19')),'mailQueueReport':require(_0x75d1('0x1a')),'chatQueueReport':require(_0x75d1('0x1b')),'smsQueueReport':require(_0x75d1('0x1c')),'faxQueueReport':require(_0x75d1('0x1d')),'whatsappQueueReport':require(_0x75d1('0x1e'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0x75d1('0x1f')},'timeout':{'type':_0x75d1('0x20'),'message':_0x75d1('0x21')}});function startRouting(_0x24c560,_0x697a47,_0x532d5e,_0x2b5866){if(_0x24c560&&_0x697a47&&_0x532d5e){_0x697a47[_0x75d1('0x22')]+=0x1;var _0x313bf8={'uniqueid':_0x24c560,'from':_0x532d5e[_0x75d1('0x23')]?_0x532d5e[_0x75d1('0x23')][_0x75d1('0xe')]:'','joinAt':moment()[_0x75d1('0x13')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x532d5e[_0x75d1('0x24')]?_0x532d5e[_0x75d1('0x24')]['id']:null,'ListId':_0x532d5e[_0x75d1('0x25')]?_0x532d5e[_0x75d1('0x25')]['id']:null};_0x313bf8[_['upperFirst'](_0x532d5e['channel'])+_0x75d1('0x26')]=_0x697a47['id']||null;_0x313bf8[_[_0x75d1('0x27')](_0x532d5e[_0x75d1('0x28')])+_0x75d1('0x29')]=_0x532d5e[_0x75d1('0x2a')]?_0x532d5e[_0x75d1('0x2a')]['id']:null;_0x313bf8[_['upperFirst'](_0x532d5e[_0x75d1('0x28')])+_0x75d1('0x2b')]=_0x532d5e[_0x75d1('0x2c')]?_0x532d5e['message']['id']:null;_0x313bf8[_[_0x75d1('0x27')](_0x532d5e['channel'])+(_0x532d5e[_0x75d1('0x28')]!=='chat'?'AccountId':_0x75d1('0x2d'))]=_0x532d5e[_0x75d1('0x12')]?_0x532d5e[_0x75d1('0x12')]['id']:null;logger[_0x75d1('0x2e')](util[_0x75d1('0x13')](_0x75d1('0x2f'),_0x24c560,_0x697a47['name']));emitChannelQueueInteraction(_0x532d5e[_0x75d1('0x28')],_0x697a47[_0x75d1('0x30')],_0x313bf8,_0x532d5e[_0x75d1('0x12')][_0x75d1('0x30')],_0x532d5e['message']['id'],!![],_0x2b5866,_0x697a47['id']);if(rpc[_0x532d5e[_0x75d1('0x28')]+_0x75d1('0x31')]){return rpc[_0x532d5e[_0x75d1('0x28')]+_0x75d1('0x31')][_0x75d1('0x32')](_0x313bf8)[_0x75d1('0x33')](function(_0x10a36e){logger[_0x75d1('0x34')](_0x75d1('0x35'));});}}}function stopRouting(_0x1fd87d,_0xebadbc,_0x9c71de,_0x15a7f0){if(_0x1fd87d&&_0xebadbc){_0xebadbc[_0x75d1('0x22')]-=0x1;var _0x42c4e0={'leaveAt':moment()['format'](_0x75d1('0x36')),'acceptAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0x75d1('0x37')};logger[_0x75d1('0x2e')](util[_0x75d1('0x13')](_0x75d1('0x38'),_0x1fd87d,_0xebadbc[_0x75d1('0x30')]));emitChannelQueueInteraction(_0x9c71de[_0x75d1('0x28')],_0xebadbc[_0x75d1('0x30')],_0x9c71de[_0x75d1('0x23')],_0x9c71de[_0x75d1('0x12')][_0x75d1('0x30')],_0x9c71de[_0x75d1('0x2c')]['id'],![],_0x15a7f0,_0xebadbc['id']);if(rpc[_0x9c71de['channel']+_0x75d1('0x31')]){return rpc[_0x9c71de[_0x75d1('0x28')]+'QueueReport']['update'](_0x1fd87d,_0x42c4e0)[_0x75d1('0x33')](function(_0x2963be){logger[_0x75d1('0x34')]('update\x20queue\x20report');});}}}function endRouting(_0x2cade8,_0x5925fb,_0x366816,_0x580470){if(_0x2cade8&&_0x5925fb){_0x5925fb['waiting']-=0x1;var _0x3853ae={'leaveAt':moment()[_0x75d1('0x13')](_0x75d1('0x36')),'exitAt':moment()['format'](_0x75d1('0x36')),'reason':'timeout'};logger['info'](util['format']('[%s][END:QUEUE][NAME:%s]',_0x2cade8,_0x5925fb[_0x75d1('0x30')]));emitChannelQueueInteraction(_0x366816[_0x75d1('0x28')],_0x5925fb[_0x75d1('0x30')],_0x366816[_0x75d1('0x23')],_0x366816[_0x75d1('0x12')][_0x75d1('0x30')],_0x366816[_0x75d1('0x2c')]['id'],![],_0x580470);if(rpc[_0x366816['channel']+_0x75d1('0x31')]){return rpc[_0x366816[_0x75d1('0x28')]+_0x75d1('0x31')][_0x75d1('0x39')](_0x2cade8,_0x3853ae)[_0x75d1('0x33')](function(_0x10cebf){logger[_0x75d1('0x34')](_0x75d1('0x3a'));});}}}function handleFindQueue(_0x36334e){return function(_0x30cbd1){return _0x30cbd1[_0x75d1('0x30')]['toLowerCase']()===_0x36334e[_0x75d1('0x3b')]();};}exports[_0x75d1('0x3c')]=function(_0x5c4d95,_0x10de76,_0x29b957,_0x2cf1b6){return function(_0x5ed01b){try{var _0x43f90e={'name':_0x10de76[0x0],'timeout':_0x10de76[0x1]};var _0x4b9af4=queue['validate'](_0x43f90e,{'typecast':!![]});if(_0x4b9af4[_0x75d1('0x3d')]){logger[_0x75d1('0x34')](_0x75d1('0x3e'),_0x5c4d95,_['map'](_0x4b9af4,'message')[_0x75d1('0x3f')](',\x20'));_0x5ed01b['stop']();}else{var _0x25fcca=_[_0x75d1('0x40')](_0x29b957[_0x2cf1b6[_0x75d1('0x28')]+'Queues'],handleFindQueue(_0x43f90e['name']));if(_0x25fcca){startRouting(_0x5c4d95,_0x25fcca,_0x2cf1b6,_0x29b957);var _0x183b19=(_0x25fcca[_0x75d1('0x41')]||0xa)*0x3e8;var _0x2c8407=(_0x43f90e[_0x75d1('0x41')]||0x14)*0x3e8;var _0x262ce,_0x379ffb;if(_0x183b19>_0x2c8407){_0x2c8407=_0x183b19;}var _0x2c838e=seqqueue[_0x75d1('0x42')](_0x183b19);_0x2c838e['id']=_0x5c4d95;_0x2c838e[_0x75d1('0x43')]=_0x183b19;_0x2c838e[_0x75d1('0x44')]=_0x2c8407;_0x2c838e[_0x75d1('0x28')]=_0x2cf1b6['channel'];_0x29b957[_0x75d1('0x45')][_0x5c4d95]['on'](_0x75d1('0x46'),function(){logger[_0x75d1('0x2e')](_0x75d1('0x47'),_0x5c4d95);stopRouting(_0x5c4d95,_0x25fcca,_0x2cf1b6,_0x29b957);clearTimeout(_0x262ce);_0x262ce=undefined;_0x2c838e['close'](!![]);if(_0x29b957[_0x75d1('0x45')][_0x5c4d95]){delete _0x29b957[_0x75d1('0x45')][_0x5c4d95];}_0x5ed01b[_0x75d1('0x48')]();});_0x29b957['rules'][_0x5c4d95]['on'](_0x75d1('0x49'),function(){if(_0x29b957[_0x75d1('0x45')][_0x5c4d95]){delete _0x29b957['rules'][_0x5c4d95];}});_0x262ce=setTimeout(function(){logger['info'](_0x75d1('0x4a'),_0x5c4d95);endRouting(_0x5c4d95,_0x25fcca,_0x2cf1b6,_0x29b957);clearTimeout(_0x262ce);_0x2c838e[_0x75d1('0x4b')](!![]);_0x5ed01b[_0x75d1('0x4c')]();},_0x2c8407);switch(_0x25fcca['strategy']){case'rrmemory':strategy['rrmemory'](_0x2c838e,_0x25fcca,_0x29b957,_0x2cf1b6);break;default:strategy[_0x75d1('0x4d')](_0x2c838e,_0x25fcca,_0x29b957,_0x2cf1b6);}}else{logger['error'](_0x75d1('0x4e'),_0x5c4d95,_0x43f90e[_0x75d1('0x30')]);_0x5ed01b[_0x75d1('0x48')]();}}}catch(_0x37205e){console[_0x75d1('0x4f')](_0x37205e);logger[_0x75d1('0x34')]('[%s][QUEUE]\x20%s',_0x5c4d95,_0x37205e[_0x75d1('0x50')]);_0x5ed01b[_0x75d1('0x48')]();}};};