Built motion from commit f7863d46.|2.5.41
[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 _0xd410=['../../rpc/chatQueueReport','../../rpc/faxQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','body','contact','list','upperFirst','channel','InteractionId','interaction','MessageId','message','chat','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','error','create\x20queue\x20report','waiting','YYYY-MM-DD\x20HH:mm:ss','accepted','[%s][STOP:QUEUE][NAME:%s]','catch','timeout','update','update\x20queue\x20report','toLowerCase','consequence','[%s][QUEUE]\x20%s','map','join','find','Queues','createQueue','qtimeout','rules','end','[%s][QUEUE]\x20ROUTING\x20STOPPED','stop','complete','[%s][QUEUE]\x20APPLICATION\x20END','close','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack','validate','util','seq-queue','moment','ioredis','../../../../config/environment','../../../../config/logger','routing','redis','defaults','localhost','queue_id','account','from','joinAt','emit','clone','queue','format','%sQueuesWaitingInteractions','pick','%s_queue_waiting_interaction:%s','save','../../rpc/openchannelQueueReport','../../rpc/mailQueueReport'];(function(_0x3d4995,_0x21af3f){var _0x2bc8ac=function(_0x1ebc17){while(--_0x1ebc17){_0x3d4995['push'](_0x3d4995['shift']());}};_0x2bc8ac(++_0x21af3f);}(_0xd410,0x127));var _0x0d41=function(_0x4243a3,_0x447337){_0x4243a3=_0x4243a3-0x0;var _0x1b2a33=_0xd410[_0x4243a3];return _0x1b2a33;};'use strict';var schema=require(_0x0d41('0x0'));var _=require('lodash');var util=require(_0x0d41('0x1'));var seqqueue=require(_0x0d41('0x2'));var moment=require(_0x0d41('0x3'));var Redis=require(_0x0d41('0x4'));var config=require(_0x0d41('0x5'));var logger=require(_0x0d41('0x6'))(_0x0d41('0x7'));var strategy=require('./strategy');config[_0x0d41('0x8')]=_[_0x0d41('0x9')](config[_0x0d41('0x8')],{'host':_0x0d41('0xa'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x0d41('0x8')]));var attributes=['id',_0x0d41('0xb'),_0x0d41('0xc'),'queue',_0x0d41('0xd'),_0x0d41('0xe')];function emit(_0x2bd3e7,_0x33264e,_0x299c5c){io['to'](_0x2bd3e7)[_0x0d41('0xf')](_0x33264e,_0x299c5c);}function emitChannelQueueInteraction(_0x397720,_0x40f541,_0x14544f,_0x28b405,_0x5189b8,_0xdc4bb2,_0x5870f4,_0x37ed9d){var _0x48af3c=_[_0x0d41('0x10')](_0x14544f);_0x48af3c[_0x0d41('0xb')]=_0x37ed9d;_0x48af3c[_0x0d41('0x11')]=_0x40f541;_0x48af3c[_0x0d41('0xc')]=_0x28b405;_0x48af3c['id']=_0x5189b8;if(_0xdc4bb2){_0x5870f4[util[_0x0d41('0x12')](_0x0d41('0x13'),_0x397720)][_0x5189b8]=_[_0x0d41('0x14')](_0x48af3c,attributes);}else{delete _0x5870f4[util['format']('%sQueuesWaitingInteractions',_0x397720)][_0x5189b8];}emit(util[_0x0d41('0x12')]('%s:queue:%s',_0x397720,_0x40f541),util[_0x0d41('0x12')](_0x0d41('0x15'),_0x397720,_0xdc4bb2?_0x0d41('0x16'):'remove'),_[_0x0d41('0x14')](_0x48af3c,attributes));}var rpc={'openchannelQueueReport':require(_0x0d41('0x17')),'mailQueueReport':require(_0x0d41('0x18')),'chatQueueReport':require(_0x0d41('0x19')),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require(_0x0d41('0x1a')),'whatsappQueueReport':require('../../rpc/whatsappQueueReport')};var queue=schema({'name':{'type':_0x0d41('0x1b'),'required':!![],'message':_0x0d41('0x1c')},'timeout':{'type':_0x0d41('0x1d'),'message':'timeout\x20is\x20a\x20number'}});function startRouting(_0x366ba6,_0x3a3aab,_0x5c1484,_0x152e68){if(_0x366ba6&&_0x3a3aab&&_0x5c1484){_0x3a3aab['waiting']+=0x1;var _0x35abdb={'uniqueid':_0x366ba6,'from':_0x5c1484[_0x0d41('0x1e')]?_0x5c1484[_0x0d41('0x1e')][_0x0d41('0xd')]:'','joinAt':moment()[_0x0d41('0x12')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x5c1484[_0x0d41('0x1f')]?_0x5c1484['contact']['id']:null,'ListId':_0x5c1484[_0x0d41('0x20')]?_0x5c1484[_0x0d41('0x20')]['id']:null};_0x35abdb[_[_0x0d41('0x21')](_0x5c1484['channel'])+'QueueId']=_0x3a3aab['id']||null;_0x35abdb[_[_0x0d41('0x21')](_0x5c1484[_0x0d41('0x22')])+_0x0d41('0x23')]=_0x5c1484[_0x0d41('0x24')]?_0x5c1484['interaction']['id']:null;_0x35abdb[_[_0x0d41('0x21')](_0x5c1484['channel'])+_0x0d41('0x25')]=_0x5c1484[_0x0d41('0x26')]?_0x5c1484[_0x0d41('0x26')]['id']:null;_0x35abdb[_['upperFirst'](_0x5c1484['channel'])+(_0x5c1484[_0x0d41('0x22')]!==_0x0d41('0x27')?_0x0d41('0x28'):_0x0d41('0x29'))]=_0x5c1484[_0x0d41('0xc')]?_0x5c1484[_0x0d41('0xc')]['id']:null;logger[_0x0d41('0x2a')](util[_0x0d41('0x12')](_0x0d41('0x2b'),_0x366ba6,_0x3a3aab[_0x0d41('0x2c')]));emitChannelQueueInteraction(_0x5c1484[_0x0d41('0x22')],_0x3a3aab[_0x0d41('0x2c')],_0x35abdb,_0x5c1484[_0x0d41('0xc')][_0x0d41('0x2c')],_0x5c1484[_0x0d41('0x26')]['id'],!![],_0x152e68,_0x3a3aab['id']);if(rpc[_0x5c1484[_0x0d41('0x22')]+'QueueReport']){return rpc[_0x5c1484['channel']+_0x0d41('0x2d')][_0x0d41('0x2e')](_0x35abdb)['catch'](function(_0x4be60a){logger[_0x0d41('0x2f')](_0x0d41('0x30'));});}}}function stopRouting(_0x18b192,_0x29b2cd,_0x1b73d6,_0x280452){if(_0x18b192&&_0x29b2cd){_0x29b2cd[_0x0d41('0x31')]-=0x1;var _0x4c1599={'leaveAt':moment()[_0x0d41('0x12')](_0x0d41('0x32')),'acceptAt':moment()['format'](_0x0d41('0x32')),'reason':_0x0d41('0x33')};logger[_0x0d41('0x2a')](util[_0x0d41('0x12')](_0x0d41('0x34'),_0x18b192,_0x29b2cd['name']));emitChannelQueueInteraction(_0x1b73d6[_0x0d41('0x22')],_0x29b2cd[_0x0d41('0x2c')],_0x1b73d6[_0x0d41('0x1e')],_0x1b73d6['account'][_0x0d41('0x2c')],_0x1b73d6[_0x0d41('0x26')]['id'],![],_0x280452,_0x29b2cd['id']);if(rpc[_0x1b73d6[_0x0d41('0x22')]+_0x0d41('0x2d')]){return rpc[_0x1b73d6[_0x0d41('0x22')]+'QueueReport']['update'](_0x18b192,_0x4c1599)[_0x0d41('0x35')](function(_0x18b9ef){logger[_0x0d41('0x2f')]('update\x20queue\x20report');});}}}function endRouting(_0x1c8317,_0x499c8d,_0x44f7ab,_0xda9493){if(_0x1c8317&&_0x499c8d){_0x499c8d[_0x0d41('0x31')]-=0x1;var _0x3e6607={'leaveAt':moment()[_0x0d41('0x12')](_0x0d41('0x32')),'exitAt':moment()['format'](_0x0d41('0x32')),'reason':_0x0d41('0x36')};logger[_0x0d41('0x2a')](util['format']('[%s][END:QUEUE][NAME:%s]',_0x1c8317,_0x499c8d[_0x0d41('0x2c')]));emitChannelQueueInteraction(_0x44f7ab[_0x0d41('0x22')],_0x499c8d[_0x0d41('0x2c')],_0x44f7ab[_0x0d41('0x1e')],_0x44f7ab['account'][_0x0d41('0x2c')],_0x44f7ab[_0x0d41('0x26')]['id'],![],_0xda9493);if(rpc[_0x44f7ab['channel']+'QueueReport']){return rpc[_0x44f7ab[_0x0d41('0x22')]+'QueueReport'][_0x0d41('0x37')](_0x1c8317,_0x3e6607)[_0x0d41('0x35')](function(_0x2fc496){logger[_0x0d41('0x2f')](_0x0d41('0x38'));});}}}function handleFindQueue(_0x5ad77f){return function(_0x1275d9){return _0x1275d9['name'][_0x0d41('0x39')]()===_0x5ad77f[_0x0d41('0x39')]();};}exports[_0x0d41('0x3a')]=function(_0x28194c,_0x4b290f,_0x190d9d,_0x111b0a){return function(_0x5a9dea){try{var _0x489e20={'name':_0x4b290f[0x0],'timeout':_0x4b290f[0x1]};var _0x4bea30=queue[_0x0d41('0x0')](_0x489e20,{'typecast':!![]});if(_0x4bea30['length']){logger['error'](_0x0d41('0x3b'),_0x28194c,_[_0x0d41('0x3c')](_0x4bea30,_0x0d41('0x26'))[_0x0d41('0x3d')](',\x20'));_0x5a9dea['stop']();}else{var _0x1597e2=_[_0x0d41('0x3e')](_0x190d9d[_0x111b0a[_0x0d41('0x22')]+_0x0d41('0x3f')],handleFindQueue(_0x489e20[_0x0d41('0x2c')]));if(_0x1597e2){startRouting(_0x28194c,_0x1597e2,_0x111b0a,_0x190d9d);var _0x1cec48=(_0x1597e2[_0x0d41('0x36')]||0xa)*0x3e8;var _0x4e4bb8=(_0x489e20['timeout']||0x14)*0x3e8;var _0x4c56b3,_0x19ab57;if(_0x1cec48>_0x4e4bb8){_0x4e4bb8=_0x1cec48;}var _0x2c57bc=seqqueue[_0x0d41('0x40')](_0x1cec48);_0x2c57bc['id']=_0x28194c;_0x2c57bc['atimeout']=_0x1cec48;_0x2c57bc[_0x0d41('0x41')]=_0x4e4bb8;_0x2c57bc[_0x0d41('0x22')]=_0x111b0a[_0x0d41('0x22')];_0x190d9d[_0x0d41('0x42')][_0x28194c]['on'](_0x0d41('0x43'),function(){logger['info'](_0x0d41('0x44'),_0x28194c);stopRouting(_0x28194c,_0x1597e2,_0x111b0a,_0x190d9d);clearTimeout(_0x4c56b3);_0x4c56b3=undefined;_0x2c57bc['close'](!![]);if(_0x190d9d[_0x0d41('0x42')][_0x28194c]){delete _0x190d9d[_0x0d41('0x42')][_0x28194c];}_0x5a9dea[_0x0d41('0x45')]();});_0x190d9d['rules'][_0x28194c]['on'](_0x0d41('0x46'),function(){if(_0x190d9d['rules'][_0x28194c]){delete _0x190d9d[_0x0d41('0x42')][_0x28194c];}});_0x4c56b3=setTimeout(function(){logger['info'](_0x0d41('0x47'),_0x28194c);endRouting(_0x28194c,_0x1597e2,_0x111b0a,_0x190d9d);clearTimeout(_0x4c56b3);_0x2c57bc[_0x0d41('0x48')](!![]);_0x5a9dea[_0x0d41('0x49')]();},_0x4e4bb8);switch(_0x1597e2[_0x0d41('0x4a')]){case _0x0d41('0x4b'):strategy[_0x0d41('0x4b')](_0x2c57bc,_0x1597e2,_0x190d9d,_0x111b0a);break;default:strategy[_0x0d41('0x4c')](_0x2c57bc,_0x1597e2,_0x190d9d,_0x111b0a);}}else{logger['error'](_0x0d41('0x4d'),_0x28194c,_0x489e20[_0x0d41('0x2c')]);_0x5a9dea[_0x0d41('0x45')]();}}}catch(_0x5d9041){console[_0x0d41('0x4e')](_0x5d9041);logger[_0x0d41('0x2f')]('[%s][QUEUE]\x20%s',_0x28194c,_0x5d9041[_0x0d41('0x4f')]);_0x5a9dea[_0x0d41('0x45')]();}};};