> ## Documentation Index
> Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Группы

OpenClaw обрабатывает групповые чаты согласованно на разных поверхностях: Discord, iMessage, Matrix, Microsoft Teams, QQBot, Signal, Slack, Telegram, WhatsApp, Zalo.

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

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

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

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

* Группы ограничены (`groupPolicy: "allowlist"`).
* Для ответов требуется упоминание, если вы явно не отключите шлюзование по упоминаниям.
* Видимые ответы в группах/каналах по умолчанию используют инструмент `message`.

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

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

  * **Доступ к личным сообщениям** управляется через `*.allowFrom`.
  * **Доступ к группам** управляется через `*.groupPolicy` + списки разрешенных (`*.groups`, `*.groupAllowFrom`).
  * **Запуск ответа** управляется шлюзованием по упоминаниям (`requireMention`, `/activation`).
</Note>

Быстрый поток (что происходит с групповым сообщением):

```
groupPolicy? disabled -> drop
groupPolicy? allowlist -> group allowed? no -> drop
requireMention? yes -> mentioned? no -> store for context only
mention/reply/command/DM -> user request
always-on group chatter -> user request, or room event when configured
```

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

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

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

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

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

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

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

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

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

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

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

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

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  messages: {
    groupChat: {
      unmentionedInbound: "room_event",
    },
  },
}
```

По умолчанию используется `unmentionedInbound: "user_request"`.

Упомянутые сообщения, команды, запросы прерывания и личные сообщения остаются пользовательскими запросами.

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

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  messages: {
    groupChat: {
      visibleReplies: "message_tool",
    },
  },
}
```

Gateway выполняет горячую перезагрузку конфигурации `messages` после сохранения файла. Перезапуск нужен только
когда наблюдение за файлами или перезагрузка конфигурации отключены в развертывании.

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

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  messages: {
    visibleReplies: "message_tool",
  },
}
```

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

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

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

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

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

<AccordionGroup>
  <Accordion title="Текущее поведение зависит от канала">
    * Некоторые каналы уже применяют фильтрацию по отправителю для дополнительного контекста в конкретных путях (например, начальное заполнение тредов Slack, поиск ответов/тредов Matrix).
    * Другие каналы все еще передают контекст цитат/ответов/пересылок в полученном виде.
  </Accordion>

  <Accordion title="Направление усиления защиты (запланировано)">
    * `contextVisibility: "all"` (по умолчанию) сохраняет текущее поведение в полученном виде.
    * `contextVisibility: "allowlist"` фильтрует дополнительный контекст до отправителей из списка разрешенных.
    * `contextVisibility: "allowlist_quote"` — это `allowlist` плюс одно явное исключение для цитаты/ответа.

    Пока эта модель усиления защиты не реализована согласованно во всех каналах, ожидайте различий между поверхностями.
  </Accordion>
</AccordionGroup>

<img src="https://mintcdn.com/clawdhub/dpADRo8IUoiDztzJ/images/groups-flow.svg?fit=max&auto=format&n=dpADRo8IUoiDztzJ&q=85&s=eeb387df91a967fbbe8bf8f80ae41dd7" alt="Поток групповых сообщений" width="960" height="260" data-path="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>` к идентификатору группы, чтобы у каждой темы был собственный сеанс.
* Прямые чаты используют основной сеанс (или отдельный по отправителю, если настроено).
* Heartbeat пропускаются для групповых сеансов.

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

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

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

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

Это дает вам один «мозг» агента (общая рабочая область + память), но две позиции выполнения:

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

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

<Tabs>
  <Tab title="Личные сообщения на хосте, группы изолированы">
    ```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
    {
      agents: {
        defaults: {
          sandbox: {
            mode: "non-main", // groups/channels are non-main -> sandboxed
            scope: "session", // strongest isolation (one container per group/channel)
            workspaceAccess: "none",
          },
        },
      },
      tools: {
        sandbox: {
          tools: {
            // If allow is non-empty, everything else is blocked (deny still wins).
            allow: ["group:messaging", "group:sessions"],
            deny: ["group:runtime", "group:fs", "group:ui", "nodes", "cron", "gateway"],
          },
        },
      },
    }
    ```
  </Tab>

  <Tab title="Группы видят только папку из списка разрешенных">
    Хотите, чтобы «группы могли видеть только папку X» вместо «нет доступа к хосту»? Оставьте `workspaceAccess: "none"` и смонтируйте в изоляцию только пути из списка разрешенных:

    ```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
    {
      agents: {
        defaults: {
          sandbox: {
            mode: "non-main",
            scope: "session",
            workspaceAccess: "none",
            docker: {
              binds: [
                // hostPath:containerPath:mode
                "/home/user/FriendsShared:/data:ro",
              ],
            },
          },
        },
      },
    }
    ```
  </Tab>
</Tabs>

Связано:

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

