a31d5d0ac812c73873be05b73a5f31a24fcdebbf
[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 _0x446e=['QueueId','InteractionId','interaction','MessageId','message','chat','AccountId','WebsiteId','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','create\x20queue\x20report','accepted','info','Interaction','update','update\x20queue\x20report','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','map','join','stop','find','Queues','createQueue','atimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','next','stack','validate','lodash','util','moment','ioredis','../../../../config/logger','routing','./strategy','redis','defaults','localhost','queue_id','queue','from','joinAt','clone','account','push','capitalize','format','%sQueuesWaitingInteractions','pick','%s_queue_waiting_interaction:%s','save','remove','../../rpc/mailQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','../../rpc/chatInteraction','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../rpc/smsInteraction','../../rpc/whatsappInteraction','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel'];(function(_0x2b0567,_0x48cc51){var _0x911123=function(_0x3fc458){while(--_0x3fc458){_0x2b0567['push'](_0x2b0567['shift']());}};_0x911123(++_0x48cc51);}(_0x446e,0xce));var _0xe446=function(_0x28ae85,_0x108ec1){_0x28ae85=_0x28ae85-0x0;var _0x5a60a2=_0x446e[_0x28ae85];return _0x5a60a2;};'use strict';var schema=require(_0xe446('0x0'));var _=require(_0xe446('0x1'));var util=require(_0xe446('0x2'));var seqqueue=require('seq-queue');var moment=require(_0xe446('0x3'));var Redis=require(_0xe446('0x4'));var config=require('../../../../config/environment');var logger=require(_0xe446('0x5'))(_0xe446('0x6'));var strategy=require(_0xe446('0x7'));config[_0xe446('0x8')]=_[_0xe446('0x9')](config['redis'],{'host':_0xe446('0xa'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0xe446('0x8')]));var attributes=['id',_0xe446('0xb'),'account',_0xe446('0xc'),_0xe446('0xd'),_0xe446('0xe')];function emit(_0x44271d,_0x1e0988,_0xbd17d0){io['to'](_0x44271d)['emit'](_0x1e0988,_0xbd17d0);}function emitChannelQueueInteraction(_0x5594f4,_0x1c98fe,_0x50aa26,_0x25db30,_0x267f85,_0x5f01f3,_0x349099,_0x5b04d4){var _0x4aeb00=_[_0xe446('0xf')](_0x50aa26);_0x4aeb00[_0xe446('0xb')]=_0x5b04d4;_0x4aeb00['queue']=_0x1c98fe;_0x4aeb00[_0xe446('0x10')]=_0x25db30;_0x4aeb00['id']=_0x267f85;if(_0x5f01f3){attributes[_0xe446('0x11')](_[_0xe446('0x12')](_0x5594f4)+'InteractionId');_0x349099[util[_0xe446('0x13')](_0xe446('0x14'),_0x5594f4)][_0x267f85]=_[_0xe446('0x15')](_0x4aeb00,attributes);}else{delete _0x349099[util['format'](_0xe446('0x14'),_0x5594f4)][_0x267f85];}emit(util['format']('%s:queue:%s',_0x5594f4,_0x1c98fe),util[_0xe446('0x13')](_0xe446('0x16'),_0x5594f4,_0x5f01f3?_0xe446('0x17'):_0xe446('0x18')),_[_0xe446('0x15')](_0x4aeb00,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0xe446('0x19')),'chatQueueReport':require('../../rpc/chatQueueReport'),'smsQueueReport':require(_0xe446('0x1a')),'faxQueueReport':require(_0xe446('0x1b')),'whatsappQueueReport':require(_0xe446('0x1c')),'chatInteraction':require(_0xe446('0x1d')),'faxInteraction':require(_0xe446('0x1e')),'mailInteraction':require(_0xe446('0x1f')),'openchannelInteraction':require(_0xe446('0x20')),'smsInteraction':require(_0xe446('0x21')),'whatsappInteraction':require(_0xe446('0x22'))};var queue=schema({'name':{'type':_0xe446('0x23'),'required':!![],'message':_0xe446('0x24')},'timeout':{'type':_0xe446('0x25'),'message':_0xe446('0x26')}});function startRouting(_0x5cde3e,_0x69591f,_0x330b5e,_0x551d01){if(_0x5cde3e&&_0x69591f&&_0x330b5e){_0x69591f[_0xe446('0x27')]+=0x1;var _0x41e832={'uniqueid':_0x5cde3e,'from':_0x330b5e['body']?_0x330b5e[_0xe446('0x28')][_0xe446('0xd')]:'','joinAt':moment()[_0xe446('0x13')](_0xe446('0x29')),'ContactId':_0x330b5e[_0xe446('0x2a')]?_0x330b5e['contact']['id']:null,'ListId':_0x330b5e[_0xe446('0x2b')]?_0x330b5e['list']['id']:null};_0x41e832[_[_0xe446('0x2c')](_0x330b5e[_0xe446('0x2d')])+_0xe446('0x2e')]=_0x69591f['id']||null;_0x41e832[_['upperFirst'](_0x330b5e['channel'])+_0xe446('0x2f')]=_0x330b5e[_0xe446('0x30')]?_0x330b5e['interaction']['id']:null;_0x41e832[_[_0xe446('0x2c')](_0x330b5e[_0xe446('0x2d')])+_0xe446('0x31')]=_0x330b5e[_0xe446('0x32')]?_0x330b5e['message']['id']:null;_0x41e832[_[_0xe446('0x2c')](_0x330b5e[_0xe446('0x2d')])+(_0x330b5e[_0xe446('0x2d')]!==_0xe446('0x33')?_0xe446('0x34'):_0xe446('0x35'))]=_0x330b5e[_0xe446('0x10')]?_0x330b5e['account']['id']:null;logger['info'](util['format'](_0xe446('0x36'),_0x5cde3e,_0x69591f['name']));emitChannelQueueInteraction(_0x330b5e[_0xe446('0x2d')],_0x69591f[_0xe446('0x37')],_0x41e832,_0x330b5e[_0xe446('0x10')][_0xe446('0x37')],_0x330b5e[_0xe446('0x32')]['id'],!![],_0x551d01,_0x69591f['id']);if(rpc[_0x330b5e[_0xe446('0x2d')]+_0xe446('0x38')]){return rpc[_0x330b5e[_0xe446('0x2d')]+'QueueReport'][_0xe446('0x39')](_0x41e832)[_0xe446('0x3a')](function(_0x369e77){logger[_0xe446('0x3b')](_0xe446('0x3c'),_0x369e77);});}}}function stopRouting(_0x440adc,_0x3ef57a,_0x4d5b48,_0x520cfa){if(_0x440adc&&_0x3ef57a){_0x3ef57a[_0xe446('0x27')]-=0x1;var _0x5f322a={'leaveAt':moment()[_0xe446('0x13')](_0xe446('0x29')),'acceptAt':moment()[_0xe446('0x13')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0xe446('0x3d')};logger[_0xe446('0x3e')](util['format']('[%s][STOP:QUEUE][NAME:%s]',_0x440adc,_0x3ef57a[_0xe446('0x37')]));emitChannelQueueInteraction(_0x4d5b48['channel'],_0x3ef57a['name'],_0x4d5b48[_0xe446('0x28')],_0x4d5b48[_0xe446('0x10')][_0xe446('0x37')],_0x4d5b48[_0xe446('0x32')]['id'],![],_0x520cfa,_0x3ef57a['id']);return rpc[_0x4d5b48[_0xe446('0x2d')]+_0xe446('0x3f')][_0xe446('0x40')](_0x4d5b48[_0xe446('0x30')]['id'],{'queueId':_0x3ef57a['id']})['then'](function(){if(rpc[_0x4d5b48[_0xe446('0x2d')]+_0xe446('0x38')]){return rpc[_0x4d5b48[_0xe446('0x2d')]+_0xe446('0x38')][_0xe446('0x40')](_0x440adc,_0x5f322a)[_0xe446('0x3a')](function(_0x387894){logger[_0xe446('0x3b')](_0xe446('0x41'),_0x387894);});}});}}function endRouting(_0x31954a,_0x123618,_0x22717d,_0x566b78){if(_0x31954a&&_0x123618){_0x123618[_0xe446('0x27')]-=0x1;var _0x554791={'leaveAt':moment()['format'](_0xe446('0x29')),'exitAt':moment()[_0xe446('0x13')](_0xe446('0x29')),'reason':'timeout'};logger[_0xe446('0x3e')](util[_0xe446('0x13')](_0xe446('0x42'),_0x31954a,_0x123618[_0xe446('0x37')]));emitChannelQueueInteraction(_0x22717d[_0xe446('0x2d')],_0x123618[_0xe446('0x37')],_0x22717d[_0xe446('0x28')],_0x22717d[_0xe446('0x10')]['name'],_0x22717d[_0xe446('0x32')]['id'],![],_0x566b78);if(rpc[_0x22717d[_0xe446('0x2d')]+'QueueReport']){return rpc[_0x22717d['channel']+_0xe446('0x38')][_0xe446('0x40')](_0x31954a,_0x554791)[_0xe446('0x3a')](function(_0x4c58fb){logger[_0xe446('0x3b')](_0xe446('0x41'),_0x4c58fb);});}}}function handleFindQueue(_0x54cd83){return function(_0x413dc9){return _0x413dc9[_0xe446('0x37')][_0xe446('0x43')]()===_0x54cd83[_0xe446('0x43')]();};}exports[_0xe446('0x44')]=function(_0x4cf0cd,_0x388ce7,_0x1d0015,_0x4a0d96){return function(_0x54a5a9){try{var _0x2ac8ed={'name':_0x388ce7[0x0],'timeout':_0x388ce7[0x1]};var _0x3fece8=queue[_0xe446('0x0')](_0x2ac8ed,{'typecast':!![]});if(_0x3fece8[_0xe446('0x45')]){logger[_0xe446('0x3b')](_0xe446('0x46'),_0x4cf0cd,_[_0xe446('0x47')](_0x3fece8,_0xe446('0x32'))[_0xe446('0x48')](',\x20'));_0x54a5a9[_0xe446('0x49')]();}else{var _0x57f7d1=_[_0xe446('0x4a')](_0x1d0015[_0x4a0d96[_0xe446('0x2d')]+_0xe446('0x4b')],handleFindQueue(_0x2ac8ed[_0xe446('0x37')]));if(_0x57f7d1){startRouting(_0x4cf0cd,_0x57f7d1,_0x4a0d96,_0x1d0015);var _0x41d1b6=(_0x57f7d1['timeout']||0xa)*0x3e8;var _0x305635=(_0x2ac8ed['timeout']||0x14)*0x3e8;var _0x4c5b6f;if(_0x41d1b6>_0x305635){_0x305635=_0x41d1b6;}var _0x576dbc=seqqueue[_0xe446('0x4c')](_0x41d1b6);_0x576dbc['id']=_0x4cf0cd;_0x576dbc[_0xe446('0x4d')]=_0x41d1b6;_0x576dbc['qtimeout']=_0x305635;_0x576dbc['channel']=_0x4a0d96[_0xe446('0x2d')];_0x1d0015[_0xe446('0x4e')][_0x4cf0cd]['on'](_0xe446('0x4f'),function(){logger['info'](_0xe446('0x50'),_0x4cf0cd);stopRouting(_0x4cf0cd,_0x57f7d1,_0x4a0d96,_0x1d0015);clearTimeout(_0x4c5b6f);_0x4c5b6f=undefined;_0x576dbc[_0xe446('0x51')](!![]);if(_0x1d0015[_0xe446('0x4e')][_0x4cf0cd]){delete _0x1d0015[_0xe446('0x4e')][_0x4cf0cd];}_0x54a5a9[_0xe446('0x49')]();});_0x1d0015[_0xe446('0x4e')][_0x4cf0cd]['on']('complete',function(){if(_0x1d0015['rules'][_0x4cf0cd]){delete _0x1d0015[_0xe446('0x4e')][_0x4cf0cd];}});_0x4c5b6f=setTimeout(function(){logger[_0xe446('0x3e')]('[%s][QUEUE]\x20APPLICATION\x20END',_0x4cf0cd);endRouting(_0x4cf0cd,_0x57f7d1,_0x4a0d96,_0x1d0015);clearTimeout(_0x4c5b6f);_0x576dbc['close'](!![]);_0x54a5a9[_0xe446('0x52')]();},_0x305635);switch(_0x57f7d1['strategy']){case'rrmemory':strategy['rrmemory'](_0x576dbc,_0x57f7d1,_0x1d0015,_0x4a0d96);break;default:strategy['beepall'](_0x576dbc,_0x57f7d1,_0x1d0015,_0x4a0d96);}}else{logger[_0xe446('0x3b')]('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x4cf0cd,_0x2ac8ed['name']);_0x54a5a9[_0xe446('0x49')]();}}}catch(_0x39f6b4){logger[_0xe446('0x3b')](_0xe446('0x46'),_0x4cf0cd,_0x39f6b4[_0xe446('0x53')]);_0x54a5a9['stop']();}};};