Ir al contenido

Grupos de difusión

Estado: Experimental
Versión: Añadido en 2026.1.9

Los grupos de difusión permiten que múltiples agentes procesen y respondan al mismo mensaje simultáneamente. Esto te permite crear equipos de agentes especializados que trabajan juntos en un solo grupo de WhatsApp o mensaje directo (DM) — todo usando un solo número de teléfono.

Alcance actual: solo WhatsApp (canal web).

Los grupos de difusión se evalúan después de las listas de permitidos del canal y las reglas de activación de grupos. En los grupos de WhatsApp, esto significa que las difusiones ocurren cuando OpenClaw normalmente respondería (por ejemplo: al mencionar, dependiendo de la configuración de tu grupo).

Despliega múltiples agentes con responsabilidades atómicas y enfocadas:

Group: "Development Team"
Agents:
- CodeReviewer (reviews code snippets)
- DocumentationBot (generates docs)
- SecurityAuditor (checks for vulnerabilities)
- TestGenerator (suggests test cases)

Cada agente procesa el mismo mensaje y proporciona su perspectiva especializada.

Group: "International Support"
Agents:
- Agent_EN (responds in English)
- Agent_DE (responds in German)
- Agent_ES (responds in Spanish)
Group: "Customer Support"
Agents:
- SupportAgent (provides answer)
- QAAgent (reviews quality, only responds if issues found)
Group: "Project Management"
Agents:
- TaskTracker (updates task database)
- TimeLogger (logs time spent)
- ReportGenerator (creates summaries)

Añade una sección broadcast de nivel superior (junto a bindings). Las claves son IDs de pares de WhatsApp:

  • chats de grupo: JID de grupo (ej. [email protected])
  • DMs: número de teléfono E.164 (ej. +15551234567)
{
"broadcast": {
"[email protected]": ["alfred", "baerbel", "assistant3"]
}
}

Resultado: Cuando OpenClaw respondería en este chat, ejecutará los tres agentes.

Controla cómo los agentes procesan los mensajes:

Todos los agentes procesan simultáneamente:

{
"broadcast": {
"strategy": "parallel",
"[email protected]": ["alfred", "baerbel"]
}
}

Los agentes procesan en orden (uno espera a que el anterior termine):

{
"broadcast": {
"strategy": "sequential",
"[email protected]": ["alfred", "baerbel"]
}
}
{
"agents": {
"list": [
{
"id": "code-reviewer",
"name": "Code Reviewer",
"workspace": "/path/to/code-reviewer",
"sandbox": { "mode": "all" }
},
{
"id": "security-auditor",
"name": "Security Auditor",
"workspace": "/path/to/security-auditor",
"sandbox": { "mode": "all" }
},
{
"id": "docs-generator",
"name": "Documentation Generator",
"workspace": "/path/to/docs-generator",
"sandbox": { "mode": "all" }
}
]
},
"broadcast": {
"strategy": "parallel",
"[email protected]": ["code-reviewer", "security-auditor", "docs-generator"],
"[email protected]": ["support-en", "support-de"],
"+15555550123": ["assistant", "logger"]
}
}
  1. Mensaje entrante llega a un grupo de WhatsApp
  2. Verificación de difusión: El sistema verifica si el ID del par está en broadcast
  3. Si está en la lista de difusión:
    • Todos los agentes listados procesan el mensaje
    • Cada agente tiene su propia clave de sesión y contexto aislado
    • Los agentes procesan en paralelo (predeterminado) o secuencialmente
  4. Si no está en la lista de difusión:
    • Se aplica el enrutamiento normal (primer enlace coincidente)

Nota: los grupos de difusión no omiten las listas de permitidos del canal ni las reglas de activación de grupos (menciones/comandos/etc.). Solo cambian qué agentes se ejecutan cuando un mensaje es elegible para procesamiento.

Cada agente en un grupo de transmisión mantiene completamente separados:

  • Claves de sesión (agent:alfred:whatsapp:group:120363... vs agent:baerbel:whatsapp:group:120363...)
  • Historial de conversaciones (el agente no ve los mensajes de otros agentes)
  • Espacio de trabajo (sandboxes separados si está configurado)
  • Acceso a herramientas (listas de permitir/denegar diferentes)
  • Memoria/contexto (IDENTITY.md, SOUL.md, etc. separados)
  • Búfer de contexto de grupo (mensajes grupales recientes usados para contexto) se comparte por par, por lo que todos los agentes de transmisión ven el mismo contexto cuando se activan

Esto permite que cada agente tenga:

  • Diferentes personalidades
  • Diferente acceso a herramientas (ej., solo lectura vs. lectura-escritura)
  • Diferentes modelos (ej., opus vs. sonnet)
  • Diferentes habilidades instaladas

En el grupo [email protected] con los agentes ["alfred", "baerbel"]:

Contexto de Alfred:

