b4d2390eb6cb3f87b2fedcf05070c6199b96b235
[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 _0xd8b0=['error','timeout','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','map','join','find','Queues','qtimeout','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','rules','stop','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','[%s][QUEUE]\x20%s','validate','lodash','ioredis','../../../../config/environment','../../../../config/logger','routing','./strategy','redis','localhost','socket.io-emitter','queue_id','account','from','joinAt','emit','clone','queue','format','%sQueuesWaitingInteractions','pick','%s_queue_waiting_interaction:%s','save','remove','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','body','contact','upperFirst','channel','QueueId','InteractionId','interaction','MessageId','message','chat','AccountId','info','[%s][START:QUEUE][NAME:%s]','QueueReport','create','catch','YYYY-MM-DD\x20HH:mm:ss','accepted','name','update'];(function(_0x4a3756,_0x5334ff){var _0x26094c=function(_0x26d805){while(--_0x26d805){_0x4a3756['push'](_0x4a3756['shift']());}};_0x26094c(++_0x5334ff);}(_0xd8b0,0xad));var _0x0d8b=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0xd8b0[_0xa464c9];return _0x3d73c4;};'use strict';var schema=require(_0x0d8b('0x0'));var _=require(_0x0d8b('0x1'));var util=require('util');var seqqueue=require('seq-queue');var moment=require('moment');var Redis=require(_0x0d8b('0x2'));var config=require(_0x0d8b('0x3'));var logger=require(_0x0d8b('0x4'))(_0x0d8b('0x5'));var strategy=require(_0x0d8b('0x6'));config['redis']=_['defaults'](config[_0x0d8b('0x7')],{'host':_0x0d8b('0x8'),'port':0x18eb});var io=require(_0x0d8b('0x9'))(new Redis(config['redis']));var attributes=['id',_0x0d8b('0xa'),_0x0d8b('0xb'),'queue',_0x0d8b('0xc'),_0x0d8b('0xd')];function emit(_0x3b027f,_0x1f4800,_0x28ff7f){io['to'](_0x3b027f)[_0x0d8b('0xe')](_0x1f4800,_0x28ff7f);}function emitChannelQueueInteraction(_0x2c5e9e,_0x28f87c,_0x48fa16,_0x3c4bfa,_0x4e0269,_0x4225c4,_0xc574a3,_0x340cc4){var _0x92cdd8=_[_0x0d8b('0xf')](_0x48fa16);_0x92cdd8[_0x0d8b('0xa')]=_0x340cc4;_0x92cdd8[_0x0d8b('0x10')]=_0x28f87c;_0x92cdd8[_0x0d8b('0xb')]=_0x3c4bfa;_0x92cdd8['id']=_0x4e0269;if(_0x4225c4){_0xc574a3[util[_0x0d8b('0x11')](_0x0d8b('0x12'),_0x2c5e9e)][_0x4e0269]=_[_0x0d8b('0x13')](_0x92cdd8,attributes);}else{delete _0xc574a3[util[_0x0d8b('0x11')](_0x0d8b('0x12'),_0x2c5e9e)][_0x4e0269];}emit(util[_0x0d8b('0x11')]('%s:queue:%s',_0x2c5e9e,_0x28f87c),util[_0x0d8b('0x11')](_0x0d8b('0x14'),_0x2c5e9e,_0x4225c4?_0x0d8b('0x15'):_0x0d8b('0x16')),_[_0x0d8b('0x13')](_0x92cdd8,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0x0d8b('0x17')),'chatQueueReport':require(_0x0d8b('0x18')),'smsQueueReport':require(_0x0d8b('0x19')),'faxQueueReport':require(_0x0d8b('0x1a'))};var queue=schema({'name':{'type':_0x0d8b('0x1b'),'required':!![],'message':_0x0d8b('0x1c')},'timeout':{'type':_0x0d8b('0x1d'),'message':_0x0d8b('0x1e')}});function startRouting(_0x4a15bf,_0x27512e,_0x23d58f,_0x196c0a){if(_0x4a15bf&&_0x27512e&&_0x23d58f){_0x27512e[_0x0d8b('0x1f')]+=0x1;var _0x24e8ed={'uniqueid':_0x4a15bf,'from':_0x23d58f[_0x0d8b('0x20')]?_0x23d58f[_0x0d8b('0x20')][_0x0d8b('0xc')]:'','joinAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x23d58f[_0x0d8b('0x21')]?_0x23d58f['contact']['id']:null,'ListId':_0x23d58f['list']?_0x23d58f['list']['id']:null};_0x24e8ed[_[_0x0d8b('0x22')](_0x23d58f[_0x0d8b('0x23')])+_0x0d8b('0x24')]=_0x27512e['id']||null;_0x24e8ed[_[_0x0d8b('0x22')](_0x23d58f[_0x0d8b('0x23')])+_0x0d8b('0x25')]=_0x23d58f[_0x0d8b('0x26')]?_0x23d58f[_0x0d8b('0x26')]['id']:null;_0x24e8ed[_[_0x0d8b('0x22')](_0x23d58f['channel'])+_0x0d8b('0x27')]=_0x23d58f[_0x0d8b('0x28')]?_0x23d58f['message']['id']:null;_0x24e8ed[_[_0x0d8b('0x22')](_0x23d58f['channel'])+(_0x23d58f[_0x0d8b('0x23')]!==_0x0d8b('0x29')?_0x0d8b('0x2a'):'WebsiteId')]=_0x23d58f['account']?_0x23d58f[_0x0d8b('0xb')]['id']:null;logger[_0x0d8b('0x2b')](util['format'](_0x0d8b('0x2c'),_0x4a15bf,_0x27512e['name']));emitChannelQueueInteraction(_0x23d58f[_0x0d8b('0x23')],_0x27512e['name'],_0x24e8ed,_0x23d58f[_0x0d8b('0xb')]['name'],_0x23d58f[_0x0d8b('0x28')]['id'],!![],_0x196c0a,_0x27512e['id']);if(rpc[_0x23d58f['channel']+_0x0d8b('0x2d')]){return rpc[_0x23d58f['channel']+_0x0d8b('0x2d')][_0x0d8b('0x2e')](_0x24e8ed)[_0x0d8b('0x2f')](function(_0x56120a){logger['error']('create\x20queue\x20report');});}}}function stopRouting(_0x4e8992,_0x5515d2,_0x3cdf3c,_0x54f6f3){if(_0x4e8992&&_0x5515d2){_0x5515d2['waiting']-=0x1;var _0x36017a={'leaveAt':moment()[_0x0d8b('0x11')](_0x0d8b('0x30')),'acceptAt':moment()[_0x0d8b('0x11')](_0x0d8b('0x30')),'reason':_0x0d8b('0x31')};logger[_0x0d8b('0x2b')](util[_0x0d8b('0x11')]('[%s][STOP:QUEUE][NAME:%s]',_0x4e8992,_0x5515d2[_0x0d8b('0x32')]));emitChannelQueueInteraction(_0x3cdf3c[_0x0d8b('0x23')],_0x5515d2['name'],_0x3cdf3c[_0x0d8b('0x20')],_0x3cdf3c[_0x0d8b('0xb')][_0x0d8b('0x32')],_0x3cdf3c['message']['id'],![],_0x54f6f3,_0x5515d2['id']);if(rpc[_0x3cdf3c[_0x0d8b('0x23')]+_0x0d8b('0x2d')]){return rpc[_0x3cdf3c[_0x0d8b('0x23')]+_0x0d8b('0x2d')][_0x0d8b('0x33')](_0x4e8992,_0x36017a)['catch'](function(_0x3f1cb3){logger[_0x0d8b('0x34')]('update\x20queue\x20report');});}}}function endRouting(_0x1180ac,_0x3cc3ee,_0x188af2,_0x974b9b){if(_0x1180ac&&_0x3cc3ee){_0x3cc3ee[_0x0d8b('0x1f')]-=0x1;var _0x519088={'leaveAt':moment()['format'](_0x0d8b('0x30')),'exitAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0x0d8b('0x35')};logger[_0x0d8b('0x2b')](util[_0x0d8b('0x11')](_0x0d8b('0x36'),_0x1180ac,_0x3cc3ee[_0x0d8b('0x32')]));emitChannelQueueInteraction(_0x188af2[_0x0d8b('0x23')],_0x3cc3ee['name'],_0x188af2[_0x0d8b('0x20')],_0x188af2[_0x0d8b('0xb')][_0x0d8b('0x32')],_0x188af2[_0x0d8b('0x28')]['id'],![],_0x974b9b);if(rpc[_0x188af2[_0x0d8b('0x23')]+_0x0d8b('0x2d')]){return rpc[_0x188af2[_0x0d8b('0x23')]+'QueueReport'][_0x0d8b('0x33')](_0x1180ac,_0x519088)[_0x0d8b('0x2f')](function(_0x3fa955){logger[_0x0d8b('0x34')]('update\x20queue\x20report');});}}}function handleFindQueue(_0xe0bf42){return function(_0x4b4bde){return _0x4b4bde[_0x0d8b('0x32')][_0x0d8b('0x37')]()===_0xe0bf42[_0x0d8b('0x37')]();};}exports[_0x0d8b('0x38')]=function(_0x35fa7e,_0x3e632e,_0x1ff17d,_0x373f69){return function(_0x89ab0d){try{var _0x2c3c84={'name':_0x3e632e[0x0],'timeout':_0x3e632e[0x1]};var _0x482069=queue['validate'](_0x2c3c84,{'typecast':!![]});if(_0x482069['length']){logger['error']('[%s][QUEUE]\x20%s',_0x35fa7e,_[_0x0d8b('0x39')](_0x482069,_0x0d8b('0x28'))[_0x0d8b('0x3a')](',\x20'));_0x89ab0d['stop']();}else{var _0x4a76a3=_[_0x0d8b('0x3b')](_0x1ff17d[_0x373f69[_0x0d8b('0x23')]+_0x0d8b('0x3c')],handleFindQueue(_0x2c3c84['name']));if(_0x4a76a3){startRouting(_0x35fa7e,_0x4a76a3,_0x373f69,_0x1ff17d);var _0x214583=(_0x4a76a3[_0x0d8b('0x35')]||0xa)*0x3e8;var _0x5059ad=(_0x2c3c84['timeout']||0x14)*0x3e8;var _0x372740,_0x495870;if(_0x214583>_0x5059ad){_0x5059ad=_0x214583;}var _0x1e22e5=seqqueue['createQueue'](_0x214583);_0x1e22e5['id']=_0x35fa7e;_0x1e22e5['atimeout']=_0x214583;_0x1e22e5[_0x0d8b('0x3d')]=_0x5059ad;_0x1e22e5[_0x0d8b('0x23')]=_0x373f69['channel'];_0x1ff17d['rules'][_0x35fa7e]['on']('end',function(){logger['info'](_0x0d8b('0x3e'),_0x35fa7e);stopRouting(_0x35fa7e,_0x4a76a3,_0x373f69,_0x1ff17d);clearTimeout(_0x372740);_0x372740=undefined;_0x1e22e5[_0x0d8b('0x3f')](!![]);if(_0x1ff17d[_0x0d8b('0x40')][_0x35fa7e]){delete _0x1ff17d['rules'][_0x35fa7e];}_0x89ab0d[_0x0d8b('0x41')]();});_0x1ff17d[_0x0d8b('0x40')][_0x35fa7e]['on'](_0x0d8b('0x42'),function(){if(_0x1ff17d[_0x0d8b('0x40')][_0x35fa7e]){delete _0x1ff17d[_0x0d8b('0x40')][_0x35fa7e];}});_0x372740=setTimeout(function(){logger[_0x0d8b('0x2b')](_0x0d8b('0x43'),_0x35fa7e);endRouting(_0x35fa7e,_0x4a76a3,_0x373f69,_0x1ff17d);clearTimeout(_0x372740);_0x1e22e5[_0x0d8b('0x3f')](!![]);_0x89ab0d[_0x0d8b('0x44')]();},_0x5059ad);switch(_0x4a76a3[_0x0d8b('0x45')]){case _0x0d8b('0x46'):strategy[_0x0d8b('0x46')](_0x1e22e5,_0x4a76a3,_0x1ff17d,_0x373f69);break;default:strategy[_0x0d8b('0x47')](_0x1e22e5,_0x4a76a3,_0x1ff17d,_0x373f69);}}else{logger[_0x0d8b('0x34')](_0x0d8b('0x48'),_0x35fa7e,_0x2c3c84[_0x0d8b('0x32')]);_0x89ab0d[_0x0d8b('0x41')]();}}}catch(_0x1e162c){console[_0x0d8b('0x49')](_0x1e162c);logger['error'](_0x0d8b('0x4a'),_0x35fa7e,_0x1e162c['stack']);_0x89ab0d['stop']();}};};