Built motion from commit ddca4d0d.|2.5.47
[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 _0xe045=['accepted','[%s][STOP:QUEUE][NAME:%s]','catch','error','update\x20queue\x20report','timeout','message','consequence','validate','length','[%s][QUEUE]\x20%s','join','stop','find','createQueue','atimeout','rules','end','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','seq-queue','moment','ioredis','../../../../config/logger','routing','./strategy','redis','defaults','localhost','queue','from','joinAt','emit','clone','queue_id','account','%sQueuesWaitingInteractions','pick','format','%s_queue_waiting_interaction:%s','save','remove','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','InteractionId','interaction','MessageId','chat','AccountId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','create\x20queue\x20report','waiting'];(function(_0x51d4ee,_0xdead36){var _0x2939b0=function(_0x1d7bf6){while(--_0x1d7bf6){_0x51d4ee['push'](_0x51d4ee['shift']());}};_0x2939b0(++_0xdead36);}(_0xe045,0x103));var _0x5e04=function(_0x38da14,_0x3c4040){_0x38da14=_0x38da14-0x0;var _0x5bc92c=_0xe045[_0x38da14];return _0x5bc92c;};'use strict';var schema=require('validate');var _=require('lodash');var util=require('util');var seqqueue=require(_0x5e04('0x0'));var moment=require(_0x5e04('0x1'));var Redis=require(_0x5e04('0x2'));var config=require('../../../../config/environment');var logger=require(_0x5e04('0x3'))(_0x5e04('0x4'));var strategy=require(_0x5e04('0x5'));config[_0x5e04('0x6')]=_[_0x5e04('0x7')](config['redis'],{'host':_0x5e04('0x8'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x5e04('0x6')]));var attributes=['id','queue_id','account',_0x5e04('0x9'),_0x5e04('0xa'),_0x5e04('0xb')];function emit(_0x1924b3,_0x25615b,_0x4906d1){io['to'](_0x1924b3)[_0x5e04('0xc')](_0x25615b,_0x4906d1);}function emitChannelQueueInteraction(_0x4bb15a,_0x31422a,_0x3eccda,_0x45ff2c,_0x25363a,_0x1896e3,_0x554ac5,_0x542244){var _0x404a14=_[_0x5e04('0xd')](_0x3eccda);_0x404a14[_0x5e04('0xe')]=_0x542244;_0x404a14[_0x5e04('0x9')]=_0x31422a;_0x404a14[_0x5e04('0xf')]=_0x45ff2c;_0x404a14['id']=_0x25363a;if(_0x1896e3){_0x554ac5[util['format'](_0x5e04('0x10'),_0x4bb15a)][_0x25363a]=_[_0x5e04('0x11')](_0x404a14,attributes);}else{delete _0x554ac5[util['format'](_0x5e04('0x10'),_0x4bb15a)][_0x25363a];}emit(util[_0x5e04('0x12')]('%s:queue:%s',_0x4bb15a,_0x31422a),util[_0x5e04('0x12')](_0x5e04('0x13'),_0x4bb15a,_0x1896e3?_0x5e04('0x14'):_0x5e04('0x15')),_['pick'](_0x404a14,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0x5e04('0x16')),'chatQueueReport':require(_0x5e04('0x17')),'smsQueueReport':require(_0x5e04('0x18')),'faxQueueReport':require(_0x5e04('0x19')),'whatsappQueueReport':require(_0x5e04('0x1a'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0x5e04('0x1b')},'timeout':{'type':_0x5e04('0x1c'),'message':_0x5e04('0x1d')}});function startRouting(_0x40637e,_0x3a649e,_0x1e092b,_0x2cd883){if(_0x40637e&&_0x3a649e&&_0x1e092b){_0x3a649e['waiting']+=0x1;var _0x8cc62a={'uniqueid':_0x40637e,'from':_0x1e092b['body']?_0x1e092b[_0x5e04('0x1e')][_0x5e04('0xa')]:'','joinAt':moment()[_0x5e04('0x12')](_0x5e04('0x1f')),'ContactId':_0x1e092b[_0x5e04('0x20')]?_0x1e092b['contact']['id']:null,'ListId':_0x1e092b[_0x5e04('0x21')]?_0x1e092b[_0x5e04('0x21')]['id']:null};_0x8cc62a[_[_0x5e04('0x22')](_0x1e092b[_0x5e04('0x23')])+_0x5e04('0x24')]=_0x3a649e['id']||null;_0x8cc62a[_[_0x5e04('0x22')](_0x1e092b[_0x5e04('0x23')])+_0x5e04('0x25')]=_0x1e092b['interaction']?_0x1e092b[_0x5e04('0x26')]['id']:null;_0x8cc62a[_['upperFirst'](_0x1e092b[_0x5e04('0x23')])+_0x5e04('0x27')]=_0x1e092b['message']?_0x1e092b['message']['id']:null;_0x8cc62a[_[_0x5e04('0x22')](_0x1e092b[_0x5e04('0x23')])+(_0x1e092b[_0x5e04('0x23')]!==_0x5e04('0x28')?_0x5e04('0x29'):'WebsiteId')]=_0x1e092b[_0x5e04('0xf')]?_0x1e092b[_0x5e04('0xf')]['id']:null;logger[_0x5e04('0x2a')](util[_0x5e04('0x12')](_0x5e04('0x2b'),_0x40637e,_0x3a649e[_0x5e04('0x2c')]));emitChannelQueueInteraction(_0x1e092b['channel'],_0x3a649e['name'],_0x8cc62a,_0x1e092b[_0x5e04('0xf')]['name'],_0x1e092b['message']['id'],!![],_0x2cd883,_0x3a649e['id']);if(rpc[_0x1e092b[_0x5e04('0x23')]+_0x5e04('0x2d')]){return rpc[_0x1e092b[_0x5e04('0x23')]+'QueueReport'][_0x5e04('0x2e')](_0x8cc62a)['catch'](function(_0x1820d0){logger['error'](_0x5e04('0x2f'));});}}}function stopRouting(_0x2ec7b1,_0x41559e,_0x1ef63c,_0x2a0db0){if(_0x2ec7b1&&_0x41559e){_0x41559e[_0x5e04('0x30')]-=0x1;var _0x56af4e={'leaveAt':moment()[_0x5e04('0x12')](_0x5e04('0x1f')),'acceptAt':moment()[_0x5e04('0x12')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0x5e04('0x31')};logger[_0x5e04('0x2a')](util['format'](_0x5e04('0x32'),_0x2ec7b1,_0x41559e[_0x5e04('0x2c')]));emitChannelQueueInteraction(_0x1ef63c[_0x5e04('0x23')],_0x41559e[_0x5e04('0x2c')],_0x1ef63c[_0x5e04('0x1e')],_0x1ef63c[_0x5e04('0xf')][_0x5e04('0x2c')],_0x1ef63c['message']['id'],![],_0x2a0db0,_0x41559e['id']);if(rpc[_0x1ef63c[_0x5e04('0x23')]+'QueueReport']){return rpc[_0x1ef63c[_0x5e04('0x23')]+_0x5e04('0x2d')]['update'](_0x2ec7b1,_0x56af4e)[_0x5e04('0x33')](function(_0x13d7cb){logger[_0x5e04('0x34')](_0x5e04('0x35'));});}}}function endRouting(_0x565101,_0x12acaa,_0x2c7d75,_0x1f0167){if(_0x565101&&_0x12acaa){_0x12acaa[_0x5e04('0x30')]-=0x1;var _0x24b78a={'leaveAt':moment()[_0x5e04('0x12')](_0x5e04('0x1f')),'exitAt':moment()[_0x5e04('0x12')](_0x5e04('0x1f')),'reason':_0x5e04('0x36')};logger[_0x5e04('0x2a')](util[_0x5e04('0x12')]('[%s][END:QUEUE][NAME:%s]',_0x565101,_0x12acaa[_0x5e04('0x2c')]));emitChannelQueueInteraction(_0x2c7d75[_0x5e04('0x23')],_0x12acaa[_0x5e04('0x2c')],_0x2c7d75[_0x5e04('0x1e')],_0x2c7d75[_0x5e04('0xf')]['name'],_0x2c7d75[_0x5e04('0x37')]['id'],![],_0x1f0167);if(rpc[_0x2c7d75[_0x5e04('0x23')]+_0x5e04('0x2d')]){return rpc[_0x2c7d75[_0x5e04('0x23')]+_0x5e04('0x2d')]['update'](_0x565101,_0x24b78a)['catch'](function(_0x1cbcbd){logger[_0x5e04('0x34')](_0x5e04('0x35'));});}}}function handleFindQueue(_0xc35f71){return function(_0x4dd6a3){return _0x4dd6a3[_0x5e04('0x2c')]['toLowerCase']()===_0xc35f71['toLowerCase']();};}exports[_0x5e04('0x38')]=function(_0x5e0160,_0x30929d,_0x1b3036,_0x33d0a1){return function(_0x1d89e3){try{var _0x259e93={'name':_0x30929d[0x0],'timeout':_0x30929d[0x1]};var _0x516f48=queue[_0x5e04('0x39')](_0x259e93,{'typecast':!![]});if(_0x516f48[_0x5e04('0x3a')]){logger['error'](_0x5e04('0x3b'),_0x5e0160,_['map'](_0x516f48,_0x5e04('0x37'))[_0x5e04('0x3c')](',\x20'));_0x1d89e3[_0x5e04('0x3d')]();}else{var _0x1d42bc=_[_0x5e04('0x3e')](_0x1b3036[_0x33d0a1[_0x5e04('0x23')]+'Queues'],handleFindQueue(_0x259e93['name']));if(_0x1d42bc){startRouting(_0x5e0160,_0x1d42bc,_0x33d0a1,_0x1b3036);var _0x188aa2=(_0x1d42bc['timeout']||0xa)*0x3e8;var _0x3a6ea0=(_0x259e93['timeout']||0x14)*0x3e8;var _0xb19612,_0x8ad37d;if(_0x188aa2>_0x3a6ea0){_0x3a6ea0=_0x188aa2;}var _0x22efca=seqqueue[_0x5e04('0x3f')](_0x188aa2);_0x22efca['id']=_0x5e0160;_0x22efca[_0x5e04('0x40')]=_0x188aa2;_0x22efca['qtimeout']=_0x3a6ea0;_0x22efca[_0x5e04('0x23')]=_0x33d0a1[_0x5e04('0x23')];_0x1b3036[_0x5e04('0x41')][_0x5e0160]['on'](_0x5e04('0x42'),function(){logger[_0x5e04('0x2a')]('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x5e0160);stopRouting(_0x5e0160,_0x1d42bc,_0x33d0a1,_0x1b3036);clearTimeout(_0xb19612);_0xb19612=undefined;_0x22efca[_0x5e04('0x43')](!![]);if(_0x1b3036[_0x5e04('0x41')][_0x5e0160]){delete _0x1b3036[_0x5e04('0x41')][_0x5e0160];}_0x1d89e3['stop']();});_0x1b3036['rules'][_0x5e0160]['on'](_0x5e04('0x44'),function(){if(_0x1b3036[_0x5e04('0x41')][_0x5e0160]){delete _0x1b3036[_0x5e04('0x41')][_0x5e0160];}});_0xb19612=setTimeout(function(){logger[_0x5e04('0x2a')](_0x5e04('0x45'),_0x5e0160);endRouting(_0x5e0160,_0x1d42bc,_0x33d0a1,_0x1b3036);clearTimeout(_0xb19612);_0x22efca['close'](!![]);_0x1d89e3[_0x5e04('0x46')]();},_0x3a6ea0);switch(_0x1d42bc[_0x5e04('0x47')]){case _0x5e04('0x48'):strategy[_0x5e04('0x48')](_0x22efca,_0x1d42bc,_0x1b3036,_0x33d0a1);break;default:strategy[_0x5e04('0x49')](_0x22efca,_0x1d42bc,_0x1b3036,_0x33d0a1);}}else{logger[_0x5e04('0x34')](_0x5e04('0x4a'),_0x5e0160,_0x259e93[_0x5e04('0x2c')]);_0x1d89e3[_0x5e04('0x3d')]();}}}catch(_0x5c0d8e){console[_0x5e04('0x4b')](_0x5c0d8e);logger[_0x5e04('0x34')](_0x5e04('0x3b'),_0x5e0160,_0x5c0d8e[_0x5e04('0x4c')]);_0x1d89e3[_0x5e04('0x3d')]();}};};