## Отображаемые метки

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

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

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

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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: { allow: true } } },
      },
    },
    slack: {
      groupPolicy: "allowlist",
      channels: { "#general": { allow: 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 отправителя.
    * Одобрения привязки DM (записи хранилища `*-allowFrom`) применяются только к доступу DM; авторизация отправителя в группе остаётся явно заданной через групповые списки разрешений.
    * Discord: список разрешений использует `channels.discord.guilds.<id>.channels`.
    * Slack: список разрешений использует `channels.slack.channels`.
    * Matrix: список разрешений использует `channels.matrix.groups`. Предпочитайте идентификаторы комнат или псевдонимы; поиск имени присоединённой комнаты выполняется по мере возможности, а неразрешённые имена игнорируются во время выполнения. Используйте `channels.matrix.groupAllowFrom`, чтобы ограничить отправителей; списки разрешений `users` для отдельных комнат также поддерживаются.
    * Групповые DM управляются отдельно (`channels.discord.dm.*`, `channels.slack.dm.*`).
    * Список разрешений Telegram может совпадать с идентификаторами пользователей (`"123456789"`, `"telegram:123456789"`, `"tg:123456789"`) или именами пользователей (`"@alice"` или `"alice"`); префиксы нечувствительны к регистру.
    * По умолчанию используется `groupPolicy: "allowlist"`; если список разрешённых групп пуст, групповые сообщения блокируются.
    * Безопасность во время выполнения: когда блок провайдера полностью отсутствует (`channels.<provider>` отсутствует), групповая политика откатывается к закрытому при сбое режиму (обычно `allowlist`) вместо наследования `channels.defaults.groupPolicy`.
  </Accordion>
</AccordionGroup>

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

<Steps>
  <Step title="groupPolicy">
    `groupPolicy` (open/disabled/allowlist).
  </Step>

  <Step title="Групповые списки разрешений">
    Групповые списки разрешений (`*.groups`, `*.groupAllowFrom`, список разрешений для конкретного канала).
  </Step>

  <Step title="Фильтр упоминаний">
    Фильтр упоминаний (`requireMention`, `/activation`).
  </Step>
</Steps>

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

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

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

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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` — это резервные триггеры regex. Используйте их, когда
платформа не предоставляет нативное упоминание бота или когда вы хотите, чтобы обычный текст,
например `openclaw:`, считался упоминанием. Нативные упоминания платформы отделены:
когда Discord, Slack, Telegram, Matrix или другой канал может доказать, что сообщение
явно упомянуло бота, это нативное упоминание всё равно срабатывает, даже если
настроенные regex-шаблоны запрещены.

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

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

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  messages: {
    groupChat: {
      mentionPatterns: ["\\bopenclaw\\b", "\\bops bot\\b"],
    },
  },
  channels: {
    slack: {
      mentionPatterns: {
        mode: "deny",
        allowIn: ["C0123OPS"],
      },
    },
  },
}
```

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

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

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

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

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

| Канал    | Идентификаторы, используемые в `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` — безопасные regex-шаблоны без учёта регистра; недействительные шаблоны и небезопасные формы с вложенными повторениями игнорируются.
    * Поверхности, которые предоставляют явные упоминания, всё равно проходят; настроенные regex-шаблоны являются резервным вариантом.
    * `channels.<channel>.mentionPatterns.mode: "deny"` по умолчанию отключает настроенные шаблоны упоминаний для этого канала; включайте выбранные беседы обратно с помощью `allowIn`.
    * `channels.<channel>.mentionPatterns.denyIn` отключает настроенные шаблоны упоминаний для конкретных идентификаторов бесед, при этом нативные @упоминания платформы всё равно проходят.
    * Переопределение для агента: `agents.list[].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`: разрешить/запретить инструменты для всей группы.
* `toolsBySender`: переопределения по отправителю внутри группы. Используйте явные префиксы ключей: `channel:<channelId>:<senderId>`, `id:<senderId>`, `e164:<phone>`, `username:<handle>`, `name:<displayName>` и подстановочный знак `"*"`. Идентификаторы каналов используют канонические идентификаторы каналов OpenClaw; псевдонимы, такие как `teams`, нормализуются в `msteams`. Устаревшие ключи без префикса всё ещё принимаются и сопоставляются только как `id:`.

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

<Steps>
  <Step title="Групповые toolsBySender">
    Совпадение `toolsBySender` для группы/канала.
  </Step>

  <Step title="Групповые tools">
    `tools` группы/канала.
  </Step>

  <Step title="Default toolsBySender">
    Совпадение `toolsBySender` по умолчанию (`"*"`).
  </Step>

  <Step title="Default tools">
    `tools` по умолчанию (`"*"`).
  </Step>
</Steps>

Пример (Telegram):

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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 theme={"theme":{"light":"min-light","dark":"min-dark"}}
    {
      channels: { whatsapp: { groupPolicy: "disabled" } },
    }
    ```
  </Tab>

  <Tab title="Разрешить только определенные группы (WhatsApp)">
    ```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
    {
      channels: {
        whatsapp: {
          groups: {
            "123@g.us": { requireMention: true },
            "456@g.us": { requireMention: false },
          },
        },
      },
    }
    ```
  </Tab>

  <Tab title="Разрешить все группы, но требовать упоминание">
    ```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
    {
      channels: {
        whatsapp: {
          groups: { "*": { requireMention: true } },
        },
      },
    }
    ```
  </Tab>

  <Tab title="Триггеры только для владельца (WhatsApp)">
    ```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
    {
      channels: {
        whatsapp: {
          groupPolicy: "allowlist",
          groupAllowFrom: ["+15551234567"],
          groups: { "*": { requireMention: true } },
        },
      },
    }
    ```
  </Tab>
</Tabs>

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

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

* `/activation mention`
* `/activation always`

Владелец определяется по `channels.whatsapp.allowFrom` (или по собственному номеру бота в формате E.164, если значение не задано). Отправьте команду отдельным сообщением. Другие интерфейсы сейчас игнорируют `/activation`.

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

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

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

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

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

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

## Системные подсказки WhatsApp

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

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

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

## Связано

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