Built motion from commit 1fa89557.|2.6.10
[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 _0x828b=['list','upperFirst','channel','interaction','MessageId','message','chat','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','create\x20queue\x20report','YYYY-MM-DD\x20HH:mm:ss','[%s][STOP:QUEUE][NAME:%s]','update','error','update\x20queue\x20report','toLowerCase','length','[%s][QUEUE]\x20%s','map','join','stop','Queues','timeout','createQueue','qtimeout','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','rules','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','validate','util','ioredis','../../../../config/environment','routing','redis','defaults','localhost','socket.io-emitter','queue_id','account','queue','from','emit','capitalize','InteractionId','format','%sQueuesWaitingInteractions','pick','%s:queue:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','string','number','waiting','body','contact'];(function(_0x2e50a2,_0x27f31e){var _0x47e5de=function(_0x4e1f70){while(--_0x4e1f70){_0x2e50a2['push'](_0x2e50a2['shift']());}};_0x47e5de(++_0x27f31e);}(_0x828b,0x109));var _0xb828=function(_0x4a3898,_0x4c9853){_0x4a3898=_0x4a3898-0x0;var _0x25ceb0=_0x828b[_0x4a3898];return _0x25ceb0;};'use strict';var schema=require(_0xb828('0x0'));var _=require('lodash');var util=require(_0xb828('0x1'));var seqqueue=require('seq-queue');var moment=require('moment');var Redis=require(_0xb828('0x2'));var config=require(_0xb828('0x3'));var logger=require('../../../../config/logger')(_0xb828('0x4'));var strategy=require('./strategy');config[_0xb828('0x5')]=_[_0xb828('0x6')](config['redis'],{'host':_0xb828('0x7'),'port':0x18eb});var io=require(_0xb828('0x8'))(new Redis(config[_0xb828('0x5')]));var attributes=['id',_0xb828('0x9'),_0xb828('0xa'),_0xb828('0xb'),_0xb828('0xc'),'joinAt'];function emit(_0x4221a9,_0x61b400,_0x239464){io['to'](_0x4221a9)[_0xb828('0xd')](_0x61b400,_0x239464);}function emitChannelQueueInteraction(_0x57a701,_0x2caca8,_0x4f4e44,_0x51d854,_0x5bf5f2,_0x433115,_0x5b5083,_0x1b063c){var _0x130e5f=_['clone'](_0x4f4e44);_0x130e5f[_0xb828('0x9')]=_0x1b063c;_0x130e5f['queue']=_0x2caca8;_0x130e5f[_0xb828('0xa')]=_0x51d854;_0x130e5f['id']=_0x5bf5f2;if(_0x433115){attributes['push'](_[_0xb828('0xe')](_0x57a701)+_0xb828('0xf'));_0x5b5083[util[_0xb828('0x10')](_0xb828('0x11'),_0x57a701)][_0x5bf5f2]=_[_0xb828('0x12')](_0x130e5f,attributes);}else{delete _0x5b5083[util[_0xb828('0x10')](_0xb828('0x11'),_0x57a701)][_0x5bf5f2];}emit(util[_0xb828('0x10')](_0xb828('0x13'),_0x57a701,_0x2caca8),util[_0xb828('0x10')]('%s_queue_waiting_interaction:%s',_0x57a701,_0x433115?_0xb828('0x14'):_0xb828('0x15')),_[_0xb828('0x12')](_0x130e5f,attributes));}var rpc={'openchannelQueueReport':require(_0xb828('0x16')),'mailQueueReport':require(_0xb828('0x17')),'chatQueueReport':require('../../rpc/chatQueueReport'),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require(_0xb828('0x18')),'whatsappQueueReport':require(_0xb828('0x19'))};var queue=schema({'name':{'type':_0xb828('0x1a'),'required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0xb828('0x1b'),'message':'timeout\x20is\x20a\x20number'}});function startRouting(_0x5af6d8,_0x10d1c3,_0x491662,_0x3e25df){if(_0x5af6d8&&_0x10d1c3&&_0x491662){_0x10d1c3[_0xb828('0x1c')]+=0x1;var _0x3bebec={'uniqueid':_0x5af6d8,'from':_0x491662[_0xb828('0x1d')]?_0x491662[_0xb828('0x1d')][_0xb828('0xc')]:'','joinAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x491662[_0xb828('0x1e')]?_0x491662[_0xb828('0x1e')]['id']:null,'ListId':_0x491662[_0xb828('0x1f')]?_0x491662[_0xb828('0x1f')]['id']:null};_0x3bebec[_[_0xb828('0x20')](_0x491662[_0xb828('0x21')])+'QueueId']=_0x10d1c3['id']||null;_0x3bebec[_[_0xb828('0x20')](_0x491662[_0xb828('0x21')])+_0xb828('0xf')]=_0x491662[_0xb828('0x22')]?_0x491662[_0xb828('0x22')]['id']:null;_0x3bebec[_[_0xb828('0x20')](_0x491662[_0xb828('0x21')])+_0xb828('0x23')]=_0x491662[_0xb828('0x24')]?_0x491662[_0xb828('0x24')]['id']:null;_0x3bebec[_[_0xb828('0x20')](_0x491662[_0xb828('0x21')])+(_0x491662[_0xb828('0x21')]!==_0xb828('0x25')?_0xb828('0x26'):_0xb828('0x27'))]=_0x491662[_0xb828('0xa')]?_0x491662[_0xb828('0xa')]['id']:null;logger[_0xb828('0x28')](util['format'](_0xb828('0x29'),_0x5af6d8,_0x10d1c3[_0xb828('0x2a')]));emitChannelQueueInteraction(_0x491662['channel'],_0x10d1c3[_0xb828('0x2a')],_0x3bebec,_0x491662[_0xb828('0xa')]['name'],_0x491662['message']['id'],!![],_0x3e25df,_0x10d1c3['id']);if(rpc[_0x491662['channel']+'QueueReport']){return rpc[_0x491662[_0xb828('0x21')]+_0xb828('0x2b')][_0xb828('0x2c')](_0x3bebec)[_0xb828('0x2d')](function(_0x38a839){logger['error'](_0xb828('0x2e'));});}}}function stopRouting(_0x514ab4,_0x1ab618,_0x32472b,_0x3f1c63){if(_0x514ab4&&_0x1ab618){_0x1ab618[_0xb828('0x1c')]-=0x1;var _0x33795a={'leaveAt':moment()[_0xb828('0x10')](_0xb828('0x2f')),'acceptAt':moment()[_0xb828('0x10')](_0xb828('0x2f')),'reason':'accepted'};logger[_0xb828('0x28')](util[_0xb828('0x10')](_0xb828('0x30'),_0x514ab4,_0x1ab618['name']));emitChannelQueueInteraction(_0x32472b[_0xb828('0x21')],_0x1ab618[_0xb828('0x2a')],_0x32472b['body'],_0x32472b[_0xb828('0xa')][_0xb828('0x2a')],_0x32472b['message']['id'],![],_0x3f1c63,_0x1ab618['id']);if(rpc[_0x32472b['channel']+_0xb828('0x2b')]){return rpc[_0x32472b[_0xb828('0x21')]+_0xb828('0x2b')][_0xb828('0x31')](_0x514ab4,_0x33795a)['catch'](function(_0x44dc76){logger[_0xb828('0x32')](_0xb828('0x33'));});}}}function endRouting(_0x4e4f62,_0x2fa1c8,_0x1edaa1,_0x77c488){if(_0x4e4f62&&_0x2fa1c8){_0x2fa1c8['waiting']-=0x1;var _0x3c6ba1={'leaveAt':moment()['format'](_0xb828('0x2f')),'exitAt':moment()[_0xb828('0x10')](_0xb828('0x2f')),'reason':'timeout'};logger[_0xb828('0x28')](util[_0xb828('0x10')]('[%s][END:QUEUE][NAME:%s]',_0x4e4f62,_0x2fa1c8['name']));emitChannelQueueInteraction(_0x1edaa1[_0xb828('0x21')],_0x2fa1c8[_0xb828('0x2a')],_0x1edaa1['body'],_0x1edaa1['account'][_0xb828('0x2a')],_0x1edaa1[_0xb828('0x24')]['id'],![],_0x77c488);if(rpc[_0x1edaa1['channel']+_0xb828('0x2b')]){return rpc[_0x1edaa1[_0xb828('0x21')]+'QueueReport']['update'](_0x4e4f62,_0x3c6ba1)[_0xb828('0x2d')](function(_0x34d180){logger[_0xb828('0x32')](_0xb828('0x33'));});}}}function handleFindQueue(_0x10f3db){return function(_0x2e6ad8){return _0x2e6ad8['name'][_0xb828('0x34')]()===_0x10f3db['toLowerCase']();};}exports['consequence']=function(_0x2500fb,_0x3f4aa5,_0x1f9541,_0x2006d6){return function(_0x27019c){try{var _0x1cfbe3={'name':_0x3f4aa5[0x0],'timeout':_0x3f4aa5[0x1]};var _0x4d3082=queue['validate'](_0x1cfbe3,{'typecast':!![]});if(_0x4d3082[_0xb828('0x35')]){logger[_0xb828('0x32')](_0xb828('0x36'),_0x2500fb,_[_0xb828('0x37')](_0x4d3082,'message')[_0xb828('0x38')](',\x20'));_0x27019c[_0xb828('0x39')]();}else{var _0x2b9eef=_['find'](_0x1f9541[_0x2006d6[_0xb828('0x21')]+_0xb828('0x3a')],handleFindQueue(_0x1cfbe3[_0xb828('0x2a')]));if(_0x2b9eef){startRouting(_0x2500fb,_0x2b9eef,_0x2006d6,_0x1f9541);var _0x19a783=(_0x2b9eef['timeout']||0xa)*0x3e8;var _0xeec37a=(_0x1cfbe3[_0xb828('0x3b')]||0x14)*0x3e8;var _0x4772ec;if(_0x19a783>_0xeec37a){_0xeec37a=_0x19a783;}var _0x5aedae=seqqueue[_0xb828('0x3c')](_0x19a783);_0x5aedae['id']=_0x2500fb;_0x5aedae['atimeout']=_0x19a783;_0x5aedae[_0xb828('0x3d')]=_0xeec37a;_0x5aedae[_0xb828('0x21')]=_0x2006d6[_0xb828('0x21')];_0x1f9541['rules'][_0x2500fb]['on'](_0xb828('0x3e'),function(){logger[_0xb828('0x28')](_0xb828('0x3f'),_0x2500fb);stopRouting(_0x2500fb,_0x2b9eef,_0x2006d6,_0x1f9541);clearTimeout(_0x4772ec);_0x4772ec=undefined;_0x5aedae['close'](!![]);if(_0x1f9541[_0xb828('0x40')][_0x2500fb]){delete _0x1f9541[_0xb828('0x40')][_0x2500fb];}_0x27019c['stop']();});_0x1f9541[_0xb828('0x40')][_0x2500fb]['on'](_0xb828('0x41'),function(){if(_0x1f9541[_0xb828('0x40')][_0x2500fb]){delete _0x1f9541[_0xb828('0x40')][_0x2500fb];}});_0x4772ec=setTimeout(function(){logger[_0xb828('0x28')](_0xb828('0x42'),_0x2500fb);endRouting(_0x2500fb,_0x2b9eef,_0x2006d6,_0x1f9541);clearTimeout(_0x4772ec);_0x5aedae['close'](!![]);_0x27019c[_0xb828('0x43')]();},_0xeec37a);switch(_0x2b9eef[_0xb828('0x44')]){case _0xb828('0x45'):strategy['rrmemory'](_0x5aedae,_0x2b9eef,_0x1f9541,_0x2006d6);break;default:strategy[_0xb828('0x46')](_0x5aedae,_0x2b9eef,_0x1f9541,_0x2006d6);}}else{logger[_0xb828('0x32')](_0xb828('0x47'),_0x2500fb,_0x1cfbe3[_0xb828('0x2a')]);_0x27019c[_0xb828('0x39')]();}}}catch(_0x362fcd){console[_0xb828('0x48')](_0x362fcd);logger[_0xb828('0x32')](_0xb828('0x36'),_0x2500fb,_0x362fcd[_0xb828('0x49')]);_0x27019c[_0xb828('0x39')]();}};};