45b3cdee4effc419d9c260279bbda874c4bd1620
[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 _0x01f5=['message','chat','WebsiteId','name','QueueReport','create','catch','error','create\x20queue\x20report','YYYY-MM-DD\x20HH:mm:ss','accepted','info','[%s][STOP:QUEUE][NAME:%s]','update','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','validate','length','[%s][QUEUE]\x20%s','map','join','stop','createQueue','qtimeout','rules','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','util','ioredis','../../../../config/environment','routing','./strategy','redis','localhost','socket.io-emitter','queue_id','account','from','clone','queue','push','capitalize','InteractionId','format','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','pick','../../rpc/chatQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','number','timeout\x20is\x20a\x20number','waiting','body','contact','list','channel','QueueId','upperFirst','interaction'];(function(_0x381997,_0x3dad60){var _0x4dadd8=function(_0x3259cd){while(--_0x3259cd){_0x381997['push'](_0x381997['shift']());}};_0x4dadd8(++_0x3dad60);}(_0x01f5,0x19e));var _0x501f=function(_0x18b9fa,_0x4ed98f){_0x18b9fa=_0x18b9fa-0x0;var _0x40eadb=_0x01f5[_0x18b9fa];return _0x40eadb;};'use strict';var schema=require('validate');var _=require('lodash');var util=require(_0x501f('0x0'));var seqqueue=require('seq-queue');var moment=require('moment');var Redis=require(_0x501f('0x1'));var config=require(_0x501f('0x2'));var logger=require('../../../../config/logger')(_0x501f('0x3'));var strategy=require(_0x501f('0x4'));config['redis']=_['defaults'](config[_0x501f('0x5')],{'host':_0x501f('0x6'),'port':0x18eb});var io=require(_0x501f('0x7'))(new Redis(config[_0x501f('0x5')]));var attributes=['id',_0x501f('0x8'),_0x501f('0x9'),'queue',_0x501f('0xa'),'joinAt'];function emit(_0x1b63ef,_0x4f0b3e,_0x4a6cde){io['to'](_0x1b63ef)['emit'](_0x4f0b3e,_0x4a6cde);}function emitChannelQueueInteraction(_0x479bfe,_0x2bb8d2,_0x590c2e,_0x45dcaa,_0x5011eb,_0x2eb644,_0x3f4614,_0x169c6b){var _0x17c159=_[_0x501f('0xb')](_0x590c2e);_0x17c159[_0x501f('0x8')]=_0x169c6b;_0x17c159[_0x501f('0xc')]=_0x2bb8d2;_0x17c159[_0x501f('0x9')]=_0x45dcaa;_0x17c159['id']=_0x5011eb;if(_0x2eb644){attributes[_0x501f('0xd')](_[_0x501f('0xe')](_0x479bfe)+_0x501f('0xf'));_0x3f4614[util[_0x501f('0x10')]('%sQueuesWaitingInteractions',_0x479bfe)][_0x5011eb]=_['pick'](_0x17c159,attributes);}else{delete _0x3f4614[util['format'](_0x501f('0x11'),_0x479bfe)][_0x5011eb];}emit(util['format'](_0x501f('0x12'),_0x479bfe,_0x2bb8d2),util[_0x501f('0x10')](_0x501f('0x13'),_0x479bfe,_0x2eb644?_0x501f('0x14'):_0x501f('0x15')),_[_0x501f('0x16')](_0x17c159,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require(_0x501f('0x17')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require(_0x501f('0x18')),'whatsappQueueReport':require(_0x501f('0x19'))};var queue=schema({'name':{'type':'string','required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0x501f('0x1a'),'message':_0x501f('0x1b')}});function startRouting(_0x1720c7,_0x58864a,_0x4a0598,_0x1a87bd){if(_0x1720c7&&_0x58864a&&_0x4a0598){_0x58864a[_0x501f('0x1c')]+=0x1;var _0x1ecd03={'uniqueid':_0x1720c7,'from':_0x4a0598[_0x501f('0x1d')]?_0x4a0598['body']['from']:'','joinAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x4a0598[_0x501f('0x1e')]?_0x4a0598[_0x501f('0x1e')]['id']:null,'ListId':_0x4a0598[_0x501f('0x1f')]?_0x4a0598[_0x501f('0x1f')]['id']:null};_0x1ecd03[_['upperFirst'](_0x4a0598[_0x501f('0x20')])+_0x501f('0x21')]=_0x58864a['id']||null;_0x1ecd03[_[_0x501f('0x22')](_0x4a0598['channel'])+_0x501f('0xf')]=_0x4a0598[_0x501f('0x23')]?_0x4a0598[_0x501f('0x23')]['id']:null;_0x1ecd03[_[_0x501f('0x22')](_0x4a0598[_0x501f('0x20')])+'MessageId']=_0x4a0598['message']?_0x4a0598[_0x501f('0x24')]['id']:null;_0x1ecd03[_[_0x501f('0x22')](_0x4a0598[_0x501f('0x20')])+(_0x4a0598[_0x501f('0x20')]!==_0x501f('0x25')?'AccountId':_0x501f('0x26'))]=_0x4a0598[_0x501f('0x9')]?_0x4a0598[_0x501f('0x9')]['id']:null;logger['info'](util[_0x501f('0x10')]('[%s][START:QUEUE][NAME:%s]',_0x1720c7,_0x58864a[_0x501f('0x27')]));emitChannelQueueInteraction(_0x4a0598[_0x501f('0x20')],_0x58864a[_0x501f('0x27')],_0x1ecd03,_0x4a0598[_0x501f('0x9')]['name'],_0x4a0598[_0x501f('0x24')]['id'],!![],_0x1a87bd,_0x58864a['id']);if(rpc[_0x4a0598[_0x501f('0x20')]+_0x501f('0x28')]){return rpc[_0x4a0598[_0x501f('0x20')]+_0x501f('0x28')][_0x501f('0x29')](_0x1ecd03)[_0x501f('0x2a')](function(_0x4f7a76){logger[_0x501f('0x2b')](_0x501f('0x2c'));});}}}function stopRouting(_0x45191a,_0x1cd019,_0x381114,_0x560b6e){if(_0x45191a&&_0x1cd019){_0x1cd019[_0x501f('0x1c')]-=0x1;var _0x3de3d1={'leaveAt':moment()[_0x501f('0x10')](_0x501f('0x2d')),'acceptAt':moment()[_0x501f('0x10')](_0x501f('0x2d')),'reason':_0x501f('0x2e')};logger[_0x501f('0x2f')](util['format'](_0x501f('0x30'),_0x45191a,_0x1cd019['name']));emitChannelQueueInteraction(_0x381114['channel'],_0x1cd019['name'],_0x381114[_0x501f('0x1d')],_0x381114[_0x501f('0x9')]['name'],_0x381114[_0x501f('0x24')]['id'],![],_0x560b6e,_0x1cd019['id']);if(rpc[_0x381114[_0x501f('0x20')]+_0x501f('0x28')]){return rpc[_0x381114[_0x501f('0x20')]+_0x501f('0x28')][_0x501f('0x31')](_0x45191a,_0x3de3d1)[_0x501f('0x2a')](function(_0xbbb6f1){logger[_0x501f('0x2b')](_0x501f('0x32'));});}}}function endRouting(_0x42b1c7,_0x4bc261,_0x109426,_0x1b1e71){if(_0x42b1c7&&_0x4bc261){_0x4bc261[_0x501f('0x1c')]-=0x1;var _0x3afae3={'leaveAt':moment()[_0x501f('0x10')]('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()['format'](_0x501f('0x2d')),'reason':_0x501f('0x33')};logger[_0x501f('0x2f')](util[_0x501f('0x10')](_0x501f('0x34'),_0x42b1c7,_0x4bc261[_0x501f('0x27')]));emitChannelQueueInteraction(_0x109426['channel'],_0x4bc261[_0x501f('0x27')],_0x109426['body'],_0x109426[_0x501f('0x9')]['name'],_0x109426[_0x501f('0x24')]['id'],![],_0x1b1e71);if(rpc[_0x109426['channel']+_0x501f('0x28')]){return rpc[_0x109426['channel']+_0x501f('0x28')][_0x501f('0x31')](_0x42b1c7,_0x3afae3)[_0x501f('0x2a')](function(_0x2538a3){logger[_0x501f('0x2b')](_0x501f('0x32'));});}}}function handleFindQueue(_0x146f01){return function(_0xb34373){return _0xb34373[_0x501f('0x27')][_0x501f('0x35')]()===_0x146f01[_0x501f('0x35')]();};}exports[_0x501f('0x36')]=function(_0x9ece13,_0x514c0a,_0x36ca41,_0x4f8a8b){return function(_0x40135f){try{var _0x468ae2={'name':_0x514c0a[0x0],'timeout':_0x514c0a[0x1]};var _0x3af51b=queue[_0x501f('0x37')](_0x468ae2,{'typecast':!![]});if(_0x3af51b[_0x501f('0x38')]){logger[_0x501f('0x2b')](_0x501f('0x39'),_0x9ece13,_[_0x501f('0x3a')](_0x3af51b,_0x501f('0x24'))[_0x501f('0x3b')](',\x20'));_0x40135f[_0x501f('0x3c')]();}else{var _0x270c7c=_['find'](_0x36ca41[_0x4f8a8b[_0x501f('0x20')]+'Queues'],handleFindQueue(_0x468ae2['name']));if(_0x270c7c){startRouting(_0x9ece13,_0x270c7c,_0x4f8a8b,_0x36ca41);var _0x14f516=(_0x270c7c['timeout']||0xa)*0x3e8;var _0x3d9908=(_0x468ae2[_0x501f('0x33')]||0x14)*0x3e8;var _0x1747bf;if(_0x14f516>_0x3d9908){_0x3d9908=_0x14f516;}var _0x1d7d1b=seqqueue[_0x501f('0x3d')](_0x14f516);_0x1d7d1b['id']=_0x9ece13;_0x1d7d1b['atimeout']=_0x14f516;_0x1d7d1b[_0x501f('0x3e')]=_0x3d9908;_0x1d7d1b[_0x501f('0x20')]=_0x4f8a8b[_0x501f('0x20')];_0x36ca41[_0x501f('0x3f')][_0x9ece13]['on']('end',function(){logger[_0x501f('0x2f')](_0x501f('0x40'),_0x9ece13);stopRouting(_0x9ece13,_0x270c7c,_0x4f8a8b,_0x36ca41);clearTimeout(_0x1747bf);_0x1747bf=undefined;_0x1d7d1b[_0x501f('0x41')](!![]);if(_0x36ca41['rules'][_0x9ece13]){delete _0x36ca41[_0x501f('0x3f')][_0x9ece13];}_0x40135f[_0x501f('0x3c')]();});_0x36ca41[_0x501f('0x3f')][_0x9ece13]['on'](_0x501f('0x42'),function(){if(_0x36ca41[_0x501f('0x3f')][_0x9ece13]){delete _0x36ca41[_0x501f('0x3f')][_0x9ece13];}});_0x1747bf=setTimeout(function(){logger['info'](_0x501f('0x43'),_0x9ece13);endRouting(_0x9ece13,_0x270c7c,_0x4f8a8b,_0x36ca41);clearTimeout(_0x1747bf);_0x1d7d1b[_0x501f('0x41')](!![]);_0x40135f[_0x501f('0x44')]();},_0x3d9908);switch(_0x270c7c[_0x501f('0x45')]){case _0x501f('0x46'):strategy[_0x501f('0x46')](_0x1d7d1b,_0x270c7c,_0x36ca41,_0x4f8a8b);break;default:strategy[_0x501f('0x47')](_0x1d7d1b,_0x270c7c,_0x36ca41,_0x4f8a8b);}}else{logger[_0x501f('0x2b')](_0x501f('0x48'),_0x9ece13,_0x468ae2[_0x501f('0x27')]);_0x40135f[_0x501f('0x3c')]();}}}catch(_0x806f3f){console[_0x501f('0x49')](_0x806f3f);logger[_0x501f('0x2b')](_0x501f('0x39'),_0x9ece13,_0x806f3f[_0x501f('0x4a')]);_0x40135f[_0x501f('0x3c')]();}};};