Built motion from commit d5e4af8c.|2.6.23
[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 _0x0e1f=['create','catch','error','create\x20queue\x20report','accepted','info','Interaction','update','then','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','stop','find','Queues','createQueue','atimeout','qtimeout','rules','close','complete','[%s][QUEUE]\x20APPLICATION\x20END','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','validate','util','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','defaults','socket.io-emitter','account','queue','from','joinAt','clone','queue_id','push','InteractionId','format','pick','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../rpc/smsInteraction','string','number','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','upperFirst','channel','QueueId','interaction','MessageId','message','chat','AccountId','[%s][START:QUEUE][NAME:%s]','name','QueueReport'];(function(_0x2dea24,_0x2fc021){var _0x309d58=function(_0x2eb89f){while(--_0x2eb89f){_0x2dea24['push'](_0x2dea24['shift']());}};_0x309d58(++_0x2fc021);}(_0x0e1f,0x1bc));var _0xf0e1=function(_0x3947c9,_0x4d6c97){_0x3947c9=_0x3947c9-0x0;var _0x2e7871=_0x0e1f[_0x3947c9];return _0x2e7871;};'use strict';var schema=require(_0xf0e1('0x0'));var _=require('lodash');var util=require(_0xf0e1('0x1'));var seqqueue=require('seq-queue');var moment=require(_0xf0e1('0x2'));var Redis=require(_0xf0e1('0x3'));var config=require(_0xf0e1('0x4'));var logger=require(_0xf0e1('0x5'))(_0xf0e1('0x6'));var strategy=require(_0xf0e1('0x7'));config[_0xf0e1('0x8')]=_[_0xf0e1('0x9')](config[_0xf0e1('0x8')],{'host':'localhost','port':0x18eb});var io=require(_0xf0e1('0xa'))(new Redis(config['redis']));var attributes=['id','queue_id',_0xf0e1('0xb'),_0xf0e1('0xc'),_0xf0e1('0xd'),_0xf0e1('0xe')];function emit(_0x21fccb,_0x51e601,_0x4b2c05){io['to'](_0x21fccb)['emit'](_0x51e601,_0x4b2c05);}function emitChannelQueueInteraction(_0x229da5,_0x369b93,_0x39d739,_0x3112b1,_0x531b3c,_0x4d296d,_0x3ffe35,_0x1c8a3f){var _0x399fba=_[_0xf0e1('0xf')](_0x39d739);_0x399fba[_0xf0e1('0x10')]=_0x1c8a3f;_0x399fba[_0xf0e1('0xc')]=_0x369b93;_0x399fba[_0xf0e1('0xb')]=_0x3112b1;_0x399fba['id']=_0x531b3c;if(_0x4d296d){attributes[_0xf0e1('0x11')](_['capitalize'](_0x229da5)+_0xf0e1('0x12'));_0x3ffe35[util[_0xf0e1('0x13')]('%sQueuesWaitingInteractions',_0x229da5)][_0x531b3c]=_[_0xf0e1('0x14')](_0x399fba,attributes);}else{delete _0x3ffe35[util[_0xf0e1('0x13')](_0xf0e1('0x15'),_0x229da5)][_0x531b3c];}emit(util[_0xf0e1('0x13')](_0xf0e1('0x16'),_0x229da5,_0x369b93),util[_0xf0e1('0x13')](_0xf0e1('0x17'),_0x229da5,_0x4d296d?_0xf0e1('0x18'):_0xf0e1('0x19')),_['pick'](_0x399fba,attributes));}var rpc={'openchannelQueueReport':require(_0xf0e1('0x1a')),'mailQueueReport':require(_0xf0e1('0x1b')),'chatQueueReport':require(_0xf0e1('0x1c')),'smsQueueReport':require(_0xf0e1('0x1d')),'faxQueueReport':require(_0xf0e1('0x1e')),'whatsappQueueReport':require(_0xf0e1('0x1f')),'chatInteraction':require('../../rpc/chatInteraction'),'faxInteraction':require(_0xf0e1('0x20')),'mailInteraction':require(_0xf0e1('0x21')),'openchannelInteraction':require(_0xf0e1('0x22')),'smsInteraction':require(_0xf0e1('0x23')),'whatsappInteraction':require('../../rpc/whatsappInteraction')};var queue=schema({'name':{'type':_0xf0e1('0x24'),'required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0xf0e1('0x25'),'message':_0xf0e1('0x26')}});function startRouting(_0x57a4b1,_0x1edddd,_0x25ee7b,_0x18890e){if(_0x57a4b1&&_0x1edddd&&_0x25ee7b){_0x1edddd[_0xf0e1('0x27')]+=0x1;var _0x3a1d59={'uniqueid':_0x57a4b1,'from':_0x25ee7b[_0xf0e1('0x28')]?_0x25ee7b[_0xf0e1('0x28')]['from']:'','joinAt':moment()[_0xf0e1('0x13')](_0xf0e1('0x29')),'ContactId':_0x25ee7b[_0xf0e1('0x2a')]?_0x25ee7b[_0xf0e1('0x2a')]['id']:null,'ListId':_0x25ee7b['list']?_0x25ee7b['list']['id']:null};_0x3a1d59[_[_0xf0e1('0x2b')](_0x25ee7b[_0xf0e1('0x2c')])+_0xf0e1('0x2d')]=_0x1edddd['id']||null;_0x3a1d59[_['upperFirst'](_0x25ee7b[_0xf0e1('0x2c')])+_0xf0e1('0x12')]=_0x25ee7b[_0xf0e1('0x2e')]?_0x25ee7b[_0xf0e1('0x2e')]['id']:null;_0x3a1d59[_[_0xf0e1('0x2b')](_0x25ee7b[_0xf0e1('0x2c')])+_0xf0e1('0x2f')]=_0x25ee7b[_0xf0e1('0x30')]?_0x25ee7b['message']['id']:null;_0x3a1d59[_[_0xf0e1('0x2b')](_0x25ee7b['channel'])+(_0x25ee7b['channel']!==_0xf0e1('0x31')?_0xf0e1('0x32'):'WebsiteId')]=_0x25ee7b[_0xf0e1('0xb')]?_0x25ee7b['account']['id']:null;logger['info'](util[_0xf0e1('0x13')](_0xf0e1('0x33'),_0x57a4b1,_0x1edddd[_0xf0e1('0x34')]));emitChannelQueueInteraction(_0x25ee7b['channel'],_0x1edddd[_0xf0e1('0x34')],_0x3a1d59,_0x25ee7b[_0xf0e1('0xb')]['name'],_0x25ee7b['message']['id'],!![],_0x18890e,_0x1edddd['id']);if(rpc[_0x25ee7b[_0xf0e1('0x2c')]+_0xf0e1('0x35')]){return rpc[_0x25ee7b[_0xf0e1('0x2c')]+'QueueReport'][_0xf0e1('0x36')](_0x3a1d59)[_0xf0e1('0x37')](function(_0x2585ef){logger[_0xf0e1('0x38')](_0xf0e1('0x39'),_0x2585ef);});}}}function stopRouting(_0x24c4f9,_0x67cea7,_0x2c11db,_0x26e43c){if(_0x24c4f9&&_0x67cea7){_0x67cea7[_0xf0e1('0x27')]-=0x1;var _0x2c2e42={'leaveAt':moment()[_0xf0e1('0x13')](_0xf0e1('0x29')),'acceptAt':moment()['format'](_0xf0e1('0x29')),'reason':_0xf0e1('0x3a')};logger[_0xf0e1('0x3b')](util['format']('[%s][STOP:QUEUE][NAME:%s]',_0x24c4f9,_0x67cea7[_0xf0e1('0x34')]));emitChannelQueueInteraction(_0x2c11db[_0xf0e1('0x2c')],_0x67cea7[_0xf0e1('0x34')],_0x2c11db[_0xf0e1('0x28')],_0x2c11db[_0xf0e1('0xb')][_0xf0e1('0x34')],_0x2c11db[_0xf0e1('0x30')]['id'],![],_0x26e43c,_0x67cea7['id']);return rpc[_0x2c11db['channel']+_0xf0e1('0x3c')][_0xf0e1('0x3d')](_0x2c11db['interaction']['id'],{'queueId':_0x67cea7['id']})[_0xf0e1('0x3e')](function(){if(rpc[_0x2c11db['channel']+_0xf0e1('0x35')]){return rpc[_0x2c11db[_0xf0e1('0x2c')]+_0xf0e1('0x35')][_0xf0e1('0x3d')](_0x24c4f9,_0x2c2e42)['catch'](function(_0x1a2f57){logger[_0xf0e1('0x38')](_0xf0e1('0x3f'),_0x1a2f57);});}});}}function endRouting(_0x5c1815,_0x350a8c,_0x276c7d,_0x3c88e6){if(_0x5c1815&&_0x350a8c){_0x350a8c[_0xf0e1('0x27')]-=0x1;var _0x55a680={'leaveAt':moment()[_0xf0e1('0x13')](_0xf0e1('0x29')),'exitAt':moment()[_0xf0e1('0x13')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0xf0e1('0x40')};logger[_0xf0e1('0x3b')](util['format'](_0xf0e1('0x41'),_0x5c1815,_0x350a8c[_0xf0e1('0x34')]));emitChannelQueueInteraction(_0x276c7d[_0xf0e1('0x2c')],_0x350a8c[_0xf0e1('0x34')],_0x276c7d['body'],_0x276c7d[_0xf0e1('0xb')][_0xf0e1('0x34')],_0x276c7d[_0xf0e1('0x30')]['id'],![],_0x3c88e6);if(rpc[_0x276c7d['channel']+_0xf0e1('0x35')]){return rpc[_0x276c7d[_0xf0e1('0x2c')]+_0xf0e1('0x35')]['update'](_0x5c1815,_0x55a680)[_0xf0e1('0x37')](function(_0x8b7c10){logger['error']('update\x20queue\x20report',_0x8b7c10);});}}}function handleFindQueue(_0x104539){return function(_0x1020a5){return _0x1020a5[_0xf0e1('0x34')][_0xf0e1('0x42')]()===_0x104539[_0xf0e1('0x42')]();};}exports[_0xf0e1('0x43')]=function(_0x564819,_0x261948,_0x104a80,_0x4ce78e){return function(_0x3ebb69){try{var _0x58425e={'name':_0x261948[0x0],'timeout':_0x261948[0x1]};var _0xde0717=queue[_0xf0e1('0x0')](_0x58425e,{'typecast':!![]});if(_0xde0717[_0xf0e1('0x44')]){logger[_0xf0e1('0x38')](_0xf0e1('0x45'),_0x564819,_['map'](_0xde0717,'message')['join'](',\x20'));_0x3ebb69[_0xf0e1('0x46')]();}else{var _0x2a7766=_[_0xf0e1('0x47')](_0x104a80[_0x4ce78e[_0xf0e1('0x2c')]+_0xf0e1('0x48')],handleFindQueue(_0x58425e[_0xf0e1('0x34')]));if(_0x2a7766){startRouting(_0x564819,_0x2a7766,_0x4ce78e,_0x104a80);var _0x30475c=(_0x2a7766['timeout']||0xa)*0x3e8;var _0x14a1ec=(_0x58425e[_0xf0e1('0x40')]||0x14)*0x3e8;var _0x27df23;if(_0x30475c>_0x14a1ec){_0x14a1ec=_0x30475c;}var _0x5c9a34=seqqueue[_0xf0e1('0x49')](_0x30475c);_0x5c9a34['id']=_0x564819;_0x5c9a34[_0xf0e1('0x4a')]=_0x30475c;_0x5c9a34[_0xf0e1('0x4b')]=_0x14a1ec;_0x5c9a34[_0xf0e1('0x2c')]=_0x4ce78e[_0xf0e1('0x2c')];_0x104a80[_0xf0e1('0x4c')][_0x564819]['on']('end',function(){logger[_0xf0e1('0x3b')]('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x564819);stopRouting(_0x564819,_0x2a7766,_0x4ce78e,_0x104a80);clearTimeout(_0x27df23);_0x27df23=undefined;_0x5c9a34[_0xf0e1('0x4d')](!![]);if(_0x104a80[_0xf0e1('0x4c')][_0x564819]){delete _0x104a80[_0xf0e1('0x4c')][_0x564819];}_0x3ebb69[_0xf0e1('0x46')]();});_0x104a80[_0xf0e1('0x4c')][_0x564819]['on'](_0xf0e1('0x4e'),function(){if(_0x104a80[_0xf0e1('0x4c')][_0x564819]){delete _0x104a80[_0xf0e1('0x4c')][_0x564819];}});_0x27df23=setTimeout(function(){logger[_0xf0e1('0x3b')](_0xf0e1('0x4f'),_0x564819);endRouting(_0x564819,_0x2a7766,_0x4ce78e,_0x104a80);clearTimeout(_0x27df23);_0x5c9a34['close'](!![]);_0x3ebb69['next']();},_0x14a1ec);switch(_0x2a7766['strategy']){case _0xf0e1('0x50'):strategy[_0xf0e1('0x50')](_0x5c9a34,_0x2a7766,_0x104a80,_0x4ce78e);break;default:strategy[_0xf0e1('0x51')](_0x5c9a34,_0x2a7766,_0x104a80,_0x4ce78e);}}else{logger[_0xf0e1('0x38')](_0xf0e1('0x52'),_0x564819,_0x58425e[_0xf0e1('0x34')]);_0x3ebb69[_0xf0e1('0x46')]();}}}catch(_0x419acf){logger[_0xf0e1('0x38')](_0xf0e1('0x45'),_0x564819,_0x419acf['stack']);_0x3ebb69[_0xf0e1('0x46')]();}};};