---
read_when:
    - Зміна поведінки групового чату або обмеження за згадками
sidebarTitle: Groups
summary: Поведінка групового чату на різних поверхнях (Discord/iMessage/Matrix/Microsoft Teams/Signal/Slack/Telegram/WhatsApp/Zalo)
title: Групи
x-i18n:
    generated_at: "2026-05-11T20:20:21Z"
    model: gpt-5.5
    provider: openai
    source_hash: 19297ef9c3043b00c4785567a7c02266bd08fe5228c8275c3233e87e917dd09f
    source_path: channels/groups.md
    workflow: 16
---

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

## Вступ для початківців (2 хвилини)

OpenClaw "живе" у ваших власних облікових записах месенджерів. Окремого користувача-бота WhatsApp немає. Якщо **ви** є в групі, OpenClaw може бачити цю групу й відповідати в ній.

Типова поведінка:

- Групи обмежені (`groupPolicy: "allowlist"`).
- Відповіді потребують згадки, якщо ви явно не вимкнули перевірку згадки.
- Звичайні фінальні відповіді в групах/каналах за замовчуванням приватні. Видимий вивід у кімнату використовує інструмент `message`.

Інакше кажучи: дозволені відправники можуть запускати OpenClaw, згадавши його.

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

- **Доступ до DM** керується `*.allowFrom`.
- **Доступ до груп** керується `*.groupPolicy` + списками дозволів (`*.groups`, `*.groupAllowFrom`).
- **Запуск відповіді** керується перевіркою згадки (`requireMention`, `/activation`).

</Note>

Швидкий потік (що відбувається з груповим повідомленням):

```
groupPolicy? disabled -> drop
groupPolicy? allowlist -> group allowed? no -> drop
requireMention? yes -> mentioned? no -> store for context only
otherwise -> reply
```

## Видимі відповіді

Для групових/канальних кімнат OpenClaw за замовчуванням використовує `messages.groupChat.visibleReplies: "message_tool"`.
`openclaw doctor --fix` записує це типове значення в конфігурації налаштованих каналів, де його пропущено.
Це означає, що агент усе ще обробляє хід і може оновлювати стан пам’яті/сесії, але його звичайна фінальна відповідь не публікується автоматично назад у кімнату. Щоб говорити видимо, агент використовує `message(action=send)`.

Це типове значення залежить від моделі/середовища виконання, які надійно викликають інструменти. Якщо журнали показують текст асистента, але `didSendViaMessagingTool: false`, модель відповіла приватно замість того, щоб викликати інструмент повідомлень. Це не збій надсилання Discord/Slack/Telegram. Використовуйте модель із надійними викликами інструментів для групових/канальних сесій або встановіть `messages.groupChat.visibleReplies: "automatic"`, щоб відновити застарілі видимі фінальні відповіді.

Якщо інструмент повідомлень недоступний за активною політикою інструментів, OpenClaw повертається до автоматичних видимих відповідей замість того, щоб мовчки пригнічувати відповідь.
`openclaw doctor` попереджає про цю невідповідність.

Для прямих чатів і будь-якого іншого джерела ходу використовуйте `messages.visibleReplies: "message_tool"`, щоб застосувати таку саму поведінку видимих відповідей лише через інструмент глобально. Середовища також можуть вибрати це як своє типове значення, якщо воно не задане; середовище Codex робить це для прямих чатів у режимі Codex. `messages.groupChat.visibleReplies` залишається конкретнішим перевизначенням для групових/канальних кімнат.

Це замінює старий шаблон примусового налаштування моделі відповідати `NO_REPLY` для більшості ходів у режимі спостереження. У режимі лише через інструмент відсутність видимої дії просто означає, що інструмент повідомлень не викликається.

Індикатори набору тексту все ще надсилаються, поки агент працює в режимі лише через інструмент. Типовий режим набору тексту для груп підвищується з "message" до "instant" для цих ходів, бо звичайного тексту повідомлення асистента може взагалі не бути до того, як агент вирішить, чи викликати інструмент повідомлень. Явна конфігурація режиму набору тексту все одно має пріоритет.

Щоб відновити застарілі автоматичні фінальні відповіді для групових/канальних кімнат:

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

Gateway гаряче перезавантажує конфігурацію `messages` після збереження файла. Перезапускайте лише тоді, коли спостереження за файлами або перезавантаження конфігурації вимкнене в розгортанні.

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

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

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

## Видимість контексту та списки дозволів

У безпеці груп беруть участь два різні елементи керування:

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

За замовчуванням OpenClaw надає пріоритет звичайній поведінці чату й зберігає контекст переважно таким, яким його отримано. Це означає, що списки дозволів передусім визначають, хто може запускати дії, а не є універсальною межею редагування для кожного процитованого чи історичного фрагмента.

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

  </Accordion>
  <Accordion title="Напрям посилення захисту (заплановано)">
    - `contextVisibility: "all"` (типово) зберігає поточну поведінку «як отримано».
    - `contextVisibility: "allowlist"` фільтрує додатковий контекст до дозволених відправників.
    - `contextVisibility: "allowlist_quote"` — це `allowlist` плюс один явний виняток для цитати/відповіді.

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

  </Accordion>
</AccordionGroup>

![Потік групових повідомлень](/images/groups-flow.svg)

Якщо ви хочете...

| Мета                                         | Що встановити                                             |
| -------------------------------------------- | ---------------------------------------------------------- |
| Дозволити всі групи, але відповідати лише на @згадки | `groups: { "*": { requireMention: true } }`                |
| Вимкнути всі групові відповіді               | `groupPolicy: "disabled"`                                  |
| Лише конкретні групи                         | `groups: { "<group-id>": { ... } }` (без ключа `"*"`)      |
| Лише ви можете запускати в групах            | `groupPolicy: "allowlist"`, `groupAllowFrom: ["+1555..."]` |
| Повторно використовувати один набір довірених відправників у різних каналах | `groupAllowFrom: ["accessGroup:operators"]`                |

