---
read_when:
    - Изменение поведения группового чата или обработки только упоминаний
    - Ограничение mentionPatterns определёнными групповыми беседами
sidebarTitle: Groups
summary: Поведение групповых чатов на разных платформах (Discord/iMessage/Matrix/Microsoft Teams/QQBot/Signal/Slack/Telegram/WhatsApp/Zalo)
title: Группы
x-i18n:
    generated_at: "2026-07-13T19:30:25Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 24
    provider: openai
    source_hash: b19356e801e0b44c8409b1eef59a32357977104d46a138934757c4e8a00ed44c
    source_path: channels/groups.md
    workflow: 16
---

OpenClaw применяет одинаковые правила для групп во всех каналах, поддерживающих группы, включая Discord, iMessage, Matrix, Microsoft Teams, QQBot, Signal, Slack, Telegram, WhatsApp и Zalo.

Для постоянно активных комнат, которые должны предоставлять фоновый контекст, не создавая лишнего шума, если агент явно не отправляет видимое сообщение, см. [Фоновые события комнаты](/ru/channels/ambient-room-events).

## Введение для начинающих (2 минуты)

OpenClaw «живет» в ваших собственных учетных записях мессенджеров. Отдельного пользователя-бота WhatsApp нет: если **вы** состоите в группе, OpenClaw может видеть эту группу и отвечать в ней.

Поведение по умолчанию:

- Группы ограничены (`groupPolicy: "allowlist"`); отправители в группах заблокированы, пока не будут добавлены в список разрешенных.
- Для ответов требуется упоминание, если вы не отключили проверку упоминаний для группы.
- Итоговый текст ответа автоматически публикуется в комнате (`visibleReplies: "automatic"`).

Иными словами: отправители из списка разрешенных могут активировать OpenClaw, упомянув его.

<Note>
**Кратко**

- **Доступ к личным сообщениям** управляется параметром `*.allowFrom`.
- **Доступ к группам** управляется параметром `*.groupPolicy` и списками разрешенных (`*.groups`, `*.groupAllowFrom`).
- **Активация ответа** управляется проверкой упоминаний (`requireMention`, `/activation`).

</Note>

Краткая схема (что происходит с сообщением группы):

```text
groupPolicy? disabled -> отбросить
groupPolicy? allowlist -> группа разрешена? нет -> отбросить
requireMention? да -> агент упомянут? нет -> сохранить только для контекста
упоминание/ответ/команда/личное сообщение -> запрос пользователя
обычная переписка постоянно активной группы -> запрос пользователя или событие комнаты, если оно настроено
```

## Видимые ответы

Для обычных запросов в группах и каналах OpenClaw по умолчанию использует `messages.groupChat.visibleReplies: "automatic"`: итоговый текст ассистента публикуется в комнате как видимый ответ.

Используйте `messages.groupChat.visibleReplies: "message_tool"`, если в общей комнате агент должен самостоятельно решать, когда отвечать, вызывая `message(action=send)`. Этот режим лучше всего работает с моделями, надежно использующими инструменты (например, GPT-5.6 Sol). Если модель не вызовет инструмент и вернет содержательный итоговый текст, OpenClaw сохранит этот текст приватным, а не опубликует его в комнате.

Используйте `"automatic"` для моделей или сред выполнения, которые недостаточно надежно соблюдают доставку только через инструменты: обычные итоговые текстовые ответы публикуются непосредственно в комнате, а агент по-прежнему может вызывать `message(action=send)` для файлов, изображений и других вложений, которые нельзя отправить вместе с итоговым текстом.

Если активная политика инструментов запрещает инструмент сообщений, OpenClaw вместо незаметного подавления ответа возвращается к автоматическим видимым ответам. `openclaw doctor` предупреждает об этом несоответствии.

Для личных чатов и любых других исходных событий `messages.visibleReplies: "message_tool"` применяет такое же поведение с доставкой только через инструменты глобально; `messages.groupChat.visibleReplies` остается более специфичным переопределением для групповых комнат и каналов. Для прямых запросов внутреннего WebChat по умолчанию используется автоматическая доставка итоговых ответов, чтобы Pi и Codex получали одинаковый контракт видимых ответов.

