Built motion from commit e0fa946e.|2.6.5
[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 _0x4ffa=['redis','localhost','account','queue','from','clone','%sQueuesWaitingInteractions','format','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','pick','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','list','upperFirst','QueueId','InteractionId','interaction','MessageId','message','channel','chat','WebsiteId','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','create\x20queue\x20report','accepted','info','update','[%s][END:QUEUE][NAME:%s]','update\x20queue\x20report','toLowerCase','consequence','validate','length','map','join','stop','find','timeout','createQueue','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','strategy','rrmemory','beepall','stack','util','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','./strategy','defaults'];(function(_0x1cecf9,_0x5a0b76){var _0x1034ee=function(_0x162b56){while(--_0x162b56){_0x1cecf9['push'](_0x1cecf9['shift']());}};_0x1034ee(++_0x5a0b76);}(_0x4ffa,0x124));var _0xa4ff=function(_0x40a045,_0x516f0e){_0x40a045=_0x40a045-0x0;var _0x1a687c=_0x4ffa[_0x40a045];return _0x1a687c;};'use strict';var schema=require('validate');var _=require('lodash');var util=require(_0xa4ff('0x0'));var seqqueue=require('seq-queue');var moment=require(_0xa4ff('0x1'));var Redis=require(_0xa4ff('0x2'));var config=require(_0xa4ff('0x3'));var logger=require(_0xa4ff('0x4'))(_0xa4ff('0x5'));var strategy=require(_0xa4ff('0x6'));config['redis']=_[_0xa4ff('0x7')](config[_0xa4ff('0x8')],{'host':_0xa4ff('0x9'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0xa4ff('0x8')]));var attributes=['id','queue_id',_0xa4ff('0xa'),_0xa4ff('0xb'),_0xa4ff('0xc'),'joinAt'];function emit(_0x3aa570,_0x4894df,_0x5e2d94){io['to'](_0x3aa570)['emit'](_0x4894df,_0x5e2d94);}function emitChannelQueueInteraction(_0xb9c9bc,_0x3b1fe4,_0x7cb440,_0x2007b1,_0x4ec03b,_0x3f02a5,_0x3e748c,_0x5c8240){var _0x3d34d9=_[_0xa4ff('0xd')](_0x7cb440);_0x3d34d9['queue_id']=_0x5c8240;_0x3d34d9[_0xa4ff('0xb')]=_0x3b1fe4;_0x3d34d9[_0xa4ff('0xa')]=_0x2007b1;_0x3d34d9['id']=_0x4ec03b;if(_0x3f02a5){_0x3e748c[util['format'](_0xa4ff('0xe'),_0xb9c9bc)][_0x4ec03b]=_['pick'](_0x3d34d9,attributes);}else{delete _0x3e748c[util[_0xa4ff('0xf')]('%sQueuesWaitingInteractions',_0xb9c9bc)][_0x4ec03b];}emit(util[_0xa4ff('0xf')](_0xa4ff('0x10'),_0xb9c9bc,_0x3b1fe4),util['format'](_0xa4ff('0x11'),_0xb9c9bc,_0x3f02a5?_0xa4ff('0x12'):_0xa4ff('0x13')),_[_0xa4ff('0x14')](_0x3d34d9,attributes));}var rpc={'openchannelQueueReport':require(_0xa4ff('0x15')),'mailQueueReport':require(_0xa4ff('0x16')),'chatQueueReport':require('../../rpc/chatQueueReport'),'smsQueueReport':require(_0xa4ff('0x17')),'faxQueueReport':require(_0xa4ff('0x18')),'whatsappQueueReport':require(_0xa4ff('0x19'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0xa4ff('0x1a')},'timeout':{'type':_0xa4ff('0x1b'),'message':'timeout\x20is\x20a\x20number'}});function startRouting(_0x54872f,_0x28a1bc,_0x4f95aa,_0x50ba3b){if(_0x54872f&&_0x28a1bc&&_0x4f95aa){_0x28a1bc[_0xa4ff('0x1c')]+=0x1;var _0x20ba0d={'uniqueid':_0x54872f,'from':_0x4f95aa[_0xa4ff('0x1d')]?_0x4f95aa[_0xa4ff('0x1d')][_0xa4ff('0xc')]:'','joinAt':moment()['format'](_0xa4ff('0x1e')),'ContactId':_0x4f95aa['contact']?_0x4f95aa['contact']['id']:null,'ListId':_0x4f95aa[_0xa4ff('0x1f')]?_0x4f95aa['list']['id']:null};_0x20ba0d[_[_0xa4ff('0x20')](_0x4f95aa['channel'])+_0xa4ff('0x21')]=_0x28a1bc['id']||null;_0x20ba0d[_['upperFirst'](_0x4f95aa['channel'])+_0xa4ff('0x22')]=_0x4f95aa[_0xa4ff('0x23')]?_0x4f95aa[_0xa4ff('0x23')]['id']:null;_0x20ba0d[_[_0xa4ff('0x20')](_0x4f95aa['channel'])+_0xa4ff('0x24')]=_0x4f95aa[_0xa4ff('0x25')]?_0x4f95aa[_0xa4ff('0x25')]['id']:null;_0x20ba0d[_[_0xa4ff('0x20')](_0x4f95aa[_0xa4ff('0x26')])+(_0x4f95aa[_0xa4ff('0x26')]!==_0xa4ff('0x27')?'AccountId':_0xa4ff('0x28'))]=_0x4f95aa[_0xa4ff('0xa')]?_0x4f95aa['account']['id']:null;logger['info'](util[_0xa4ff('0xf')](_0xa4ff('0x29'),_0x54872f,_0x28a1bc[_0xa4ff('0x2a')]));emitChannelQueueInteraction(_0x4f95aa['channel'],_0x28a1bc[_0xa4ff('0x2a')],_0x20ba0d,_0x4f95aa[_0xa4ff('0xa')][_0xa4ff('0x2a')],_0x4f95aa[_0xa4ff('0x25')]['id'],!![],_0x50ba3b,_0x28a1bc['id']);if(rpc[_0x4f95aa['channel']+_0xa4ff('0x2b')]){return rpc[_0x4f95aa[_0xa4ff('0x26')]+'QueueReport'][_0xa4ff('0x2c')](_0x20ba0d)[_0xa4ff('0x2d')](function(_0x19a377){logger[_0xa4ff('0x2e')](_0xa4ff('0x2f'));});}}}function stopRouting(_0x2c67ee,_0x2d5499,_0x65ce63,_0x3171c){if(_0x2c67ee&&_0x2d5499){_0x2d5499[_0xa4ff('0x1c')]-=0x1;var _0x58a68a={'leaveAt':moment()[_0xa4ff('0xf')](_0xa4ff('0x1e')),'acceptAt':moment()['format'](_0xa4ff('0x1e')),'reason':_0xa4ff('0x30')};logger[_0xa4ff('0x31')](util[_0xa4ff('0xf')]('[%s][STOP:QUEUE][NAME:%s]',_0x2c67ee,_0x2d5499[_0xa4ff('0x2a')]));emitChannelQueueInteraction(_0x65ce63[_0xa4ff('0x26')],_0x2d5499[_0xa4ff('0x2a')],_0x65ce63['body'],_0x65ce63['account'][_0xa4ff('0x2a')],_0x65ce63['message']['id'],![],_0x3171c,_0x2d5499['id']);if(rpc[_0x65ce63[_0xa4ff('0x26')]+_0xa4ff('0x2b')]){return rpc[_0x65ce63[_0xa4ff('0x26')]+'QueueReport'][_0xa4ff('0x32')](_0x2c67ee,_0x58a68a)[_0xa4ff('0x2d')](function(_0x43c6e6){logger[_0xa4ff('0x2e')]('update\x20queue\x20report');});}}}function endRouting(_0x929509,_0x164fc8,_0x3adf8e,_0x5f46de){if(_0x929509&&_0x164fc8){_0x164fc8[_0xa4ff('0x1c')]-=0x1;var _0x20bd3e={'leaveAt':moment()['format'](_0xa4ff('0x1e')),'exitAt':moment()['format'](_0xa4ff('0x1e')),'reason':'timeout'};logger['info'](util[_0xa4ff('0xf')](_0xa4ff('0x33'),_0x929509,_0x164fc8[_0xa4ff('0x2a')]));emitChannelQueueInteraction(_0x3adf8e['channel'],_0x164fc8[_0xa4ff('0x2a')],_0x3adf8e[_0xa4ff('0x1d')],_0x3adf8e['account'][_0xa4ff('0x2a')],_0x3adf8e['message']['id'],![],_0x5f46de);if(rpc[_0x3adf8e[_0xa4ff('0x26')]+_0xa4ff('0x2b')]){return rpc[_0x3adf8e[_0xa4ff('0x26')]+_0xa4ff('0x2b')][_0xa4ff('0x32')](_0x929509,_0x20bd3e)[_0xa4ff('0x2d')](function(_0x15f561){logger[_0xa4ff('0x2e')](_0xa4ff('0x34'));});}}}function handleFindQueue(_0x90ad73){return function(_0x6d5732){return _0x6d5732[_0xa4ff('0x2a')][_0xa4ff('0x35')]()===_0x90ad73[_0xa4ff('0x35')]();};}exports[_0xa4ff('0x36')]=function(_0x217e3c,_0x5b9152,_0x407b73,_0x5e8e31){return function(_0x448b78){try{var _0x287abb={'name':_0x5b9152[0x0],'timeout':_0x5b9152[0x1]};var _0x5d9a26=queue[_0xa4ff('0x37')](_0x287abb,{'typecast':!![]});if(_0x5d9a26[_0xa4ff('0x38')]){logger[_0xa4ff('0x2e')]('[%s][QUEUE]\x20%s',_0x217e3c,_[_0xa4ff('0x39')](_0x5d9a26,_0xa4ff('0x25'))[_0xa4ff('0x3a')](',\x20'));_0x448b78[_0xa4ff('0x3b')]();}else{var _0x512e22=_[_0xa4ff('0x3c')](_0x407b73[_0x5e8e31[_0xa4ff('0x26')]+'Queues'],handleFindQueue(_0x287abb['name']));if(_0x512e22){startRouting(_0x217e3c,_0x512e22,_0x5e8e31,_0x407b73);var _0x1d91a0=(_0x512e22[_0xa4ff('0x3d')]||0xa)*0x3e8;var _0x569bcc=(_0x287abb['timeout']||0x14)*0x3e8;var _0x299e44,_0x5be171;if(_0x1d91a0>_0x569bcc){_0x569bcc=_0x1d91a0;}var _0x3d6a66=seqqueue[_0xa4ff('0x3e')](_0x1d91a0);_0x3d6a66['id']=_0x217e3c;_0x3d6a66[_0xa4ff('0x3f')]=_0x1d91a0;_0x3d6a66[_0xa4ff('0x40')]=_0x569bcc;_0x3d6a66['channel']=_0x5e8e31[_0xa4ff('0x26')];_0x407b73[_0xa4ff('0x41')][_0x217e3c]['on'](_0xa4ff('0x42'),function(){logger['info'](_0xa4ff('0x43'),_0x217e3c);stopRouting(_0x217e3c,_0x512e22,_0x5e8e31,_0x407b73);clearTimeout(_0x299e44);_0x299e44=undefined;_0x3d6a66[_0xa4ff('0x44')](!![]);if(_0x407b73['rules'][_0x217e3c]){delete _0x407b73[_0xa4ff('0x41')][_0x217e3c];}_0x448b78[_0xa4ff('0x3b')]();});_0x407b73['rules'][_0x217e3c]['on'](_0xa4ff('0x45'),function(){if(_0x407b73[_0xa4ff('0x41')][_0x217e3c]){delete _0x407b73[_0xa4ff('0x41')][_0x217e3c];}});_0x299e44=setTimeout(function(){logger[_0xa4ff('0x31')](_0xa4ff('0x46'),_0x217e3c);endRouting(_0x217e3c,_0x512e22,_0x5e8e31,_0x407b73);clearTimeout(_0x299e44);_0x3d6a66[_0xa4ff('0x44')](!![]);_0x448b78['next']();},_0x569bcc);switch(_0x512e22[_0xa4ff('0x47')]){case _0xa4ff('0x48'):strategy[_0xa4ff('0x48')](_0x3d6a66,_0x512e22,_0x407b73,_0x5e8e31);break;default:strategy[_0xa4ff('0x49')](_0x3d6a66,_0x512e22,_0x407b73,_0x5e8e31);}}else{logger['error']('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x217e3c,_0x287abb['name']);_0x448b78[_0xa4ff('0x3b')]();}}}catch(_0x588569){console['log'](_0x588569);logger[_0xa4ff('0x2e')]('[%s][QUEUE]\x20%s',_0x217e3c,_0x588569[_0xa4ff('0x4a')]);_0x448b78[_0xa4ff('0x3b')]();}};};