Built motion from commit 91ed41ac.|2.5.44
[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 _0x0254=['format','%sQueuesWaitingInteractions','pick','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','timeout\x20is\x20a\x20number','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','MessageId','message','chat','AccountId','WebsiteId','info','name','QueueReport','create','catch','create\x20queue\x20report','waiting','accepted','[%s][STOP:QUEUE][NAME:%s]','error','update\x20queue\x20report','[%s][END:QUEUE][NAME:%s]','update','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','map','timeout','atimeout','qtimeout','rules','end','stop','[%s][QUEUE]\x20APPLICATION\x20END','close','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','validate','util','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','socket.io-emitter','account','from','joinAt','clone','queue_id','queue'];(function(_0x266fce,_0x284c73){var _0x5832fd=function(_0x34d32b){while(--_0x34d32b){_0x266fce['push'](_0x266fce['shift']());}};_0x5832fd(++_0x284c73);}(_0x0254,0x11c));var _0x4025=function(_0xd4db1a,_0x7ca98e){_0xd4db1a=_0xd4db1a-0x0;var _0x2a0e7e=_0x0254[_0xd4db1a];return _0x2a0e7e;};'use strict';var schema=require(_0x4025('0x0'));var _=require('lodash');var util=require(_0x4025('0x1'));var seqqueue=require('seq-queue');var moment=require(_0x4025('0x2'));var Redis=require(_0x4025('0x3'));var config=require(_0x4025('0x4'));var logger=require(_0x4025('0x5'))(_0x4025('0x6'));var strategy=require(_0x4025('0x7'));config[_0x4025('0x8')]=_['defaults'](config['redis'],{'host':'localhost','port':0x18eb});var io=require(_0x4025('0x9'))(new Redis(config[_0x4025('0x8')]));var attributes=['id','queue_id',_0x4025('0xa'),'queue',_0x4025('0xb'),_0x4025('0xc')];function emit(_0x45459c,_0x414e80,_0x4616cb){io['to'](_0x45459c)['emit'](_0x414e80,_0x4616cb);}function emitChannelQueueInteraction(_0x188b7a,_0x1bda15,_0x365f9c,_0x51db9a,_0x4b77a5,_0x4968,_0x1872f7,_0x4549b9){var _0x275414=_[_0x4025('0xd')](_0x365f9c);_0x275414[_0x4025('0xe')]=_0x4549b9;_0x275414[_0x4025('0xf')]=_0x1bda15;_0x275414[_0x4025('0xa')]=_0x51db9a;_0x275414['id']=_0x4b77a5;if(_0x4968){_0x1872f7[util[_0x4025('0x10')](_0x4025('0x11'),_0x188b7a)][_0x4b77a5]=_[_0x4025('0x12')](_0x275414,attributes);}else{delete _0x1872f7[util['format'](_0x4025('0x11'),_0x188b7a)][_0x4b77a5];}emit(util[_0x4025('0x10')](_0x4025('0x13'),_0x188b7a,_0x1bda15),util[_0x4025('0x10')](_0x4025('0x14'),_0x188b7a,_0x4968?_0x4025('0x15'):_0x4025('0x16')),_[_0x4025('0x12')](_0x275414,attributes));}var rpc={'openchannelQueueReport':require(_0x4025('0x17')),'mailQueueReport':require(_0x4025('0x18')),'chatQueueReport':require(_0x4025('0x19')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require(_0x4025('0x1a')),'whatsappQueueReport':require(_0x4025('0x1b'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0x4025('0x1c')},'timeout':{'type':'number','message':_0x4025('0x1d')}});function startRouting(_0x49741e,_0x5a8b5d,_0x6828f6,_0x157336){if(_0x49741e&&_0x5a8b5d&&_0x6828f6){_0x5a8b5d['waiting']+=0x1;var _0x503040={'uniqueid':_0x49741e,'from':_0x6828f6[_0x4025('0x1e')]?_0x6828f6[_0x4025('0x1e')][_0x4025('0xb')]:'','joinAt':moment()[_0x4025('0x10')](_0x4025('0x1f')),'ContactId':_0x6828f6['contact']?_0x6828f6[_0x4025('0x20')]['id']:null,'ListId':_0x6828f6[_0x4025('0x21')]?_0x6828f6[_0x4025('0x21')]['id']:null};_0x503040[_[_0x4025('0x22')](_0x6828f6[_0x4025('0x23')])+_0x4025('0x24')]=_0x5a8b5d['id']||null;_0x503040[_[_0x4025('0x22')](_0x6828f6[_0x4025('0x23')])+'InteractionId']=_0x6828f6['interaction']?_0x6828f6['interaction']['id']:null;_0x503040[_['upperFirst'](_0x6828f6[_0x4025('0x23')])+_0x4025('0x25')]=_0x6828f6[_0x4025('0x26')]?_0x6828f6[_0x4025('0x26')]['id']:null;_0x503040[_[_0x4025('0x22')](_0x6828f6[_0x4025('0x23')])+(_0x6828f6[_0x4025('0x23')]!==_0x4025('0x27')?_0x4025('0x28'):_0x4025('0x29'))]=_0x6828f6[_0x4025('0xa')]?_0x6828f6[_0x4025('0xa')]['id']:null;logger[_0x4025('0x2a')](util[_0x4025('0x10')]('[%s][START:QUEUE][NAME:%s]',_0x49741e,_0x5a8b5d[_0x4025('0x2b')]));emitChannelQueueInteraction(_0x6828f6['channel'],_0x5a8b5d['name'],_0x503040,_0x6828f6[_0x4025('0xa')][_0x4025('0x2b')],_0x6828f6[_0x4025('0x26')]['id'],!![],_0x157336,_0x5a8b5d['id']);if(rpc[_0x6828f6[_0x4025('0x23')]+_0x4025('0x2c')]){return rpc[_0x6828f6['channel']+'QueueReport'][_0x4025('0x2d')](_0x503040)[_0x4025('0x2e')](function(_0x419c60){logger['error'](_0x4025('0x2f'));});}}}function stopRouting(_0x465c59,_0x138188,_0x549427,_0x66c8b4){if(_0x465c59&&_0x138188){_0x138188[_0x4025('0x30')]-=0x1;var _0x5d6e86={'leaveAt':moment()[_0x4025('0x10')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()[_0x4025('0x10')](_0x4025('0x1f')),'reason':_0x4025('0x31')};logger[_0x4025('0x2a')](util['format'](_0x4025('0x32'),_0x465c59,_0x138188[_0x4025('0x2b')]));emitChannelQueueInteraction(_0x549427['channel'],_0x138188[_0x4025('0x2b')],_0x549427[_0x4025('0x1e')],_0x549427[_0x4025('0xa')]['name'],_0x549427[_0x4025('0x26')]['id'],![],_0x66c8b4,_0x138188['id']);if(rpc[_0x549427[_0x4025('0x23')]+'QueueReport']){return rpc[_0x549427[_0x4025('0x23')]+_0x4025('0x2c')]['update'](_0x465c59,_0x5d6e86)['catch'](function(_0x3eb50a){logger[_0x4025('0x33')](_0x4025('0x34'));});}}}function endRouting(_0x15bb24,_0x18603a,_0xd44701,_0x57822d){if(_0x15bb24&&_0x18603a){_0x18603a[_0x4025('0x30')]-=0x1;var _0x41364e={'leaveAt':moment()[_0x4025('0x10')](_0x4025('0x1f')),'exitAt':moment()['format'](_0x4025('0x1f')),'reason':'timeout'};logger[_0x4025('0x2a')](util['format'](_0x4025('0x35'),_0x15bb24,_0x18603a[_0x4025('0x2b')]));emitChannelQueueInteraction(_0xd44701['channel'],_0x18603a[_0x4025('0x2b')],_0xd44701[_0x4025('0x1e')],_0xd44701[_0x4025('0xa')][_0x4025('0x2b')],_0xd44701[_0x4025('0x26')]['id'],![],_0x57822d);if(rpc[_0xd44701[_0x4025('0x23')]+_0x4025('0x2c')]){return rpc[_0xd44701['channel']+_0x4025('0x2c')][_0x4025('0x36')](_0x15bb24,_0x41364e)[_0x4025('0x2e')](function(_0x41c4fc){logger[_0x4025('0x33')](_0x4025('0x34'));});}}}function handleFindQueue(_0x3c6c84){return function(_0x582240){return _0x582240[_0x4025('0x2b')]['toLowerCase']()===_0x3c6c84[_0x4025('0x37')]();};}exports[_0x4025('0x38')]=function(_0x76537,_0x48e913,_0x2d8e68,_0x2c6546){return function(_0xfd6422){try{var _0x38e1d6={'name':_0x48e913[0x0],'timeout':_0x48e913[0x1]};var _0xab7f24=queue[_0x4025('0x0')](_0x38e1d6,{'typecast':!![]});if(_0xab7f24[_0x4025('0x39')]){logger[_0x4025('0x33')](_0x4025('0x3a'),_0x76537,_[_0x4025('0x3b')](_0xab7f24,'message')['join'](',\x20'));_0xfd6422['stop']();}else{var _0x46d9f2=_['find'](_0x2d8e68[_0x2c6546[_0x4025('0x23')]+'Queues'],handleFindQueue(_0x38e1d6[_0x4025('0x2b')]));if(_0x46d9f2){startRouting(_0x76537,_0x46d9f2,_0x2c6546,_0x2d8e68);var _0x501757=(_0x46d9f2[_0x4025('0x3c')]||0xa)*0x3e8;var _0x5c7101=(_0x38e1d6[_0x4025('0x3c')]||0x14)*0x3e8;var _0x55d0a9,_0x307c4c;if(_0x501757>_0x5c7101){_0x5c7101=_0x501757;}var _0x208afa=seqqueue['createQueue'](_0x501757);_0x208afa['id']=_0x76537;_0x208afa[_0x4025('0x3d')]=_0x501757;_0x208afa[_0x4025('0x3e')]=_0x5c7101;_0x208afa['channel']=_0x2c6546[_0x4025('0x23')];_0x2d8e68[_0x4025('0x3f')][_0x76537]['on'](_0x4025('0x40'),function(){logger['info']('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x76537);stopRouting(_0x76537,_0x46d9f2,_0x2c6546,_0x2d8e68);clearTimeout(_0x55d0a9);_0x55d0a9=undefined;_0x208afa['close'](!![]);if(_0x2d8e68['rules'][_0x76537]){delete _0x2d8e68['rules'][_0x76537];}_0xfd6422[_0x4025('0x41')]();});_0x2d8e68[_0x4025('0x3f')][_0x76537]['on']('complete',function(){if(_0x2d8e68[_0x4025('0x3f')][_0x76537]){delete _0x2d8e68['rules'][_0x76537];}});_0x55d0a9=setTimeout(function(){logger[_0x4025('0x2a')](_0x4025('0x42'),_0x76537);endRouting(_0x76537,_0x46d9f2,_0x2c6546,_0x2d8e68);clearTimeout(_0x55d0a9);_0x208afa[_0x4025('0x43')](!![]);_0xfd6422[_0x4025('0x44')]();},_0x5c7101);switch(_0x46d9f2[_0x4025('0x45')]){case'rrmemory':strategy[_0x4025('0x46')](_0x208afa,_0x46d9f2,_0x2d8e68,_0x2c6546);break;default:strategy[_0x4025('0x47')](_0x208afa,_0x46d9f2,_0x2d8e68,_0x2c6546);}}else{logger[_0x4025('0x33')](_0x4025('0x48'),_0x76537,_0x38e1d6[_0x4025('0x2b')]);_0xfd6422['stop']();}}}catch(_0xcfe462){console[_0x4025('0x49')](_0xcfe462);logger[_0x4025('0x33')](_0x4025('0x3a'),_0x76537,_0xcfe462[_0x4025('0x4a')]);_0xfd6422['stop']();}};};