Built motion from commit 3770a7bd.|2.6.29
[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 _0x018b=['name','QueueReport','catch','error','create\x20queue\x20report','Interaction','update','update\x20queue\x20report','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','validate','length','map','join','find','Queues','timeout','atimeout','qtimeout','rules','[%s][QUEUE]\x20ROUTING\x20STOPPED','close','stop','complete','[%s][QUEUE]\x20APPLICATION\x20END','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','[%s][QUEUE]\x20%s','stack','lodash','util','seq-queue','moment','routing','redis','socket.io-emitter','account','queue','from','joinAt','emit','queue_id','push','capitalize','format','%sQueuesWaitingInteractions','pick','%s:queue:%s','save','remove','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','../../rpc/faxQueueReport','../../rpc/whatsappQueueReport','../../rpc/chatInteraction','../../rpc/faxInteraction','../../rpc/mailInteraction','../../rpc/openchannelInteraction','../../rpc/smsInteraction','../../rpc/whatsappInteraction','string','number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','InteractionId','interaction','MessageId','message','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]'];(function(_0x2e26a0,_0x3caa1d){var _0x22015c=function(_0x73d6ab){while(--_0x73d6ab){_0x2e26a0['push'](_0x2e26a0['shift']());}};_0x22015c(++_0x3caa1d);}(_0x018b,0x1c0));var _0xb018=function(_0x39096d,_0x51f8a0){_0x39096d=_0x39096d-0x0;var _0x13da4f=_0x018b[_0x39096d];return _0x13da4f;};'use strict';var schema=require('validate');var _=require(_0xb018('0x0'));var util=require(_0xb018('0x1'));var seqqueue=require(_0xb018('0x2'));var moment=require(_0xb018('0x3'));var Redis=require('ioredis');var config=require('../../../../config/environment');var logger=require('../../../../config/logger')(_0xb018('0x4'));var strategy=require('./strategy');config[_0xb018('0x5')]=_['defaults'](config['redis'],{'host':'localhost','port':0x18eb});var io=require(_0xb018('0x6'))(new Redis(config['redis']));var attributes=['id','queue_id',_0xb018('0x7'),_0xb018('0x8'),_0xb018('0x9'),_0xb018('0xa')];function emit(_0x16e766,_0x8a8ae0,_0x11fa98){io['to'](_0x16e766)[_0xb018('0xb')](_0x8a8ae0,_0x11fa98);}function emitChannelQueueInteraction(_0x3e8135,_0x518353,_0x559c98,_0x4235ee,_0x5b2136,_0x38eb0c,_0x27b34d,_0x699f2c){var _0x3cd2fa=_['clone'](_0x559c98);_0x3cd2fa[_0xb018('0xc')]=_0x699f2c;_0x3cd2fa[_0xb018('0x8')]=_0x518353;_0x3cd2fa[_0xb018('0x7')]=_0x4235ee;_0x3cd2fa['id']=_0x5b2136;if(_0x38eb0c){attributes[_0xb018('0xd')](_[_0xb018('0xe')](_0x3e8135)+'InteractionId');_0x27b34d[util[_0xb018('0xf')](_0xb018('0x10'),_0x3e8135)][_0x5b2136]=_[_0xb018('0x11')](_0x3cd2fa,attributes);}else{delete _0x27b34d[util['format'](_0xb018('0x10'),_0x3e8135)][_0x5b2136];}emit(util[_0xb018('0xf')](_0xb018('0x12'),_0x3e8135,_0x518353),util['format']('%s_queue_waiting_interaction:%s',_0x3e8135,_0x38eb0c?_0xb018('0x13'):_0xb018('0x14')),_[_0xb018('0x11')](_0x3cd2fa,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0xb018('0x15')),'chatQueueReport':require(_0xb018('0x16')),'smsQueueReport':require(_0xb018('0x17')),'faxQueueReport':require(_0xb018('0x18')),'whatsappQueueReport':require(_0xb018('0x19')),'chatInteraction':require(_0xb018('0x1a')),'faxInteraction':require(_0xb018('0x1b')),'mailInteraction':require(_0xb018('0x1c')),'openchannelInteraction':require(_0xb018('0x1d')),'smsInteraction':require(_0xb018('0x1e')),'whatsappInteraction':require(_0xb018('0x1f'))};var queue=schema({'name':{'type':_0xb018('0x20'),'required':!![],'message':'name\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'timeout':{'type':_0xb018('0x21'),'message':'timeout\x20is\x20a\x20number'}});function startRouting(_0x1000e5,_0x1376ec,_0x5ac7de,_0x34be33){if(_0x1000e5&&_0x1376ec&&_0x5ac7de){_0x1376ec[_0xb018('0x22')]+=0x1;var _0x3402bf={'uniqueid':_0x1000e5,'from':_0x5ac7de[_0xb018('0x23')]?_0x5ac7de[_0xb018('0x23')][_0xb018('0x9')]:'','joinAt':moment()[_0xb018('0xf')](_0xb018('0x24')),'ContactId':_0x5ac7de['contact']?_0x5ac7de[_0xb018('0x25')]['id']:null,'ListId':_0x5ac7de[_0xb018('0x26')]?_0x5ac7de[_0xb018('0x26')]['id']:null};_0x3402bf[_[_0xb018('0x27')](_0x5ac7de[_0xb018('0x28')])+_0xb018('0x29')]=_0x1376ec['id']||null;_0x3402bf[_[_0xb018('0x27')](_0x5ac7de['channel'])+_0xb018('0x2a')]=_0x5ac7de['interaction']?_0x5ac7de[_0xb018('0x2b')]['id']:null;_0x3402bf[_[_0xb018('0x27')](_0x5ac7de[_0xb018('0x28')])+_0xb018('0x2c')]=_0x5ac7de[_0xb018('0x2d')]?_0x5ac7de[_0xb018('0x2d')]['id']:null;_0x3402bf[_['upperFirst'](_0x5ac7de['channel'])+(_0x5ac7de[_0xb018('0x28')]!=='chat'?_0xb018('0x2e'):_0xb018('0x2f'))]=_0x5ac7de['account']?_0x5ac7de[_0xb018('0x7')]['id']:null;logger[_0xb018('0x30')](util[_0xb018('0xf')](_0xb018('0x31'),_0x1000e5,_0x1376ec[_0xb018('0x32')]));emitChannelQueueInteraction(_0x5ac7de['channel'],_0x1376ec[_0xb018('0x32')],_0x3402bf,_0x5ac7de['account']['name'],_0x5ac7de['message']['id'],!![],_0x34be33,_0x1376ec['id']);if(rpc[_0x5ac7de[_0xb018('0x28')]+_0xb018('0x33')]){return rpc[_0x5ac7de[_0xb018('0x28')]+'QueueReport']['create'](_0x3402bf)[_0xb018('0x34')](function(_0x31f2ee){logger[_0xb018('0x35')](_0xb018('0x36'),_0x31f2ee);});}}}function stopRouting(_0x2779d1,_0x1a6308,_0x244290,_0xfbce7f){if(_0x2779d1&&_0x1a6308){_0x1a6308[_0xb018('0x22')]-=0x1;var _0x48ecd9={'leaveAt':moment()[_0xb018('0xf')](_0xb018('0x24')),'acceptAt':moment()[_0xb018('0xf')](_0xb018('0x24')),'reason':'accepted'};logger['info'](util[_0xb018('0xf')]('[%s][STOP:QUEUE][NAME:%s]',_0x2779d1,_0x1a6308[_0xb018('0x32')]));emitChannelQueueInteraction(_0x244290[_0xb018('0x28')],_0x1a6308[_0xb018('0x32')],_0x244290['body'],_0x244290['account'][_0xb018('0x32')],_0x244290[_0xb018('0x2d')]['id'],![],_0xfbce7f,_0x1a6308['id']);return rpc[_0x244290[_0xb018('0x28')]+_0xb018('0x37')][_0xb018('0x38')](_0x244290[_0xb018('0x2b')]['id'],{'queueId':_0x1a6308['id']})['then'](function(){if(rpc[_0x244290['channel']+_0xb018('0x33')]){return rpc[_0x244290[_0xb018('0x28')]+'QueueReport'][_0xb018('0x38')](_0x2779d1,_0x48ecd9)[_0xb018('0x34')](function(_0x3c09e4){logger[_0xb018('0x35')](_0xb018('0x39'),_0x3c09e4);});}});}}function endRouting(_0x31ca2c,_0x4ccc16,_0x40e2b8,_0x343073){if(_0x31ca2c&&_0x4ccc16){_0x4ccc16[_0xb018('0x22')]-=0x1;var _0x217f11={'leaveAt':moment()[_0xb018('0xf')](_0xb018('0x24')),'exitAt':moment()[_0xb018('0xf')](_0xb018('0x24')),'reason':'timeout'};logger[_0xb018('0x30')](util[_0xb018('0xf')](_0xb018('0x3a'),_0x31ca2c,_0x4ccc16[_0xb018('0x32')]));emitChannelQueueInteraction(_0x40e2b8[_0xb018('0x28')],_0x4ccc16[_0xb018('0x32')],_0x40e2b8[_0xb018('0x23')],_0x40e2b8[_0xb018('0x7')][_0xb018('0x32')],_0x40e2b8['message']['id'],![],_0x343073);if(rpc[_0x40e2b8[_0xb018('0x28')]+_0xb018('0x33')]){return rpc[_0x40e2b8[_0xb018('0x28')]+_0xb018('0x33')][_0xb018('0x38')](_0x31ca2c,_0x217f11)[_0xb018('0x34')](function(_0x50548c){logger[_0xb018('0x35')]('update\x20queue\x20report',_0x50548c);});}}}function handleFindQueue(_0x56768f){return function(_0xae9352){return _0xae9352['name'][_0xb018('0x3b')]()===_0x56768f[_0xb018('0x3b')]();};}exports[_0xb018('0x3c')]=function(_0x5b8bf1,_0x2728aa,_0x49a492,_0x581136){return function(_0x54ec4d){try{var _0x37caae={'name':_0x2728aa[0x0],'timeout':_0x2728aa[0x1]};var _0x114225=queue[_0xb018('0x3d')](_0x37caae,{'typecast':!![]});if(_0x114225[_0xb018('0x3e')]){logger[_0xb018('0x35')]('[%s][QUEUE]\x20%s',_0x5b8bf1,_[_0xb018('0x3f')](_0x114225,_0xb018('0x2d'))[_0xb018('0x40')](',\x20'));_0x54ec4d['stop']();}else{var _0x271fcd=_[_0xb018('0x41')](_0x49a492[_0x581136[_0xb018('0x28')]+_0xb018('0x42')],handleFindQueue(_0x37caae[_0xb018('0x32')]));if(_0x271fcd){startRouting(_0x5b8bf1,_0x271fcd,_0x581136,_0x49a492);var _0x3f896f=(_0x271fcd[_0xb018('0x43')]||0xa)*0x3e8;var _0x14adbc=(_0x37caae[_0xb018('0x43')]||0x14)*0x3e8;var _0x23e677;if(_0x3f896f>_0x14adbc){_0x14adbc=_0x3f896f;}var _0x15248c=seqqueue['createQueue'](_0x3f896f);_0x15248c['id']=_0x5b8bf1;_0x15248c[_0xb018('0x44')]=_0x3f896f;_0x15248c[_0xb018('0x45')]=_0x14adbc;_0x15248c[_0xb018('0x28')]=_0x581136['channel'];_0x49a492[_0xb018('0x46')][_0x5b8bf1]['on']('end',function(){logger['info'](_0xb018('0x47'),_0x5b8bf1);stopRouting(_0x5b8bf1,_0x271fcd,_0x581136,_0x49a492);clearTimeout(_0x23e677);_0x23e677=undefined;_0x15248c[_0xb018('0x48')](!![]);if(_0x49a492['rules'][_0x5b8bf1]){delete _0x49a492['rules'][_0x5b8bf1];}_0x54ec4d[_0xb018('0x49')]();});_0x49a492[_0xb018('0x46')][_0x5b8bf1]['on'](_0xb018('0x4a'),function(){if(_0x49a492['rules'][_0x5b8bf1]){delete _0x49a492[_0xb018('0x46')][_0x5b8bf1];}});_0x23e677=setTimeout(function(){logger[_0xb018('0x30')](_0xb018('0x4b'),_0x5b8bf1);endRouting(_0x5b8bf1,_0x271fcd,_0x581136,_0x49a492);clearTimeout(_0x23e677);_0x15248c[_0xb018('0x48')](!![]);_0x54ec4d[_0xb018('0x4c')]();},_0x14adbc);switch(_0x271fcd[_0xb018('0x4d')]){case _0xb018('0x4e'):strategy[_0xb018('0x4e')](_0x15248c,_0x271fcd,_0x49a492,_0x581136);break;default:strategy[_0xb018('0x4f')](_0x15248c,_0x271fcd,_0x49a492,_0x581136);}}else{logger[_0xb018('0x35')](_0xb018('0x50'),_0x5b8bf1,_0x37caae[_0xb018('0x32')]);_0x54ec4d[_0xb018('0x49')]();}}}catch(_0xf2edf4){logger[_0xb018('0x35')](_0xb018('0x51'),_0x5b8bf1,_0xf2edf4[_0xb018('0x52')]);_0x54ec4d[_0xb018('0x49')]();}};};