Built motion from commit 9d0783e6.|2.6.13
[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 _0x2a05=['emit','clone','push','capitalize','InteractionId','format','%sQueuesWaitingInteractions','%s:queue:%s','save','remove','pick','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','number','timeout\x20is\x20a\x20number','waiting','body','from','contact','list','upperFirst','QueueId','interaction','channel','MessageId','message','chat','WebsiteId','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','create\x20queue\x20report','YYYY-MM-DD\x20HH:mm:ss','accepted','info','[%s][STOP:QUEUE][NAME:%s]','update\x20queue\x20report','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','validate','length','[%s][QUEUE]\x20%s','map','stop','Queues','timeout','createQueue','atimeout','qtimeout','rules','end','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','strategy','rrmemory','beepall','log','lodash','seq-queue','moment','../../../../config/environment','../../../../config/logger','routing','./strategy','defaults','redis','localhost','socket.io-emitter','queue_id','account','queue','joinAt'];(function(_0x37ea21,_0xa5926){var _0xe8e1d3=function(_0x4102ef){while(--_0x4102ef){_0x37ea21['push'](_0x37ea21['shift']());}};_0xe8e1d3(++_0xa5926);}(_0x2a05,0x181));var _0x52a0=function(_0x27cbd6,_0x547cd1){_0x27cbd6=_0x27cbd6-0x0;var _0xb0c928=_0x2a05[_0x27cbd6];return _0xb0c928;};'use strict';var schema=require('validate');var _=require(_0x52a0('0x0'));var util=require('util');var seqqueue=require(_0x52a0('0x1'));var moment=require(_0x52a0('0x2'));var Redis=require('ioredis');var config=require(_0x52a0('0x3'));var logger=require(_0x52a0('0x4'))(_0x52a0('0x5'));var strategy=require(_0x52a0('0x6'));config['redis']=_[_0x52a0('0x7')](config[_0x52a0('0x8')],{'host':_0x52a0('0x9'),'port':0x18eb});var io=require(_0x52a0('0xa'))(new Redis(config[_0x52a0('0x8')]));var attributes=['id',_0x52a0('0xb'),_0x52a0('0xc'),_0x52a0('0xd'),'from',_0x52a0('0xe')];function emit(_0x94915b,_0x46e0fc,_0x2e7dc3){io['to'](_0x94915b)[_0x52a0('0xf')](_0x46e0fc,_0x2e7dc3);}function emitChannelQueueInteraction(_0x4e87ce,_0x49b12c,_0x16b4a2,_0x2f6ab6,_0x48d8da,_0x5b1fbf,_0x4b170d,_0x3c9642){var _0x32db12=_[_0x52a0('0x10')](_0x16b4a2);_0x32db12[_0x52a0('0xb')]=_0x3c9642;_0x32db12['queue']=_0x49b12c;_0x32db12[_0x52a0('0xc')]=_0x2f6ab6;_0x32db12['id']=_0x48d8da;if(_0x5b1fbf){attributes[_0x52a0('0x11')](_[_0x52a0('0x12')](_0x4e87ce)+_0x52a0('0x13'));_0x4b170d[util[_0x52a0('0x14')](_0x52a0('0x15'),_0x4e87ce)][_0x48d8da]=_['pick'](_0x32db12,attributes);}else{delete _0x4b170d[util[_0x52a0('0x14')]('%sQueuesWaitingInteractions',_0x4e87ce)][_0x48d8da];}emit(util[_0x52a0('0x14')](_0x52a0('0x16'),_0x4e87ce,_0x49b12c),util[_0x52a0('0x14')]('%s_queue_waiting_interaction:%s',_0x4e87ce,_0x5b1fbf?_0x52a0('0x17'):_0x52a0('0x18')),_[_0x52a0('0x19')](_0x32db12,attributes));}var rpc={'openchannelQueueReport':require(_0x52a0('0x1a')),'mailQueueReport':require(_0x52a0('0x1b')),'chatQueueReport':require(_0x52a0('0x1c')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require(_0x52a0('0x1d')),'whatsappQueueReport':require(_0x52a0('0x1e'))};var queue=schema({'name':{'type':'string','required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0x52a0('0x1f'),'message':_0x52a0('0x20')}});function startRouting(_0x14507a,_0x496e11,_0x4bfe4a,_0x5262e4){if(_0x14507a&&_0x496e11&&_0x4bfe4a){_0x496e11[_0x52a0('0x21')]+=0x1;var _0x20d53c={'uniqueid':_0x14507a,'from':_0x4bfe4a[_0x52a0('0x22')]?_0x4bfe4a['body'][_0x52a0('0x23')]:'','joinAt':moment()[_0x52a0('0x14')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x4bfe4a['contact']?_0x4bfe4a[_0x52a0('0x24')]['id']:null,'ListId':_0x4bfe4a[_0x52a0('0x25')]?_0x4bfe4a[_0x52a0('0x25')]['id']:null};_0x20d53c[_[_0x52a0('0x26')](_0x4bfe4a['channel'])+_0x52a0('0x27')]=_0x496e11['id']||null;_0x20d53c[_[_0x52a0('0x26')](_0x4bfe4a['channel'])+'InteractionId']=_0x4bfe4a[_0x52a0('0x28')]?_0x4bfe4a[_0x52a0('0x28')]['id']:null;_0x20d53c[_[_0x52a0('0x26')](_0x4bfe4a[_0x52a0('0x29')])+_0x52a0('0x2a')]=_0x4bfe4a[_0x52a0('0x2b')]?_0x4bfe4a[_0x52a0('0x2b')]['id']:null;_0x20d53c[_[_0x52a0('0x26')](_0x4bfe4a[_0x52a0('0x29')])+(_0x4bfe4a[_0x52a0('0x29')]!==_0x52a0('0x2c')?'AccountId':_0x52a0('0x2d'))]=_0x4bfe4a[_0x52a0('0xc')]?_0x4bfe4a[_0x52a0('0xc')]['id']:null;logger['info'](util[_0x52a0('0x14')](_0x52a0('0x2e'),_0x14507a,_0x496e11[_0x52a0('0x2f')]));emitChannelQueueInteraction(_0x4bfe4a['channel'],_0x496e11['name'],_0x20d53c,_0x4bfe4a[_0x52a0('0xc')]['name'],_0x4bfe4a[_0x52a0('0x2b')]['id'],!![],_0x5262e4,_0x496e11['id']);if(rpc[_0x4bfe4a[_0x52a0('0x29')]+_0x52a0('0x30')]){return rpc[_0x4bfe4a['channel']+_0x52a0('0x30')][_0x52a0('0x31')](_0x20d53c)[_0x52a0('0x32')](function(_0xff65c){logger[_0x52a0('0x33')](_0x52a0('0x34'));});}}}function stopRouting(_0x169f83,_0x3dfeb8,_0x67bba1,_0x190ff8){if(_0x169f83&&_0x3dfeb8){_0x3dfeb8['waiting']-=0x1;var _0x2471b3={'leaveAt':moment()[_0x52a0('0x14')](_0x52a0('0x35')),'acceptAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0x52a0('0x36')};logger[_0x52a0('0x37')](util[_0x52a0('0x14')](_0x52a0('0x38'),_0x169f83,_0x3dfeb8[_0x52a0('0x2f')]));emitChannelQueueInteraction(_0x67bba1[_0x52a0('0x29')],_0x3dfeb8['name'],_0x67bba1[_0x52a0('0x22')],_0x67bba1['account'][_0x52a0('0x2f')],_0x67bba1[_0x52a0('0x2b')]['id'],![],_0x190ff8,_0x3dfeb8['id']);if(rpc[_0x67bba1[_0x52a0('0x29')]+'QueueReport']){return rpc[_0x67bba1[_0x52a0('0x29')]+'QueueReport']['update'](_0x169f83,_0x2471b3)['catch'](function(_0x35b42f){logger['error'](_0x52a0('0x39'));});}}}function endRouting(_0x2c13e2,_0x1c13bf,_0xabfad5,_0x54cff9){if(_0x2c13e2&&_0x1c13bf){_0x1c13bf[_0x52a0('0x21')]-=0x1;var _0x38d55d={'leaveAt':moment()[_0x52a0('0x14')](_0x52a0('0x35')),'exitAt':moment()[_0x52a0('0x14')](_0x52a0('0x35')),'reason':'timeout'};logger['info'](util[_0x52a0('0x14')](_0x52a0('0x3a'),_0x2c13e2,_0x1c13bf[_0x52a0('0x2f')]));emitChannelQueueInteraction(_0xabfad5[_0x52a0('0x29')],_0x1c13bf[_0x52a0('0x2f')],_0xabfad5[_0x52a0('0x22')],_0xabfad5[_0x52a0('0xc')][_0x52a0('0x2f')],_0xabfad5[_0x52a0('0x2b')]['id'],![],_0x54cff9);if(rpc[_0xabfad5[_0x52a0('0x29')]+_0x52a0('0x30')]){return rpc[_0xabfad5[_0x52a0('0x29')]+_0x52a0('0x30')]['update'](_0x2c13e2,_0x38d55d)[_0x52a0('0x32')](function(_0xead41e){logger[_0x52a0('0x33')](_0x52a0('0x39'));});}}}function handleFindQueue(_0x5b72ee){return function(_0x111982){return _0x111982[_0x52a0('0x2f')][_0x52a0('0x3b')]()===_0x5b72ee[_0x52a0('0x3b')]();};}exports[_0x52a0('0x3c')]=function(_0x11107c,_0x2dc886,_0xc988f8,_0x244f0d){return function(_0x16a235){try{var _0x3ab86a={'name':_0x2dc886[0x0],'timeout':_0x2dc886[0x1]};var _0x26acae=queue[_0x52a0('0x3d')](_0x3ab86a,{'typecast':!![]});if(_0x26acae[_0x52a0('0x3e')]){logger[_0x52a0('0x33')](_0x52a0('0x3f'),_0x11107c,_[_0x52a0('0x40')](_0x26acae,'message')['join'](',\x20'));_0x16a235[_0x52a0('0x41')]();}else{var _0x4e6cd9=_['find'](_0xc988f8[_0x244f0d[_0x52a0('0x29')]+_0x52a0('0x42')],handleFindQueue(_0x3ab86a[_0x52a0('0x2f')]));if(_0x4e6cd9){startRouting(_0x11107c,_0x4e6cd9,_0x244f0d,_0xc988f8);var _0x429a3b=(_0x4e6cd9['timeout']||0xa)*0x3e8;var _0x369412=(_0x3ab86a[_0x52a0('0x43')]||0x14)*0x3e8;var _0x38b8ce;if(_0x429a3b>_0x369412){_0x369412=_0x429a3b;}var _0xaf3e63=seqqueue[_0x52a0('0x44')](_0x429a3b);_0xaf3e63['id']=_0x11107c;_0xaf3e63[_0x52a0('0x45')]=_0x429a3b;_0xaf3e63[_0x52a0('0x46')]=_0x369412;_0xaf3e63[_0x52a0('0x29')]=_0x244f0d[_0x52a0('0x29')];_0xc988f8[_0x52a0('0x47')][_0x11107c]['on'](_0x52a0('0x48'),function(){logger['info']('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x11107c);stopRouting(_0x11107c,_0x4e6cd9,_0x244f0d,_0xc988f8);clearTimeout(_0x38b8ce);_0x38b8ce=undefined;_0xaf3e63[_0x52a0('0x49')](!![]);if(_0xc988f8[_0x52a0('0x47')][_0x11107c]){delete _0xc988f8['rules'][_0x11107c];}_0x16a235[_0x52a0('0x41')]();});_0xc988f8['rules'][_0x11107c]['on'](_0x52a0('0x4a'),function(){if(_0xc988f8[_0x52a0('0x47')][_0x11107c]){delete _0xc988f8['rules'][_0x11107c];}});_0x38b8ce=setTimeout(function(){logger[_0x52a0('0x37')](_0x52a0('0x4b'),_0x11107c);endRouting(_0x11107c,_0x4e6cd9,_0x244f0d,_0xc988f8);clearTimeout(_0x38b8ce);_0xaf3e63['close'](!![]);_0x16a235['next']();},_0x369412);switch(_0x4e6cd9[_0x52a0('0x4c')]){case'rrmemory':strategy[_0x52a0('0x4d')](_0xaf3e63,_0x4e6cd9,_0xc988f8,_0x244f0d);break;default:strategy[_0x52a0('0x4e')](_0xaf3e63,_0x4e6cd9,_0xc988f8,_0x244f0d);}}else{logger[_0x52a0('0x33')]('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x11107c,_0x3ab86a[_0x52a0('0x2f')]);_0x16a235[_0x52a0('0x41')]();}}}catch(_0x285ee6){console[_0x52a0('0x4f')](_0x285ee6);logger[_0x52a0('0x33')](_0x52a0('0x3f'),_0x11107c,_0x285ee6['stack']);_0x16a235[_0x52a0('0x41')]();}};};