c7464ed955fee14c07c33c0e57aaae2d3ca4959e
[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 _0xf249=['emit','clone','account','format','%sQueuesWaitingInteractions','pick','%s:queue:%s','save','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','string','number','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','interaction','message','chat','WebsiteId','info','name','QueueReport','create','error','create\x20queue\x20report','[%s][STOP:QUEUE][NAME:%s]','catch','update\x20queue\x20report','[%s][END:QUEUE][NAME:%s]','update','toLowerCase','consequence','length','join','find','Queues','timeout','createQueue','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','stop','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','[%s][QUEUE]\x20%s','stack','validate','seq-queue','moment','../../../../config/environment','routing','./strategy','redis','defaults','socket.io-emitter','queue_id','queue','from'];(function(_0x596a99,_0x584f86){var _0x2af192=function(_0x3c66bb){while(--_0x3c66bb){_0x596a99['push'](_0x596a99['shift']());}};_0x2af192(++_0x584f86);}(_0xf249,0x8c));var _0x9f24=function(_0x311d8d,_0x7bbd63){_0x311d8d=_0x311d8d-0x0;var _0x1b1734=_0xf249[_0x311d8d];return _0x1b1734;};'use strict';var schema=require(_0x9f24('0x0'));var _=require('lodash');var util=require('util');var seqqueue=require(_0x9f24('0x1'));var moment=require(_0x9f24('0x2'));var Redis=require('ioredis');var config=require(_0x9f24('0x3'));var logger=require('../../../../config/logger')(_0x9f24('0x4'));var strategy=require(_0x9f24('0x5'));config[_0x9f24('0x6')]=_[_0x9f24('0x7')](config[_0x9f24('0x6')],{'host':'localhost','port':0x18eb});var io=require(_0x9f24('0x8'))(new Redis(config['redis']));var attributes=['id',_0x9f24('0x9'),'account',_0x9f24('0xa'),_0x9f24('0xb'),'joinAt'];function emit(_0x2e12df,_0x529036,_0x2bb653){io['to'](_0x2e12df)[_0x9f24('0xc')](_0x529036,_0x2bb653);}function emitChannelQueueInteraction(_0x2717f6,_0x59abf1,_0x4dda5a,_0x508751,_0x2719bd,_0x4fcd36,_0x47af64,_0x33dc69){var _0x1dbe87=_[_0x9f24('0xd')](_0x4dda5a);_0x1dbe87[_0x9f24('0x9')]=_0x33dc69;_0x1dbe87[_0x9f24('0xa')]=_0x59abf1;_0x1dbe87[_0x9f24('0xe')]=_0x508751;_0x1dbe87['id']=_0x2719bd;if(_0x4fcd36){_0x47af64[util[_0x9f24('0xf')](_0x9f24('0x10'),_0x2717f6)][_0x2719bd]=_[_0x9f24('0x11')](_0x1dbe87,attributes);}else{delete _0x47af64[util['format'](_0x9f24('0x10'),_0x2717f6)][_0x2719bd];}emit(util[_0x9f24('0xf')](_0x9f24('0x12'),_0x2717f6,_0x59abf1),util[_0x9f24('0xf')]('%s_queue_waiting_interaction:%s',_0x2717f6,_0x4fcd36?_0x9f24('0x13'):'remove'),_[_0x9f24('0x11')](_0x1dbe87,attributes));}var rpc={'openchannelQueueReport':require(_0x9f24('0x14')),'mailQueueReport':require(_0x9f24('0x15')),'chatQueueReport':require(_0x9f24('0x16')),'smsQueueReport':require(_0x9f24('0x17')),'faxQueueReport':require(_0x9f24('0x18')),'whatsappQueueReport':require(_0x9f24('0x19'))};var queue=schema({'name':{'type':_0x9f24('0x1a'),'required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0x9f24('0x1b'),'message':_0x9f24('0x1c')}});function startRouting(_0x15a1f4,_0x49f54e,_0x65081b,_0x59b58d){if(_0x15a1f4&&_0x49f54e&&_0x65081b){_0x49f54e[_0x9f24('0x1d')]+=0x1;var _0x4911ea={'uniqueid':_0x15a1f4,'from':_0x65081b[_0x9f24('0x1e')]?_0x65081b['body']['from']:'','joinAt':moment()['format'](_0x9f24('0x1f')),'ContactId':_0x65081b[_0x9f24('0x20')]?_0x65081b[_0x9f24('0x20')]['id']:null,'ListId':_0x65081b[_0x9f24('0x21')]?_0x65081b['list']['id']:null};_0x4911ea[_[_0x9f24('0x22')](_0x65081b[_0x9f24('0x23')])+_0x9f24('0x24')]=_0x49f54e['id']||null;_0x4911ea[_['upperFirst'](_0x65081b['channel'])+'InteractionId']=_0x65081b[_0x9f24('0x25')]?_0x65081b[_0x9f24('0x25')]['id']:null;_0x4911ea[_[_0x9f24('0x22')](_0x65081b[_0x9f24('0x23')])+'MessageId']=_0x65081b[_0x9f24('0x26')]?_0x65081b[_0x9f24('0x26')]['id']:null;_0x4911ea[_[_0x9f24('0x22')](_0x65081b[_0x9f24('0x23')])+(_0x65081b['channel']!==_0x9f24('0x27')?'AccountId':_0x9f24('0x28'))]=_0x65081b[_0x9f24('0xe')]?_0x65081b[_0x9f24('0xe')]['id']:null;logger[_0x9f24('0x29')](util[_0x9f24('0xf')]('[%s][START:QUEUE][NAME:%s]',_0x15a1f4,_0x49f54e[_0x9f24('0x2a')]));emitChannelQueueInteraction(_0x65081b[_0x9f24('0x23')],_0x49f54e[_0x9f24('0x2a')],_0x4911ea,_0x65081b[_0x9f24('0xe')][_0x9f24('0x2a')],_0x65081b['message']['id'],!![],_0x59b58d,_0x49f54e['id']);if(rpc[_0x65081b[_0x9f24('0x23')]+_0x9f24('0x2b')]){return rpc[_0x65081b[_0x9f24('0x23')]+'QueueReport'][_0x9f24('0x2c')](_0x4911ea)['catch'](function(_0x4926e6){logger[_0x9f24('0x2d')](_0x9f24('0x2e'));});}}}function stopRouting(_0x4c46ea,_0x457f35,_0x15ae6c,_0x973a8c){if(_0x4c46ea&&_0x457f35){_0x457f35[_0x9f24('0x1d')]-=0x1;var _0x2e1bf7={'leaveAt':moment()[_0x9f24('0xf')](_0x9f24('0x1f')),'acceptAt':moment()['format'](_0x9f24('0x1f')),'reason':'accepted'};logger[_0x9f24('0x29')](util['format'](_0x9f24('0x2f'),_0x4c46ea,_0x457f35[_0x9f24('0x2a')]));emitChannelQueueInteraction(_0x15ae6c[_0x9f24('0x23')],_0x457f35[_0x9f24('0x2a')],_0x15ae6c[_0x9f24('0x1e')],_0x15ae6c[_0x9f24('0xe')][_0x9f24('0x2a')],_0x15ae6c[_0x9f24('0x26')]['id'],![],_0x973a8c,_0x457f35['id']);if(rpc[_0x15ae6c[_0x9f24('0x23')]+_0x9f24('0x2b')]){return rpc[_0x15ae6c['channel']+_0x9f24('0x2b')]['update'](_0x4c46ea,_0x2e1bf7)[_0x9f24('0x30')](function(_0x23bc64){logger['error'](_0x9f24('0x31'));});}}}function endRouting(_0xc657dd,_0x4c536b,_0x39f911,_0x2cfca9){if(_0xc657dd&&_0x4c536b){_0x4c536b[_0x9f24('0x1d')]-=0x1;var _0x3e5038={'leaveAt':moment()['format'](_0x9f24('0x1f')),'exitAt':moment()[_0x9f24('0xf')](_0x9f24('0x1f')),'reason':'timeout'};logger[_0x9f24('0x29')](util[_0x9f24('0xf')](_0x9f24('0x32'),_0xc657dd,_0x4c536b[_0x9f24('0x2a')]));emitChannelQueueInteraction(_0x39f911[_0x9f24('0x23')],_0x4c536b['name'],_0x39f911['body'],_0x39f911[_0x9f24('0xe')][_0x9f24('0x2a')],_0x39f911['message']['id'],![],_0x2cfca9);if(rpc[_0x39f911['channel']+_0x9f24('0x2b')]){return rpc[_0x39f911[_0x9f24('0x23')]+_0x9f24('0x2b')][_0x9f24('0x33')](_0xc657dd,_0x3e5038)[_0x9f24('0x30')](function(_0x1c81d2){logger['error'](_0x9f24('0x31'));});}}}function handleFindQueue(_0x3a1ff8){return function(_0x63ef18){return _0x63ef18[_0x9f24('0x2a')][_0x9f24('0x34')]()===_0x3a1ff8[_0x9f24('0x34')]();};}exports[_0x9f24('0x35')]=function(_0x84bd8d,_0x3f6beb,_0x103cb5,_0x50fadd){return function(_0x524bf3){try{var _0x54907d={'name':_0x3f6beb[0x0],'timeout':_0x3f6beb[0x1]};var _0x40c0d0=queue[_0x9f24('0x0')](_0x54907d,{'typecast':!![]});if(_0x40c0d0[_0x9f24('0x36')]){logger[_0x9f24('0x2d')]('[%s][QUEUE]\x20%s',_0x84bd8d,_['map'](_0x40c0d0,_0x9f24('0x26'))[_0x9f24('0x37')](',\x20'));_0x524bf3['stop']();}else{var _0x4c39be=_[_0x9f24('0x38')](_0x103cb5[_0x50fadd[_0x9f24('0x23')]+_0x9f24('0x39')],handleFindQueue(_0x54907d[_0x9f24('0x2a')]));if(_0x4c39be){startRouting(_0x84bd8d,_0x4c39be,_0x50fadd,_0x103cb5);var _0xc6ff1d=(_0x4c39be['timeout']||0xa)*0x3e8;var _0x4386ff=(_0x54907d[_0x9f24('0x3a')]||0x14)*0x3e8;var _0x5acc4c,_0x3344ff;if(_0xc6ff1d>_0x4386ff){_0x4386ff=_0xc6ff1d;}var _0x4ba788=seqqueue[_0x9f24('0x3b')](_0xc6ff1d);_0x4ba788['id']=_0x84bd8d;_0x4ba788[_0x9f24('0x3c')]=_0xc6ff1d;_0x4ba788[_0x9f24('0x3d')]=_0x4386ff;_0x4ba788[_0x9f24('0x23')]=_0x50fadd['channel'];_0x103cb5[_0x9f24('0x3e')][_0x84bd8d]['on'](_0x9f24('0x3f'),function(){logger[_0x9f24('0x29')](_0x9f24('0x40'),_0x84bd8d);stopRouting(_0x84bd8d,_0x4c39be,_0x50fadd,_0x103cb5);clearTimeout(_0x5acc4c);_0x5acc4c=undefined;_0x4ba788['close'](!![]);if(_0x103cb5[_0x9f24('0x3e')][_0x84bd8d]){delete _0x103cb5[_0x9f24('0x3e')][_0x84bd8d];}_0x524bf3[_0x9f24('0x41')]();});_0x103cb5[_0x9f24('0x3e')][_0x84bd8d]['on'](_0x9f24('0x42'),function(){if(_0x103cb5['rules'][_0x84bd8d]){delete _0x103cb5[_0x9f24('0x3e')][_0x84bd8d];}});_0x5acc4c=setTimeout(function(){logger[_0x9f24('0x29')](_0x9f24('0x43'),_0x84bd8d);endRouting(_0x84bd8d,_0x4c39be,_0x50fadd,_0x103cb5);clearTimeout(_0x5acc4c);_0x4ba788['close'](!![]);_0x524bf3[_0x9f24('0x44')]();},_0x4386ff);switch(_0x4c39be[_0x9f24('0x45')]){case'rrmemory':strategy[_0x9f24('0x46')](_0x4ba788,_0x4c39be,_0x103cb5,_0x50fadd);break;default:strategy[_0x9f24('0x47')](_0x4ba788,_0x4c39be,_0x103cb5,_0x50fadd);}}else{logger['error'](_0x9f24('0x48'),_0x84bd8d,_0x54907d['name']);_0x524bf3[_0x9f24('0x41')]();}}}catch(_0x177394){console[_0x9f24('0x49')](_0x177394);logger[_0x9f24('0x2d')](_0x9f24('0x4a'),_0x84bd8d,_0x177394[_0x9f24('0x4b')]);_0x524bf3[_0x9f24('0x41')]();}};};