f1fe32705ed9c4a2589f61408d8b40e4e6794a81
[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 _0x4a52=['next','strategy','rrmemory','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','validate','seq-queue','moment','../../../../config/environment','../../../../config/logger','routing','redis','defaults','localhost','socket.io-emitter','queue','from','joinAt','emit','clone','account','format','%sQueuesWaitingInteractions','pick','%s_queue_waiting_interaction:%s','save','remove','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/whatsappQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','interaction','message','AccountId','WebsiteId','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','catch','error','waiting','accepted','info','[%s][STOP:QUEUE][NAME:%s]','update','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','toLowerCase','[%s][QUEUE]\x20%s','join','stop','find','atimeout','rules','end','close','complete','[%s][QUEUE]\x20APPLICATION\x20END'];(function(_0x334841,_0x2bbc4c){var _0x5beb4b=function(_0x4bea72){while(--_0x4bea72){_0x334841['push'](_0x334841['shift']());}};_0x5beb4b(++_0x2bbc4c);}(_0x4a52,0x15d));var _0x24a5=function(_0x132bb0,_0x5b9c2d){_0x132bb0=_0x132bb0-0x0;var _0x8b8aa9=_0x4a52[_0x132bb0];return _0x8b8aa9;};'use strict';var schema=require(_0x24a5('0x0'));var _=require('lodash');var util=require('util');var seqqueue=require(_0x24a5('0x1'));var moment=require(_0x24a5('0x2'));var Redis=require('ioredis');var config=require(_0x24a5('0x3'));var logger=require(_0x24a5('0x4'))(_0x24a5('0x5'));var strategy=require('./strategy');config[_0x24a5('0x6')]=_[_0x24a5('0x7')](config[_0x24a5('0x6')],{'host':_0x24a5('0x8'),'port':0x18eb});var io=require(_0x24a5('0x9'))(new Redis(config[_0x24a5('0x6')]));var attributes=['id','queue_id','account',_0x24a5('0xa'),_0x24a5('0xb'),_0x24a5('0xc')];function emit(_0x1b22e0,_0x45b20c,_0x44d9e2){io['to'](_0x1b22e0)[_0x24a5('0xd')](_0x45b20c,_0x44d9e2);}function emitChannelQueueInteraction(_0x2b6f73,_0x38f0a0,_0x5d3fba,_0x2d59ac,_0x4c336c,_0x31b9e1,_0x345ba6,_0x32e2f9){var _0x2c2349=_[_0x24a5('0xe')](_0x5d3fba);_0x2c2349['queue_id']=_0x32e2f9;_0x2c2349[_0x24a5('0xa')]=_0x38f0a0;_0x2c2349[_0x24a5('0xf')]=_0x2d59ac;_0x2c2349['id']=_0x4c336c;if(_0x31b9e1){_0x345ba6[util[_0x24a5('0x10')](_0x24a5('0x11'),_0x2b6f73)][_0x4c336c]=_[_0x24a5('0x12')](_0x2c2349,attributes);}else{delete _0x345ba6[util[_0x24a5('0x10')]('%sQueuesWaitingInteractions',_0x2b6f73)][_0x4c336c];}emit(util[_0x24a5('0x10')]('%s:queue:%s',_0x2b6f73,_0x38f0a0),util['format'](_0x24a5('0x13'),_0x2b6f73,_0x31b9e1?_0x24a5('0x14'):_0x24a5('0x15')),_[_0x24a5('0x12')](_0x2c2349,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0x24a5('0x16')),'chatQueueReport':require(_0x24a5('0x17')),'smsQueueReport':require(_0x24a5('0x18')),'faxQueueReport':require('../../rpc/faxQueueReport'),'whatsappQueueReport':require(_0x24a5('0x19'))};var queue=schema({'name':{'type':_0x24a5('0x1a'),'required':!![],'message':_0x24a5('0x1b')},'timeout':{'type':_0x24a5('0x1c'),'message':_0x24a5('0x1d')}});function startRouting(_0x5368b2,_0x36ca7b,_0xda5264,_0x231059){if(_0x5368b2&&_0x36ca7b&&_0xda5264){_0x36ca7b['waiting']+=0x1;var _0x1237bf={'uniqueid':_0x5368b2,'from':_0xda5264[_0x24a5('0x1e')]?_0xda5264[_0x24a5('0x1e')][_0x24a5('0xb')]:'','joinAt':moment()[_0x24a5('0x10')](_0x24a5('0x1f')),'ContactId':_0xda5264[_0x24a5('0x20')]?_0xda5264[_0x24a5('0x20')]['id']:null,'ListId':_0xda5264[_0x24a5('0x21')]?_0xda5264[_0x24a5('0x21')]['id']:null};_0x1237bf[_[_0x24a5('0x22')](_0xda5264[_0x24a5('0x23')])+'QueueId']=_0x36ca7b['id']||null;_0x1237bf[_[_0x24a5('0x22')](_0xda5264[_0x24a5('0x23')])+'InteractionId']=_0xda5264[_0x24a5('0x24')]?_0xda5264['interaction']['id']:null;_0x1237bf[_[_0x24a5('0x22')](_0xda5264[_0x24a5('0x23')])+'MessageId']=_0xda5264[_0x24a5('0x25')]?_0xda5264[_0x24a5('0x25')]['id']:null;_0x1237bf[_[_0x24a5('0x22')](_0xda5264[_0x24a5('0x23')])+(_0xda5264[_0x24a5('0x23')]!=='chat'?_0x24a5('0x26'):_0x24a5('0x27'))]=_0xda5264[_0x24a5('0xf')]?_0xda5264[_0x24a5('0xf')]['id']:null;logger['info'](util[_0x24a5('0x10')](_0x24a5('0x28'),_0x5368b2,_0x36ca7b[_0x24a5('0x29')]));emitChannelQueueInteraction(_0xda5264[_0x24a5('0x23')],_0x36ca7b[_0x24a5('0x29')],_0x1237bf,_0xda5264[_0x24a5('0xf')][_0x24a5('0x29')],_0xda5264[_0x24a5('0x25')]['id'],!![],_0x231059,_0x36ca7b['id']);if(rpc[_0xda5264['channel']+_0x24a5('0x2a')]){return rpc[_0xda5264[_0x24a5('0x23')]+_0x24a5('0x2a')][_0x24a5('0x2b')](_0x1237bf)[_0x24a5('0x2c')](function(_0x282d09){logger[_0x24a5('0x2d')]('create\x20queue\x20report');});}}}function stopRouting(_0x4eba95,_0x5bf7f2,_0x43f907,_0x478de5){if(_0x4eba95&&_0x5bf7f2){_0x5bf7f2[_0x24a5('0x2e')]-=0x1;var _0x3ce433={'leaveAt':moment()[_0x24a5('0x10')](_0x24a5('0x1f')),'acceptAt':moment()[_0x24a5('0x10')](_0x24a5('0x1f')),'reason':_0x24a5('0x2f')};logger[_0x24a5('0x30')](util[_0x24a5('0x10')](_0x24a5('0x31'),_0x4eba95,_0x5bf7f2[_0x24a5('0x29')]));emitChannelQueueInteraction(_0x43f907[_0x24a5('0x23')],_0x5bf7f2['name'],_0x43f907[_0x24a5('0x1e')],_0x43f907[_0x24a5('0xf')][_0x24a5('0x29')],_0x43f907[_0x24a5('0x25')]['id'],![],_0x478de5,_0x5bf7f2['id']);if(rpc[_0x43f907[_0x24a5('0x23')]+_0x24a5('0x2a')]){return rpc[_0x43f907[_0x24a5('0x23')]+'QueueReport'][_0x24a5('0x32')](_0x4eba95,_0x3ce433)[_0x24a5('0x2c')](function(_0x38c20e){logger['error'](_0x24a5('0x33'));});}}}function endRouting(_0x477fc9,_0x3ecd1f,_0x412dc7,_0x19a657){if(_0x477fc9&&_0x3ecd1f){_0x3ecd1f[_0x24a5('0x2e')]-=0x1;var _0x17a685={'leaveAt':moment()[_0x24a5('0x10')]('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()[_0x24a5('0x10')](_0x24a5('0x1f')),'reason':_0x24a5('0x34')};logger[_0x24a5('0x30')](util['format'](_0x24a5('0x35'),_0x477fc9,_0x3ecd1f[_0x24a5('0x29')]));emitChannelQueueInteraction(_0x412dc7[_0x24a5('0x23')],_0x3ecd1f[_0x24a5('0x29')],_0x412dc7[_0x24a5('0x1e')],_0x412dc7['account'][_0x24a5('0x29')],_0x412dc7[_0x24a5('0x25')]['id'],![],_0x19a657);if(rpc[_0x412dc7[_0x24a5('0x23')]+_0x24a5('0x2a')]){return rpc[_0x412dc7['channel']+'QueueReport']['update'](_0x477fc9,_0x17a685)['catch'](function(_0x323e27){logger[_0x24a5('0x2d')]('update\x20queue\x20report');});}}}function handleFindQueue(_0x3c77cc){return function(_0x3b91fb){return _0x3b91fb[_0x24a5('0x29')][_0x24a5('0x36')]()===_0x3c77cc[_0x24a5('0x36')]();};}exports['consequence']=function(_0xbef70a,_0x2d2929,_0x3d91b5,_0x18bf9e){return function(_0x523e71){try{var _0x2c92db={'name':_0x2d2929[0x0],'timeout':_0x2d2929[0x1]};var _0x1bf27a=queue[_0x24a5('0x0')](_0x2c92db,{'typecast':!![]});if(_0x1bf27a['length']){logger[_0x24a5('0x2d')](_0x24a5('0x37'),_0xbef70a,_['map'](_0x1bf27a,_0x24a5('0x25'))[_0x24a5('0x38')](',\x20'));_0x523e71[_0x24a5('0x39')]();}else{var _0x24d5fd=_[_0x24a5('0x3a')](_0x3d91b5[_0x18bf9e[_0x24a5('0x23')]+'Queues'],handleFindQueue(_0x2c92db['name']));if(_0x24d5fd){startRouting(_0xbef70a,_0x24d5fd,_0x18bf9e,_0x3d91b5);var _0x102921=(_0x24d5fd[_0x24a5('0x34')]||0xa)*0x3e8;var _0xf605b1=(_0x2c92db[_0x24a5('0x34')]||0x14)*0x3e8;var _0x28bf67,_0x2c3ecd;if(_0x102921>_0xf605b1){_0xf605b1=_0x102921;}var _0x1e143f=seqqueue['createQueue'](_0x102921);_0x1e143f['id']=_0xbef70a;_0x1e143f[_0x24a5('0x3b')]=_0x102921;_0x1e143f['qtimeout']=_0xf605b1;_0x1e143f[_0x24a5('0x23')]=_0x18bf9e[_0x24a5('0x23')];_0x3d91b5[_0x24a5('0x3c')][_0xbef70a]['on'](_0x24a5('0x3d'),function(){logger[_0x24a5('0x30')]('[%s][QUEUE]\x20ROUTING\x20STOPPED',_0xbef70a);stopRouting(_0xbef70a,_0x24d5fd,_0x18bf9e,_0x3d91b5);clearTimeout(_0x28bf67);_0x28bf67=undefined;_0x1e143f[_0x24a5('0x3e')](!![]);if(_0x3d91b5[_0x24a5('0x3c')][_0xbef70a]){delete _0x3d91b5[_0x24a5('0x3c')][_0xbef70a];}_0x523e71[_0x24a5('0x39')]();});_0x3d91b5[_0x24a5('0x3c')][_0xbef70a]['on'](_0x24a5('0x3f'),function(){if(_0x3d91b5['rules'][_0xbef70a]){delete _0x3d91b5[_0x24a5('0x3c')][_0xbef70a];}});_0x28bf67=setTimeout(function(){logger[_0x24a5('0x30')](_0x24a5('0x40'),_0xbef70a);endRouting(_0xbef70a,_0x24d5fd,_0x18bf9e,_0x3d91b5);clearTimeout(_0x28bf67);_0x1e143f[_0x24a5('0x3e')](!![]);_0x523e71[_0x24a5('0x41')]();},_0xf605b1);switch(_0x24d5fd[_0x24a5('0x42')]){case _0x24a5('0x43'):strategy['rrmemory'](_0x1e143f,_0x24d5fd,_0x3d91b5,_0x18bf9e);break;default:strategy['beepall'](_0x1e143f,_0x24d5fd,_0x3d91b5,_0x18bf9e);}}else{logger[_0x24a5('0x2d')](_0x24a5('0x44'),_0xbef70a,_0x2c92db[_0x24a5('0x29')]);_0x523e71[_0x24a5('0x39')]();}}}catch(_0x84da51){console['log'](_0x84da51);logger['error'](_0x24a5('0x37'),_0xbef70a,_0x84da51['stack']);_0x523e71[_0x24a5('0x39')]();}};};