Режим доставки только через инструменты заменяет прежний подход, при котором модель принудительно отвечала `NO_REPLY` для большинства запросов в режиме наблюдения. В режиме доставки только через инструменты промпт не определяет контракт `NO_REPLY`; отсутствие видимых действий означает лишь то, что инструмент сообщений не был вызван.

Привязки бесед, принадлежащие плагинам, являются исключением. После того как плагин привязывает ветку и принимает входящий запрос, возвращенный плагином ответ становится видимым ответом привязки; для него не требуется `message(action=send)`. Этот ответ является результатом работы среды выполнения плагина, а не приватным итоговым текстом модели.

Индикаторы набора текста по-прежнему отправляются для прямых запросов в группах. Фоновые события постоянно активных комнат, если они включены, остаются строго беззвучными, пока агент не вызовет инструмент сообщений.

По умолчанию в сеансах скрываются подробные сводки об инструментах и ходе выполнения. Используйте `/verbose on` (или `/verbose full`), чтобы отображать их в текущем сеансе во время отладки, и `/verbose off`, чтобы вернуться к режиму только итоговых ответов. Состояние подробного вывода задается отдельно для каждого сеанса и одинаково работает в личных чатах, группах, каналах и темах форумов.

Чтобы отправлять обычную переписку постоянно активной группы без упоминаний как ненавязчивый контекст комнаты, а не как запросы пользователя, используйте [Фоновые события комнаты](/ru/channels/ambient-room-events):

```json5
{
  messages: {
    groupChat: {
      unmentionedInbound: "room_event",
    },
  },
}
```

Значение по умолчанию — `unmentionedInbound: "user_request"`. Сообщения с упоминаниями, команды, запросы на прерывание и личные сообщения остаются запросами пользователя.

Чтобы для запросов в группах и каналах видимые ответы обязательно отправлялись через инструмент сообщений:

```json5
{
  messages: {
    groupChat: {
      visibleReplies: "message_tool",
    },
  },
}
```

Чтобы требовать этого для каждого исходного чата:

```json5
{
  messages: {
    visibleReplies: "message_tool",
  },
}
```

Gateway применяет изменения конфигурации `messages` без перезапуска после сохранения файла. Перезапуск требуется только при отключенной перезагрузке конфигурации (`gateway.reload.mode: "off"`).

Запросы с командами обходят `visibleReplies: "message_tool"` и всегда отвечают видимо: как встроенные команды с косой чертой (в Discord, Telegram и других интерфейсах со встроенной поддержкой команд), так и авторизованные текстовые команды `/...` публикуют ответ в исходном чате. Неавторизованные текстовые запросы `/...` в группах остаются в режиме доставки только через инструмент сообщений; обычные запросы чата следуют настроенному режиму по умолчанию.

## Видимость контекста и списки разрешенных

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

- **Авторизация активации**: кто может активировать агента (`groupPolicy`, `groups`, `groupAllowFrom`, списки разрешенных для конкретных каналов).
- **Видимость контекста**: какой дополнительный контекст передается модели (текст ответа или цитаты, история ветки, метаданные пересылки).

По умолчанию OpenClaw сохраняет контекст в полученном виде: списки разрешенных определяют, кто может инициировать действия, а не какие цитаты или фрагменты истории видит модель. Чтобы также фильтровать дополнительный контекст, задайте `contextVisibility`:

| Режим                | Поведение                                                                         |
| ------------------- | -------------------------------------------------------------------------------- |
| `"all"` (по умолчанию)   | Сохранять дополнительный контекст в полученном виде.                                           |
| `"allowlist"`       | Передавать контекст истории, ветки, цитат и пересылок только от отправителей из списка разрешенных.     |
| `"allowlist_quote"` | `allowlist`, а также сохранять явно процитированное сообщение или сообщение, на которое дан ответ, от любого отправителя. |

