---
read_when:
    - Зміна поведінки групового чату або керування доступом за згадками
sidebarTitle: Groups
summary: Поведінка групового чату на різних поверхнях (Discord/iMessage/Matrix/Microsoft Teams/Signal/Slack/Telegram/WhatsApp/Zalo)
title: Групи
x-i18n:
    generated_at: "2026-04-28T17:28:10Z"
    model: gpt-5.5
    provider: openai
    source_hash: edda98307223651fe3e6eb545839eb4e9d98d416c7a7c505a2610aa1f9162ee1
    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"`.
Це означає, що агент усе одно обробляє хід і може оновлювати пам’ять/стан сесії, але його звичайна фінальна відповідь не публікується автоматично назад у кімнату. Щоб говорити видимо, агент використовує `message(action=send)`.

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

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

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

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

Нативні слеш-команди (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..."]` |

## Ключі сесій

- Групові сесії використовують ключі сесій `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` окремий від обмеження за згадками (яке вимагає @згадки).
    - WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: використовуйте `groupAllowFrom` (резервний варіант: явний `allowFrom`).
    - Схвалення прив’язування 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>` відсутній), політика груп переходить у fail-closed режим (зазвичай `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`).
    - Контекст підказки групового чату передає вирішену інструкцію тихої відповіді на кожному кроці; файли робочого простору не повинні дублювати механіку `NO_REPLY`.
    - Групи, де дозволені тихі відповіді, трактують чисто порожні або лише міркувальні ходи моделі як тихі, еквівалентні `NO_REPLY`. Прямі чати й надалі трактують порожні відповіді як невдалий хід агента.
    - Типові значення Discord містяться в `channels.discord.guilds."*"` (можна перевизначити для окремої гільдії/каналу).
    - Контекст історії групи обгортається однаково для всіх каналів і є **лише відкладеним** (повідомлення, пропущені через шлюз згадок); використовуйте `messages.groupChat.historyLimit` для глобального типового значення та `channels.<channel>.historyLimit` (або `channels.<channel>.accounts.*.historyLimit`) для перевизначень. Установіть `0`, щоб вимкнути.

  </Accordion>
</AccordionGroup>

## Обмеження інструментів групи/каналу (необов’язково)

Деякі конфігурації каналів підтримують обмеження того, які інструменти доступні **всередині певної групи/кімнати/каналу**.

- `tools`: дозволити/заборонити інструменти для всієї групи.
- `toolsBySender`: перевизначення для окремих відправників у групі. Використовуйте явні префікси ключів: `id:<senderId>`, `e164:<phone>`, `username:<handle>`, `name:<displayName>` і шаблон `"*"`. Застарілі ключі без префікса все ще приймаються та зіставляються лише як `id:`.

Порядок вирішення (найточніше має перевагу):

<Steps>
  <Step title="Group toolsBySender">
    Збіг `toolsBySender` групи/каналу.
  </Step>
  <Step title="Group tools">
    `tools` групи/каналу.
  </Step>
  <Step title="Default toolsBySender">
    Збіг типового (`"*"`) `toolsBySender`.
  </Step>
  <Step title="Default tools">
    Типові (`"*"`) `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="Disable all group replies">
    ```json5
    {
      channels: { whatsapp: { groupPolicy: "disabled" } },
    }
    ```
  </Tab>
  <Tab title="Allow only specific groups (WhatsApp)">
    ```json5
    {
      channels: {
        whatsapp: {
          groups: {
            "123@g.us": { requireMention: true },
            "456@g.us": { requireMention: false },
          },
        },
      },
    }
    ```
  </Tab>
  <Tab title="Allow all groups but require mention">
    ```json5
    {
      channels: {
        whatsapp: {
          groups: { "*": { requireMention: true } },
        },
      },
    }
    ```
  </Tab>
  <Tab title="Owner-only triggers (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`.

Примітки для окремих каналів:

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

Системна підказка агента включає вступ для групи на першому кроці нової групової сесії. Вона нагадує моделі відповідати як людина, уникати 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)
