Built motion from commit a61a4a20.|2.5.46
[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 _0xcbcd=['rrmemory','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','stop','log','stack','validate','lodash','util','seq-queue','ioredis','../../../../config/environment','./strategy','redis','defaults','localhost','queue_id','account','from','joinAt','emit','clone','format','%sQueuesWaitingInteractions','pick','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','string','number','timeout\x20is\x20a\x20number','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','InteractionId','interaction','MessageId','message','chat','AccountId','WebsiteId','info','name','QueueReport','create','error','create\x20queue\x20report','waiting','update','catch','update\x20queue\x20report','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','map','join','timeout','createQueue','atimeout','qtimeout','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','rules','next','strategy'];(function(_0x2679b0,_0x2a1a6f){var _0x192302=function(_0x258202){while(--_0x258202){_0x2679b0['push'](_0x2679b0['shift']());}};_0x192302(++_0x2a1a6f);}(_0xcbcd,0x1c1));var _0xdcbc=function(_0x50a0c2,_0x4befab){_0x50a0c2=_0x50a0c2-0x0;var _0x5ebadd=_0xcbcd[_0x50a0c2];return _0x5ebadd;};'use strict';var schema=require(_0xdcbc('0x0'));var _=require(_0xdcbc('0x1'));var util=require(_0xdcbc('0x2'));var seqqueue=require(_0xdcbc('0x3'));var moment=require('moment');var Redis=require(_0xdcbc('0x4'));var config=require(_0xdcbc('0x5'));var logger=require('../../../../config/logger')('routing');var strategy=require(_0xdcbc('0x6'));config[_0xdcbc('0x7')]=_[_0xdcbc('0x8')](config[_0xdcbc('0x7')],{'host':_0xdcbc('0x9'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0xdcbc('0x7')]));var attributes=['id',_0xdcbc('0xa'),_0xdcbc('0xb'),'queue',_0xdcbc('0xc'),_0xdcbc('0xd')];function emit(_0x5b908a,_0x101ba7,_0x51220e){io['to'](_0x5b908a)[_0xdcbc('0xe')](_0x101ba7,_0x51220e);}function emitChannelQueueInteraction(_0x2ec211,_0x13e6f0,_0xa69123,_0x573e15,_0x5e68f2,_0x555c1b,_0x280231,_0x1bf218){var _0x28d48a=_[_0xdcbc('0xf')](_0xa69123);_0x28d48a[_0xdcbc('0xa')]=_0x1bf218;_0x28d48a['queue']=_0x13e6f0;_0x28d48a[_0xdcbc('0xb')]=_0x573e15;_0x28d48a['id']=_0x5e68f2;if(_0x555c1b){_0x280231[util[_0xdcbc('0x10')](_0xdcbc('0x11'),_0x2ec211)][_0x5e68f2]=_[_0xdcbc('0x12')](_0x28d48a,attributes);}else{delete _0x280231[util[_0xdcbc('0x10')](_0xdcbc('0x11'),_0x2ec211)][_0x5e68f2];}emit(util[_0xdcbc('0x10')]('%s:queue:%s',_0x2ec211,_0x13e6f0),util[_0xdcbc('0x10')]('%s_queue_waiting_interaction:%s',_0x2ec211,_0x555c1b?'save':_0xdcbc('0x13')),_['pick'](_0x28d48a,attributes));}var rpc={'openchannelQueueReport':require(_0xdcbc('0x14')),'mailQueueReport':require(_0xdcbc('0x15')),'chatQueueReport':require('../../rpc/chatQueueReport'),'smsQueueReport':require(_0xdcbc('0x16')),'faxQueueReport':require(_0xdcbc('0x17')),'whatsappQueueReport':require(_0xdcbc('0x18'))};var queue=schema({'name':{'type':_0xdcbc('0x19'),'required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0xdcbc('0x1a'),'message':_0xdcbc('0x1b')}});function startRouting(_0x5ded5a,_0x5eb007,_0x173f82,_0x2f78fe){if(_0x5ded5a&&_0x5eb007&&_0x173f82){_0x5eb007['waiting']+=0x1;var _0x32968e={'uniqueid':_0x5ded5a,'from':_0x173f82[_0xdcbc('0x1c')]?_0x173f82[_0xdcbc('0x1c')][_0xdcbc('0xc')]:'','joinAt':moment()[_0xdcbc('0x10')](_0xdcbc('0x1d')),'ContactId':_0x173f82['contact']?_0x173f82[_0xdcbc('0x1e')]['id']:null,'ListId':_0x173f82[_0xdcbc('0x1f')]?_0x173f82[_0xdcbc('0x1f')]['id']:null};_0x32968e[_[_0xdcbc('0x20')](_0x173f82[_0xdcbc('0x21')])+_0xdcbc('0x22')]=_0x5eb007['id']||null;_0x32968e[_[_0xdcbc('0x20')](_0x173f82[_0xdcbc('0x21')])+_0xdcbc('0x23')]=_0x173f82['interaction']?_0x173f82[_0xdcbc('0x24')]['id']:null;_0x32968e[_[_0xdcbc('0x20')](_0x173f82[_0xdcbc('0x21')])+_0xdcbc('0x25')]=_0x173f82[_0xdcbc('0x26')]?_0x173f82[_0xdcbc('0x26')]['id']:null;_0x32968e[_[_0xdcbc('0x20')](_0x173f82[_0xdcbc('0x21')])+(_0x173f82[_0xdcbc('0x21')]!==_0xdcbc('0x27')?_0xdcbc('0x28'):_0xdcbc('0x29'))]=_0x173f82[_0xdcbc('0xb')]?_0x173f82['account']['id']:null;logger[_0xdcbc('0x2a')](util['format']('[%s][START:QUEUE][NAME:%s]',_0x5ded5a,_0x5eb007[_0xdcbc('0x2b')]));emitChannelQueueInteraction(_0x173f82[_0xdcbc('0x21')],_0x5eb007[_0xdcbc('0x2b')],_0x32968e,_0x173f82[_0xdcbc('0xb')][_0xdcbc('0x2b')],_0x173f82['message']['id'],!![],_0x2f78fe,_0x5eb007['id']);if(rpc[_0x173f82[_0xdcbc('0x21')]+_0xdcbc('0x2c')]){return rpc[_0x173f82[_0xdcbc('0x21')]+_0xdcbc('0x2c')][_0xdcbc('0x2d')](_0x32968e)['catch'](function(_0x1a6007){logger[_0xdcbc('0x2e')](_0xdcbc('0x2f'));});}}}function stopRouting(_0x1e9c13,_0x5e3b14,_0x506a3a,_0x2f0b4b){if(_0x1e9c13&&_0x5e3b14){_0x5e3b14[_0xdcbc('0x30')]-=0x1;var _0x215d05={'leaveAt':moment()[_0xdcbc('0x10')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()[_0xdcbc('0x10')](_0xdcbc('0x1d')),'reason':'accepted'};logger['info'](util[_0xdcbc('0x10')]('[%s][STOP:QUEUE][NAME:%s]',_0x1e9c13,_0x5e3b14[_0xdcbc('0x2b')]));emitChannelQueueInteraction(_0x506a3a[_0xdcbc('0x21')],_0x5e3b14[_0xdcbc('0x2b')],_0x506a3a[_0xdcbc('0x1c')],_0x506a3a['account']['name'],_0x506a3a[_0xdcbc('0x26')]['id'],![],_0x2f0b4b,_0x5e3b14['id']);if(rpc[_0x506a3a['channel']+_0xdcbc('0x2c')]){return rpc[_0x506a3a[_0xdcbc('0x21')]+'QueueReport'][_0xdcbc('0x31')](_0x1e9c13,_0x215d05)[_0xdcbc('0x32')](function(_0x1175e0){logger[_0xdcbc('0x2e')](_0xdcbc('0x33'));});}}}function endRouting(_0x26e384,_0x45813b,_0x46805b,_0xb6efaf){if(_0x26e384&&_0x45813b){_0x45813b['waiting']-=0x1;var _0x17b10d={'leaveAt':moment()[_0xdcbc('0x10')](_0xdcbc('0x1d')),'exitAt':moment()[_0xdcbc('0x10')](_0xdcbc('0x1d')),'reason':'timeout'};logger[_0xdcbc('0x2a')](util[_0xdcbc('0x10')](_0xdcbc('0x34'),_0x26e384,_0x45813b['name']));emitChannelQueueInteraction(_0x46805b[_0xdcbc('0x21')],_0x45813b['name'],_0x46805b[_0xdcbc('0x1c')],_0x46805b[_0xdcbc('0xb')][_0xdcbc('0x2b')],_0x46805b[_0xdcbc('0x26')]['id'],![],_0xb6efaf);if(rpc[_0x46805b[_0xdcbc('0x21')]+_0xdcbc('0x2c')]){return rpc[_0x46805b[_0xdcbc('0x21')]+_0xdcbc('0x2c')][_0xdcbc('0x31')](_0x26e384,_0x17b10d)[_0xdcbc('0x32')](function(_0x1d04d0){logger['error'](_0xdcbc('0x33'));});}}}function handleFindQueue(_0x249b83){return function(_0x1ca9fb){return _0x1ca9fb[_0xdcbc('0x2b')][_0xdcbc('0x35')]()===_0x249b83[_0xdcbc('0x35')]();};}exports[_0xdcbc('0x36')]=function(_0x50ff1,_0x23dc6e,_0x17736d,_0x5a3f08){return function(_0x5b918b){try{var _0x204784={'name':_0x23dc6e[0x0],'timeout':_0x23dc6e[0x1]};var _0x345696=queue[_0xdcbc('0x0')](_0x204784,{'typecast':!![]});if(_0x345696[_0xdcbc('0x37')]){logger[_0xdcbc('0x2e')](_0xdcbc('0x38'),_0x50ff1,_[_0xdcbc('0x39')](_0x345696,_0xdcbc('0x26'))[_0xdcbc('0x3a')](',\x20'));_0x5b918b['stop']();}else{var _0x8ee6e8=_['find'](_0x17736d[_0x5a3f08[_0xdcbc('0x21')]+'Queues'],handleFindQueue(_0x204784[_0xdcbc('0x2b')]));if(_0x8ee6e8){startRouting(_0x50ff1,_0x8ee6e8,_0x5a3f08,_0x17736d);var _0x38108f=(_0x8ee6e8[_0xdcbc('0x3b')]||0xa)*0x3e8;var _0x8d45c0=(_0x204784['timeout']||0x14)*0x3e8;var _0x5e7655,_0x65e98f;if(_0x38108f>_0x8d45c0){_0x8d45c0=_0x38108f;}var _0x12d2c4=seqqueue[_0xdcbc('0x3c')](_0x38108f);_0x12d2c4['id']=_0x50ff1;_0x12d2c4[_0xdcbc('0x3d')]=_0x38108f;_0x12d2c4[_0xdcbc('0x3e')]=_0x8d45c0;_0x12d2c4[_0xdcbc('0x21')]=_0x5a3f08[_0xdcbc('0x21')];_0x17736d['rules'][_0x50ff1]['on'](_0xdcbc('0x3f'),function(){logger[_0xdcbc('0x2a')](_0xdcbc('0x40'),_0x50ff1);stopRouting(_0x50ff1,_0x8ee6e8,_0x5a3f08,_0x17736d);clearTimeout(_0x5e7655);_0x5e7655=undefined;_0x12d2c4[_0xdcbc('0x41')](!![]);if(_0x17736d[_0xdcbc('0x42')][_0x50ff1]){delete _0x17736d['rules'][_0x50ff1];}_0x5b918b['stop']();});_0x17736d[_0xdcbc('0x42')][_0x50ff1]['on']('complete',function(){if(_0x17736d[_0xdcbc('0x42')][_0x50ff1]){delete _0x17736d[_0xdcbc('0x42')][_0x50ff1];}});_0x5e7655=setTimeout(function(){logger[_0xdcbc('0x2a')]('[%s][QUEUE]\x20APPLICATION\x20END',_0x50ff1);endRouting(_0x50ff1,_0x8ee6e8,_0x5a3f08,_0x17736d);clearTimeout(_0x5e7655);_0x12d2c4[_0xdcbc('0x41')](!![]);_0x5b918b[_0xdcbc('0x43')]();},_0x8d45c0);switch(_0x8ee6e8[_0xdcbc('0x44')]){case _0xdcbc('0x45'):strategy[_0xdcbc('0x45')](_0x12d2c4,_0x8ee6e8,_0x17736d,_0x5a3f08);break;default:strategy['beepall'](_0x12d2c4,_0x8ee6e8,_0x17736d,_0x5a3f08);}}else{logger[_0xdcbc('0x2e')](_0xdcbc('0x46'),_0x50ff1,_0x204784[_0xdcbc('0x2b')]);_0x5b918b[_0xdcbc('0x47')]();}}}catch(_0x77d412){console[_0xdcbc('0x48')](_0x77d412);logger[_0xdcbc('0x2e')]('[%s][QUEUE]\x20%s',_0x50ff1,_0x77d412[_0xdcbc('0x49')]);_0x5b918b['stop']();}};};