Configuration

Grupos de difusión

Status: experimental

Descripción general

Los Grupos de difusión permiten que varios agentes procesen y respondan al mismo mensaje simultáneamente. Esto te permite crear equipos de agentes especializados que trabajan juntos en un único grupo o DM de WhatsApp, 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 grupos de WhatsApp, esto significa que las difusiones ocurren cuando OpenClaw normalmente respondería (por ejemplo: al mencionarlo, según la configuración de tu grupo).

La vía de QA en vivo de WhatsApp incluye whatsapp-broadcast-group-fanout, que verifica que un mensaje de grupo con mención pueda producir respuestas visibles distintas de dos agentes configurados.

Casos de uso

1. Equipos de agentes especializados

Implementa varios agentes con responsabilidades atómicas y enfocadas:

Code
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 aporta su perspectiva especializada.

2. Soporte multilingüe
Code
Group: "International Support"Agents:  - Agent_EN (responds in English)  - Agent_DE (responds in German)  - Agent_ES (responds in Spanish)
3. Flujos de trabajo de aseguramiento de calidad
Code
Group: "Customer Support"Agents:  - SupportAgent (provides answer)  - QAAgent (reviews quality, only responds if issues found)
4. Automatización de tareas
Code
Group: "Project Management"Agents:  - TaskTracker (updates task database)  - TimeLogger (logs time spent)  - ReportGenerator (creates summaries)

Configuración

Configuración básica

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 (por ejemplo, 120363403215116621@g.us)
  • DM: número de teléfono E.164 (por ejemplo, +15551234567)
json
{  "broadcast": {    "120363403215116621@g.us": ["alfred", "baerbel", "assistant3"]  }}

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

Estrategia de procesamiento

Controla cómo los agentes procesan los mensajes:

parallel (predeterminado)

Todos los agentes procesan simultáneamente:

json
{  "broadcast": {    "strategy": "parallel",    "120363403215116621@g.us": ["alfred", "baerbel"]  }}

sequential

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

json
{  "broadcast": {    "strategy": "sequential",    "120363403215116621@g.us": ["alfred", "baerbel"]  }}

Ejemplo completo

json
{  "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",    "120363403215116621@g.us": ["code-reviewer", "security-auditor", "docs-generator"],    "120363424282127706@g.us": ["support-en", "support-de"],    "+15555550123": ["assistant", "logger"]  }}

Cómo funciona

