Configuration

Групи розсилки

Status: experimental

Огляд

Групи широкомовного розсилання запускають кількох агентів для одного вхідного повідомлення. Кожен агент обробляє повідомлення у власному ізольованому сеансі та публікує власну відповідь, тому один номер WhatsApp може обслуговувати команду спеціалізованих агентів в одному груповому чаті або приватному повідомленні.

Групи широкомовного розсилання перевіряються після списків дозволених каналів і правил активації груп. У групах WhatsApp широкомовне розсилання відбувається, коли OpenClaw зазвичай мав би відповісти (наприклад, у разі згадки — залежно від налаштувань групи). Вони змінюють лише те, які агенти запускаються, але не те, чи підлягає повідомлення обробці.

Активний контур контролю якості WhatsApp містить whatsapp-broadcast-group-fanout, який перевіряє, що одне групове повідомлення зі згадкою може спричинити окремі видимі відповіді від двох налаштованих агентів.

Конфігурація

Базове налаштування

Додайте розділ верхнього рівня broadcast (поруч із bindings). Ключами є ідентифікатори співрозмовників WhatsApp, а значеннями — масиви ідентифікаторів агентів:

  • групові чати: груповий JID (наприклад, 120363403215116621@g.us)
  • приватні повідомлення: номер телефону відправника у форматі E.164 (наприклад, +15551234567)
json
{  "broadcast": {    "120363403215116621@g.us": ["alfred", "baerbel", "assistant3"]  }}

Результат: коли OpenClaw мав би відповісти в цьому чаті, він запускає всіх трьох агентів.

Кожен зазначений ідентифікатор агента має існувати в agents.list: перевірка конфігурації повідомляє про невідомі ідентифікатори, а середовище виконання пропускає їх із попередженням Broadcast agent <id> not found in agents.list; skipping.

Стратегія обробки

broadcast.strategy визначає, як агенти обробляють повідомлення:

Стратегія Поведінка
parallel (типово) Усі агенти обробляють одночасно; відповіді надходять у довільному порядку.
sequential Агенти обробляють у порядку масиву; кожен чекає на завершення попереднього.
json
{  "broadcast": {    "strategy": "sequential",    "120363403215116621@g.us": ["alfred", "baerbel"]  }}

Повний приклад

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"]  }}

Як це працює

