b9a4d3fbedc23d5aac4408c5622cf32b7b6c959b
[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 _0xaf00=['redis','defaults','localhost','socket.io-emitter','queue_id','queue','from','joinAt','emit','clone','capitalize','InteractionId','format','pick','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/smsQueueReport','../../rpc/whatsappQueueReport','../../rpc/chatInteraction','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../rpc/smsInteraction','../../rpc/whatsappInteraction','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','interaction','channel','MessageId','message','chat','WebsiteId','account','info','name','QueueReport','create','catch','[%s][STOP:QUEUE][NAME:%s]','Interaction','update','then','error','update\x20queue\x20report','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','map','join','Queues','timeout','createQueue','atimeout','qtimeout','rules','end','stop','[%s][QUEUE]\x20APPLICATION\x20END','close','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','validate','util','seq-queue','moment','../../../../config/logger','routing','./strategy'];(function(_0x5510a6,_0x4975b9){var _0x962a10=function(_0x5cca76){while(--_0x5cca76){_0x5510a6['push'](_0x5510a6['shift']());}};_0x962a10(++_0x4975b9);}(_0xaf00,0xf5));var _0x0af0=function(_0x1d83db,_0x89d115){_0x1d83db=_0x1d83db-0x0;var _0x2dc1d1=_0xaf00[_0x1d83db];return _0x2dc1d1;};'use strict';var schema=require(_0x0af0('0x0'));var _=require('lodash');var util=require(_0x0af0('0x1'));var seqqueue=require(_0x0af0('0x2'));var moment=require(_0x0af0('0x3'));var Redis=require('ioredis');var config=require('../../../../config/environment');var logger=require(_0x0af0('0x4'))(_0x0af0('0x5'));var strategy=require(_0x0af0('0x6'));config[_0x0af0('0x7')]=_[_0x0af0('0x8')](config[_0x0af0('0x7')],{'host':_0x0af0('0x9'),'port':0x18eb});var io=require(_0x0af0('0xa'))(new Redis(config[_0x0af0('0x7')]));var attributes=['id',_0x0af0('0xb'),'account',_0x0af0('0xc'),_0x0af0('0xd'),_0x0af0('0xe')];function emit(_0x1bb550,_0x1bd51d,_0x6bcc5a){io['to'](_0x1bb550)[_0x0af0('0xf')](_0x1bd51d,_0x6bcc5a);}function emitChannelQueueInteraction(_0x245193,_0x4cc9fa,_0x1f1a79,_0xca5aed,_0x1df7a3,_0xf68742,_0xa2a860,_0x56c5b9){var _0x12a27b=_[_0x0af0('0x10')](_0x1f1a79);_0x12a27b[_0x0af0('0xb')]=_0x56c5b9;_0x12a27b[_0x0af0('0xc')]=_0x4cc9fa;_0x12a27b['account']=_0xca5aed;_0x12a27b['id']=_0x1df7a3;if(_0xf68742){attributes['push'](_[_0x0af0('0x11')](_0x245193)+_0x0af0('0x12'));_0xa2a860[util[_0x0af0('0x13')]('%sQueuesWaitingInteractions',_0x245193)][_0x1df7a3]=_[_0x0af0('0x14')](_0x12a27b,attributes);}else{delete _0xa2a860[util[_0x0af0('0x13')](_0x0af0('0x15'),_0x245193)][_0x1df7a3];}emit(util[_0x0af0('0x13')](_0x0af0('0x16'),_0x245193,_0x4cc9fa),util[_0x0af0('0x13')](_0x0af0('0x17'),_0x245193,_0xf68742?_0x0af0('0x18'):_0x0af0('0x19')),_['pick'](_0x12a27b,attributes));}var rpc={'openchannelQueueReport':require(_0x0af0('0x1a')),'mailQueueReport':require(_0x0af0('0x1b')),'chatQueueReport':require('../../rpc/chatQueueReport'),'smsQueueReport':require(_0x0af0('0x1c')),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require(_0x0af0('0x1d')),'chatInteraction':require(_0x0af0('0x1e')),'faxInteraction':require(_0x0af0('0x1f')),'mailInteraction':require(_0x0af0('0x20')),'openchannelInteraction':require(_0x0af0('0x21')),'smsInteraction':require(_0x0af0('0x22')),'whatsappInteraction':require(_0x0af0('0x23'))};var queue=schema({'name':{'type':'string','required':!![],'message':_0x0af0('0x24')},'timeout':{'type':'number','message':_0x0af0('0x25')}});function startRouting(_0x38d0a3,_0x287d30,_0x622824,_0x22e55d){if(_0x38d0a3&&_0x287d30&&_0x622824){_0x287d30[_0x0af0('0x26')]+=0x1;var _0x276a0b={'uniqueid':_0x38d0a3,'from':_0x622824[_0x0af0('0x27')]?_0x622824['body'][_0x0af0('0xd')]:'','joinAt':moment()[_0x0af0('0x13')](_0x0af0('0x28')),'ContactId':_0x622824[_0x0af0('0x29')]?_0x622824[_0x0af0('0x29')]['id']:null,'ListId':_0x622824['list']?_0x622824[_0x0af0('0x2a')]['id']:null};_0x276a0b[_['upperFirst'](_0x622824['channel'])+'QueueId']=_0x287d30['id']||null;_0x276a0b[_[_0x0af0('0x2b')](_0x622824['channel'])+'InteractionId']=_0x622824['interaction']?_0x622824[_0x0af0('0x2c')]['id']:null;_0x276a0b[_[_0x0af0('0x2b')](_0x622824[_0x0af0('0x2d')])+_0x0af0('0x2e')]=_0x622824[_0x0af0('0x2f')]?_0x622824[_0x0af0('0x2f')]['id']:null;_0x276a0b[_[_0x0af0('0x2b')](_0x622824[_0x0af0('0x2d')])+(_0x622824[_0x0af0('0x2d')]!==_0x0af0('0x30')?'AccountId':_0x0af0('0x31'))]=_0x622824[_0x0af0('0x32')]?_0x622824[_0x0af0('0x32')]['id']:null;logger[_0x0af0('0x33')](util['format']('[%s][START:QUEUE][NAME:%s]',_0x38d0a3,_0x287d30[_0x0af0('0x34')]));emitChannelQueueInteraction(_0x622824['channel'],_0x287d30[_0x0af0('0x34')],_0x276a0b,_0x622824[_0x0af0('0x32')][_0x0af0('0x34')],_0x622824[_0x0af0('0x2f')]['id'],!![],_0x22e55d,_0x287d30['id']);if(rpc[_0x622824[_0x0af0('0x2d')]+_0x0af0('0x35')]){return rpc[_0x622824[_0x0af0('0x2d')]+'QueueReport'][_0x0af0('0x36')](_0x276a0b)[_0x0af0('0x37')](function(_0x1f2053){logger['error']('create\x20queue\x20report',_0x1f2053);});}}}function stopRouting(_0x36bc5a,_0x1ee20c,_0x4e5268,_0xa7831c){if(_0x36bc5a&&_0x1ee20c){_0x1ee20c['waiting']-=0x1;var _0x31acae={'leaveAt':moment()['format'](_0x0af0('0x28')),'acceptAt':moment()[_0x0af0('0x13')](_0x0af0('0x28')),'reason':'accepted'};logger[_0x0af0('0x33')](util[_0x0af0('0x13')](_0x0af0('0x38'),_0x36bc5a,_0x1ee20c[_0x0af0('0x34')]));emitChannelQueueInteraction(_0x4e5268[_0x0af0('0x2d')],_0x1ee20c[_0x0af0('0x34')],_0x4e5268[_0x0af0('0x27')],_0x4e5268[_0x0af0('0x32')][_0x0af0('0x34')],_0x4e5268[_0x0af0('0x2f')]['id'],![],_0xa7831c,_0x1ee20c['id']);return rpc[_0x4e5268[_0x0af0('0x2d')]+_0x0af0('0x39')][_0x0af0('0x3a')](_0x4e5268[_0x0af0('0x2c')]['id'],{'queueId':_0x1ee20c['id']})[_0x0af0('0x3b')](function(){if(rpc[_0x4e5268[_0x0af0('0x2d')]+_0x0af0('0x35')]){return rpc[_0x4e5268[_0x0af0('0x2d')]+'QueueReport'][_0x0af0('0x3a')](_0x36bc5a,_0x31acae)[_0x0af0('0x37')](function(_0x346afd){logger[_0x0af0('0x3c')](_0x0af0('0x3d'),_0x346afd);});}});}}function endRouting(_0x252876,_0x58d0cf,_0xcae2ec,_0x43b005){if(_0x252876&&_0x58d0cf){_0x58d0cf[_0x0af0('0x26')]-=0x1;var _0x1d4c2f={'leaveAt':moment()['format'](_0x0af0('0x28')),'exitAt':moment()[_0x0af0('0x13')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':'timeout'};logger[_0x0af0('0x33')](util[_0x0af0('0x13')](_0x0af0('0x3e'),_0x252876,_0x58d0cf[_0x0af0('0x34')]));emitChannelQueueInteraction(_0xcae2ec['channel'],_0x58d0cf[_0x0af0('0x34')],_0xcae2ec[_0x0af0('0x27')],_0xcae2ec[_0x0af0('0x32')][_0x0af0('0x34')],_0xcae2ec[_0x0af0('0x2f')]['id'],![],_0x43b005);if(rpc[_0xcae2ec[_0x0af0('0x2d')]+_0x0af0('0x35')]){return rpc[_0xcae2ec['channel']+_0x0af0('0x35')][_0x0af0('0x3a')](_0x252876,_0x1d4c2f)[_0x0af0('0x37')](function(_0x39a21f){logger[_0x0af0('0x3c')](_0x0af0('0x3d'),_0x39a21f);});}}}function handleFindQueue(_0x249cb2){return function(_0x54d1b9){return _0x54d1b9[_0x0af0('0x34')][_0x0af0('0x3f')]()===_0x249cb2[_0x0af0('0x3f')]();};}exports[_0x0af0('0x40')]=function(_0x136a05,_0x22a913,_0x233083,_0x7d817d){return function(_0x43807b){try{var _0x11b98b={'name':_0x22a913[0x0],'timeout':_0x22a913[0x1]};var _0x2837d4=queue[_0x0af0('0x0')](_0x11b98b,{'typecast':!![]});if(_0x2837d4[_0x0af0('0x41')]){logger[_0x0af0('0x3c')](_0x0af0('0x42'),_0x136a05,_[_0x0af0('0x43')](_0x2837d4,_0x0af0('0x2f'))[_0x0af0('0x44')](',\x20'));_0x43807b['stop']();}else{var _0x4c5a02=_['find'](_0x233083[_0x7d817d['channel']+_0x0af0('0x45')],handleFindQueue(_0x11b98b[_0x0af0('0x34')]));if(_0x4c5a02){startRouting(_0x136a05,_0x4c5a02,_0x7d817d,_0x233083);var _0x5975ba=(_0x4c5a02['timeout']||0xa)*0x3e8;var _0xe7144d=(_0x11b98b[_0x0af0('0x46')]||0x14)*0x3e8;var _0x1c253a;if(_0x5975ba>_0xe7144d){_0xe7144d=_0x5975ba;}var _0x389453=seqqueue[_0x0af0('0x47')](_0x5975ba);_0x389453['id']=_0x136a05;_0x389453[_0x0af0('0x48')]=_0x5975ba;_0x389453[_0x0af0('0x49')]=_0xe7144d;_0x389453[_0x0af0('0x2d')]=_0x7d817d[_0x0af0('0x2d')];_0x233083[_0x0af0('0x4a')][_0x136a05]['on'](_0x0af0('0x4b'),function(){logger[_0x0af0('0x33')]('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0x136a05);stopRouting(_0x136a05,_0x4c5a02,_0x7d817d,_0x233083);clearTimeout(_0x1c253a);_0x1c253a=undefined;_0x389453['close'](!![]);if(_0x233083['rules'][_0x136a05]){delete _0x233083[_0x0af0('0x4a')][_0x136a05];}_0x43807b[_0x0af0('0x4c')]();});_0x233083[_0x0af0('0x4a')][_0x136a05]['on']('complete',function(){if(_0x233083[_0x0af0('0x4a')][_0x136a05]){delete _0x233083['rules'][_0x136a05];}});_0x1c253a=setTimeout(function(){logger[_0x0af0('0x33')](_0x0af0('0x4d'),_0x136a05);endRouting(_0x136a05,_0x4c5a02,_0x7d817d,_0x233083);clearTimeout(_0x1c253a);_0x389453[_0x0af0('0x4e')](!![]);_0x43807b[_0x0af0('0x4f')]();},_0xe7144d);switch(_0x4c5a02[_0x0af0('0x50')]){case _0x0af0('0x51'):strategy[_0x0af0('0x51')](_0x389453,_0x4c5a02,_0x233083,_0x7d817d);break;default:strategy[_0x0af0('0x52')](_0x389453,_0x4c5a02,_0x233083,_0x7d817d);}}else{logger[_0x0af0('0x3c')](_0x0af0('0x53'),_0x136a05,_0x11b98b[_0x0af0('0x34')]);_0x43807b[_0x0af0('0x4c')]();}}}catch(_0x33215f){logger[_0x0af0('0x3c')]('[%s][QUEUE]\x20%s',_0x136a05,_0x33215f['stack']);_0x43807b[_0x0af0('0x4c')]();}};};