Flujo de mensajes

  • Llega un mensaje entrante

    Llega un mensaje de grupo o DM de WhatsApp.

  • Enrutamiento y admisión

    OpenClaw aplica listas de permitidos del canal, reglas de activación de grupos y la propiedad de bindings ACP configurados.

  • Comprobación de difusión

    Si ningún binding ACP configurado es propietario de la ruta, OpenClaw comprueba si el ID de par está en broadcast.

  • Si se aplica la 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.
  • Si no se aplica la difusión

    OpenClaw despacha la ruta ordinaria o la ruta de sesión ACP configurada seleccionada durante el enrutamiento.

  • Aislamiento de sesión

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

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

    Esto permite que cada agente tenga:

    • Personalidades diferentes
    • Acceso a herramientas diferente (por ejemplo, solo lectura frente a lectura-escritura)
    • Modelos diferentes (por ejemplo, opus frente a sonnet)
    • Skills diferentes instaladas

    Ejemplo: sesiones aisladas

    En el grupo 120363403215116621@g.us con agentes ["alfred", "baerbel"]:

    Contexto de Alfred

    Code
    Session: agent:alfred:whatsapp:group:120363403215116621@g.usHistory: [user message, alfred's previous responses]Workspace: /Users/user/openclaw-alfred/Tools: read, write, exec

    Contexto de Bärbel

    Code
    Session: agent:baerbel:whatsapp:group:120363403215116621@g.usHistory: [user message, baerbel's previous responses]Workspace: /Users/user/openclaw-baerbel/Tools: read only

    Mejores prácticas

    1. Mantén los agentes enfocados

    Diseña cada agente con una única responsabilidad clara:

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

    Bueno: Cada agente tiene una tarea. ❌ Malo: Un agente genérico "dev-helper".

    2. Usa nombres descriptivos

    Deja claro qué hace cada agente:

    json
    {  "agents": {    "security-scanner": { "name": "Security Scanner" },    "code-formatter": { "name": "Code Formatter" },    "test-generator": { "name": "Test Generator" }  }}
    3. Configura accesos a herramientas diferentes

    Da a los agentes solo las herramientas que necesitan:

    json
    {  "agents": {    "reviewer": {      "tools": { "allow": ["read", "exec"] }    },    "fixer": {      "tools": { "allow": ["read", "write", "edit", "exec"] }    }  }}

    reviewer es de solo lectura. fixer puede leer y escribir.

    4. Supervisa el rendimiento

    Con muchos agentes, considera:

    • Usar "strategy": "parallel" (predeterminado) para mayor velocidad
    • Limitar los grupos de difusión a 5-10 agentes
    • Usar modelos más rápidos para agentes más simples
    5. Gestiona los fallos con elegancia

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

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

    Compatibilidad

    Proveedores

    Actualmente los grupos de difusión funcionan con:

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

    Enrutamiento

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

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

    Solución de problemas

    Los agentes no responden

    Comprueba:

    1. Los ID de agente existen en agents.list.
    2. El formato del ID de par es correcto (por ejemplo, 120363403215116621@g.us).
    3. Los agentes no están en listas de denegación.

    Depuración:

    bash
    tail -f ~/.openclaw/logs/gateway.log | grep broadcast
    Solo responde un agente

    Causa: El ID de par podría estar en bindings de ruta ordinarios pero no en broadcast, o podría coincidir con un binding ACP configurado exclusivo.

    Solución: Añade los pares vinculados a rutas ordinarias a la configuración de difusión, o elimina/cambia el binding ACP configurado si se desea difusión en abanico.

    Problemas de rendimiento

    Si va lento con muchos agentes:

    • Reduce el número de agentes por grupo.
    • Usa modelos más ligeros (sonnet en lugar de opus).
    • Comprueba el tiempo de inicio del sandbox.

    Ejemplos

    Ejemplo 1: Equipo de revisión de código
    json
    {  "broadcast": {    "strategy": "parallel",    "120363403215116621@g.us": [      "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: "Fixed indentation and added type hints"
    • security-scanner: "⚠️ SQL injection vulnerability in line 12"
    • test-coverage: "Coverage is 45%, missing tests for error cases"
    • docs-checker: "Missing docstring for function process_data"
    Ejemplo 2: Soporte multilingüe
    json
    {  "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" }    ]  }}

    Referencia de API

    Esquema de configuración

    typescript
    interface OpenClawConfig {  broadcast?: {    strategy?: "parallel" | "sequential";    [peerId: string]: string[];  };}

    Campos

    strategy"parallel" | "sequential"default: "parallel"

    Cómo procesar agentes. parallel ejecuta todos los agentes simultáneamente; sequential los ejecuta en el orden del arreglo.

    [peerId]string[]

    JID de grupo de WhatsApp, número E.164 u otro ID de par. El valor es el arreglo de IDs de agente que deben procesar mensajes.

    Limitaciones

    1. Máximo de agentes: No hay un límite estricto, pero 10+ 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 tasa: Todos los agentes cuentan para los límites de tasa de WhatsApp.

    Mejoras futuras

    Funcionalidades planificadas:

    • [ ] Modo de contexto compartido (los agentes ven las respuestas de los demás)
    • [ ] Coordinación de agentes (los agentes pueden enviarse señales entre sí)
    • [ ] Selección dinámica de agentes (elegir agentes según el contenido del mensaje)
    • [ ] Prioridades de agentes (algunos agentes responden antes que otros)

    Relacionado

    Was this useful?
    On this page

    On this page