---
read_when:
    - Змінення поведінки групового чату або обмеження за згадуваннями
sidebarTitle: Groups
summary: Поведінка групового чату на різних поверхнях (Discord/iMessage/Matrix/Microsoft Teams/Signal/Slack/Telegram/WhatsApp/Zalo)
title: Групи
x-i18n:
    generated_at: "2026-05-03T09:36:58Z"
    model: gpt-5.5
    provider: openai
    source_hash: 6fd4fcaa8335f1dc4b4b1a719d6654ab0c10530f74284269ed6205dd5f87c116
    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)`.

Якщо інструмент повідомлень недоступний у межах активної політики інструментів, 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",
  },
}
```

Нативні slash-команди (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>` до ідентифікатора групи, щоб кожна тема мала власну сесію.
- Прямі чати використовують основну сесію (або окрему для кожного відправника, якщо налаштовано).
- Heartbeats пропускаються для групових сесій.

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

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

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

Чому: у режимі одного агента DM зазвичай потрапляють в **основний** ключ сесії (`agent:main:main`), тоді як групи завжди використовують **неосновні** ключі сесій (`agent:main:<channel>:group:<id>`). Якщо ввімкнути sandboxing з `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)
- Деталі bind mounts: [Sandboxing](/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`).
    - Signal: `groupAllowFrom` може збігатися або з вхідним ідентифікатором групи Signal, або з телефоном/UUID відправника.
    - Схвалення сполучення DM (записи сховища `*-allowFrom`) застосовуються лише до доступу DM; авторизація відправників у групах залишається явно прив’язаною до групових списків дозволених.
    - Discord: список дозволених використовує `channels.discord.guilds.<id>.channels`.
    - Slack: список дозволених використовує `channels.slack.channels`.
    - Matrix: список дозволених використовує `channels.matrix.groups`. Надавайте перевагу ідентифікаторам кімнат або псевдонімам; пошук назв приєднаних кімнат виконується за принципом best-effort, а нерозв’язані назви ігноруються під час виконання. Використовуйте `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` (відкрито/вимкнено/список дозволених).
  </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`.
    - Групи, де дозволені тихі відповіді, трактують чисті порожні ходи моделі або ходи лише з міркуванням як тихі, еквівалентні `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>` і wildcard `"*"`. Застарілі ключі без префікса все ще приймаються та зіставляються лише як `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="Вимкнути всі групові відповіді">
    ```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`.

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

Вхідні payload групи задають:

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

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

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

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

## Специфіка iMessage

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

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

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

## Специфіка WhatsApp

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

## Пов’язане

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