Про багаторазові списки дозволених відправників дивіться [Групи доступу](/uk/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"></a>

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

Так — це добре працює, якщо ваш "особистий" трафік — це **DM**, а ваш "публічний" трафік — це **групи**.

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

Це дає вам один "мозок" агента (спільний робочий простір + пам’ять), але два режими виконання:

- **DM**: повні інструменти (хост)
- **Групи**: пісочниця + обмежені інструменти

<Note>
Якщо вам потрібні справді окремі робочі простори/персони ("особисте" і "публічне" ніколи не мають змішуватися), використовуйте другого агента + прив’язки. Дивіться [Маршрутизація кількох агентів](/uk/concepts/multi-agent).
</Note>

<Tabs>
  <Tab title="DM на хості, групи в пісочниці">
    ```json5
    {
      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
    {
      agents: {
        defaults: {
          sandbox: {
            mode: "non-main",
            scope: "session",
            workspaceAccess: "none",
            docker: {
              binds: [
                // hostPath:containerPath:mode
                "/home/user/FriendsShared:/data:ro",
              ],
            },
          },
        },
      },
    }
    ```

  </Tab>
</Tabs>

Пов’язане:

- Ключі конфігурації та типові значення: [Конфігурація Gateway](/uk/gateway/config-agents#agentsdefaultssandbox)
- Налагодження, чому інструмент заблоковано: [Пісочниця проти політики інструментів проти підвищених прав](/uk/gateway/sandbox-vs-tool-policy-vs-elevated)
- Деталі монтування прив’язок: [Ізоляція в пісочниці](/uk/gateway/sandboxing#custom-bind-mounts)

## Відображувані мітки

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

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

Керуйте тим, як обробляються групові повідомлення/повідомлення кімнат для кожного каналу:

```json5
{
  channels: {
    whatsapp: {
      groupPolicy: "disabled", // "open" | "disabled" | "allowlist"
      groupAllowFrom: ["+15551234567"],
    },
    telegram: {
      groupPolicy: "disabled",
      groupAllowFrom: ["123456789"], // numeric Telegram user id (wizard can resolve @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` відокремлено від фільтрації за згадками (яка потребує @mentions).
    - 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
{
  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,
        },
      },
    ],
  },
}
```

<AccordionGroup>
  <Accordion title="Примітки щодо фільтрації за згадками">
    - `mentionPatterns` — це безпечні regex-шаблони без чутливості до регістру; недійсні шаблони та небезпечні форми вкладених повторень ігноруються.
    - Поверхні, які надають явні згадки, усе одно проходять; шаблони є резервним варіантом.
    - Перевизначення для агента: `agents.list[].groupChat.mentionPatterns` (корисно, коли кілька агентів спільно використовують групу).
    - Фільтрація за згадками застосовується лише тоді, коли можливе виявлення згадок (налаштовані нативні згадки або `mentionPatterns`).
    - Додавання групи чи відправника до списку дозволених не вимикає фільтрацію за згадками; встановіть для цієї групи `requireMention` у `false`, коли всі повідомлення мають запускати обробку.
    - Контекст підказки групового чату передає розв’язану інструкцію тихої відповіді в кожному ході; файли робочого простору не повинні дублювати механіку `NO_REPLY`.
    - Групи, у яких дозволені тихі відповіді, трактують чисті порожні або лише reasoning-ходи моделі як тихі, еквівалентні `NO_REPLY`. Прямі чати роблять те саме лише тоді, коли прямі тихі відповіді явно дозволені; інакше порожні відповіді залишаються невдалими ходами агента.
    - Типові значення 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="Group toolsBySender">
    Збіг `toolsBySender` групи/каналу.
  </Step>
  <Step title="Інструменти групи">
    `tools` групи/каналу.
  </Step>
  <Step title="Default toolsBySender">
    Збіг типового (`"*"`) `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>
Поширене непорозуміння: схвалення прив’язування DM — це не те саме, що авторизація групи. Для каналів, які підтримують прив’язування DM, сховище прив’язування розблоковує лише DM. Групові команди все ще потребують явної авторизації відправника групи зі списків дозволених у конфігурації, таких як `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`

Власник визначається за `channels.whatsapp.allowFrom` (або за власним E.164 бота, якщо не задано). Надсилайте команду як окреме повідомлення. Інші поверхні наразі ігнорують `/activation`.

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

Вхідні групові корисні навантаження задають:

- `ChatType=group`
- `GroupSubject` (якщо відомо)
- `GroupMembers` (якщо відомо)
- `WasMentioned` (результат фільтрації за згадками)
- Теми форуму Telegram також включають `MessageThreadId` і `IsForum`.

Системна підказка агента включає вступ про групу на першому ході нової групової сесії. Вона нагадує моделі відповідати як людина, уникати Markdown-таблиць, мінімізувати порожні рядки й дотримуватися звичайних інтервалів чату, а також не вводити буквальні послідовності `\n`. Назви груп і мітки учасників, отримані з каналів, відображаються як огороджені недовірені метадані, а не як вбудовані системні інструкції.

## Особливості iMessage

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

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

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

## Особливості WhatsApp

Див. [Групові повідомлення](/uk/channels/group-messages) для поведінки лише WhatsApp (вставлення історії, подробиці обробки згадок).

## Пов’язане

- [Групи трансляції](/uk/channels/broadcast-groups)
- [Маршрутизація каналів](/uk/channels/channel-routing)
- [Групові повідомлення](/uk/channels/group-messages)
- [Прив’язування](/uk/channels/pairing)
