Built motion from commit 497d3d92.|2.5.43
[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 _0x8130=['name','catch','create\x20queue\x20report','info','[%s][STOP:QUEUE][NAME:%s]','QueueReport','update','error','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','consequence','[%s][QUEUE]\x20%s','map','join','find','Queues','createQueue','qtimeout','rules','end','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','stop','validate','moment','ioredis','../../../../config/logger','./strategy','defaults','redis','localhost','socket.io-emitter','queue_id','account','from','joinAt','emit','format','pick','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','InteractionId','interaction','MessageId','message','chat','WebsiteId','[%s][START:QUEUE][NAME:%s]'];(function(_0x59db96,_0x447983){var _0x4188e7=function(_0x1c62fc){while(--_0x1c62fc){_0x59db96['push'](_0x59db96['shift']());}};_0x4188e7(++_0x447983);}(_0x8130,0x1d4));var _0x0813=function(_0x17cf32,_0xab6db6){_0x17cf32=_0x17cf32-0x0;var _0x4a5701=_0x8130[_0x17cf32];return _0x4a5701;};'use strict';var schema=require(_0x0813('0x0'));var _=require('lodash');var util=require('util');var seqqueue=require('seq-queue');var moment=require(_0x0813('0x1'));var Redis=require(_0x0813('0x2'));var config=require('../../../../config/environment');var logger=require(_0x0813('0x3'))('routing');var strategy=require(_0x0813('0x4'));config['redis']=_[_0x0813('0x5')](config[_0x0813('0x6')],{'host':_0x0813('0x7'),'port':0x18eb});var io=require(_0x0813('0x8'))(new Redis(config[_0x0813('0x6')]));var attributes=['id',_0x0813('0x9'),_0x0813('0xa'),'queue',_0x0813('0xb'),_0x0813('0xc')];function emit(_0x5552e9,_0x1d8e5b,_0x579487){io['to'](_0x5552e9)[_0x0813('0xd')](_0x1d8e5b,_0x579487);}function emitChannelQueueInteraction(_0x1fe342,_0x317fab,_0x30115a,_0x2fe0cd,_0x5b6adf,_0x3b5870,_0x22dafe,_0x1b0e6e){var _0x32f9aa=_['clone'](_0x30115a);_0x32f9aa[_0x0813('0x9')]=_0x1b0e6e;_0x32f9aa['queue']=_0x317fab;_0x32f9aa[_0x0813('0xa')]=_0x2fe0cd;_0x32f9aa['id']=_0x5b6adf;if(_0x3b5870){_0x22dafe[util[_0x0813('0xe')]('%sQueuesWaitingInteractions',_0x1fe342)][_0x5b6adf]=_[_0x0813('0xf')](_0x32f9aa,attributes);}else{delete _0x22dafe[util[_0x0813('0xe')]('%sQueuesWaitingInteractions',_0x1fe342)][_0x5b6adf];}emit(util['format'](_0x0813('0x10'),_0x1fe342,_0x317fab),util[_0x0813('0xe')](_0x0813('0x11'),_0x1fe342,_0x3b5870?_0x0813('0x12'):_0x0813('0x13')),_[_0x0813('0xf')](_0x32f9aa,attributes));}var rpc={'openchannelQueueReport':require(_0x0813('0x14')),'mailQueueReport':require(_0x0813('0x15')),'chatQueueReport':require(_0x0813('0x16')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require(_0x0813('0x17')),'whatsappQueueReport':require(_0x0813('0x18'))};var queue=schema({'name':{'type':_0x0813('0x19'),'required':!![],'message':_0x0813('0x1a')},'timeout':{'type':'number','message':_0x0813('0x1b')}});function startRouting(_0xc46e1d,_0x345318,_0x460bef,_0x237670){if(_0xc46e1d&&_0x345318&&_0x460bef){_0x345318[_0x0813('0x1c')]+=0x1;var _0x34f57a={'uniqueid':_0xc46e1d,'from':_0x460bef[_0x0813('0x1d')]?_0x460bef[_0x0813('0x1d')]['from']:'','joinAt':moment()[_0x0813('0xe')](_0x0813('0x1e')),'ContactId':_0x460bef[_0x0813('0x1f')]?_0x460bef['contact']['id']:null,'ListId':_0x460bef[_0x0813('0x20')]?_0x460bef[_0x0813('0x20')]['id']:null};_0x34f57a[_[_0x0813('0x21')](_0x460bef[_0x0813('0x22')])+_0x0813('0x23')]=_0x345318['id']||null;_0x34f57a[_['upperFirst'](_0x460bef[_0x0813('0x22')])+_0x0813('0x24')]=_0x460bef[_0x0813('0x25')]?_0x460bef[_0x0813('0x25')]['id']:null;_0x34f57a[_[_0x0813('0x21')](_0x460bef[_0x0813('0x22')])+_0x0813('0x26')]=_0x460bef['message']?_0x460bef[_0x0813('0x27')]['id']:null;_0x34f57a[_[_0x0813('0x21')](_0x460bef[_0x0813('0x22')])+(_0x460bef['channel']!==_0x0813('0x28')?'AccountId':_0x0813('0x29'))]=_0x460bef[_0x0813('0xa')]?_0x460bef['account']['id']:null;logger['info'](util[_0x0813('0xe')](_0x0813('0x2a'),_0xc46e1d,_0x345318[_0x0813('0x2b')]));emitChannelQueueInteraction(_0x460bef[_0x0813('0x22')],_0x345318[_0x0813('0x2b')],_0x34f57a,_0x460bef[_0x0813('0xa')][_0x0813('0x2b')],_0x460bef[_0x0813('0x27')]['id'],!![],_0x237670,_0x345318['id']);if(rpc[_0x460bef['channel']+'QueueReport']){return rpc[_0x460bef[_0x0813('0x22')]+'QueueReport']['create'](_0x34f57a)[_0x0813('0x2c')](function(_0x58e61a){logger['error'](_0x0813('0x2d'));});}}}function stopRouting(_0x244938,_0x3b316a,_0x68fa56,_0x221240){if(_0x244938&&_0x3b316a){_0x3b316a[_0x0813('0x1c')]-=0x1;var _0x455c66={'leaveAt':moment()[_0x0813('0xe')](_0x0813('0x1e')),'acceptAt':moment()[_0x0813('0xe')](_0x0813('0x1e')),'reason':'accepted'};logger[_0x0813('0x2e')](util['format'](_0x0813('0x2f'),_0x244938,_0x3b316a['name']));emitChannelQueueInteraction(_0x68fa56[_0x0813('0x22')],_0x3b316a[_0x0813('0x2b')],_0x68fa56[_0x0813('0x1d')],_0x68fa56[_0x0813('0xa')][_0x0813('0x2b')],_0x68fa56['message']['id'],![],_0x221240,_0x3b316a['id']);if(rpc[_0x68fa56[_0x0813('0x22')]+_0x0813('0x30')]){return rpc[_0x68fa56[_0x0813('0x22')]+_0x0813('0x30')][_0x0813('0x31')](_0x244938,_0x455c66)[_0x0813('0x2c')](function(_0x2d87ac){logger[_0x0813('0x32')](_0x0813('0x33'));});}}}function endRouting(_0x518af9,_0x54c096,_0x41c2c6,_0x526d27){if(_0x518af9&&_0x54c096){_0x54c096[_0x0813('0x1c')]-=0x1;var _0x7dc47={'leaveAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()[_0x0813('0xe')](_0x0813('0x1e')),'reason':_0x0813('0x34')};logger[_0x0813('0x2e')](util['format'](_0x0813('0x35'),_0x518af9,_0x54c096[_0x0813('0x2b')]));emitChannelQueueInteraction(_0x41c2c6['channel'],_0x54c096[_0x0813('0x2b')],_0x41c2c6['body'],_0x41c2c6[_0x0813('0xa')][_0x0813('0x2b')],_0x41c2c6['message']['id'],![],_0x526d27);if(rpc[_0x41c2c6[_0x0813('0x22')]+_0x0813('0x30')]){return rpc[_0x41c2c6[_0x0813('0x22')]+'QueueReport'][_0x0813('0x31')](_0x518af9,_0x7dc47)[_0x0813('0x2c')](function(_0x172902){logger[_0x0813('0x32')](_0x0813('0x33'));});}}}function handleFindQueue(_0x472579){return function(_0x31a756){return _0x31a756[_0x0813('0x2b')]['toLowerCase']()===_0x472579['toLowerCase']();};}exports[_0x0813('0x36')]=function(_0x40854e,_0x2d4f34,_0x2ee453,_0x435e94){return function(_0x2ae8df){try{var _0x377f74={'name':_0x2d4f34[0x0],'timeout':_0x2d4f34[0x1]};var _0x1f2f16=queue['validate'](_0x377f74,{'typecast':!![]});if(_0x1f2f16['length']){logger[_0x0813('0x32')](_0x0813('0x37'),_0x40854e,_[_0x0813('0x38')](_0x1f2f16,_0x0813('0x27'))[_0x0813('0x39')](',\x20'));_0x2ae8df['stop']();}else{var _0x11ecbb=_[_0x0813('0x3a')](_0x2ee453[_0x435e94['channel']+_0x0813('0x3b')],handleFindQueue(_0x377f74[_0x0813('0x2b')]));if(_0x11ecbb){startRouting(_0x40854e,_0x11ecbb,_0x435e94,_0x2ee453);var _0x5e3930=(_0x11ecbb[_0x0813('0x34')]||0xa)*0x3e8;var _0x217f70=(_0x377f74[_0x0813('0x34')]||0x14)*0x3e8;var _0x476325,_0x89d19b;if(_0x5e3930>_0x217f70){_0x217f70=_0x5e3930;}var _0x54f2b7=seqqueue[_0x0813('0x3c')](_0x5e3930);_0x54f2b7['id']=_0x40854e;_0x54f2b7['atimeout']=_0x5e3930;_0x54f2b7[_0x0813('0x3d')]=_0x217f70;_0x54f2b7['channel']=_0x435e94[_0x0813('0x22')];_0x2ee453[_0x0813('0x3e')][_0x40854e]['on'](_0x0813('0x3f'),function(){logger['info']('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x40854e);stopRouting(_0x40854e,_0x11ecbb,_0x435e94,_0x2ee453);clearTimeout(_0x476325);_0x476325=undefined;_0x54f2b7[_0x0813('0x40')](!![]);if(_0x2ee453['rules'][_0x40854e]){delete _0x2ee453[_0x0813('0x3e')][_0x40854e];}_0x2ae8df['stop']();});_0x2ee453[_0x0813('0x3e')][_0x40854e]['on'](_0x0813('0x41'),function(){if(_0x2ee453[_0x0813('0x3e')][_0x40854e]){delete _0x2ee453[_0x0813('0x3e')][_0x40854e];}});_0x476325=setTimeout(function(){logger[_0x0813('0x2e')](_0x0813('0x42'),_0x40854e);endRouting(_0x40854e,_0x11ecbb,_0x435e94,_0x2ee453);clearTimeout(_0x476325);_0x54f2b7['close'](!![]);_0x2ae8df['next']();},_0x217f70);switch(_0x11ecbb['strategy']){case'rrmemory':strategy[_0x0813('0x43')](_0x54f2b7,_0x11ecbb,_0x2ee453,_0x435e94);break;default:strategy[_0x0813('0x44')](_0x54f2b7,_0x11ecbb,_0x2ee453,_0x435e94);}}else{logger['error'](_0x0813('0x45'),_0x40854e,_0x377f74[_0x0813('0x2b')]);_0x2ae8df['stop']();}}}catch(_0x4e9441){console[_0x0813('0x46')](_0x4e9441);logger[_0x0813('0x32')](_0x0813('0x37'),_0x40854e,_0x4e9441[_0x0813('0x47')]);_0x2ae8df[_0x0813('0x48')]();}};};