785f80f5b2a7540626ecf6121e50fe5383f36862
[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 _0x6e91=['upperFirst','QueueId','channel','InteractionId','interaction','MessageId','message','chat','AccountId','WebsiteId','[%s][START:QUEUE][NAME:%s]','name','QueueReport','error','create\x20queue\x20report','accepted','info','update','update\x20queue\x20report','timeout','catch','toLowerCase','length','[%s][QUEUE]\x20%s','map','stop','find','createQueue','qtimeout','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','rules','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','validate','lodash','util','seq-queue','../../../../config/environment','../../../../config/logger','routing','./strategy','defaults','localhost','socket.io-emitter','redis','queue_id','account','queue','joinAt','clone','format','pick','%sQueuesWaitingInteractions','save','remove','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','string','number','timeout\x20is\x20a\x20number','waiting','body','from','YYYY-MM-DD\x20HH:mm:ss','contact','list'];(function(_0x4a747d,_0x3b747f){var _0x3a5b5c=function(_0x4b3e81){while(--_0x4b3e81){_0x4a747d['push'](_0x4a747d['shift']());}};_0x3a5b5c(++_0x3b747f);}(_0x6e91,0x15e));var _0x16e9=function(_0x4416a4,_0x562fd6){_0x4416a4=_0x4416a4-0x0;var _0xadbdae=_0x6e91[_0x4416a4];return _0xadbdae;};'use strict';var schema=require(_0x16e9('0x0'));var _=require(_0x16e9('0x1'));var util=require(_0x16e9('0x2'));var seqqueue=require(_0x16e9('0x3'));var moment=require('moment');var Redis=require('ioredis');var config=require(_0x16e9('0x4'));var logger=require(_0x16e9('0x5'))(_0x16e9('0x6'));var strategy=require(_0x16e9('0x7'));config['redis']=_[_0x16e9('0x8')](config['redis'],{'host':_0x16e9('0x9'),'port':0x18eb});var io=require(_0x16e9('0xa'))(new Redis(config[_0x16e9('0xb')]));var attributes=['id',_0x16e9('0xc'),_0x16e9('0xd'),_0x16e9('0xe'),'from',_0x16e9('0xf')];function emit(_0x3c476f,_0x3ea8ec,_0x4ae13b){io['to'](_0x3c476f)['emit'](_0x3ea8ec,_0x4ae13b);}function emitChannelQueueInteraction(_0xfb4608,_0x23bcc1,_0x3cc2cd,_0x1c90db,_0x45a4fd,_0x20f3f7,_0x55296f,_0x5eb751){var _0x1defcf=_[_0x16e9('0x10')](_0x3cc2cd);_0x1defcf[_0x16e9('0xc')]=_0x5eb751;_0x1defcf[_0x16e9('0xe')]=_0x23bcc1;_0x1defcf[_0x16e9('0xd')]=_0x1c90db;_0x1defcf['id']=_0x45a4fd;if(_0x20f3f7){_0x55296f[util[_0x16e9('0x11')]('%sQueuesWaitingInteractions',_0xfb4608)][_0x45a4fd]=_[_0x16e9('0x12')](_0x1defcf,attributes);}else{delete _0x55296f[util[_0x16e9('0x11')](_0x16e9('0x13'),_0xfb4608)][_0x45a4fd];}emit(util[_0x16e9('0x11')]('%s:queue:%s',_0xfb4608,_0x23bcc1),util[_0x16e9('0x11')]('%s_queue_waiting_interaction:%s',_0xfb4608,_0x20f3f7?_0x16e9('0x14'):_0x16e9('0x15')),_[_0x16e9('0x12')](_0x1defcf,attributes));}var rpc={'openchannelQueueReport':require(_0x16e9('0x16')),'mailQueueReport':require(_0x16e9('0x17')),'chatQueueReport':require('../../rpc/chatQueueReport'),'smsQueueReport':require(_0x16e9('0x18')),'faxQueueReport':require(_0x16e9('0x19')),'whatsappQueueReport':require('../../rpc/whatsappQueueReport')};var queue=schema({'name':{'type':_0x16e9('0x1a'),'required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0x16e9('0x1b'),'message':_0x16e9('0x1c')}});function startRouting(_0x16a27a,_0x31139e,_0x475b6e,_0x32e014){if(_0x16a27a&&_0x31139e&&_0x475b6e){_0x31139e[_0x16e9('0x1d')]+=0x1;var _0xa546a={'uniqueid':_0x16a27a,'from':_0x475b6e[_0x16e9('0x1e')]?_0x475b6e[_0x16e9('0x1e')][_0x16e9('0x1f')]:'','joinAt':moment()[_0x16e9('0x11')](_0x16e9('0x20')),'ContactId':_0x475b6e[_0x16e9('0x21')]?_0x475b6e[_0x16e9('0x21')]['id']:null,'ListId':_0x475b6e[_0x16e9('0x22')]?_0x475b6e[_0x16e9('0x22')]['id']:null};_0xa546a[_[_0x16e9('0x23')](_0x475b6e['channel'])+_0x16e9('0x24')]=_0x31139e['id']||null;_0xa546a[_[_0x16e9('0x23')](_0x475b6e[_0x16e9('0x25')])+_0x16e9('0x26')]=_0x475b6e[_0x16e9('0x27')]?_0x475b6e[_0x16e9('0x27')]['id']:null;_0xa546a[_[_0x16e9('0x23')](_0x475b6e[_0x16e9('0x25')])+_0x16e9('0x28')]=_0x475b6e[_0x16e9('0x29')]?_0x475b6e[_0x16e9('0x29')]['id']:null;_0xa546a[_[_0x16e9('0x23')](_0x475b6e[_0x16e9('0x25')])+(_0x475b6e[_0x16e9('0x25')]!==_0x16e9('0x2a')?_0x16e9('0x2b'):_0x16e9('0x2c'))]=_0x475b6e[_0x16e9('0xd')]?_0x475b6e[_0x16e9('0xd')]['id']:null;logger['info'](util[_0x16e9('0x11')](_0x16e9('0x2d'),_0x16a27a,_0x31139e['name']));emitChannelQueueInteraction(_0x475b6e[_0x16e9('0x25')],_0x31139e['name'],_0xa546a,_0x475b6e[_0x16e9('0xd')][_0x16e9('0x2e')],_0x475b6e[_0x16e9('0x29')]['id'],!![],_0x32e014,_0x31139e['id']);if(rpc[_0x475b6e[_0x16e9('0x25')]+_0x16e9('0x2f')]){return rpc[_0x475b6e[_0x16e9('0x25')]+_0x16e9('0x2f')]['create'](_0xa546a)['catch'](function(_0xfd19f5){logger[_0x16e9('0x30')](_0x16e9('0x31'));});}}}function stopRouting(_0xb1faa5,_0x583f8b,_0x17b6bd,_0x28b8c2){if(_0xb1faa5&&_0x583f8b){_0x583f8b[_0x16e9('0x1d')]-=0x1;var _0x3b05ff={'leaveAt':moment()[_0x16e9('0x11')](_0x16e9('0x20')),'acceptAt':moment()[_0x16e9('0x11')](_0x16e9('0x20')),'reason':_0x16e9('0x32')};logger[_0x16e9('0x33')](util[_0x16e9('0x11')]('[%s][STOP:QUEUE][NAME:%s]',_0xb1faa5,_0x583f8b[_0x16e9('0x2e')]));emitChannelQueueInteraction(_0x17b6bd['channel'],_0x583f8b['name'],_0x17b6bd['body'],_0x17b6bd[_0x16e9('0xd')][_0x16e9('0x2e')],_0x17b6bd[_0x16e9('0x29')]['id'],![],_0x28b8c2,_0x583f8b['id']);if(rpc[_0x17b6bd[_0x16e9('0x25')]+_0x16e9('0x2f')]){return rpc[_0x17b6bd[_0x16e9('0x25')]+'QueueReport'][_0x16e9('0x34')](_0xb1faa5,_0x3b05ff)['catch'](function(_0x353599){logger['error'](_0x16e9('0x35'));});}}}function endRouting(_0x30b786,_0x3389ff,_0x25359d,_0x375300){if(_0x30b786&&_0x3389ff){_0x3389ff[_0x16e9('0x1d')]-=0x1;var _0x592684={'leaveAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()[_0x16e9('0x11')](_0x16e9('0x20')),'reason':_0x16e9('0x36')};logger[_0x16e9('0x33')](util[_0x16e9('0x11')]('[%s][END:QUEUE][NAME:%s]',_0x30b786,_0x3389ff[_0x16e9('0x2e')]));emitChannelQueueInteraction(_0x25359d[_0x16e9('0x25')],_0x3389ff[_0x16e9('0x2e')],_0x25359d[_0x16e9('0x1e')],_0x25359d[_0x16e9('0xd')][_0x16e9('0x2e')],_0x25359d[_0x16e9('0x29')]['id'],![],_0x375300);if(rpc[_0x25359d[_0x16e9('0x25')]+'QueueReport']){return rpc[_0x25359d['channel']+_0x16e9('0x2f')][_0x16e9('0x34')](_0x30b786,_0x592684)[_0x16e9('0x37')](function(_0x55ae69){logger[_0x16e9('0x30')]('update\x20queue\x20report');});}}}function handleFindQueue(_0x2cc24a){return function(_0xd79421){return _0xd79421[_0x16e9('0x2e')][_0x16e9('0x38')]()===_0x2cc24a[_0x16e9('0x38')]();};}exports['consequence']=function(_0x19265d,_0x42ded8,_0x8c2496,_0xf6f6b){return function(_0x58255b){try{var _0xd4cac8={'name':_0x42ded8[0x0],'timeout':_0x42ded8[0x1]};var _0x50d26e=queue['validate'](_0xd4cac8,{'typecast':!![]});if(_0x50d26e[_0x16e9('0x39')]){logger[_0x16e9('0x30')](_0x16e9('0x3a'),_0x19265d,_[_0x16e9('0x3b')](_0x50d26e,_0x16e9('0x29'))['join'](',\x20'));_0x58255b[_0x16e9('0x3c')]();}else{var _0x582007=_[_0x16e9('0x3d')](_0x8c2496[_0xf6f6b['channel']+'Queues'],handleFindQueue(_0xd4cac8['name']));if(_0x582007){startRouting(_0x19265d,_0x582007,_0xf6f6b,_0x8c2496);var _0x593213=(_0x582007['timeout']||0xa)*0x3e8;var _0x1508da=(_0xd4cac8[_0x16e9('0x36')]||0x14)*0x3e8;var _0x38fccc,_0x41db1f;if(_0x593213>_0x1508da){_0x1508da=_0x593213;}var _0x121711=seqqueue[_0x16e9('0x3e')](_0x593213);_0x121711['id']=_0x19265d;_0x121711['atimeout']=_0x593213;_0x121711[_0x16e9('0x3f')]=_0x1508da;_0x121711[_0x16e9('0x25')]=_0xf6f6b[_0x16e9('0x25')];_0x8c2496['rules'][_0x19265d]['on'](_0x16e9('0x40'),function(){logger[_0x16e9('0x33')](_0x16e9('0x41'),_0x19265d);stopRouting(_0x19265d,_0x582007,_0xf6f6b,_0x8c2496);clearTimeout(_0x38fccc);_0x38fccc=undefined;_0x121711[_0x16e9('0x42')](!![]);if(_0x8c2496[_0x16e9('0x43')][_0x19265d]){delete _0x8c2496[_0x16e9('0x43')][_0x19265d];}_0x58255b[_0x16e9('0x3c')]();});_0x8c2496[_0x16e9('0x43')][_0x19265d]['on'](_0x16e9('0x44'),function(){if(_0x8c2496[_0x16e9('0x43')][_0x19265d]){delete _0x8c2496[_0x16e9('0x43')][_0x19265d];}});_0x38fccc=setTimeout(function(){logger[_0x16e9('0x33')](_0x16e9('0x45'),_0x19265d);endRouting(_0x19265d,_0x582007,_0xf6f6b,_0x8c2496);clearTimeout(_0x38fccc);_0x121711[_0x16e9('0x42')](!![]);_0x58255b[_0x16e9('0x46')]();},_0x1508da);switch(_0x582007[_0x16e9('0x47')]){case'rrmemory':strategy[_0x16e9('0x48')](_0x121711,_0x582007,_0x8c2496,_0xf6f6b);break;default:strategy[_0x16e9('0x49')](_0x121711,_0x582007,_0x8c2496,_0xf6f6b);}}else{logger[_0x16e9('0x30')](_0x16e9('0x4a'),_0x19265d,_0xd4cac8['name']);_0x58255b['stop']();}}}catch(_0xdbf47e){console[_0x16e9('0x4b')](_0xdbf47e);logger[_0x16e9('0x30')]('[%s][QUEUE]\x20%s',_0x19265d,_0xdbf47e[_0x16e9('0x4c')]);_0x58255b[_0x16e9('0x3c')]();}};};