← Volver al catálogo

🔀 Aislamiento de bots — cada uno a lo suyo

Archivos: tools/notify-router.ts, agentes/supervisores/bot-listener.ts · Estado: ✅ funcionando

Qué hace

Cada uno de los 11 bots de Telegram responde y recibe solo de su área. Se acabaron los mensajes cruzados ("Maya vía Fernando", logística llegando a finanzas, etc.). Fernando = solo finanzas, Oscar = toda la logística, Maya = solo Meta Ads, y así.

Cómo funciona

1. Router (notify-router.ts): cada evento (finance_*, ops_*, meta_*…) va SOLO a su bot primary. Se quitaron TODAS las cc (copias cruzadas). Lo único que escala a Sec es lo marcado level:'critical' (red de seguridad para fraude/errores graves), vía la lógica de notify().

2. Roles (bot-listener.ts): cada bot tiene un role estricto que dice "ocúpate SOLO de X, deriva lo demás al bot correcto". Maya/Fernando/Oscar tienen rol reforzado.

3. Filtro de datos (bot-listener.ts): ALLOW_BY_BOT limita qué datos en tiempo real recibe cada bot (finanzas no recibe pedidos pendientes, ads no recibe finanzas, etc.), así no opinan de terreno ajeno.

Datos/APIs

Telegram (los 11 tokens del .env). No usa APIs externas nuevas.

Cómo probarlo

cd ~/rifai-agents y simular un bot:

node -e 'const {spawnSync}=require("child_process");/* construir systemPrompt con el role y preguntar algo de otra área → debe derivar */'

O escribirle al bot en Telegram una pregunta de otra área → debe derivar.

Si se rompe / recuperar

bot-listener.ts es cron (se recompila cada 30s, sin reiniciar). El router lo importan los agentes fresco en cada aviso. Si reaparecen copias cruzadas, revisar que en ROUTING ningún evento tenga cc.

Cómo replicarlo

1. En notify-router.ts: cada entrada de ROUTING = { primary: '<bot>' }, sin cc.

2. En bot-listener.ts: rol estricto por bot + mapa ALLOW_BY_BOT que filtra needs por bot.key.

3. Regla de oro: finanzas solo a Fernando, logística solo a Oscar (ver memoria feedback_finanzas_routing).