Built motion from commit 47436d59.|2.6.7
[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 _0x8f87=['../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','string','number','timeout\x20is\x20a\x20number','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','InteractionId','interaction','MessageId','message','chat','[%s][START:QUEUE][NAME:%s]','name','QueueReport','catch','error','create\x20queue\x20report','waiting','[%s][STOP:QUEUE][NAME:%s]','update','update\x20queue\x20report','timeout','info','toLowerCase','length','[%s][QUEUE]\x20%s','map','join','stop','find','qtimeout','rules','end','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','stack','validate','lodash','ioredis','../../../../config/logger','routing','./strategy','redis','localhost','socket.io-emitter','queue_id','account','from','clone','format','%sQueuesWaitingInteractions','pick','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport'];(function(_0x59b27d,_0x5046e3){var _0x3f5a08=function(_0xb61d07){while(--_0xb61d07){_0x59b27d['push'](_0x59b27d['shift']());}};_0x3f5a08(++_0x5046e3);}(_0x8f87,0x141));var _0x78f8=function(_0x5b7788,_0x309ae5){_0x5b7788=_0x5b7788-0x0;var _0x573871=_0x8f87[_0x5b7788];return _0x573871;};'use strict';var schema=require(_0x78f8('0x0'));var _=require(_0x78f8('0x1'));var util=require('util');var seqqueue=require('seq-queue');var moment=require('moment');var Redis=require(_0x78f8('0x2'));var config=require('../../../../config/environment');var logger=require(_0x78f8('0x3'))(_0x78f8('0x4'));var strategy=require(_0x78f8('0x5'));config[_0x78f8('0x6')]=_['defaults'](config['redis'],{'host':_0x78f8('0x7'),'port':0x18eb});var io=require(_0x78f8('0x8'))(new Redis(config[_0x78f8('0x6')]));var attributes=['id',_0x78f8('0x9'),_0x78f8('0xa'),'queue',_0x78f8('0xb'),'joinAt'];function emit(_0x2d86a5,_0xbc57f3,_0x1ab22b){io['to'](_0x2d86a5)['emit'](_0xbc57f3,_0x1ab22b);}function emitChannelQueueInteraction(_0x12814c,_0x2dc227,_0x1bf6e8,_0x5b29fb,_0x3eeaed,_0x4e1374,_0x3d3b7d,_0x2e3dbc){var _0x3e444b=_[_0x78f8('0xc')](_0x1bf6e8);_0x3e444b[_0x78f8('0x9')]=_0x2e3dbc;_0x3e444b['queue']=_0x2dc227;_0x3e444b['account']=_0x5b29fb;_0x3e444b['id']=_0x3eeaed;if(_0x4e1374){_0x3d3b7d[util[_0x78f8('0xd')](_0x78f8('0xe'),_0x12814c)][_0x3eeaed]=_[_0x78f8('0xf')](_0x3e444b,attributes);}else{delete _0x3d3b7d[util[_0x78f8('0xd')](_0x78f8('0xe'),_0x12814c)][_0x3eeaed];}emit(util[_0x78f8('0xd')](_0x78f8('0x10'),_0x12814c,_0x2dc227),util[_0x78f8('0xd')](_0x78f8('0x11'),_0x12814c,_0x4e1374?_0x78f8('0x12'):_0x78f8('0x13')),_[_0x78f8('0xf')](_0x3e444b,attributes));}var rpc={'openchannelQueueReport':require(_0x78f8('0x14')),'mailQueueReport':require(_0x78f8('0x15')),'chatQueueReport':require(_0x78f8('0x16')),'smsQueueReport':require(_0x78f8('0x17')),'faxQueueReport':require(_0x78f8('0x18')),'whatsappQueueReport':require(_0x78f8('0x19'))};var queue=schema({'name':{'type':_0x78f8('0x1a'),'required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0x78f8('0x1b'),'message':_0x78f8('0x1c')}});function startRouting(_0x12db80,_0x2267d3,_0xb66206,_0x31919c){if(_0x12db80&&_0x2267d3&&_0xb66206){_0x2267d3['waiting']+=0x1;var _0x56c215={'uniqueid':_0x12db80,'from':_0xb66206[_0x78f8('0x1d')]?_0xb66206[_0x78f8('0x1d')][_0x78f8('0xb')]:'','joinAt':moment()[_0x78f8('0xd')](_0x78f8('0x1e')),'ContactId':_0xb66206[_0x78f8('0x1f')]?_0xb66206[_0x78f8('0x1f')]['id']:null,'ListId':_0xb66206[_0x78f8('0x20')]?_0xb66206[_0x78f8('0x20')]['id']:null};_0x56c215[_['upperFirst'](_0xb66206['channel'])+'QueueId']=_0x2267d3['id']||null;_0x56c215[_[_0x78f8('0x21')](_0xb66206[_0x78f8('0x22')])+_0x78f8('0x23')]=_0xb66206[_0x78f8('0x24')]?_0xb66206['interaction']['id']:null;_0x56c215[_[_0x78f8('0x21')](_0xb66206[_0x78f8('0x22')])+_0x78f8('0x25')]=_0xb66206[_0x78f8('0x26')]?_0xb66206['message']['id']:null;_0x56c215[_['upperFirst'](_0xb66206[_0x78f8('0x22')])+(_0xb66206['channel']!==_0x78f8('0x27')?'AccountId':'WebsiteId')]=_0xb66206[_0x78f8('0xa')]?_0xb66206['account']['id']:null;logger['info'](util[_0x78f8('0xd')](_0x78f8('0x28'),_0x12db80,_0x2267d3[_0x78f8('0x29')]));emitChannelQueueInteraction(_0xb66206[_0x78f8('0x22')],_0x2267d3[_0x78f8('0x29')],_0x56c215,_0xb66206[_0x78f8('0xa')][_0x78f8('0x29')],_0xb66206[_0x78f8('0x26')]['id'],!![],_0x31919c,_0x2267d3['id']);if(rpc[_0xb66206[_0x78f8('0x22')]+_0x78f8('0x2a')]){return rpc[_0xb66206[_0x78f8('0x22')]+_0x78f8('0x2a')]['create'](_0x56c215)[_0x78f8('0x2b')](function(_0x45ba64){logger[_0x78f8('0x2c')](_0x78f8('0x2d'));});}}}function stopRouting(_0x375b9e,_0x30d9a6,_0x58831f,_0x14693e){if(_0x375b9e&&_0x30d9a6){_0x30d9a6[_0x78f8('0x2e')]-=0x1;var _0x31f407={'leaveAt':moment()[_0x78f8('0xd')](_0x78f8('0x1e')),'acceptAt':moment()[_0x78f8('0xd')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':'accepted'};logger['info'](util[_0x78f8('0xd')](_0x78f8('0x2f'),_0x375b9e,_0x30d9a6[_0x78f8('0x29')]));emitChannelQueueInteraction(_0x58831f['channel'],_0x30d9a6[_0x78f8('0x29')],_0x58831f[_0x78f8('0x1d')],_0x58831f[_0x78f8('0xa')][_0x78f8('0x29')],_0x58831f['message']['id'],![],_0x14693e,_0x30d9a6['id']);if(rpc[_0x58831f[_0x78f8('0x22')]+_0x78f8('0x2a')]){return rpc[_0x58831f[_0x78f8('0x22')]+_0x78f8('0x2a')][_0x78f8('0x30')](_0x375b9e,_0x31f407)[_0x78f8('0x2b')](function(_0xf06bfa){logger[_0x78f8('0x2c')](_0x78f8('0x31'));});}}}function endRouting(_0x487cc4,_0x5589d8,_0x2b9c60,_0x3e2c1e){if(_0x487cc4&&_0x5589d8){_0x5589d8['waiting']-=0x1;var _0x35988b={'leaveAt':moment()[_0x78f8('0xd')]('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()[_0x78f8('0xd')](_0x78f8('0x1e')),'reason':_0x78f8('0x32')};logger[_0x78f8('0x33')](util[_0x78f8('0xd')]('[%s][END:QUEUE][NAME:%s]',_0x487cc4,_0x5589d8[_0x78f8('0x29')]));emitChannelQueueInteraction(_0x2b9c60['channel'],_0x5589d8['name'],_0x2b9c60[_0x78f8('0x1d')],_0x2b9c60[_0x78f8('0xa')]['name'],_0x2b9c60[_0x78f8('0x26')]['id'],![],_0x3e2c1e);if(rpc[_0x2b9c60['channel']+'QueueReport']){return rpc[_0x2b9c60[_0x78f8('0x22')]+_0x78f8('0x2a')][_0x78f8('0x30')](_0x487cc4,_0x35988b)[_0x78f8('0x2b')](function(_0x57feb5){logger[_0x78f8('0x2c')](_0x78f8('0x31'));});}}}function handleFindQueue(_0x3c3a25){return function(_0x3a0f8f){return _0x3a0f8f['name'][_0x78f8('0x34')]()===_0x3c3a25[_0x78f8('0x34')]();};}exports['consequence']=function(_0x52b608,_0x5dd9b1,_0x54f047,_0x1df42b){return function(_0x5f1a19){try{var _0x514e86={'name':_0x5dd9b1[0x0],'timeout':_0x5dd9b1[0x1]};var _0x2eefe7=queue[_0x78f8('0x0')](_0x514e86,{'typecast':!![]});if(_0x2eefe7[_0x78f8('0x35')]){logger[_0x78f8('0x2c')](_0x78f8('0x36'),_0x52b608,_[_0x78f8('0x37')](_0x2eefe7,_0x78f8('0x26'))[_0x78f8('0x38')](',\x20'));_0x5f1a19[_0x78f8('0x39')]();}else{var _0x5da8bb=_[_0x78f8('0x3a')](_0x54f047[_0x1df42b[_0x78f8('0x22')]+'Queues'],handleFindQueue(_0x514e86[_0x78f8('0x29')]));if(_0x5da8bb){startRouting(_0x52b608,_0x5da8bb,_0x1df42b,_0x54f047);var _0x1fc2c8=(_0x5da8bb[_0x78f8('0x32')]||0xa)*0x3e8;var _0x4b10cd=(_0x514e86[_0x78f8('0x32')]||0x14)*0x3e8;var _0x15914c,_0x1275c3;if(_0x1fc2c8>_0x4b10cd){_0x4b10cd=_0x1fc2c8;}var _0x14408c=seqqueue['createQueue'](_0x1fc2c8);_0x14408c['id']=_0x52b608;_0x14408c['atimeout']=_0x1fc2c8;_0x14408c[_0x78f8('0x3b')]=_0x4b10cd;_0x14408c['channel']=_0x1df42b['channel'];_0x54f047[_0x78f8('0x3c')][_0x52b608]['on'](_0x78f8('0x3d'),function(){logger[_0x78f8('0x33')]('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x52b608);stopRouting(_0x52b608,_0x5da8bb,_0x1df42b,_0x54f047);clearTimeout(_0x15914c);_0x15914c=undefined;_0x14408c[_0x78f8('0x3e')](!![]);if(_0x54f047['rules'][_0x52b608]){delete _0x54f047[_0x78f8('0x3c')][_0x52b608];}_0x5f1a19[_0x78f8('0x39')]();});_0x54f047['rules'][_0x52b608]['on'](_0x78f8('0x3f'),function(){if(_0x54f047[_0x78f8('0x3c')][_0x52b608]){delete _0x54f047[_0x78f8('0x3c')][_0x52b608];}});_0x15914c=setTimeout(function(){logger[_0x78f8('0x33')](_0x78f8('0x40'),_0x52b608);endRouting(_0x52b608,_0x5da8bb,_0x1df42b,_0x54f047);clearTimeout(_0x15914c);_0x14408c[_0x78f8('0x3e')](!![]);_0x5f1a19['next']();},_0x4b10cd);switch(_0x5da8bb['strategy']){case _0x78f8('0x41'):strategy[_0x78f8('0x41')](_0x14408c,_0x5da8bb,_0x54f047,_0x1df42b);break;default:strategy[_0x78f8('0x42')](_0x14408c,_0x5da8bb,_0x54f047,_0x1df42b);}}else{logger[_0x78f8('0x2c')](_0x78f8('0x43'),_0x52b608,_0x514e86[_0x78f8('0x29')]);_0x5f1a19[_0x78f8('0x39')]();}}}catch(_0x1f1fcd){console['log'](_0x1f1fcd);logger[_0x78f8('0x2c')](_0x78f8('0x36'),_0x52b608,_0x1f1fcd[_0x78f8('0x44')]);_0x5f1a19[_0x78f8('0x39')]();}};};