12d4342b73c64bfc13c6dfc913b842735f7545eb
[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 _0x2d86=['MessageId','message','chat','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','create\x20queue\x20report','accepted','[%s][STOP:QUEUE][NAME:%s]','update','YYYY-MM-DD\x20HH:mm:ss','[%s][END:QUEUE][NAME:%s]','toLowerCase','error','[%s][QUEUE]\x20%s','stop','Queues','timeout','createQueue','atimeout','qtimeout','rules','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','beepall','log','lodash','util','seq-queue','moment','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','defaults','localhost','socket.io-emitter','queue_id','queue','from','joinAt','clone','account','format','%sQueuesWaitingInteractions','%s_queue_waiting_interaction:%s','save','pick','../../rpc/openchannelQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','string','number','timeout\x20is\x20a\x20number','waiting','body','contact','list','upperFirst','channel','QueueId','InteractionId','interaction'];(function(_0x53f273,_0x49db20){var _0x449c4f=function(_0x5b7c1b){while(--_0x5b7c1b){_0x53f273['push'](_0x53f273['shift']());}};_0x449c4f(++_0x49db20);}(_0x2d86,0x14b));var _0x62d8=function(_0x2ed8f3,_0x4aa12f){_0x2ed8f3=_0x2ed8f3-0x0;var _0x525a55=_0x2d86[_0x2ed8f3];return _0x525a55;};'use strict';var schema=require('validate');var _=require(_0x62d8('0x0'));var util=require(_0x62d8('0x1'));var seqqueue=require(_0x62d8('0x2'));var moment=require(_0x62d8('0x3'));var Redis=require('ioredis');var config=require(_0x62d8('0x4'));var logger=require(_0x62d8('0x5'))(_0x62d8('0x6'));var strategy=require(_0x62d8('0x7'));config[_0x62d8('0x8')]=_[_0x62d8('0x9')](config[_0x62d8('0x8')],{'host':_0x62d8('0xa'),'port':0x18eb});var io=require(_0x62d8('0xb'))(new Redis(config[_0x62d8('0x8')]));var attributes=['id',_0x62d8('0xc'),'account',_0x62d8('0xd'),_0x62d8('0xe'),_0x62d8('0xf')];function emit(_0x47f3a4,_0x341945,_0x206869){io['to'](_0x47f3a4)['emit'](_0x341945,_0x206869);}function emitChannelQueueInteraction(_0x2bf6f0,_0x58a0e9,_0x37981b,_0x4b4b45,_0x23f9a4,_0x157dc9,_0x507904,_0x41b921){var _0x44aa44=_[_0x62d8('0x10')](_0x37981b);_0x44aa44['queue_id']=_0x41b921;_0x44aa44[_0x62d8('0xd')]=_0x58a0e9;_0x44aa44[_0x62d8('0x11')]=_0x4b4b45;_0x44aa44['id']=_0x23f9a4;if(_0x157dc9){_0x507904[util[_0x62d8('0x12')](_0x62d8('0x13'),_0x2bf6f0)][_0x23f9a4]=_['pick'](_0x44aa44,attributes);}else{delete _0x507904[util[_0x62d8('0x12')](_0x62d8('0x13'),_0x2bf6f0)][_0x23f9a4];}emit(util['format']('%s:queue:%s',_0x2bf6f0,_0x58a0e9),util[_0x62d8('0x12')](_0x62d8('0x14'),_0x2bf6f0,_0x157dc9?_0x62d8('0x15'):'remove'),_[_0x62d8('0x16')](_0x44aa44,attributes));}var rpc={'openchannelQueueReport':require(_0x62d8('0x17')),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require(_0x62d8('0x18')),'smsQueueReport':require(_0x62d8('0x19')),'faxQueueReport':require(_0x62d8('0x1a')),'whatsappQueueReport':require('../../rpc/whatsappQueueReport')};var queue=schema({'name':{'type':_0x62d8('0x1b'),'required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0x62d8('0x1c'),'message':_0x62d8('0x1d')}});function startRouting(_0x1b0c48,_0x12ad58,_0x336cc8,_0x26ef12){if(_0x1b0c48&&_0x12ad58&&_0x336cc8){_0x12ad58[_0x62d8('0x1e')]+=0x1;var _0x124f9e={'uniqueid':_0x1b0c48,'from':_0x336cc8[_0x62d8('0x1f')]?_0x336cc8[_0x62d8('0x1f')][_0x62d8('0xe')]:'','joinAt':moment()[_0x62d8('0x12')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x336cc8[_0x62d8('0x20')]?_0x336cc8[_0x62d8('0x20')]['id']:null,'ListId':_0x336cc8[_0x62d8('0x21')]?_0x336cc8[_0x62d8('0x21')]['id']:null};_0x124f9e[_[_0x62d8('0x22')](_0x336cc8[_0x62d8('0x23')])+_0x62d8('0x24')]=_0x12ad58['id']||null;_0x124f9e[_[_0x62d8('0x22')](_0x336cc8['channel'])+_0x62d8('0x25')]=_0x336cc8[_0x62d8('0x26')]?_0x336cc8['interaction']['id']:null;_0x124f9e[_[_0x62d8('0x22')](_0x336cc8['channel'])+_0x62d8('0x27')]=_0x336cc8['message']?_0x336cc8[_0x62d8('0x28')]['id']:null;_0x124f9e[_['upperFirst'](_0x336cc8[_0x62d8('0x23')])+(_0x336cc8[_0x62d8('0x23')]!==_0x62d8('0x29')?_0x62d8('0x2a'):_0x62d8('0x2b'))]=_0x336cc8['account']?_0x336cc8[_0x62d8('0x11')]['id']:null;logger[_0x62d8('0x2c')](util[_0x62d8('0x12')](_0x62d8('0x2d'),_0x1b0c48,_0x12ad58[_0x62d8('0x2e')]));emitChannelQueueInteraction(_0x336cc8[_0x62d8('0x23')],_0x12ad58[_0x62d8('0x2e')],_0x124f9e,_0x336cc8[_0x62d8('0x11')]['name'],_0x336cc8[_0x62d8('0x28')]['id'],!![],_0x26ef12,_0x12ad58['id']);if(rpc[_0x336cc8[_0x62d8('0x23')]+_0x62d8('0x2f')]){return rpc[_0x336cc8[_0x62d8('0x23')]+_0x62d8('0x2f')][_0x62d8('0x30')](_0x124f9e)[_0x62d8('0x31')](function(_0x15a99c){logger['error'](_0x62d8('0x32'));});}}}function stopRouting(_0x59dd1f,_0x12a8b7,_0x125208,_0x4fc09a){if(_0x59dd1f&&_0x12a8b7){_0x12a8b7[_0x62d8('0x1e')]-=0x1;var _0x28246d={'leaveAt':moment()[_0x62d8('0x12')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0x62d8('0x33')};logger['info'](util['format'](_0x62d8('0x34'),_0x59dd1f,_0x12a8b7[_0x62d8('0x2e')]));emitChannelQueueInteraction(_0x125208[_0x62d8('0x23')],_0x12a8b7[_0x62d8('0x2e')],_0x125208['body'],_0x125208[_0x62d8('0x11')][_0x62d8('0x2e')],_0x125208[_0x62d8('0x28')]['id'],![],_0x4fc09a,_0x12a8b7['id']);if(rpc[_0x125208[_0x62d8('0x23')]+_0x62d8('0x2f')]){return rpc[_0x125208[_0x62d8('0x23')]+_0x62d8('0x2f')][_0x62d8('0x35')](_0x59dd1f,_0x28246d)['catch'](function(_0xe2ee85){logger['error']('update\x20queue\x20report');});}}}function endRouting(_0x443530,_0x51ef32,_0x430e34,_0x23760c){if(_0x443530&&_0x51ef32){_0x51ef32[_0x62d8('0x1e')]-=0x1;var _0x443b5b={'leaveAt':moment()['format'](_0x62d8('0x36')),'exitAt':moment()[_0x62d8('0x12')](_0x62d8('0x36')),'reason':'timeout'};logger[_0x62d8('0x2c')](util[_0x62d8('0x12')](_0x62d8('0x37'),_0x443530,_0x51ef32[_0x62d8('0x2e')]));emitChannelQueueInteraction(_0x430e34[_0x62d8('0x23')],_0x51ef32[_0x62d8('0x2e')],_0x430e34[_0x62d8('0x1f')],_0x430e34[_0x62d8('0x11')][_0x62d8('0x2e')],_0x430e34[_0x62d8('0x28')]['id'],![],_0x23760c);if(rpc[_0x430e34[_0x62d8('0x23')]+_0x62d8('0x2f')]){return rpc[_0x430e34[_0x62d8('0x23')]+'QueueReport'][_0x62d8('0x35')](_0x443530,_0x443b5b)[_0x62d8('0x31')](function(_0x3d55b3){logger['error']('update\x20queue\x20report');});}}}function handleFindQueue(_0x5ba721){return function(_0x3cbd18){return _0x3cbd18[_0x62d8('0x2e')][_0x62d8('0x38')]()===_0x5ba721['toLowerCase']();};}exports['consequence']=function(_0x7065e9,_0x32cc84,_0x66c934,_0x27b014){return function(_0x47e7d8){try{var _0x527517={'name':_0x32cc84[0x0],'timeout':_0x32cc84[0x1]};var _0x2faae9=queue['validate'](_0x527517,{'typecast':!![]});if(_0x2faae9['length']){logger[_0x62d8('0x39')](_0x62d8('0x3a'),_0x7065e9,_['map'](_0x2faae9,'message')['join'](',\x20'));_0x47e7d8[_0x62d8('0x3b')]();}else{var _0x581941=_['find'](_0x66c934[_0x27b014[_0x62d8('0x23')]+_0x62d8('0x3c')],handleFindQueue(_0x527517[_0x62d8('0x2e')]));if(_0x581941){startRouting(_0x7065e9,_0x581941,_0x27b014,_0x66c934);var _0x24b7ce=(_0x581941['timeout']||0xa)*0x3e8;var _0x36a8f9=(_0x527517[_0x62d8('0x3d')]||0x14)*0x3e8;var _0x35e24d,_0x485332;if(_0x24b7ce>_0x36a8f9){_0x36a8f9=_0x24b7ce;}var _0x6ad53e=seqqueue[_0x62d8('0x3e')](_0x24b7ce);_0x6ad53e['id']=_0x7065e9;_0x6ad53e[_0x62d8('0x3f')]=_0x24b7ce;_0x6ad53e[_0x62d8('0x40')]=_0x36a8f9;_0x6ad53e[_0x62d8('0x23')]=_0x27b014[_0x62d8('0x23')];_0x66c934[_0x62d8('0x41')][_0x7065e9]['on']('end',function(){logger[_0x62d8('0x2c')](_0x62d8('0x42'),_0x7065e9);stopRouting(_0x7065e9,_0x581941,_0x27b014,_0x66c934);clearTimeout(_0x35e24d);_0x35e24d=undefined;_0x6ad53e[_0x62d8('0x43')](!![]);if(_0x66c934[_0x62d8('0x41')][_0x7065e9]){delete _0x66c934[_0x62d8('0x41')][_0x7065e9];}_0x47e7d8[_0x62d8('0x3b')]();});_0x66c934[_0x62d8('0x41')][_0x7065e9]['on']('complete',function(){if(_0x66c934[_0x62d8('0x41')][_0x7065e9]){delete _0x66c934[_0x62d8('0x41')][_0x7065e9];}});_0x35e24d=setTimeout(function(){logger[_0x62d8('0x2c')](_0x62d8('0x44'),_0x7065e9);endRouting(_0x7065e9,_0x581941,_0x27b014,_0x66c934);clearTimeout(_0x35e24d);_0x6ad53e['close'](!![]);_0x47e7d8[_0x62d8('0x45')]();},_0x36a8f9);switch(_0x581941[_0x62d8('0x46')]){case'rrmemory':strategy[_0x62d8('0x47')](_0x6ad53e,_0x581941,_0x66c934,_0x27b014);break;default:strategy[_0x62d8('0x48')](_0x6ad53e,_0x581941,_0x66c934,_0x27b014);}}else{logger[_0x62d8('0x39')]('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x7065e9,_0x527517[_0x62d8('0x2e')]);_0x47e7d8[_0x62d8('0x3b')]();}}}catch(_0x1a3ce2){console[_0x62d8('0x49')](_0x1a3ce2);logger['error']('[%s][QUEUE]\x20%s',_0x7065e9,_0x1a3ce2['stack']);_0x47e7d8[_0x62d8('0x3b')]();}};};