e5f08214a6af8c1108382cea5be54020aa0eb8ae
[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 _0xb9a0=['next','strategy','rrmemory','beepall','[%s][QUEUE]\x20%s','stack','validate','lodash','util','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','defaults','socket.io-emitter','queue_id','from','emit','clone','queue','account','push','capitalize','InteractionId','format','%sQueuesWaitingInteractions','pick','%s:queue:%s','save','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/smsQueueReport','../../rpc/whatsappQueueReport','../../rpc/chatInteraction','../../rpc/mailInteraction','../../rpc/smsInteraction','../../rpc/whatsappInteraction','string','number','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','interaction','MessageId','message','chat','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','catch','create\x20queue\x20report','accepted','[%s][STOP:QUEUE][NAME:%s]','update','then','error','[%s][END:QUEUE][NAME:%s]','update\x20queue\x20report','toLowerCase','consequence','length','map','join','find','Queues','timeout','createQueue','atimeout','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','stop','[%s][QUEUE]\x20APPLICATION\x20END','close'];(function(_0x3ef9b6,_0x5de4fe){var _0xc0b00c=function(_0x3a6a5b){while(--_0x3a6a5b){_0x3ef9b6['push'](_0x3ef9b6['shift']());}};_0xc0b00c(++_0x5de4fe);}(_0xb9a0,0x162));var _0x0b9a=function(_0x5630b7,_0x29f61d){_0x5630b7=_0x5630b7-0x0;var _0x30f03e=_0xb9a0[_0x5630b7];return _0x30f03e;};'use strict';var schema=require(_0x0b9a('0x0'));var _=require(_0x0b9a('0x1'));var util=require(_0x0b9a('0x2'));var seqqueue=require('seq-queue');var moment=require(_0x0b9a('0x3'));var Redis=require(_0x0b9a('0x4'));var config=require(_0x0b9a('0x5'));var logger=require(_0x0b9a('0x6'))(_0x0b9a('0x7'));var strategy=require(_0x0b9a('0x8'));config[_0x0b9a('0x9')]=_[_0x0b9a('0xa')](config['redis'],{'host':'localhost','port':0x18eb});var io=require(_0x0b9a('0xb'))(new Redis(config['redis']));var attributes=['id',_0x0b9a('0xc'),'account','queue',_0x0b9a('0xd'),'joinAt'];function emit(_0x132f5e,_0x294782,_0x537f0d){io['to'](_0x132f5e)[_0x0b9a('0xe')](_0x294782,_0x537f0d);}function emitChannelQueueInteraction(_0x5a04e0,_0x19a06c,_0x16c927,_0x3a9f82,_0x1b8702,_0x22819d,_0x2a6041,_0x3a4135){var _0x451879=_[_0x0b9a('0xf')](_0x16c927);_0x451879[_0x0b9a('0xc')]=_0x3a4135;_0x451879[_0x0b9a('0x10')]=_0x19a06c;_0x451879[_0x0b9a('0x11')]=_0x3a9f82;_0x451879['id']=_0x1b8702;if(_0x22819d){attributes[_0x0b9a('0x12')](_[_0x0b9a('0x13')](_0x5a04e0)+_0x0b9a('0x14'));_0x2a6041[util[_0x0b9a('0x15')](_0x0b9a('0x16'),_0x5a04e0)][_0x1b8702]=_[_0x0b9a('0x17')](_0x451879,attributes);}else{delete _0x2a6041[util[_0x0b9a('0x15')](_0x0b9a('0x16'),_0x5a04e0)][_0x1b8702];}emit(util['format'](_0x0b9a('0x18'),_0x5a04e0,_0x19a06c),util[_0x0b9a('0x15')]('%s_queue_waiting_interaction:%s',_0x5a04e0,_0x22819d?_0x0b9a('0x19'):'remove'),_['pick'](_0x451879,attributes));}var rpc={'openchannelQueueReport':require(_0x0b9a('0x1a')),'mailQueueReport':require(_0x0b9a('0x1b')),'chatQueueReport':require('../../rpc/chatQueueReport'),'smsQueueReport':require(_0x0b9a('0x1c')),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require(_0x0b9a('0x1d')),'chatInteraction':require(_0x0b9a('0x1e')),'faxInteraction':require('../../rpc/faxInteraction'),'mailInteraction':require(_0x0b9a('0x1f')),'openchannelInteraction':require('../../rpc/openchannelInteraction'),'smsInteraction':require(_0x0b9a('0x20')),'whatsappInteraction':require(_0x0b9a('0x21'))};var queue=schema({'name':{'type':_0x0b9a('0x22'),'required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0x0b9a('0x23'),'message':_0x0b9a('0x24')}});function startRouting(_0x7dd540,_0x11fc46,_0x448ee1,_0x360a02){if(_0x7dd540&&_0x11fc46&&_0x448ee1){_0x11fc46[_0x0b9a('0x25')]+=0x1;var _0x5d6424={'uniqueid':_0x7dd540,'from':_0x448ee1[_0x0b9a('0x26')]?_0x448ee1[_0x0b9a('0x26')]['from']:'','joinAt':moment()[_0x0b9a('0x15')](_0x0b9a('0x27')),'ContactId':_0x448ee1[_0x0b9a('0x28')]?_0x448ee1[_0x0b9a('0x28')]['id']:null,'ListId':_0x448ee1['list']?_0x448ee1[_0x0b9a('0x29')]['id']:null};_0x5d6424[_[_0x0b9a('0x2a')](_0x448ee1[_0x0b9a('0x2b')])+_0x0b9a('0x2c')]=_0x11fc46['id']||null;_0x5d6424[_[_0x0b9a('0x2a')](_0x448ee1[_0x0b9a('0x2b')])+'InteractionId']=_0x448ee1[_0x0b9a('0x2d')]?_0x448ee1['interaction']['id']:null;_0x5d6424[_[_0x0b9a('0x2a')](_0x448ee1[_0x0b9a('0x2b')])+_0x0b9a('0x2e')]=_0x448ee1[_0x0b9a('0x2f')]?_0x448ee1[_0x0b9a('0x2f')]['id']:null;_0x5d6424[_[_0x0b9a('0x2a')](_0x448ee1[_0x0b9a('0x2b')])+(_0x448ee1[_0x0b9a('0x2b')]!==_0x0b9a('0x30')?_0x0b9a('0x31'):_0x0b9a('0x32'))]=_0x448ee1[_0x0b9a('0x11')]?_0x448ee1[_0x0b9a('0x11')]['id']:null;logger[_0x0b9a('0x33')](util['format'](_0x0b9a('0x34'),_0x7dd540,_0x11fc46[_0x0b9a('0x35')]));emitChannelQueueInteraction(_0x448ee1[_0x0b9a('0x2b')],_0x11fc46[_0x0b9a('0x35')],_0x5d6424,_0x448ee1[_0x0b9a('0x11')][_0x0b9a('0x35')],_0x448ee1[_0x0b9a('0x2f')]['id'],!![],_0x360a02,_0x11fc46['id']);if(rpc[_0x448ee1[_0x0b9a('0x2b')]+_0x0b9a('0x36')]){return rpc[_0x448ee1['channel']+_0x0b9a('0x36')]['create'](_0x5d6424)[_0x0b9a('0x37')](function(_0x3e86da){logger['error'](_0x0b9a('0x38'),_0x3e86da);});}}}function stopRouting(_0x3b0383,_0x230856,_0x4cd161,_0x3e70ab){if(_0x3b0383&&_0x230856){_0x230856[_0x0b9a('0x25')]-=0x1;var _0x4145be={'leaveAt':moment()[_0x0b9a('0x15')](_0x0b9a('0x27')),'acceptAt':moment()[_0x0b9a('0x15')](_0x0b9a('0x27')),'reason':_0x0b9a('0x39')};logger[_0x0b9a('0x33')](util['format'](_0x0b9a('0x3a'),_0x3b0383,_0x230856[_0x0b9a('0x35')]));emitChannelQueueInteraction(_0x4cd161['channel'],_0x230856[_0x0b9a('0x35')],_0x4cd161['body'],_0x4cd161[_0x0b9a('0x11')][_0x0b9a('0x35')],_0x4cd161['message']['id'],![],_0x3e70ab,_0x230856['id']);return rpc[_0x4cd161[_0x0b9a('0x2b')]+'Interaction'][_0x0b9a('0x3b')](_0x4cd161[_0x0b9a('0x2d')]['id'],{'queueId':_0x230856['id']})[_0x0b9a('0x3c')](function(){if(rpc[_0x4cd161[_0x0b9a('0x2b')]+_0x0b9a('0x36')]){return rpc[_0x4cd161['channel']+_0x0b9a('0x36')][_0x0b9a('0x3b')](_0x3b0383,_0x4145be)[_0x0b9a('0x37')](function(_0x46c035){logger[_0x0b9a('0x3d')]('update\x20queue\x20report',_0x46c035);});}});}}function endRouting(_0x1e7b12,_0xb70e2a,_0x44e45d,_0x2d78d0){if(_0x1e7b12&&_0xb70e2a){_0xb70e2a[_0x0b9a('0x25')]-=0x1;var _0x41ff4c={'leaveAt':moment()[_0x0b9a('0x15')](_0x0b9a('0x27')),'exitAt':moment()[_0x0b9a('0x15')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':'timeout'};logger[_0x0b9a('0x33')](util[_0x0b9a('0x15')](_0x0b9a('0x3e'),_0x1e7b12,_0xb70e2a[_0x0b9a('0x35')]));emitChannelQueueInteraction(_0x44e45d['channel'],_0xb70e2a[_0x0b9a('0x35')],_0x44e45d[_0x0b9a('0x26')],_0x44e45d[_0x0b9a('0x11')][_0x0b9a('0x35')],_0x44e45d[_0x0b9a('0x2f')]['id'],![],_0x2d78d0);if(rpc[_0x44e45d[_0x0b9a('0x2b')]+'QueueReport']){return rpc[_0x44e45d['channel']+_0x0b9a('0x36')][_0x0b9a('0x3b')](_0x1e7b12,_0x41ff4c)['catch'](function(_0x3b5a5b){logger[_0x0b9a('0x3d')](_0x0b9a('0x3f'),_0x3b5a5b);});}}}function handleFindQueue(_0x104eb3){return function(_0x13d90a){return _0x13d90a[_0x0b9a('0x35')][_0x0b9a('0x40')]()===_0x104eb3[_0x0b9a('0x40')]();};}exports[_0x0b9a('0x41')]=function(_0x30c9c7,_0x48eed4,_0x296185,_0x584d9a){return function(_0x31bb01){try{var _0x189489={'name':_0x48eed4[0x0],'timeout':_0x48eed4[0x1]};var _0x3f89e1=queue[_0x0b9a('0x0')](_0x189489,{'typecast':!![]});if(_0x3f89e1[_0x0b9a('0x42')]){logger[_0x0b9a('0x3d')]('[%s][QUEUE]\x20%s',_0x30c9c7,_[_0x0b9a('0x43')](_0x3f89e1,_0x0b9a('0x2f'))[_0x0b9a('0x44')](',\x20'));_0x31bb01['stop']();}else{var _0x18d5ec=_[_0x0b9a('0x45')](_0x296185[_0x584d9a[_0x0b9a('0x2b')]+_0x0b9a('0x46')],handleFindQueue(_0x189489[_0x0b9a('0x35')]));if(_0x18d5ec){startRouting(_0x30c9c7,_0x18d5ec,_0x584d9a,_0x296185);var _0x163680=(_0x18d5ec[_0x0b9a('0x47')]||0xa)*0x3e8;var _0x51efea=(_0x189489[_0x0b9a('0x47')]||0x14)*0x3e8;var _0x420257;if(_0x163680>_0x51efea){_0x51efea=_0x163680;}var _0x4d5659=seqqueue[_0x0b9a('0x48')](_0x163680);_0x4d5659['id']=_0x30c9c7;_0x4d5659[_0x0b9a('0x49')]=_0x163680;_0x4d5659[_0x0b9a('0x4a')]=_0x51efea;_0x4d5659[_0x0b9a('0x2b')]=_0x584d9a[_0x0b9a('0x2b')];_0x296185[_0x0b9a('0x4b')][_0x30c9c7]['on'](_0x0b9a('0x4c'),function(){logger[_0x0b9a('0x33')](_0x0b9a('0x4d'),_0x30c9c7);stopRouting(_0x30c9c7,_0x18d5ec,_0x584d9a,_0x296185);clearTimeout(_0x420257);_0x420257=undefined;_0x4d5659['close'](!![]);if(_0x296185['rules'][_0x30c9c7]){delete _0x296185[_0x0b9a('0x4b')][_0x30c9c7];}_0x31bb01[_0x0b9a('0x4e')]();});_0x296185[_0x0b9a('0x4b')][_0x30c9c7]['on']('complete',function(){if(_0x296185[_0x0b9a('0x4b')][_0x30c9c7]){delete _0x296185['rules'][_0x30c9c7];}});_0x420257=setTimeout(function(){logger[_0x0b9a('0x33')](_0x0b9a('0x4f'),_0x30c9c7);endRouting(_0x30c9c7,_0x18d5ec,_0x584d9a,_0x296185);clearTimeout(_0x420257);_0x4d5659[_0x0b9a('0x50')](!![]);_0x31bb01[_0x0b9a('0x51')]();},_0x51efea);switch(_0x18d5ec[_0x0b9a('0x52')]){case _0x0b9a('0x53'):strategy[_0x0b9a('0x53')](_0x4d5659,_0x18d5ec,_0x296185,_0x584d9a);break;default:strategy[_0x0b9a('0x54')](_0x4d5659,_0x18d5ec,_0x296185,_0x584d9a);}}else{logger[_0x0b9a('0x3d')]('[%s][QUEUE]\x20queue\x20not\x20found\x20%s',_0x30c9c7,_0x189489[_0x0b9a('0x35')]);_0x31bb01[_0x0b9a('0x4e')]();}}}catch(_0x34ea28){logger['error'](_0x0b9a('0x55'),_0x30c9c7,_0x34ea28[_0x0b9a('0x56')]);_0x31bb01[_0x0b9a('0x4e')]();}};};