1ab2ca6409c57f2917c032dcbf9c551e335096c7
[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 _0x8efe=['end','[%s][QUEUE]\x20ROUTING\x20STOPPED','complete','[%s][QUEUE]\x20APPLICATION\x20END','close','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','stack','validate','lodash','seq-queue','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','defaults','localhost','queue_id','account','queue','from','clone','%sQueuesWaitingInteractions','format','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','pick','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','body','contact','list','channel','upperFirst','InteractionId','interaction','MessageId','message','chat','WebsiteId','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','create\x20queue\x20report','waiting','YYYY-MM-DD\x20HH:mm:ss','accepted','info','[%s][STOP:QUEUE][NAME:%s]','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','update','toLowerCase','[%s][QUEUE]\x20%s','join','stop','find','createQueue','qtimeout','rules'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x8efe,0xf8));var _0xe8ef=function(_0x2cb2b4,_0x1f87e0){_0x2cb2b4=_0x2cb2b4-0x0;var _0xfb78b1=_0x8efe[_0x2cb2b4];return _0xfb78b1;};'use strict';var schema=require(_0xe8ef('0x0'));var _=require(_0xe8ef('0x1'));var util=require('util');var seqqueue=require(_0xe8ef('0x2'));var moment=require(_0xe8ef('0x3'));var Redis=require(_0xe8ef('0x4'));var config=require(_0xe8ef('0x5'));var logger=require(_0xe8ef('0x6'))(_0xe8ef('0x7'));var strategy=require(_0xe8ef('0x8'));config[_0xe8ef('0x9')]=_[_0xe8ef('0xa')](config[_0xe8ef('0x9')],{'host':_0xe8ef('0xb'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0xe8ef('0x9')]));var attributes=['id',_0xe8ef('0xc'),_0xe8ef('0xd'),_0xe8ef('0xe'),_0xe8ef('0xf'),'joinAt'];function emit(_0x4810a5,_0x3e6a0f,_0x1dd288){io['to'](_0x4810a5)['emit'](_0x3e6a0f,_0x1dd288);}function emitChannelQueueInteraction(_0x17d6a7,_0x186342,_0x28ecdc,_0x32858c,_0x1a4693,_0x2c968b,_0x2eff66,_0x162118){var _0x4d8301=_[_0xe8ef('0x10')](_0x28ecdc);_0x4d8301[_0xe8ef('0xc')]=_0x162118;_0x4d8301['queue']=_0x186342;_0x4d8301[_0xe8ef('0xd')]=_0x32858c;_0x4d8301['id']=_0x1a4693;if(_0x2c968b){_0x2eff66[util['format'](_0xe8ef('0x11'),_0x17d6a7)][_0x1a4693]=_['pick'](_0x4d8301,attributes);}else{delete _0x2eff66[util[_0xe8ef('0x12')](_0xe8ef('0x11'),_0x17d6a7)][_0x1a4693];}emit(util[_0xe8ef('0x12')](_0xe8ef('0x13'),_0x17d6a7,_0x186342),util[_0xe8ef('0x12')](_0xe8ef('0x14'),_0x17d6a7,_0x2c968b?_0xe8ef('0x15'):_0xe8ef('0x16')),_[_0xe8ef('0x17')](_0x4d8301,attributes));}var rpc={'openchannelQueueReport':require(_0xe8ef('0x18')),'mailQueueReport':require(_0xe8ef('0x19')),'chatQueueReport':require(_0xe8ef('0x1a')),'smsQueueReport':require(_0xe8ef('0x1b')),'faxQueueReport':require(_0xe8ef('0x1c')),'whatsappQueueReport':require(_0xe8ef('0x1d'))};var queue=schema({'name':{'type':_0xe8ef('0x1e'),'required':!![],'message':_0xe8ef('0x1f')},'timeout':{'type':_0xe8ef('0x20'),'message':'timeout\x20is\x20a\x20number'}});function startRouting(_0x465311,_0x29b12e,_0x3335aa,_0x4f13f2){if(_0x465311&&_0x29b12e&&_0x3335aa){_0x29b12e['waiting']+=0x1;var _0x4bc5e0={'uniqueid':_0x465311,'from':_0x3335aa[_0xe8ef('0x21')]?_0x3335aa[_0xe8ef('0x21')][_0xe8ef('0xf')]:'','joinAt':moment()[_0xe8ef('0x12')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x3335aa[_0xe8ef('0x22')]?_0x3335aa[_0xe8ef('0x22')]['id']:null,'ListId':_0x3335aa[_0xe8ef('0x23')]?_0x3335aa[_0xe8ef('0x23')]['id']:null};_0x4bc5e0[_['upperFirst'](_0x3335aa[_0xe8ef('0x24')])+'QueueId']=_0x29b12e['id']||null;_0x4bc5e0[_[_0xe8ef('0x25')](_0x3335aa[_0xe8ef('0x24')])+_0xe8ef('0x26')]=_0x3335aa['interaction']?_0x3335aa[_0xe8ef('0x27')]['id']:null;_0x4bc5e0[_['upperFirst'](_0x3335aa[_0xe8ef('0x24')])+_0xe8ef('0x28')]=_0x3335aa[_0xe8ef('0x29')]?_0x3335aa[_0xe8ef('0x29')]['id']:null;_0x4bc5e0[_[_0xe8ef('0x25')](_0x3335aa['channel'])+(_0x3335aa[_0xe8ef('0x24')]!==_0xe8ef('0x2a')?'AccountId':_0xe8ef('0x2b'))]=_0x3335aa['account']?_0x3335aa[_0xe8ef('0xd')]['id']:null;logger['info'](util[_0xe8ef('0x12')](_0xe8ef('0x2c'),_0x465311,_0x29b12e[_0xe8ef('0x2d')]));emitChannelQueueInteraction(_0x3335aa['channel'],_0x29b12e['name'],_0x4bc5e0,_0x3335aa[_0xe8ef('0xd')][_0xe8ef('0x2d')],_0x3335aa[_0xe8ef('0x29')]['id'],!![],_0x4f13f2,_0x29b12e['id']);if(rpc[_0x3335aa['channel']+_0xe8ef('0x2e')]){return rpc[_0x3335aa['channel']+'QueueReport'][_0xe8ef('0x2f')](_0x4bc5e0)[_0xe8ef('0x30')](function(_0x106f06){logger[_0xe8ef('0x31')](_0xe8ef('0x32'));});}}}function stopRouting(_0x3f271a,_0x4c3d7f,_0x4d22d8,_0xc4dbeb){if(_0x3f271a&&_0x4c3d7f){_0x4c3d7f[_0xe8ef('0x33')]-=0x1;var _0x52e1e7={'leaveAt':moment()[_0xe8ef('0x12')](_0xe8ef('0x34')),'acceptAt':moment()[_0xe8ef('0x12')](_0xe8ef('0x34')),'reason':_0xe8ef('0x35')};logger[_0xe8ef('0x36')](util[_0xe8ef('0x12')](_0xe8ef('0x37'),_0x3f271a,_0x4c3d7f[_0xe8ef('0x2d')]));emitChannelQueueInteraction(_0x4d22d8[_0xe8ef('0x24')],_0x4c3d7f[_0xe8ef('0x2d')],_0x4d22d8[_0xe8ef('0x21')],_0x4d22d8[_0xe8ef('0xd')][_0xe8ef('0x2d')],_0x4d22d8[_0xe8ef('0x29')]['id'],![],_0xc4dbeb,_0x4c3d7f['id']);if(rpc[_0x4d22d8[_0xe8ef('0x24')]+_0xe8ef('0x2e')]){return rpc[_0x4d22d8[_0xe8ef('0x24')]+_0xe8ef('0x2e')]['update'](_0x3f271a,_0x52e1e7)[_0xe8ef('0x30')](function(_0x15b550){logger[_0xe8ef('0x31')](_0xe8ef('0x38'));});}}}function endRouting(_0x394ec9,_0x2c9fac,_0x3358f2,_0xd6fadb){if(_0x394ec9&&_0x2c9fac){_0x2c9fac[_0xe8ef('0x33')]-=0x1;var _0x5e7aeb={'leaveAt':moment()[_0xe8ef('0x12')](_0xe8ef('0x34')),'exitAt':moment()['format'](_0xe8ef('0x34')),'reason':_0xe8ef('0x39')};logger[_0xe8ef('0x36')](util[_0xe8ef('0x12')](_0xe8ef('0x3a'),_0x394ec9,_0x2c9fac[_0xe8ef('0x2d')]));emitChannelQueueInteraction(_0x3358f2[_0xe8ef('0x24')],_0x2c9fac[_0xe8ef('0x2d')],_0x3358f2[_0xe8ef('0x21')],_0x3358f2[_0xe8ef('0xd')][_0xe8ef('0x2d')],_0x3358f2[_0xe8ef('0x29')]['id'],![],_0xd6fadb);if(rpc[_0x3358f2['channel']+_0xe8ef('0x2e')]){return rpc[_0x3358f2['channel']+_0xe8ef('0x2e')][_0xe8ef('0x3b')](_0x394ec9,_0x5e7aeb)[_0xe8ef('0x30')](function(_0x145fa4){logger[_0xe8ef('0x31')](_0xe8ef('0x38'));});}}}function handleFindQueue(_0x3cbd37){return function(_0x5c4c85){return _0x5c4c85[_0xe8ef('0x2d')][_0xe8ef('0x3c')]()===_0x3cbd37['toLowerCase']();};}exports['consequence']=function(_0xdbc184,_0x257d3d,_0x40b9ea,_0x533bea){return function(_0x755db6){try{var _0x88f76b={'name':_0x257d3d[0x0],'timeout':_0x257d3d[0x1]};var _0x308763=queue[_0xe8ef('0x0')](_0x88f76b,{'typecast':!![]});if(_0x308763['length']){logger[_0xe8ef('0x31')](_0xe8ef('0x3d'),_0xdbc184,_['map'](_0x308763,'message')[_0xe8ef('0x3e')](',\x20'));_0x755db6[_0xe8ef('0x3f')]();}else{var _0x1869ea=_[_0xe8ef('0x40')](_0x40b9ea[_0x533bea[_0xe8ef('0x24')]+'Queues'],handleFindQueue(_0x88f76b[_0xe8ef('0x2d')]));if(_0x1869ea){startRouting(_0xdbc184,_0x1869ea,_0x533bea,_0x40b9ea);var _0x3c2e92=(_0x1869ea['timeout']||0xa)*0x3e8;var _0x46de10=(_0x88f76b[_0xe8ef('0x39')]||0x14)*0x3e8;var _0x463ea4,_0x234a24;if(_0x3c2e92>_0x46de10){_0x46de10=_0x3c2e92;}var _0x5afe1d=seqqueue[_0xe8ef('0x41')](_0x3c2e92);_0x5afe1d['id']=_0xdbc184;_0x5afe1d['atimeout']=_0x3c2e92;_0x5afe1d[_0xe8ef('0x42')]=_0x46de10;_0x5afe1d[_0xe8ef('0x24')]=_0x533bea[_0xe8ef('0x24')];_0x40b9ea[_0xe8ef('0x43')][_0xdbc184]['on'](_0xe8ef('0x44'),function(){logger[_0xe8ef('0x36')](_0xe8ef('0x45'),_0xdbc184);stopRouting(_0xdbc184,_0x1869ea,_0x533bea,_0x40b9ea);clearTimeout(_0x463ea4);_0x463ea4=undefined;_0x5afe1d['close'](!![]);if(_0x40b9ea[_0xe8ef('0x43')][_0xdbc184]){delete _0x40b9ea[_0xe8ef('0x43')][_0xdbc184];}_0x755db6[_0xe8ef('0x3f')]();});_0x40b9ea['rules'][_0xdbc184]['on'](_0xe8ef('0x46'),function(){if(_0x40b9ea[_0xe8ef('0x43')][_0xdbc184]){delete _0x40b9ea[_0xe8ef('0x43')][_0xdbc184];}});_0x463ea4=setTimeout(function(){logger['info'](_0xe8ef('0x47'),_0xdbc184);endRouting(_0xdbc184,_0x1869ea,_0x533bea,_0x40b9ea);clearTimeout(_0x463ea4);_0x5afe1d[_0xe8ef('0x48')](!![]);_0x755db6[_0xe8ef('0x49')]();},_0x46de10);switch(_0x1869ea[_0xe8ef('0x4a')]){case _0xe8ef('0x4b'):strategy[_0xe8ef('0x4b')](_0x5afe1d,_0x1869ea,_0x40b9ea,_0x533bea);break;default:strategy[_0xe8ef('0x4c')](_0x5afe1d,_0x1869ea,_0x40b9ea,_0x533bea);}}else{logger[_0xe8ef('0x31')](_0xe8ef('0x4d'),_0xdbc184,_0x88f76b['name']);_0x755db6[_0xe8ef('0x3f')]();}}}catch(_0x2697d6){console['log'](_0x2697d6);logger['error'](_0xe8ef('0x3d'),_0xdbc184,_0x2697d6[_0xe8ef('0x4e')]);_0x755db6[_0xe8ef('0x3f')]();}};};