Session: agent:alfred:whatsapp:group:[email protected]
History: [user message, alfred's previous responses]
Workspace: /Users/pascal/openclaw-alfred/
Tools: read, write, exec

Contexto de Bärbel:

Session: agent:baerbel:whatsapp:group:[email protected]
History: [user message, baerbel's previous responses]
Workspace: /Users/pascal/openclaw-baerbel/
Tools: read only

Diseñe cada agente con una sola responsabilidad clara:

{
"broadcast": {
"DEV_GROUP": ["formatter", "linter", "tester"]
}
}

Bueno: Cada agente tiene un trabajo
Malo: Un agente genérico “dev-helper”

Deje claro qué hace cada agente:

{
"agents": {
"security-scanner": { "name": "Security Scanner" },
"code-formatter": { "name": "Code Formatter" },
"test-generator": { "name": "Test Generator" }
}
}

3. Configurar Diferente Acceso a Herramientas

Sección titulada «3. Configurar Diferente Acceso a Herramientas»

Dé a los agentes solo las herramientas que necesitan:

{
"agents": {
"reviewer": {
"tools": { "allow": ["read", "exec"] } // Read-only
},
"fixer": {
"tools": { "allow": ["read", "write", "edit", "exec"] } // Read-write
}
}
}

Con muchos agentes, considere:

  • Usar "strategy": "parallel" (predeterminado) para velocidad
  • Limitar los grupos de transmisión a 5-10 agentes
  • Usar modelos más rápidos para agentes más simples

Los agentes fallan independientemente. El error de un agente no bloquea a los demás:

Message → [Agent A ✓, Agent B ✗ error, Agent C ✓]
Result: Agent A and C respond, Agent B logs error

Los grupos de transmisión funcionan actualmente con:

  • ✅ WhatsApp (implementado)
  • 🚧 Telegram (planeado)
  • 🚧 Discord (planeado)
  • 🚧 Slack (planeado)

Los grupos de transmisión funcionan junto con el enrutamiento existente:

{
"bindings": [
{
"match": { "channel": "whatsapp", "peer": { "kind": "group", "id": "GROUP_A" } },
"agentId": "alfred"
}
],
"broadcast": {
"GROUP_B": ["agent1", "agent2"]
}
}
  • GROUP_A: Solo alfred responde (enrutamiento normal)
  • GROUP_B: agent1 Y agent2 responden (transmisión)

Precedencia: broadcast tiene prioridad sobre bindings.

Verificar:

  1. Los IDs de agente existen en agents.list
  2. El formato del ID del par es correcto (ej., [email protected])
  3. Los agentes no están en listas de denegación

Depurar:

Ventana de terminal
tail -f ~/.openclaw/logs/gateway.log | grep broadcast

Causa: Es posible que el ID del par esté en bindings pero no en broadcast.

Solución: Agregar a la configuración de difusión o eliminar de los enlaces.

Si es lento con muchos agentes:

  • Reducir el número de agentes por grupo
  • Usar modelos más ligeros (sonnet en lugar de opus)
  • Verificar el tiempo de inicio del entorno limitado
{
"broadcast": {
"strategy": "parallel",
"[email protected]": ["code-formatter", "security-scanner", "test-coverage", "docs-checker"]
},
"agents": {
"list": [
{
"id": "code-formatter",
"workspace": "~/agents/formatter",
"tools": { "allow": ["read", "write"] }
},
{
"id": "security-scanner",
"workspace": "~/agents/security",
"tools": { "allow": ["read", "exec"] }
},
{
"id": "test-coverage",
"workspace": "~/agents/testing",
"tools": { "allow": ["read", "exec"] }
},
{ "id": "docs-checker", "workspace": "~/agents/docs", "tools": { "allow": ["read"] } }
]
}
}

El usuario envía: Fragmento de código
Respuestas:

  • code-formatter: “Sangría corregida y sugerencias de tipo añadidas”
  • security-scanner: “⚠️ Vulnerabilidad de inyección SQL en la línea 12”
  • test-coverage: “La cobertura es del 45%, faltan pruebas para casos de error”
  • docs-checker: “Falta el docstring para la función process_data
{
"broadcast": {
"strategy": "sequential",
"+15555550123": ["detect-language", "translator-en", "translator-de"]
},
"agents": {
"list": [
{ "id": "detect-language", "workspace": "~/agents/lang-detect" },
{ "id": "translator-en", "workspace": "~/agents/translate-en" },
{ "id": "translator-de", "workspace": "~/agents/translate-de" }
]
}
}
interface OpenClawConfig {
broadcast?: {
strategy?: "parallel" | "sequential";
[peerId: string]: string[];
};
}
  • strategy (opcional): Cómo procesar los agentes
    • "parallel" (predeterminado): Todos los agentes procesan simultáneamente
    • "sequential": Los agentes procesan en orden de matriz
  • [peerId]: JID de grupo de WhatsApp, número E.164 u otro ID de par
    • Valor: Matriz de IDs de agentes que deben procesar mensajes
  1. Máx. de agentes: Sin límite estricto, pero 10 o más agentes pueden ser lentos
  2. Contexto compartido: Los agentes no ven las respuestas de los demás (por diseño)
  3. Orden de mensajes: Las respuestas paralelas pueden llegar en cualquier orden
  4. Límites de frecuencia: Todos los agentes cuentan hacia los límites de frecuencia de WhatsApp

Funcionalidades planificadas:

  • Modo de contexto compartido (los agentes ven las respuestas de los demás)
  • Coordinación de agentes (los agentes pueden señalarse entre sí)
  • Selección dinámica de agentes (elegir agentes basándose en el contenido del mensaje)
  • Prioridades de agentes (algunos agentes responden antes que otros)