---
read_when:
    - Зміна поведінки групового чату або керування згадками
summary: Поведінка групових чатів на різних поверхнях (Discord/iMessage/Matrix/Microsoft Teams/Signal/Slack/Telegram/WhatsApp/Zalo)
title: Групи
x-i18n:
    generated_at: "2026-04-07T06:53:59Z"
    model: gpt-5.4
    provider: openai
    source_hash: f5045badbba30587c8f1bf27f6b940c7c471a95c57093c9adb142374413ac81e
    source_path: channels/groups.md
    workflow: 15
---

# Групи

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

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

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

Поведінка за замовчуванням:

- Групи обмежені (`groupPolicy: "allowlist"`).
- Для відповідей потрібна згадка, якщо ви явно не вимкнули керування згадками.

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

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

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

```
groupPolicy? disabled -> відкинути
groupPolicy? allowlist -> група дозволена? ні -> відкинути
requireMention? так -> є згадка? ні -> зберегти лише для контексту
інакше -> відповісти
```

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

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

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

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

Поточна поведінка залежить від каналу:

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

Напрям посилення захисту (заплановано):

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

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

![Схема потоку групового повідомлення](/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>` до ідентифікатора групи, щоб кожна тема мала власну сесію.
- Прямі чати використовують основну сесію (або окрему для кожного відправника, якщо це налаштовано).
- 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"`, ці групові сесії працюватимуть у Docker, а ваша основна DM-сесія залишиться на хості.

Це дає вам один «мозок» агента (спільний workspace + memory), але дві моделі виконання:

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

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

Приклад (DM на хості, групи в sandbox + лише інструменти для обміну повідомленнями):

```json5
{
  agents: {
    defaults: {
      sandbox: {
        mode: "non-main", // групи/канали є неосновними -> у sandbox
        scope: "session", // найсильніша ізоляція (один контейнер на групу/канал)
        workspaceAccess: "none",
      },
    },
  },
  tools: {
    sandbox: {
      tools: {
        // Якщо список allow не порожній, усе інше блокується (deny все одно має пріоритет).
        allow: ["group:messaging", "group:sessions"],
        deny: ["group:runtime", "group:fs", "group:ui", "nodes", "cron", "gateway"],
      },
    },
  },
}
```

Хочете, щоб «групи могли бачити лише теку X» замість «без доступу до хоста»? Залиште `workspaceAccess: "none"` і змонтуйте в sandbox лише шляхи зі списку дозволених:

```json5
{
  agents: {
    defaults: {
      sandbox: {
        mode: "non-main",
        scope: "session",
        workspaceAccess: "none",
        docker: {
          binds: [
            // hostPath:containerPath:mode
            "/home/user/FriendsShared:/data:ro",
          ],
        },
      },
    },
  },
}
```

Пов’язано:

- Ключі конфігурації та значення за замовчуванням: [Конфігурація шлюзу](/uk/gateway/configuration-reference#agentsdefaultssandbox)
- Налагодження, чому інструмент заблоковано: [Sandbox vs Tool Policy vs Elevated](/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"], // числовий Telegram user id (wizard може визначити через @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"` | Дозволяє лише групи/кімнати, що відповідають налаштованому списку дозволених. |

Примітки:

- `groupPolicy` відокремлена від керування згадками (яке вимагає @згадок).
- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: використовуйте `groupAllowFrom` (резервний варіант: явний `allowFrom`).
- Погодження DM pairing (записи у сховищі `*-allowFrom`) стосуються лише доступу до DM; авторизація відправника в групі лишається явно керованою списками дозволених для груп.
- Discord: список дозволених використовує `channels.discord.guilds.<id>.channels`.
- Slack: список дозволених використовує `channels.slack.channels`.
- Matrix: список дозволених використовує `channels.matrix.groups`. Віддавайте перевагу room ID або alias; пошук за назвою приєднаної кімнати є best-effort, а нерозпізнані назви ігноруються під час виконання. Використовуйте `channels.matrix.groupAllowFrom` для обмеження відправників; також підтримуються списки дозволених `users` для окремих кімнат.
- Групові DM керуються окремо (`channels.discord.dm.*`, `channels.slack.dm.*`).
- Список дозволених Telegram може відповідати user ID (`"123456789"`, `"telegram:123456789"`, `"tg:123456789"`) або іменам користувачів (`"@alice"` або `"alice"`); префікси нечутливі до регістру.
- За замовчуванням використовується `groupPolicy: "allowlist"`; якщо ваш список дозволених груп порожній, групові повідомлення блокуються.
- Безпека під час виконання: коли блок провайдера повністю відсутній (`channels.<provider>` відсутній), політика груп переходить у fail-closed режим (зазвичай `allowlist`) замість успадкування `channels.defaults.groupPolicy`.

Швидка ментальна модель (порядок перевірки для групових повідомлень):

1. `groupPolicy` (open/disabled/allowlist)
2. списки дозволених для груп (`*.groups`, `*.groupAllowFrom`, список дозволених, специфічний для каналу)
3. керування згадками (`requireMention`, `/activation`)

## Керування згадками (типово)

Групові повідомлення вимагають згадки, якщо це не перевизначено для конкретної групи. Значення за замовчуванням зберігаються для кожної підсистеми в `*.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,
        },
      },
    ],
  },
}
```

Примітки:

- `mentionPatterns` — це безпечні regex-шаблони, нечутливі до регістру; невалідні шаблони та небезпечні форми з вкладеним повторенням ігноруються.
- Поверхні, що надають явні згадки, усе одно проходять; шаблони є резервним варіантом.
- Перевизначення для окремого агента: `agents.list[].groupChat.mentionPatterns` (корисно, коли кілька агентів спільно використовують групу).
- Керування згадками застосовується лише тоді, коли можливе виявлення згадки (власні згадки або налаштовано `mentionPatterns`).
- Значення за замовчуванням для Discord містяться в `channels.discord.guilds."*"` (можна перевизначати для окремого guild/channel).
- Контекст історії групи уніфіковано обгортається для всіх каналів і є **лише для pending** (повідомлення, пропущені через керування згадками); використовуйте `messages.groupChat.historyLimit` для глобального значення за замовчуванням і `channels.<channel>.historyLimit` (або `channels.<channel>.accounts.*.historyLimit`) для перевизначень. Встановіть `0`, щоб вимкнути.

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

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

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

Порядок визначення (найбільш специфічне має пріоритет):

1. відповідність `toolsBySender` для групи/каналу
2. `tools` для групи/каналу
3. відповідність `toolsBySender` для значення за замовчуванням (`"*"`).
4. `tools` для значення за замовчуванням (`"*"`)

Приклад (Telegram):

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

Примітки:

- Обмеження інструментів для груп/каналів застосовуються додатково до глобальної/агентської політики інструментів (deny все одно має пріоритет).
- Деякі канали використовують іншу вкладеність для кімнат/каналів (наприклад, Discord `guilds.*.channels.*`, Slack `channels.*`, Microsoft Teams `teams.*.channels.*`).

## Списки дозволених для груп

Коли налаштовано `channels.whatsapp.groups`, `channels.telegram.groups` або `channels.imessage.groups`, ключі діють як список дозволених для груп. Використовуйте `"*"`, щоб дозволити всі групи й водночас задати типову поведінку згадок.

Поширена плутанина: погодження DM pairing — це не те саме, що авторизація групи.
Для каналів, які підтримують DM pairing, сховище pairing розблоковує лише DM. Групові команди все одно вимагають явної авторизації відправника групи через конфігураційні списки дозволених, як-от `groupAllowFrom`, або задокументований резервний механізм конфігурації для цього каналу.

Поширені наміри (скопіювати/вставити):

1. Вимкнути всі відповіді в групах

```json5
{
  channels: { whatsapp: { groupPolicy: "disabled" } },
}
```

2. Дозволити лише певні групи (WhatsApp)

```json5
{
  channels: {
    whatsapp: {
      groups: {
        "123@g.us": { requireMention: true },
        "456@g.us": { requireMention: false },
      },
    },
  },
}
```

3. Дозволити всі групи, але вимагати згадку (явно)

```json5
{
  channels: {
    whatsapp: {
      groups: { "*": { requireMention: true } },
    },
  },
}
```

4. Лише власник може запускати в групах (WhatsApp)

```json5
{
  channels: {
    whatsapp: {
      groupPolicy: "allowlist",
      groupAllowFrom: ["+15551234567"],
      groups: { "*": { requireMention: true } },
    },
  },
}
```

## Активація (лише для власника)

Власники груп можуть перемикати активацію для окремої групи:

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

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

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

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

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

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

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

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

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

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

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

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