51cd4b003481dfd788f3371c3eb4b00962986a91
[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 _0xe7e1=['close','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','validate','lodash','util','seq-queue','moment','../../../../config/environment','routing','./strategy','redis','defaults','queue_id','queue','from','joinAt','clone','account','format','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/faxQueueReport','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','InteractionId','interaction','MessageId','chat','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','message','QueueReport','catch','error','accepted','[%s][STOP:QUEUE][NAME:%s]','update','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','[%s][QUEUE]\x20%s','stop','find','Queues','createQueue','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED'];(function(_0x46d0c9,_0x526bfa){var _0x174506=function(_0x654bc6){while(--_0x654bc6){_0x46d0c9['push'](_0x46d0c9['shift']());}};_0x174506(++_0x526bfa);}(_0xe7e1,0x185));var _0x1e7e=function(_0x4b2436,_0x452299){_0x4b2436=_0x4b2436-0x0;var _0x4f5ab2=_0xe7e1[_0x4b2436];return _0x4f5ab2;};'use strict';var schema=require(_0x1e7e('0x0'));var _=require(_0x1e7e('0x1'));var util=require(_0x1e7e('0x2'));var seqqueue=require(_0x1e7e('0x3'));var moment=require(_0x1e7e('0x4'));var Redis=require('ioredis');var config=require(_0x1e7e('0x5'));var logger=require('../../../../config/logger')(_0x1e7e('0x6'));var strategy=require(_0x1e7e('0x7'));config[_0x1e7e('0x8')]=_[_0x1e7e('0x9')](config[_0x1e7e('0x8')],{'host':'localhost','port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));var attributes=['id',_0x1e7e('0xa'),'account',_0x1e7e('0xb'),_0x1e7e('0xc'),_0x1e7e('0xd')];function emit(_0x27ffd8,_0x3d8787,_0xaca878){io['to'](_0x27ffd8)['emit'](_0x3d8787,_0xaca878);}function emitChannelQueueInteraction(_0x4634f1,_0xf9d787,_0x66e5c5,_0x545ce4,_0x1cb8b9,_0x236600,_0x3e2e3a,_0x156dc9){var _0x1ba1b7=_[_0x1e7e('0xe')](_0x66e5c5);_0x1ba1b7[_0x1e7e('0xa')]=_0x156dc9;_0x1ba1b7['queue']=_0xf9d787;_0x1ba1b7[_0x1e7e('0xf')]=_0x545ce4;_0x1ba1b7['id']=_0x1cb8b9;if(_0x236600){_0x3e2e3a[util[_0x1e7e('0x10')]('%sQueuesWaitingInteractions',_0x4634f1)][_0x1cb8b9]=_['pick'](_0x1ba1b7,attributes);}else{delete _0x3e2e3a[util[_0x1e7e('0x10')](_0x1e7e('0x11'),_0x4634f1)][_0x1cb8b9];}emit(util[_0x1e7e('0x10')](_0x1e7e('0x12'),_0x4634f1,_0xf9d787),util['format'](_0x1e7e('0x13'),_0x4634f1,_0x236600?_0x1e7e('0x14'):_0x1e7e('0x15')),_['pick'](_0x1ba1b7,attributes));}var rpc={'openchannelQueueReport':require(_0x1e7e('0x16')),'mailQueueReport':require(_0x1e7e('0x17')),'chatQueueReport':require(_0x1e7e('0x18')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require(_0x1e7e('0x19')),'whatsappQueueReport':require('../../rpc/whatsappQueueReport')};var queue=schema({'name':{'type':'string','required':!![],'message':_0x1e7e('0x1a')},'timeout':{'type':'number','message':_0x1e7e('0x1b')}});function startRouting(_0x36602c,_0x1f822c,_0x413959,_0x16a60d){if(_0x36602c&&_0x1f822c&&_0x413959){_0x1f822c[_0x1e7e('0x1c')]+=0x1;var _0x2c0cb5={'uniqueid':_0x36602c,'from':_0x413959[_0x1e7e('0x1d')]?_0x413959['body']['from']:'','joinAt':moment()['format'](_0x1e7e('0x1e')),'ContactId':_0x413959[_0x1e7e('0x1f')]?_0x413959[_0x1e7e('0x1f')]['id']:null,'ListId':_0x413959[_0x1e7e('0x20')]?_0x413959['list']['id']:null};_0x2c0cb5[_[_0x1e7e('0x21')](_0x413959[_0x1e7e('0x22')])+_0x1e7e('0x23')]=_0x1f822c['id']||null;_0x2c0cb5[_[_0x1e7e('0x21')](_0x413959[_0x1e7e('0x22')])+_0x1e7e('0x24')]=_0x413959[_0x1e7e('0x25')]?_0x413959[_0x1e7e('0x25')]['id']:null;_0x2c0cb5[_[_0x1e7e('0x21')](_0x413959['channel'])+_0x1e7e('0x26')]=_0x413959['message']?_0x413959['message']['id']:null;_0x2c0cb5[_[_0x1e7e('0x21')](_0x413959[_0x1e7e('0x22')])+(_0x413959[_0x1e7e('0x22')]!==_0x1e7e('0x27')?_0x1e7e('0x28'):_0x1e7e('0x29'))]=_0x413959[_0x1e7e('0xf')]?_0x413959[_0x1e7e('0xf')]['id']:null;logger[_0x1e7e('0x2a')](util[_0x1e7e('0x10')](_0x1e7e('0x2b'),_0x36602c,_0x1f822c[_0x1e7e('0x2c')]));emitChannelQueueInteraction(_0x413959[_0x1e7e('0x22')],_0x1f822c['name'],_0x2c0cb5,_0x413959[_0x1e7e('0xf')][_0x1e7e('0x2c')],_0x413959[_0x1e7e('0x2d')]['id'],!![],_0x16a60d,_0x1f822c['id']);if(rpc[_0x413959['channel']+'QueueReport']){return rpc[_0x413959[_0x1e7e('0x22')]+_0x1e7e('0x2e')]['create'](_0x2c0cb5)[_0x1e7e('0x2f')](function(_0x436a91){logger[_0x1e7e('0x30')]('create\x20queue\x20report');});}}}function stopRouting(_0x211800,_0x587f35,_0x35c645,_0x5c8f09){if(_0x211800&&_0x587f35){_0x587f35['waiting']-=0x1;var _0x1a02a9={'leaveAt':moment()[_0x1e7e('0x10')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()[_0x1e7e('0x10')](_0x1e7e('0x1e')),'reason':_0x1e7e('0x31')};logger[_0x1e7e('0x2a')](util[_0x1e7e('0x10')](_0x1e7e('0x32'),_0x211800,_0x587f35[_0x1e7e('0x2c')]));emitChannelQueueInteraction(_0x35c645[_0x1e7e('0x22')],_0x587f35[_0x1e7e('0x2c')],_0x35c645[_0x1e7e('0x1d')],_0x35c645[_0x1e7e('0xf')][_0x1e7e('0x2c')],_0x35c645['message']['id'],![],_0x5c8f09,_0x587f35['id']);if(rpc[_0x35c645[_0x1e7e('0x22')]+_0x1e7e('0x2e')]){return rpc[_0x35c645[_0x1e7e('0x22')]+_0x1e7e('0x2e')][_0x1e7e('0x33')](_0x211800,_0x1a02a9)['catch'](function(_0x1b0d41){logger[_0x1e7e('0x30')](_0x1e7e('0x34'));});}}}function endRouting(_0x424400,_0x330c07,_0x4bb229,_0x4003cd){if(_0x424400&&_0x330c07){_0x330c07[_0x1e7e('0x1c')]-=0x1;var _0x542bb7={'leaveAt':moment()[_0x1e7e('0x10')](_0x1e7e('0x1e')),'exitAt':moment()[_0x1e7e('0x10')](_0x1e7e('0x1e')),'reason':_0x1e7e('0x35')};logger[_0x1e7e('0x2a')](util[_0x1e7e('0x10')](_0x1e7e('0x36'),_0x424400,_0x330c07['name']));emitChannelQueueInteraction(_0x4bb229[_0x1e7e('0x22')],_0x330c07[_0x1e7e('0x2c')],_0x4bb229[_0x1e7e('0x1d')],_0x4bb229[_0x1e7e('0xf')][_0x1e7e('0x2c')],_0x4bb229[_0x1e7e('0x2d')]['id'],![],_0x4003cd);if(rpc[_0x4bb229[_0x1e7e('0x22')]+'QueueReport']){return rpc[_0x4bb229[_0x1e7e('0x22')]+_0x1e7e('0x2e')][_0x1e7e('0x33')](_0x424400,_0x542bb7)[_0x1e7e('0x2f')](function(_0x3c3930){logger['error'](_0x1e7e('0x34'));});}}}function handleFindQueue(_0x22f01d){return function(_0x1826f5){return _0x1826f5[_0x1e7e('0x2c')][_0x1e7e('0x37')]()===_0x22f01d[_0x1e7e('0x37')]();};}exports[_0x1e7e('0x38')]=function(_0x174713,_0x26c3e0,_0x54743c,_0x333e21){return function(_0x2e33f6){try{var _0x337f43={'name':_0x26c3e0[0x0],'timeout':_0x26c3e0[0x1]};var _0x30401f=queue[_0x1e7e('0x0')](_0x337f43,{'typecast':!![]});if(_0x30401f['length']){logger[_0x1e7e('0x30')](_0x1e7e('0x39'),_0x174713,_['map'](_0x30401f,_0x1e7e('0x2d'))['join'](',\x20'));_0x2e33f6[_0x1e7e('0x3a')]();}else{var _0x1f9aca=_[_0x1e7e('0x3b')](_0x54743c[_0x333e21['channel']+_0x1e7e('0x3c')],handleFindQueue(_0x337f43[_0x1e7e('0x2c')]));if(_0x1f9aca){startRouting(_0x174713,_0x1f9aca,_0x333e21,_0x54743c);var _0x2e33be=(_0x1f9aca[_0x1e7e('0x35')]||0xa)*0x3e8;var _0x336d07=(_0x337f43[_0x1e7e('0x35')]||0x14)*0x3e8;var _0x32ff8d,_0x82b171;if(_0x2e33be>_0x336d07){_0x336d07=_0x2e33be;}var _0x22c947=seqqueue[_0x1e7e('0x3d')](_0x2e33be);_0x22c947['id']=_0x174713;_0x22c947[_0x1e7e('0x3e')]=_0x2e33be;_0x22c947[_0x1e7e('0x3f')]=_0x336d07;_0x22c947[_0x1e7e('0x22')]=_0x333e21[_0x1e7e('0x22')];_0x54743c[_0x1e7e('0x40')][_0x174713]['on'](_0x1e7e('0x41'),function(){logger['info'](_0x1e7e('0x42'),_0x174713);stopRouting(_0x174713,_0x1f9aca,_0x333e21,_0x54743c);clearTimeout(_0x32ff8d);_0x32ff8d=undefined;_0x22c947[_0x1e7e('0x43')](!![]);if(_0x54743c[_0x1e7e('0x40')][_0x174713]){delete _0x54743c[_0x1e7e('0x40')][_0x174713];}_0x2e33f6['stop']();});_0x54743c['rules'][_0x174713]['on'](_0x1e7e('0x44'),function(){if(_0x54743c['rules'][_0x174713]){delete _0x54743c[_0x1e7e('0x40')][_0x174713];}});_0x32ff8d=setTimeout(function(){logger[_0x1e7e('0x2a')](_0x1e7e('0x45'),_0x174713);endRouting(_0x174713,_0x1f9aca,_0x333e21,_0x54743c);clearTimeout(_0x32ff8d);_0x22c947[_0x1e7e('0x43')](!![]);_0x2e33f6[_0x1e7e('0x46')]();},_0x336d07);switch(_0x1f9aca['strategy']){case _0x1e7e('0x47'):strategy[_0x1e7e('0x47')](_0x22c947,_0x1f9aca,_0x54743c,_0x333e21);break;default:strategy[_0x1e7e('0x48')](_0x22c947,_0x1f9aca,_0x54743c,_0x333e21);}}else{logger[_0x1e7e('0x30')](_0x1e7e('0x49'),_0x174713,_0x337f43['name']);_0x2e33f6[_0x1e7e('0x3a')]();}}}catch(_0x3deb32){console[_0x1e7e('0x4a')](_0x3deb32);logger['error'](_0x1e7e('0x39'),_0x174713,_0x3deb32[_0x1e7e('0x4b')]);_0x2e33f6[_0x1e7e('0x3a')]();}};};