Задайте его для отдельного канала (`channels.<channel>.contextVisibility`), учетной записи (`channels.<channel>.accounts.<accountId>.contextVisibility`) или глобально (`channels.defaults.contextVisibility`). Каналы, получающие дополнительный контекст (Discord, Feishu, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp), применяют эту политику при формировании входящего контекста; неизвестные сочетания политик работают в закрытом режиме и исключают контекст.

![Поток сообщений группы](/images/groups-flow.svg)

Если вы хотите...

| Цель                                         | Что настроить                                                |
| -------------------------------------------- | ---------------------------------------------------------- |
| Разрешить все группы, но отвечать только на @упоминания | `groups: { "*": { requireMention: true } }`                |
| Отключить все ответы в группах                    | `groupPolicy: "disabled"`                                  |
| Разрешить только определенные группы                         | `groups: { "<group-id>": { ... } }` (без ключа `"*"`)         |
| Разрешить активацию в группах только вам               | `groupPolicy: "allowlist"`, `groupAllowFrom: ["+1555..."]` |
| Использовать один набор доверенных отправителей во всех каналах | `groupAllowFrom: ["accessGroup:operators"]`                |

О повторно используемых списках разрешенных отправителей см. [Группы доступа](/ru/channels/access-groups).

## Ключи сеансов

- Групповые сеансы используют ключи сеансов `agent:<agentId>:<channel>:group:<id>` (комнаты и каналы используют `agent:<agentId>:<channel>:channel:<id>`).
- Темы форумов Telegram добавляют `:topic:<threadId>` к идентификатору группы, поэтому у каждой темы есть собственный сеанс.
- Личные чаты используют основной сеанс (или отдельные сеансы для каждого отправителя, если настроен `session.dmScope`).
- Heartbeat выполняются в настроенном сеансе Heartbeat (по умолчанию — в основном сеансе агента); групповые сеансы не запускают собственные Heartbeat.

<a id="pattern-personal-dms-public-groups-single-agent"></a>

## Сценарий: личные сообщения + публичные группы (один агент)

Да — этот вариант хорошо работает, если ваш «личный» трафик поступает через **личные сообщения**, а «публичный» — через **группы**.

Причина: в режиме одного агента личные сообщения обычно попадают в ключ **основного** сеанса (`agent:main:main`), а группы всегда используют ключи **неосновных** сеансов (`agent:main:<channel>:group:<id>`). Если включить изоляцию с помощью `mode: "non-main"`, эти групповые сеансы будут выполняться в настроенной изолированной среде, а основной сеанс личных сообщений останется на хосте. Если среда не выбрана, по умолчанию используется Docker.

Так вы получаете один «мозг» агента (общее рабочее пространство и память), но два режима выполнения:

- **Личные сообщения**: полный набор инструментов (хост)
- **Группы**: изолированная среда и ограниченный набор инструментов

<Note>
Если вам нужны полностью отдельные рабочие пространства или персоны («личное» и «публичное» никогда не должны смешиваться), используйте второго агента и привязки. См. [Маршрутизация между несколькими агентами](/ru/concepts/multi-agent).
</Note>

<Tabs>
  <Tab title="Личные сообщения на хосте, группы в изолированной среде">
    ```json5
    {
      agents: {
        defaults: {
          sandbox: {
            mode: "non-main", // группы/каналы являются неосновными -> выполняются в изолированной среде
            scope: "session", // самая строгая изоляция (один контейнер на группу/канал)
            workspaceAccess: "none",
          },
        },
      },
      tools: {
        sandbox: {
          tools: {
            // Если allow не пуст, все остальное блокируется (deny по-прежнему имеет приоритет).
            allow: ["group:messaging", "group:sessions"],
            deny: ["group:runtime", "group:fs", "group:ui", "nodes", "cron", "gateway"],
          },
        },
      },
    }
    ```
  </Tab>
  <Tab title="Группы видят только папку из списка разрешенных">
    Хотите, чтобы «группы видели только папку X», а не «не имели доступа к хосту»? Сохраните `workspaceAccess: "none"` и подключите в изолированную среду только пути из списка разрешенных:

    ```json5
    {
      agents: {
        defaults: {
          sandbox: {
            mode: "non-main",
            scope: "session",
            workspaceAccess: "none",
            docker: {
              binds: [
                // путьНаХосте:путьВКонтейнере:режим
                "/home/user/FriendsShared:/data:ro",
              ],
            },
          },
        },
      },
    }
    ```

  </Tab>
