---
read_when:
    - Настройка групп рассылки
    - Отладка ответов нескольких агентов в WhatsApp
sidebarTitle: Broadcast groups
status: experimental
summary: Отправка сообщения WhatsApp нескольким агентам одновременно
title: Группы рассылки
x-i18n:
    generated_at: "2026-07-13T17:52:36Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 24
    provider: openai
    source_hash: 2771c15b31592f11293385498b9c89decf84747a9172caafb994a5dca4bbdc06
    source_path: channels/broadcast-groups.md
    workflow: 16
---

<Note>
**Статус:** Экспериментальная функция. Добавлена в версии 2026.1.9. Только для WhatsApp (веб-канал).
</Note>

## Обзор

Группы рассылки запускают **несколько агентов** для одного входящего сообщения. Каждый агент обрабатывает сообщение в собственном изолированном сеансе и публикует свой ответ, поэтому один номер 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"]
  }
}
```

## Принцип работы

### Поток сообщений

<Steps>
  <Step title="Поступает входящее сообщение">
    Поступает сообщение из группы WhatsApp или личной переписки.
  </Step>
  <Step title="Маршрутизация и допуск">
    OpenClaw применяет списки разрешённых каналов, правила активации групп и настроенное владение привязкой ACP.
  </Step>
  <Step title="Проверка рассылки">
    Если маршрут не принадлежит настроенной привязке ACP, OpenClaw проверяет наличие идентификатора собеседника в `broadcast`.
  </Step>
  <Step title="Если применяется рассылка">
    - Все указанные агенты обрабатывают сообщение.
    - У каждого агента есть собственный ключ сеанса и изолированный контекст.
    - Агенты обрабатывают сообщение параллельно (по умолчанию) или последовательно.
    - Аудиовложения расшифровываются один раз перед разветвлением, поэтому агенты используют общую расшифровку вместо отдельных вызовов STT.

  </Step>
  <Step title="Если рассылка не применяется">
    OpenClaw направляет сообщение по обычному маршруту или по настроенному маршруту сеанса ACP, выбранному при маршрутизации.
  </Step>
</Steps>

<Note>
Группы рассылки не обходят списки разрешённых каналов или правила активации групп (упоминания, команды и т. д.). Они изменяют только то, _какие агенты запускаются_, когда сообщение допущено к обработке.
</Note>

### Изоляция сеансов

Для каждого агента в группе рассылки полностью разделены:

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

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

Благодаря этому агенты могут иметь разные характеры, модели, навыки и права доступа к инструментам (например, только чтение или чтение и запись).

### Пример: изолированные сеансы

В группе `120363403215116621@g.us` с агентами `["alfred", "baerbel"]`:

<Tabs>
  <Tab title="Контекст Alfred">
    ```text
    Сеанс: agent:alfred:whatsapp:group:120363403215116621@g.us
    История: [сообщение пользователя, предыдущие ответы alfred]
    Рабочее пространство: ~/openclaw-alfred/
    Инструменты: чтение, запись, выполнение
    ```
  </Tab>
  <Tab title="Контекст Baerbel">
    ```text
    Сеанс: agent:baerbel:whatsapp:group:120363403215116621@g.us
    История: [сообщение пользователя, предыдущие ответы baerbel]
    Рабочее пространство: ~/openclaw-baerbel/
    Инструменты: только чтение
    ```
  </Tab>
</Tabs>

## Сценарии использования

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

## Рекомендации

<AccordionGroup>
  <Accordion title="1. Сосредоточьте каждого агента на одной задаче">
    Назначайте каждому агенту одну чёткую обязанность (`formatter`, `linter`, `tester`) вместо одного универсального агента «помощник разработчика».
  </Accordion>
  <Accordion title="2. Используйте понятные идентификаторы и имена">
    ```json
    {
      "agents": {
        "list": [
          { "id": "security-scanner", "name": "Security Scanner" },
          { "id": "code-formatter", "name": "Code Formatter" },
          { "id": "test-generator", "name": "Test Generator" }
        ]
      }
    }
    ```
  </Accordion>
  <Accordion title="3. Настройте разные права доступа к инструментам">
    ```json
    {
      "agents": {
        "list": [
          { "id": "reviewer", "tools": { "allow": ["read", "exec"] } },
          { "id": "fixer", "tools": { "allow": ["read", "write", "edit", "exec"] } }
        ]
      }
    }
    ```

    `reviewer` имеет доступ только для чтения. `fixer` может читать и записывать.

  </Accordion>
  <Accordion title="4. Отслеживайте производительность">
    При большом количестве агентов предпочитайте `"strategy": "parallel"` (по умолчанию), ограничивайте группы рассылки несколькими агентами и используйте более быстрые модели для простых агентов.
  </Accordion>
  <Accordion title="5. Сбои остаются изолированными">
    Сбои агентов происходят независимо. Ошибка одного агента записывается в журнал (`Broadcast agent <id> failed: ...`) и не блокирует остальных.
  </Accordion>
</AccordionGroup>

## Совместимость

### Провайдеры

В настоящее время группы рассылки реализованы только для 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 (рассылка).

<Note>
**Приоритет:** `broadcast` имеет приоритет над обычными привязками маршрутов. Настроенные привязки ACP (`bindings[].type="acp"`) являются эксклюзивными: при совпадении OpenClaw направляет сообщение в настроенный сеанс ACP вместо разветвлённой рассылки.
</Note>

## Устранение неполадок

<AccordionGroup>
  <Accordion title="Агенты не отвечают">
    **Проверьте:**

    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>)`.

  </Accordion>
  <Accordion title="Отвечает только один агент">
    **Причина:** идентификатор собеседника может находиться в обычных привязках маршрутов, но отсутствовать в `broadcast`, либо он может соответствовать эксклюзивной настроенной привязке ACP.

    **Исправление:** добавьте собеседников с обычной привязкой маршрута в конфигурацию рассылки или удалите либо измените настроенную привязку ACP, если требуется разветвлённая рассылка.

  </Accordion>
  <Accordion title="Проблемы с производительностью">
    Если при большом количестве агентов работа замедляется: сократите число агентов в группе, используйте более лёгкие модели и проверьте время запуска песочницы.
  </Accordion>
</AccordionGroup>

## Примеры

<AccordionGroup>
  <Accordion title="Пример 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"] } }
        ]
      }
    }
    ```

    Один фрагмент кода в группе приводит к четырём ответам: исправления форматирования, обнаруженная проблема безопасности, пробел в покрытии тестами и небольшое замечание к документации.

  </Accordion>
  <Accordion title="Пример 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" }
        ]
      }
    }
    ```
  </Accordion>
</AccordionGroup>

## Справочник API

### Схема конфигурации

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

### Поля

<ParamField path="strategy" type='"parallel" | "sequential"' default='"parallel"'>
  Способ обработки агентами. `parallel` запускает всех агентов одновременно; `sequential` запускает их в порядке массива.
</ParamField>
<ParamField path="[peerId]" type="string[]">
  JID группы WhatsApp или номер телефона в формате E.164. Значение — массив идентификаторов агентов, каждый из которых должен обрабатывать сообщения от этого собеседника.
</ParamField>

## Ограничения

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

## Связанные материалы

- [Маршрутизация каналов](/ru/channels/channel-routing)
- [Группы](/ru/channels/groups)
- [Инструменты песочницы для нескольких агентов](/ru/tools/multi-agent-sandbox-tools)
- [Сопряжение](/ru/channels/pairing)
- [Управление сеансами](/ru/concepts/session)