Потік повідомлення

  • Надходить вхідне повідомлення

    Надходить повідомлення з групи WhatsApp або приватне повідомлення.

  • Маршрутизація та допуск

    OpenClaw застосовує списки дозволених каналів, правила активації груп і налаштоване володіння прив’язкою ACP.

  • Перевірка широкомовного розсилання

    Якщо маршрутом не володіє жодна налаштована прив’язка ACP, OpenClaw перевіряє, чи є ідентифікатор співрозмовника в broadcast.

  • Якщо застосовується широкомовне розсилання

    • Усі зазначені агенти обробляють повідомлення.
    • Кожен агент має власний ключ сеансу та ізольований контекст.
    • Агенти обробляють повідомлення паралельно (типово) або послідовно.
    • Аудіовкладення транскрибуються один раз перед розподіленням, тому агенти використовують спільну транскрипцію замість окремих викликів STT.
  • Якщо широкомовне розсилання не застосовується

    OpenClaw спрямовує повідомлення за звичайним маршрутом або за налаштованим маршрутом сеансу ACP, вибраним під час маршрутизації.

  • Ізоляція сеансів

    Кожен агент у групі широкомовного розсилання має повністю окремі:

    • Ключі сеансів (agent:alfred:whatsapp:group:120363... і agent:baerbel:whatsapp:group:120363...)
    • Історію розмови (агент не бачить відповідей інших агентів)
    • Робочий простір (окремі пісочниці, якщо налаштовано)
    • Доступ до інструментів (різні списки дозволів і заборон)
    • Пам’ять/контекст (окремі IDENTITY.md, SOUL.md тощо)

    Є один навмисний виняток: буфер контексту групи (останні групові повідомлення, що використовуються для контексту) є спільним для кожного співрозмовника, тому всі агенти широкомовного розсилання бачать однаковий контекст під час запуску. Після завершення розподілення він очищається один раз.

    Це дає змогу кожному агенту мати окремі особистості, моделі, Skills і доступ до інструментів (наприклад, лише для читання або для читання й запису).

    Приклад: ізольовані сеанси

    У групі 120363403215116621@g.us з агентами ["alfred", "baerbel"]:

    Контекст Alfred

    text
    Сеанс: agent:alfred:whatsapp:group:120363403215116621@g.usІсторія: [повідомлення користувача, попередні відповіді alfred]Робочий простір: ~/openclaw-alfred/Інструменти: читання, запис, виконання

    Контекст Baerbel

    text
    Сеанс: agent:baerbel:whatsapp:group:120363403215116621@g.usІсторія: [повідомлення користувача, попередні відповіді baerbel]Робочий простір: ~/openclaw-baerbel/Інструменти: лише читання

    Варіанти використання

    • Команди спеціалізованих агентів: група розробників, у якій code-reviewer, security-auditor, test-generator і docs-checker відповідають на одне повідомлення кожен зі своєї точки зору.
    • Багатомовна підтримка: один чат підтримки з support-en, support-de і support-es, які відповідають відповідними мовами.
    • Контроль якості: support-agent відповідає, а qa-agent перевіряє відповідь і реагує лише тоді, коли знаходить проблеми.
    • Автоматизація завдань: task-tracker, time-logger і report-generator обробляють одне й те саме оновлення стану.

    Рекомендації

    1. Зосередьте агентів на конкретних завданнях

    Надайте кожному агенту одну чітку відповідальність (formatter, linter, tester) замість одного універсального агента dev-helper.

    2. Використовуйте описові ідентифікатори та назви
    json
    {  "agents": {    "list": [      { "id": "security-scanner", "name": "Security Scanner" },      { "id": "code-formatter", "name": "Code Formatter" },      { "id": "test-generator", "name": "Test Generator" }    ]  }}
    3. Налаштуйте різний доступ до інструментів
    json
    {  "agents": {    "list": [      { "id": "reviewer", "tools": { "allow": ["read", "exec"] } },      { "id": "fixer", "tools": { "allow": ["read", "write", "edit", "exec"] } }    ]  }}

    reviewer має доступ лише для читання. fixer може читати й записувати.

    4. Відстежуйте продуктивність

    За великої кількості агентів віддавайте перевагу "strategy": "parallel" (типово), обмежуйте групи широкомовного розсилання кількома агентами та використовуйте швидші моделі для простіших агентів.

    5. Збої залишаються ізольованими

    Агенти зазнають збоїв незалежно один від одного. Помилка одного агента реєструється в журналі (Broadcast agent <id> failed: ...) і не блокує інших.

    Сумісність

    Постачальники

    Наразі групи широкомовного розсилання реалізовано лише для WhatsApp (вебканалу). Інші канали ігнорують конфігурацію broadcast.

    Маршрутизація

    Групи широкомовного розсилання працюють разом із наявною маршрутизацією:

    json
    {  "bindings": [    {      "match": { "channel": "whatsapp", "peer": { "kind": "group", "id": "GROUP_A" } },      "agentId": "alfred"    }  ],  "broadcast": {    "GROUP_B": ["agent1", "agent2"]  }}
    • GROUP_A: відповідає лише alfred (звичайна маршрутизація).
    • GROUP_B: відповідають agent1 ТА agent2 (широкомовне розсилання).

    Усунення несправностей

    Агенти не відповідають

    Перевірте:

    1. Ідентифікатори агентів існують у agents.list (перевірка конфігурації відхиляє невідомі ідентифікатори).
    2. Формат ідентифікатора співрозмовника правильний (груповий JID на кшталт 120363403215116621@g.us або номер у форматі E.164 на кшталт +15551234567 для приватних повідомлень).
    3. Повідомлення пройшло звичайні перевірки допуску (правила згадок і активації досі застосовуються).

    Налагодження:

    bash
    openclaw logs --follow | grep -i broadcast

    Успішне розподілення додає до журналу запис Broadcasting message to <n> agents (<strategy>).

    Відповідає лише один агент

    Причина: ідентифікатор співрозмовника може бути у звичайних прив’язках маршрутів, але не в broadcast, або він може відповідати винятковій налаштованій прив’язці ACP.

    Виправлення: додайте співрозмовників, прив’язаних до звичайних маршрутів, у конфігурацію широкомовного розсилання або вилучіть чи змініть налаштовану прив’язку ACP, якщо потрібне широкомовне розподілення.

    Проблеми з продуктивністю

    Якщо робота сповільнюється за великої кількості агентів, зменште кількість агентів у групі, використовуйте легші моделі та перевірте час запуску пісочниці.

    Приклади

    Приклад 1: Команда перевірки коду
    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"] } }    ]  }}

    Один фрагмент коду в групі спричиняє чотири відповіді: виправлення форматування, виявлену проблему безпеки, прогалину в покритті тестами та зауваження до документації.

    Приклад 2: Багатомовний конвеєр
    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" }    ]  }}

    Довідник API

    Схема конфігурації

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

    Поля

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

    Спосіб обробки агентами. parallel запускає всіх агентів одночасно; sequential запускає їх у порядку масиву.

    [peerId]string[]

    Груповий JID WhatsApp або номер телефону у форматі E.164. Значенням є масив ідентифікаторів агентів, кожен із яких має обробляти повідомлення від цього співрозмовника.

    Обмеження

    1. Максимальна кількість агентів: жорсткого обмеження немає, але велика кількість агентів (10 і більше) може сповільнювати роботу.
    2. Спільний контекст: агенти не бачать відповідей один одного (це передбачено архітектурою).
    3. Порядок повідомлень: паралельні відповіді можуть надходити в довільному порядку.
    4. Обмеження частоти: усі відповіді надходять з одного облікового запису WhatsApp, тому відповідь кожного агента враховується в межах тих самих обмежень частоти WhatsApp.

    Пов’язані матеріали

    Was this useful?
    On this page

    On this page