</Tabs>

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

- Ключи конфигурации и значения по умолчанию: [Конфигурация Gateway](/ru/gateway/config-agents#agentsdefaultssandbox)
- Отладка причин блокировки инструмента: [Изолированная среда, политика инструментов и повышенные привилегии](/ru/gateway/sandbox-vs-tool-policy-vs-elevated)
- Подробнее о подключении каталогов: [Изоляция](/ru/gateway/sandboxing#custom-bind-mounts)

## Отображаемые подписи

- Подписи в пользовательском интерфейсе используют `displayName`, когда он доступен, в формате `<channel>:<token>`.
- `#room` зарезервирован для комнат и каналов; групповые чаты используют `g-<slug>` (нижний регистр, пробелы -> `-`, сохранять `#@+._-`). Очень длинные непрозрачные идентификаторы сокращаются до стабильного токена, чтобы полные идентификаторы маршрутов не отображались в пользовательском интерфейсе.

## Политика групп

Управляйте обработкой сообщений групп и комнат отдельно для каждого канала:

```json5
{
  channels: {
    whatsapp: {
      groupPolicy: "disabled", // "open" | "disabled" | "allowlist"
      groupAllowFrom: ["+15551234567"],
    },
    telegram: {
      groupPolicy: "disabled",
      groupAllowFrom: ["123456789"], // числовой идентификатор пользователя Telegram (при настройке @username преобразуется в идентификатор)
    },
    signal: {
      groupPolicy: "disabled",
      groupAllowFrom: ["+15551234567"],
    },
    imessage: {
      groupPolicy: "disabled",
      groupAllowFrom: ["chat_id:123"],
    },
    msteams: {
      groupPolicy: "disabled",
      groupAllowFrom: ["user@org.com"],
    },
    discord: {
      groupPolicy: "allowlist",
      guilds: {
        GUILD_ID: { channels: { help: { enabled: true } } },
      },
    },
    slack: {
      groupPolicy: "allowlist",
      channels: { "#general": { enabled: true } },
    },
    matrix: {
      groupPolicy: "allowlist",
      groupAllowFrom: ["@owner:example.org"],
      groups: {
        "!roomId:example.org": { enabled: true },
        "#alias:example.org": { enabled: true },
      },
    },
  },
}
```

| Политика        | Поведение                                                     |
| ------------- | ------------------------------------------------------------ |
| `"open"`      | Группы обходят списки разрешённых; фильтрация по упоминаниям продолжает действовать.      |
| `"disabled"`  | Полностью блокирует все групповые сообщения.                           |
| `"allowlist"` | Разрешает только группы и комнаты, соответствующие настроенному списку разрешённых. |

<AccordionGroup>
  <Accordion title="Примечания для отдельных каналов">
    - `groupPolicy` не зависит от фильтрации по упоминаниям (для которой требуются @упоминания).
    - WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: используйте `groupAllowFrom` (резервный вариант: явно заданный `allowFrom`).
    - Signal: `groupAllowFrom` может соответствовать идентификатору входящей группы Signal либо номеру телефона/UUID отправителя.
    - Подтверждения сопряжения личных сообщений (записи хранилища `*-allowFrom`) применяются только к доступу через личные сообщения; авторизация отправителей в группах по-прежнему явно определяется групповыми списками разрешённых.
    - Discord: список разрешённых использует `channels.discord.guilds.<id>.channels`.
    - Slack: список разрешённых использует `channels.slack.channels`.
    - Matrix: список разрешённых использует `channels.matrix.groups`. Используйте идентификаторы комнат (`!room:server`) или псевдонимы (`#alias:server`); ключи с именами комнат сопоставляются только при наличии `channels.matrix.dangerouslyAllowNameMatching: true`, а неразрешённые записи игнорируются во время выполнения. Используйте `channels.matrix.groupAllowFrom`, чтобы ограничить отправителей; также поддерживаются отдельные для каждой комнаты списки разрешённых `users`.
    - Групповые личные сообщения управляются отдельно (`channels.discord.dm.*`, `channels.slack.dm.*`: `groupEnabled`, `groupChannels`).
    - Telegram: списки разрешённых отправителей принимают только числовые идентификаторы пользователей (`"123456789"`; префиксы `telegram:`/`tg:` удаляются без учёта регистра). Записи `@username` не сопоставляются во время выполнения и приводят к записи предупреждения в журнал; при настройке `@username` преобразуется в идентификаторы. Отрицательные идентификаторы чатов следует указывать в `channels.telegram.groups`, а не в списках разрешённых отправителей.
    - Значение по умолчанию — `groupPolicy: "allowlist"`; если список разрешённых групп пуст, групповые сообщения блокируются.
    - Безопасность во время выполнения: если блок провайдера полностью отсутствует (нет `channels.<provider>`), групповая политика в закрытом режиме переключается на `allowlist`, а не наследует `channels.defaults.groupPolicy`, и Gateway один раз для каждой учётной записи записывает в журнал сведения о применённом резервном варианте.

  </Accordion>
</AccordionGroup>

Упрощённая модель (порядок проверки групповых сообщений):

<Steps>
  <Step title="groupPolicy">
    `groupPolicy` (open/disabled/allowlist).
  </Step>
  <Step title="Групповые списки разрешённых">
    Групповые списки разрешённых (`*.groups`, `*.groupAllowFrom`, список разрешённых для конкретного канала).
  </Step>
  <Step title="Фильтрация по упоминаниям">
    Фильтрация по упоминаниям (`requireMention`, `/activation`).
  </Step>
</Steps>

## Фильтрация по упоминаниям (по умолчанию)

Для групповых сообщений требуется упоминание, если это не переопределено для конкретной группы. Значения по умолчанию задаются отдельно для каждой подсистемы в `*.groups."*"`.

Ответ на сообщение бота считается неявным упоминанием, если канал предоставляет метаданные ответа; цитирование сообщения бота также может считаться упоминанием в каналах, предоставляющих метаданные цитаты. Текущие встроенные варианты: Discord, Microsoft Teams, QQBot, Slack, Telegram, WhatsApp и личный Zalo.

```json5
{
  channels: {
    whatsapp: {
      groups: {
        "*": { requireMention: true },
        "123@g.us": { requireMention: false },
      },
    },
    telegram: {
      groups: {
        "*": { requireMention: true },
        "123456789": { requireMention: false },
      },
    },
    imessage: {
      groups: {
        "*": { requireMention: true },
        "123": { requireMention: false },
      },
    },
  },
  agents: {
    list: [
      {
        id: "main",
        groupChat: {
          mentionPatterns: ["@openclaw", "openclaw", "\\+15555550123"],
          historyLimit: 50,
        },
      },
    ],
  },
}
```

## Ограничение области настроенных шаблонов упоминаний

Настроенные `mentionPatterns` — это резервные триггеры в виде регулярных выражений. Используйте их, если платформа не предоставляет собственные упоминания бота или если обычный текст, например `openclaw:`, должен считаться упоминанием. Собственные упоминания платформы обрабатываются отдельно: если Discord, Slack, Telegram, Matrix или другой канал может подтвердить, что сообщение явно упоминает бота, такое собственное упоминание по-прежнему срабатывает даже там, где настроенные шаблоны регулярных выражений запрещены.

По умолчанию настроенные шаблоны упоминаний применяются везде, где канал передаёт сведения о провайдере и беседе механизму обнаружения упоминаний. Чтобы широкие шаблоны не активировали агента в каждой группе, ограничьте их область для каждого канала с помощью `channels.<channel>.mentionPatterns`.

Используйте `mode: "deny"`, если шаблоны упоминаний в виде регулярных выражений должны быть по умолчанию отключены для канала, а затем явно включите их для конкретных комнат с помощью `allowIn`:

```json5
{
  messages: {
    groupChat: {
      mentionPatterns: ["\\bopenclaw\\b", "\\bops bot\\b"],
    },
  },
  channels: {
    slack: {
      mentionPatterns: {
        mode: "deny",
        allowIn: ["C0123OPS"],
      },
    },
  },
}
```

Используйте значение по умолчанию `mode: "allow"` (или не указывайте `mode`), если шаблоны упоминаний в виде регулярных выражений должны применяться широко, а затем отключите их в шумных комнатах с помощью `denyIn`:

```json5
{
  messages: {
    groupChat: {
      mentionPatterns: ["\\bopenclaw\\b"],
    },
  },
  channels: {
    telegram: {
      mentionPatterns: {
        denyIn: ["-1001234567890", "-1001234567890:topic:42"],
      },
    },
  },
}
```

Разрешение политики:

| Поле           | Результат                                                                                                                |
| --------------- | --------------------------------------------------------------------------------------------------------------------- |
| `mode: "allow"` | Шаблоны упоминаний в виде регулярных выражений включены, если идентификатор беседы отсутствует в `denyIn`. Это значение по умолчанию.                    |
| `mode: "deny"`  | Шаблоны упоминаний в виде регулярных выражений отключены, если идентификатор беседы отсутствует в `allowIn`.                                       |
| `allowIn`       | Идентификаторы бесед, в которых шаблоны упоминаний в виде регулярных выражений включены в режиме запрета.                                               |
| `denyIn`        | Идентификаторы бесед, в которых шаблоны упоминаний в виде регулярных выражений отключены. Если один идентификатор присутствует в обоих списках, `denyIn` имеет приоритет над `allowIn`. |

Поддерживаемая сейчас политика ограничения области регулярных выражений:

| Канал  | Идентификаторы, используемые в `allowIn` / `denyIn`                             |
| -------- | ------------------------------------------------------------ |
| Discord  | Идентификаторы каналов Discord.                                         |
| Matrix   | Идентификаторы комнат Matrix.                                             |
| Slack    | Идентификаторы каналов Slack.                                           |
| Telegram | Идентификаторы групповых чатов или `chatId:topic:threadId` для тем форума. |
| WhatsApp | Идентификаторы бесед WhatsApp, например `123@g.us`.                |

В конфигурации канала на уровне учётной записи можно задать ту же политику в `channels.<channel>.accounts.<accountId>.mentionPatterns`, если канал поддерживает несколько учётных записей. Для этой учётной записи политика уровня учётной записи имеет приоритет над политикой канала верхнего уровня.

<AccordionGroup>
  <Accordion title="Примечания о фильтрации по упоминаниям">
    - `mentionPatterns` — безопасные шаблоны регулярных выражений без учёта регистра; недопустимые шаблоны и небезопасные формы с вложенными повторениями игнорируются (с предупреждением).
    - Приоритет шаблонов: `agents.list[].groupChat.mentionPatterns` (полезно, когда несколько агентов совместно используют группу) переопределяет `messages.groupChat.mentionPatterns`; если ни один из них не задан, шаблоны формируются на основе имени/эмодзи идентичности агента.
    - Фильтрация по упоминаниям применяется только тогда, когда обнаружение упоминаний возможно (настроены собственные упоминания или `mentionPatterns`).
    - Добавление группы или отправителя в список разрешённых не отключает фильтрацию по упоминаниям; установите для `requireMention` этой группы значение `false`, если срабатывать должны все сообщения.
    - Автоматический контекст запроса группового чата при каждом ходе содержит разрешённую инструкцию о безмолвном ответе; файлы рабочей области не должны дублировать механику `NO_REPLY`.
    - В группах, где разрешены автоматические безмолвные ответы, чистые пустые ходы модели или ходы, содержащие только рассуждение, считаются безмолвными и эквивалентны `NO_REPLY`. Личные чаты никогда не получают инструкцию `NO_REPLY`, а групповые ответы только через инструмент сообщений остаются безмолвными, поскольку не вызывают `message(action=send)`.
    - Для постоянно активного фонового общения в группе по умолчанию используется семантика пользовательского запроса. Установите `messages.groupChat.unmentionedInbound: "room_event"`, чтобы вместо этого передавать его как тихий контекст. Примеры настройки см. в разделе [Фоновые события комнаты](/ru/channels/ambient-room-events).
    - События комнат не сохраняются как фиктивные пользовательские запросы, а закрытый текст ассистента из событий комнаты без использования инструмента сообщений не воспроизводится в истории чата.
    - Значения Discord по умолчанию находятся в `channels.discord.guilds."*"` (их можно переопределить для отдельного сервера/канала).
    - Контекст истории групп единообразно оборачивается во всех каналах. Группы с фильтрацией по упоминаниям сохраняют ожидающие пропущенные сообщения; постоянно активные группы также могут сохранять недавно обработанные сообщения комнаты, если канал это поддерживает. Используйте `messages.groupChat.historyLimit` как глобальное значение по умолчанию и `channels.<channel>.historyLimit` (или `channels.<channel>.accounts.*.historyLimit`) для переопределений. Установите `0`, чтобы отключить эту функцию.

  </Accordion>
</AccordionGroup>

## Ограничения инструментов для групп и каналов (необязательно)

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

- `tools`: разрешает или запрещает инструменты для всей группы (`allow`, `alsoAllow`, `deny`; запрет имеет приоритет).
- `toolsBySender`: переопределения для отдельных отправителей внутри группы. Используйте явные префиксы ключей: `channel:<channelId>:<senderId>`, `id:<senderId>`, `e164:<phone>`, `username:<handle>`, `name:<displayName>` и подстановочный знак `"*"`. Идентификаторы каналов используют канонические идентификаторы каналов OpenClaw; псевдонимы, например `teams`, нормализуются в `msteams`. Устаревшие ключи без префикса по-прежнему принимаются, сопоставляются только как `id:` и приводят к записи предупреждения об устаревании в журнал.

Порядок разрешения (побеждает наиболее конкретное правило):

<Steps>
  <Step title="Инструменты группы по отправителю">
    Совпадение `toolsBySender` группы/канала.
  </Step>
  <Step title="Инструменты группы">
    `tools` группы/канала.
  </Step>
  <Step title="Инструменты по умолчанию по отправителю">
    Совпадение `toolsBySender` по умолчанию (`"*"`).
  </Step>
  <Step title="Инструменты по умолчанию">
    `tools` по умолчанию (`"*"`).
  </Step>
</Steps>

Пример (Telegram):

```json5
{
  channels: {
    telegram: {
      groups: {
        "*": { tools: { deny: ["exec"] } },
        "-1001234567890": {
          tools: { deny: ["exec", "read", "write"] },
          toolsBySender: {
            "id:123456789": { alsoAllow: ["exec"] },
          },
        },
      },
    },
  },
}
```

<Note>
Ограничения инструментов для групп и каналов применяются в дополнение к глобальной политике и политике инструментов агента (запрет по-прежнему имеет приоритет). Некоторые каналы используют разную вложенность для комнат и каналов (например, Discord `guilds.*.channels.*`, Slack `channels.*`, Microsoft Teams `teams.*.channels.*`).
</Note>

## Списки разрешённых групп

Если настроен `channels.whatsapp.groups`, `channels.telegram.groups` или `channels.imessage.groups`, ключи действуют как список разрешённых групп. Используйте `"*"`, чтобы разрешить все группы, сохранив при этом стандартное поведение упоминаний.

<Warning>
Распространённая ошибка: одобрение сопряжения в личных сообщениях — не то же самое, что авторизация группы. Для каналов, поддерживающих сопряжение в личных сообщениях, хранилище сопряжений открывает доступ только к личным сообщениям. Для групповых команд по-прежнему требуется явная авторизация отправителя в группе через списки разрешений в конфигурации, такие как `groupAllowFrom`, или документированный резервный вариант конфигурации для этого канала.
</Warning>

Типовые задачи (скопируйте и вставьте):

<Tabs>
  <Tab title="Отключить все ответы в группах">
    ```json5
    {
      channels: { whatsapp: { groupPolicy: "disabled" } },
    }
    ```
  </Tab>
  <Tab title="Разрешить только определённые группы (WhatsApp)">
    ```json5
    {
      channels: {
        whatsapp: {
          groups: {
            "123@g.us": { requireMention: true },
            "456@g.us": { requireMention: false },
          },
        },
      },
    }
    ```
  </Tab>
  <Tab title="Разрешить все группы, но требовать упоминание">
    ```json5
    {
      channels: {
        whatsapp: {
          groups: { "*": { requireMention: true } },
        },
      },
    }
    ```
  </Tab>
  <Tab title="Срабатывание только для владельца (WhatsApp)">
    ```json5
    {
      channels: {
        whatsapp: {
          groupPolicy: "allowlist",
          groupAllowFrom: ["+15551234567"],
          groups: { "*": { requireMention: true } },
        },
      },
    }
    ```
  </Tab>
</Tabs>

## Активация (только для владельца)

Владельцы групп могут переключать активацию отдельно для каждой группы с помощью отдельного сообщения:

- `/activation mention`
- `/activation always`

`/activation` — основная команда, доступная только владельцу и применимая исключительно в групповых чатах. Владельцем считается отправитель, соответствующий `allowFrom` / `commands.ownerAllowFrom` канала (если список разрешений не настроен, собственный идентификатор учётной записи считается идентификатором владельца). Сохранённый режим переопределяет `requireMention` этой группы в каналах, которые его учитывают (Google Chat, QQBot, Telegram, WhatsApp), а вводная часть системного промпта группы везде отражает активный режим.

## Поля контекста

Во входящих данных группы задаются:

- `ChatType=group`
- `GroupSubject` (если известно)
- `GroupMembers` (если известно)
- `WasMentioned` (результат проверки требования упоминания)
- Темы форумов Telegram также содержат `MessageThreadId` и `IsForum`.

Системный промпт агента содержит вводную информацию о группе на первом ходе нового группового сеанса (а также после изменения `/activation`). Она напоминает модели отвечать как человек, сводить к минимуму пустые строки, соблюдать обычные интервалы в чате и не вводить буквальные последовательности `\n`. В группах, отличных от Telegram, также не рекомендуется использовать таблицы Markdown; рекомендации по форматированному тексту Telegram поступают из промпта канала Telegram. Названия групп и обозначения участников, полученные от канала, отображаются как недоверенные метаданные в блоках кода, а не как встроенные системные инструкции.

## Особенности iMessage

- При маршрутизации или настройке списка разрешений предпочтительно использовать `chat_id:<id>`.
- Получение списка чатов: `imsg chats --limit 20`.
- Ответы в группе всегда отправляются обратно в тот же `chat_id`.

## Системные промпты WhatsApp

Канонические правила системных промптов WhatsApp, включая выбор промптов для групп и личных сообщений, поведение подстановочного знака и семантику переопределения для учётной записи, см. в разделе [WhatsApp](/ru/channels/whatsapp#system-prompts).

## Особенности WhatsApp

Поведение, относящееся только к WhatsApp (добавление истории, подробности обработки упоминаний), см. в разделе [Групповые сообщения](/ru/channels/group-messages).

## Связанные разделы

- [Группы рассылки](/ru/channels/broadcast-groups)
- [Маршрутизация каналов](/ru/channels/channel-routing)
- [Групповые сообщения](/ru/channels/group-messages)
- [Сопряжение](/ru/channels/pairing)
