chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-23 17:21:35 +00:00
parent ca25863a28
commit 8937382ae6
2 changed files with 250 additions and 250 deletions

View File

@ -1,13 +1,13 @@
---
read_when:
- Зміна поведінки групового чату або керування згадками
- Зміна поведінки групового чату або обмеження за згадками
summary: Поведінка групового чату на різних поверхнях (Discord/iMessage/Matrix/Microsoft Teams/Signal/Slack/Telegram/WhatsApp/Zalo)
title: Групи
x-i18n:
generated_at: "2026-04-21T23:42:05Z"
generated_at: "2026-04-23T17:19:21Z"
model: gpt-5.4
provider: openai
source_hash: a86e202c7e990e040eb092aaef46bc856ee8d39b2e5fe1c733e24f1b35faa824
source_hash: 17f61407e916114e75b43ed781c43d9291b9ea5758ae4a7cd27407a0c994d375
source_path: channels/groups.md
workflow: 15
---
@ -19,20 +19,20 @@ OpenClaw узгоджено обробляє групові чати на різ
## Вступ для початківців (2 хвилини)
OpenClaw «живе» у ваших власних облікових записах месенджерів. Окремого користувача-бота WhatsApp немає.
Якщо **ви** перебуваєте в групі, OpenClaw може бачити цю групу й відповідати там.
Якщо **ви** є в групі, OpenClaw може бачити цю групу й відповідати там.
Поведінка за замовчуванням:
- Групи обмежені (`groupPolicy: "allowlist"`).
- Для відповідей потрібна згадка, якщо ви явно не вимкнули керування згадками.
- Для відповідей потрібна згадка, якщо ви явно не вимкнули обмеження за згадками.
Переклад простою мовою: відправники з allowlist можуть активувати OpenClaw, згадавши його.
Простіше кажучи: відправники зі списку дозволених можуть активувати OpenClaw, згадавши його.
> TL;DR
> Коротко
>
> - **Доступ до DM** контролюється через `*.allowFrom`.
> - **Доступ до груп** контролюється через `*.groupPolicy` + allowlist-и (`*.groups`, `*.groupAllowFrom`).
> - **Запуск відповіді** контролюється через керування згадками (`requireMention`, `/activation`).
> - Доступ до **DM** контролюється через `*.allowFrom`.
> - Доступ до **груп** контролюється через `*.groupPolicy` + списки дозволених (`*.groups`, `*.groupAllowFrom`).
> - **Запуск відповіді** контролюється через обмеження за згадками (`requireMention`, `/activation`).
Швидка схема (що відбувається з повідомленням у групі):
@ -43,43 +43,43 @@ requireMention? yes -> mentioned? no -> store for context only
otherwise -> reply
```
## Видимість контексту та allowlist-и
## Видимість контексту та списки дозволених
У безпеці груп беруть участь два різні механізми контролю:
У безпеці груп беруть участь два різні механізми:
- **Авторизація запуску**: хто може активувати агента (`groupPolicy`, `groups`, `groupAllowFrom`, allowlist-и, специфічні для каналу).
- **Авторизація запуску**: хто може активувати агента (`groupPolicy`, `groups`, `groupAllowFrom`, списки дозволених, специфічні для каналу).
- **Видимість контексту**: який додатковий контекст передається в модель (текст відповіді, цитати, історія треду, метадані пересилання).
За замовчуванням OpenClaw надає пріоритет звичайній поведінці чату й переважно зберігає контекст у тому вигляді, у якому він надійшов. Це означає, що allowlist-и насамперед визначають, хто може запускати дії, а не є універсальною межею редагування для кожного процитованого чи історичного фрагмента.
За замовчуванням OpenClaw віддає пріоритет звичній поведінці чату й переважно зберігає контекст у тому вигляді, у якому його отримано. Це означає, що списки дозволених насамперед визначають, хто може запускати дії, а не є універсальною межею редагування для кожного процитованого чи історичного фрагмента.
Поточна поведінка залежить від каналу:
- У деяких каналах уже застосовується фільтрація за відправником для додаткового контексту в окремих шляхах (наприклад, ініціалізація тредів Slack, пошук відповідей/тредів у Matrix).
- У деяких каналах уже застосовується фільтрація додаткового контексту за відправником у певних шляхах (наприклад, початкове наповнення тредів у Slack, пошук відповідей/тредів у Matrix).
- Інші канали все ще передають контекст цитат/відповідей/пересилань у тому вигляді, у якому його отримано.
Напрямок посилення захисту (заплановано):
Напрям посилення безпеки (заплановано):
- `contextVisibility: "all"` (за замовчуванням) зберігає поточну поведінку «як отримано».
- `contextVisibility: "allowlist"` фільтрує додатковий контекст до відправників з allowlist.
- `contextVisibility: "all"` (типово) зберігає поточну поведінку «як отримано».
- `contextVisibility: "allowlist"` фільтрує додатковий контекст до відправників зі списку дозволених.
- `contextVisibility: "allowlist_quote"` — це `allowlist` плюс один явний виняток для цитати/відповіді.
Поки цю модель посилення захисту не реалізовано узгоджено в усіх каналах, очікуйте відмінностей залежно від поверхні.
Доки цю модель посилення безпеки не буде узгоджено впроваджено в усіх каналах, очікуйте відмінностей залежно від поверхні.
![Потік групових повідомлень](/images/groups-flow.svg)
Якщо ви хочете...
Якщо вам потрібно...
| Ціль | Що встановити |
| Мета | Що налаштувати |
| -------------------------------------------- | ---------------------------------------------------------- |
| Дозволити всі групи, але відповідати лише на @mentions | `groups: { "*": { requireMention: true } }` |
| Вимкнути всі групові відповіді | `groupPolicy: "disabled"` |
| Дозволити всі групи, але відповідати лише на @згадки | `groups: { "*": { requireMention: true } }` |
| Вимкнути всі відповіді в групах | `groupPolicy: "disabled"` |
| Лише певні групи | `groups: { "<group-id>": { ... } }` (без ключа `"*"`) |
| Лише ви можете активувати відповіді в групах | `groupPolicy: "allowlist"`, `groupAllowFrom: ["+1555..."]` |
| Лише ви можете запускати в групах | `groupPolicy: "allowlist"`, `groupAllowFrom: ["+1555..."]` |
## Ключі сесій
- Групові сесії використовують ключі сесій `agent:<agentId>:<channel>:group:<id>` (кімнати/канали використовують `agent:<agentId>:<channel>:channel:<id>`).
- Теми форуму Telegram додають `:topic:<threadId>` до ідентифікатора групи, тому кожна тема має власну сесію.
- Теми форумів Telegram додають `:topic:<threadId>` до ідентифікатора групи, тому кожна тема має власну сесію.
- Прямі чати використовують основну сесію (або окрему для кожного відправника, якщо це налаштовано).
- Heartbeat пропускаються для групових сесій.
@ -87,26 +87,26 @@ otherwise -> reply
## Шаблон: особисті DM + публічні групи (один агент)
Так — це добре працює, якщо ваш «особистий» трафік — це **DM**, а ваш «публічний» трафік — це **групи**.
Так — це добре працює, якщо ваш «особистий» трафік — це **DM**, а «публічний» трафік — це **групи**.
Чому: у режимі одного агента DM зазвичай потрапляють до **основного** ключа сесії (`agent:main:main`), тоді як групи завжди використовують **неосновні** ключі сесії (`agent:main:<channel>:group:<id>`). Якщо ввімкнути ізоляцію через `mode: "non-main"`, ці групові сесії працюватимуть у налаштованому backend ізоляції, а ваша основна DM-сесія залишиться на хості. Якщо ви не виберете backend явно, за замовчуванням використовується Docker.
Чому: у режимі одного агента DM зазвичай потрапляють в **основний** ключ сесії (`agent:main:main`), тоді як групи завжди використовують **неосновні** ключі сесії (`agent:main:<channel>:group:<id>`). Якщо ви ввімкнете ізоляцію через `mode: "non-main"`, ці групові сесії виконуватимуться в налаштованому backend ізоляції, тоді як ваша основна DM-сесія залишатиметься на хості. Якщо ви не виберете backend, типовим буде Docker.
Це дає вам один «розум» агента (спільний робочий простір + пам’ять), але дві моделі виконання:
Це дає вам один «розум» агента (спільний workspace + memory), але дві різні моделі виконання:
- **DM**: повні інструменти (хост)
- **Групи**: ізольоване середовище + обмежені інструменти
- **Групи**: ізоляція + обмежені інструменти
> Якщо вам потрібні справді окремі робочі простори/персони («особисте» і «публічне» ніколи не мають змішуватися), використовуйте другого агента + bindings. Див. [Маршрутизація кількох агентів](/uk/concepts/multi-agent).
> Якщо вам потрібні справді окремі workspace/персони («особисте» і «публічне» ніколи не мають змішуватися), використовуйте другого агента + bindings. Див. [Маршрутизація між кількома агентами](/uk/concepts/multi-agent).
Приклад (DM на хості, групи в sandbox + лише інструменти для обміну повідомленнями):
Приклад (DM на хості, групи в ізоляції + лише інструменти для повідомлень):
```json5
{
agents: {
defaults: {
sandbox: {
mode: "non-main", // groups/channels are non-main -> sandboxed
scope: "session", // strongest isolation (one container per group/channel)
mode: "non-main", // групи/канали є non-main -> ізольовані
scope: "session", // найсильніша ізоляція (один контейнер на групу/канал)
workspaceAccess: "none",
},
},
@ -114,7 +114,7 @@ otherwise -> reply
tools: {
sandbox: {
tools: {
// If allow is non-empty, everything else is blocked (deny still wins).
// Якщо allow не порожній, усе інше блокується (deny усе одно має пріоритет).
allow: ["group:messaging", "group:sessions"],
deny: ["group:runtime", "group:fs", "group:ui", "nodes", "cron", "gateway"],
},
@ -123,7 +123,7 @@ otherwise -> reply
}
```
Хочете, щоб «групи бачили лише теку X» замість «жодного доступу до хоста»? Залиште `workspaceAccess: "none"` і змонтуйте в sandbox лише шляхи з allowlist:
Хочете, щоб «групи могли бачити лише папку X» замість «без доступу до хоста»? Залиште `workspaceAccess: "none"` і змонтуйте в ізоляцію лише шляхи зі списку дозволених:
```json5
{
@ -145,18 +145,18 @@ otherwise -> reply
}
```
Пов’язано:
Пов’язане:
- Ключі конфігурації та значення за замовчуванням: [Конфігурація Gateway](/uk/gateway/configuration-reference#agentsdefaultssandbox)
- Налагодження причин блокування інструмента: [Sandbox vs Tool Policy vs Elevated](/uk/gateway/sandbox-vs-tool-policy-vs-elevated)
- Докладніше про bind mounts: [Ізоляція](/uk/gateway/sandboxing#custom-bind-mounts)
- Налагодження, чому інструмент заблоковано: [Sandbox vs Tool Policy vs Elevated](/uk/gateway/sandbox-vs-tool-policy-vs-elevated)
- Подробиці про bind mounts: [Ізоляція](/uk/gateway/sandboxing#custom-bind-mounts)
## Мітки відображення
- Мітки інтерфейсу використовують `displayName`, коли воно доступне, у форматі `<channel>:<token>`.
- Мітки інтерфейсу використовують `displayName`, коли він доступний, у форматі `<channel>:<token>`.
- `#room` зарезервовано для кімнат/каналів; групові чати використовують `g-<slug>` (нижній регістр, пробіли -> `-`, зберігати `#@+._-`).
## Політика груп
## Групова політика
Керує тим, як обробляються повідомлення груп/кімнат для кожного каналу:
@ -169,7 +169,7 @@ otherwise -> reply
},
telegram: {
groupPolicy: "disabled",
groupAllowFrom: ["123456789"], // numeric Telegram user id (wizard can resolve @username)
groupAllowFrom: ["123456789"], // числовий Telegram user id (wizard може визначити з @username)
},
signal: {
groupPolicy: "disabled",
@ -205,38 +205,38 @@ otherwise -> reply
}
```
| Policy | Поведінка |
| ------------- | ------------------------------------------------------------ |
| `"open"` | Групи оминають allowlist-и; керування згадками все одно застосовується. |
| `"disabled"` | Повністю блокує всі групові повідомлення. |
| `"allowlist"` | Дозволяє лише групи/кімнати, які відповідають налаштованому allowlist. |
| Політика | Поведінка |
| ------------ | ------------------------------------------------------------ |
| `"open"` | Групи оминають списки дозволених; обмеження за згадками все одно діє. |
| `"disabled"` | Повністю блокувати всі групові повідомлення. |
| `"allowlist"` | Дозволяти лише групи/кімнати, які відповідають налаштованому списку дозволених. |
Примітки:
- `groupPolicy` відокремлена від керування згадками (яке вимагає @mentions).
- `groupPolicy` відокремлено від обмеження за згадками (яке вимагає @згадок).
- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: використовуйте `groupAllowFrom` (резервний варіант: явний `allowFrom`).
- Схвалення парування для DM (записи сховища `*-allowFrom`) застосовуються лише до доступу DM; авторизація відправників у групах залишається явно прив’язаною до allowlist-ів груп.
- Discord: allowlist використовує `channels.discord.guilds.<id>.channels`.
- Slack: allowlist використовує `channels.slack.channels`.
- Matrix: allowlist використовує `channels.matrix.groups`. Надавайте перевагу ID кімнат або псевдонімам; пошук імен підключених кімнат виконується в режимі best-effort, а нерозв’язані імена ігноруються під час виконання. Використовуйте `channels.matrix.groupAllowFrom`, щоб обмежити відправників; також підтримуються allowlist-и `users` для окремих кімнат.
- Групові DM контролюються окремо (`channels.discord.dm.*`, `channels.slack.dm.*`).
- Telegram allowlist може збігатися з ID користувачів (`"123456789"`, `"telegram:123456789"`, `"tg:123456789"`) або іменами користувачів (`"@alice"` або `"alice"`); префікси нечутливі до регістру.
- Значення за замовчуванням`groupPolicy: "allowlist"`; якщо ваш allowlist груп порожній, групові повідомлення блокуються.
- Безпека під час виконання: коли блок постачальника повністю відсутній (`channels.<provider>` відсутній), політика груп переходить у fail-closed режим (зазвичай `allowlist`) замість успадкування `channels.defaults.groupPolicy`.
- Погодження парування для DM (записи в сховищі `*-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. allowlist-и груп (`*.groups`, `*.groupAllowFrom`, allowlist, специфічний для каналу)
3. керування згадками (`requireMention`, `/activation`)
2. групові списки дозволених (`*.groups`, `*.groupAllowFrom`, список дозволених, специфічний для каналу)
3. обмеження за згадками (`requireMention`, `/activation`)
## Керування згадками (за замовчуванням)
## Обмеження за згадками (типово)
Для групових повідомлень потрібна згадка, якщо це не перевизначено для конкретної групи. Значення за замовчуванням задаються для кожної підсистеми в `*.groups."*"`.
Відповідь на повідомлення бота вважається неявною згадкою, коли канал
підтримує метадані відповіді. Цитування повідомлення бота також може вважатися
неявною згадкою в каналах, які надають метадані цитати. Поточні вбудовані випадки включають
Відповідь на повідомлення бота вважається неявною згадкою, якщо канал
підтримує метадані відповіді. Цитування повідомлення бота також може
вважатися неявною згадкою в каналах, які надають метадані цитування. Поточні вбудовані випадки включають
Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser.
```json5
@ -277,29 +277,29 @@ Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser.
Примітки:
- `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`, щоб вимкнути.
- `mentionPatterns` — це безпечні regex-шаблони, нечутливі до регістру; невалідні шаблони та небезпечні форми з вкладеними повтореннями ігноруються.
- Поверхні, що надають явні згадки, усе одно пропускаються; шаблони є резервним варіантом.
- Перевизначення на рівні агента: `agents.list[].groupChat.mentionPatterns` (корисно, коли кілька агентів працюють у спільній групі).
- Обмеження за згадками застосовується лише тоді, коли виявлення згадок можливе (є нативні згадки або налаштовано `mentionPatterns`).
- Значення за замовчуванням для Discord містяться в `channels.discord.guilds."*"` (можна перевизначати для окремого guild/channel).
- Контекст історії груп загортається однаково в усіх каналах і є **лише pending-only** (повідомлення, пропущені через обмеження за згадками); використовуйте `messages.groupChat.historyLimit` для глобального значення за замовчуванням і `channels.<channel>.historyLimit` (або `channels.<channel>.accounts.*.historyLimit`) для перевизначень. Установіть `0`, щоб вимкнути.
## Обмеження інструментів для груп/каналів (необов’язково)
Деякі конфігурації каналів підтримують обмеження на те, які інструменти доступні **в межах конкретної групи/кімнати/каналу**.
Деякі конфігурації каналів підтримують обмеження того, які інструменти доступні **всередині конкретної групи/кімнати/каналу**.
- `tools`: дозволити/заборонити інструменти для всієї групи.
- `toolsBySender`: перевизначення для окремих відправників у межах групи.
- `toolsBySender`: перевизначення для окремих відправників усередині групи.
Використовуйте явні префікси ключів:
`id:<senderId>`, `e164:<phone>`, `username:<handle>`, `name:<displayName>` і wildcard `"*"`.
Старі ключі без префікса все ще приймаються та зіставляються лише як `id:`.
`id:<senderId>`, `e164:<phone>`, `username:<handle>`, `name:<displayName>` і шаблон `"*"`.
Історичні ключі без префікса все ще приймаються і зіставляються лише як `id:`.
Порядок визначення (найбільш специфічний має пріоритет):
Порядок визначення (найбільш специфічне має пріоритет):
1. збіг `toolsBySender` для групи/каналу
2. `tools` для групи/каналу
3. збіг `toolsBySender` за замовчуванням (`"*"`)
4. `tools` за замовчуванням (`"*"`)
3. збіг типового (`"*"`) `toolsBySender`
4. типове (`"*"`) `tools`
Приклад (Telegram):
@ -323,19 +323,19 @@ Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser.
Примітки:
- Обмеження інструментів для груп/каналів застосовуються додатково до глобальної/агентської політики інструментів (заборона все одно має пріоритет).
- Обмеження інструментів для груп/каналів застосовуються додатково до глобальної/агентської політики інструментів (deny усе одно має пріоритет).
- Деякі канали використовують іншу вкладеність для кімнат/каналів (наприклад, Discord `guilds.*.channels.*`, Slack `channels.*`, Microsoft Teams `teams.*.channels.*`).
## Allowlist-и груп
## Списки дозволених для груп
Коли налаштовано `channels.whatsapp.groups`, `channels.telegram.groups` або `channels.imessage.groups`, ключі діють як allowlist груп. Використовуйте `"*"` щоб дозволити всі групи, водночас задавши поведінку згадок за замовчуванням.
Коли налаштовано `channels.whatsapp.groups`, `channels.telegram.groups` або `channels.imessage.groups`, ключі діють як список дозволених для груп. Використовуйте `"*"` , щоб дозволити всі групи й водночас задати типову поведінку для згадок.
Поширена плутанина: схвалення парування DM — це не те саме, що авторизація груп.
Для каналів, які підтримують парування DM, сховище парування відкриває лише DM. Групові команди все одно потребують явної авторизації відправника групи з конфігураційних allowlist-ів, таких як `groupAllowFrom`, або задокументованого резервного варіанта конфігурації для цього каналу.
Поширена плутанина: погодження парування DM — це не те саме, що авторизація груп.
Для каналів, які підтримують парування DM, сховище парування відкриває доступ лише до DM. Команди в групах усе одно потребують явної авторизації відправника групи через списки дозволених у конфігурації, як-от `groupAllowFrom`, або задокументований резервний варіант конфігурації для цього каналу.
Типові наміри (скопіювати/вставити):
Типові наміри (копіюйте й вставляйте):
1. Вимкнути всі групові відповіді
1. Вимкнути всі відповіді в групах
```json5
{
@ -343,7 +343,7 @@ Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser.
}
```
2. Дозволити лише конкретні групи (WhatsApp)
2. Дозволити лише певні групи (WhatsApp)
```json5
{
@ -370,7 +370,7 @@ Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser.
}
```
4. Лише власник може активувати відповіді в групах (WhatsApp)
4. Лише власник може запускати дії в групах (WhatsApp)
```json5
{
@ -391,34 +391,34 @@ Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser.
- `/activation mention`
- `/activation always`
Власник визначається через `channels.whatsapp.allowFrom` (або власний E.164 бота, якщо не задано). Надсилайте команду як окреме повідомлення. Інші поверхні наразі ігнорують `/activation`.
Власник визначається через `channels.whatsapp.allowFrom` (або через власний E.164 бота, якщо не задано). Надсилайте команду як окреме повідомлення. Інші поверхні наразі ігнорують `/activation`.
## Поля контексту
Вхідні payload-и груп встановлюють:
Вхідні дані груп встановлюють:
- `ChatType=group`
- `GroupSubject` (якщо відомо)
- `GroupMembers` (якщо відомо)
- `WasMentioned` (результат керування згадками)
- Теми форумів Telegram також містять `MessageThreadId` і `IsForum`.
- `WasMentioned` (результат обмеження за згадками)
- Теми форумів Telegram також включають `MessageThreadId` і `IsForum`.
Примітки для конкретних каналів:
- BlueBubbles може за бажанням збагачувати неназваних учасників груп macOS з локальної бази Contacts перед заповненням `GroupMembers`. Це вимкнено за замовчуванням і виконується лише після проходження звичайних перевірок груп.
- BlueBubbles може за бажанням збагачувати учасників без імен у групах macOS із локальної бази даних Контактів перед заповненням `GroupMembers`. Це вимкнено за замовчуванням і запускається лише після успішного проходження звичайних перевірок груп.
Системний prompt агента містить вступ для групи на першому ході нової групової сесії. Він нагадує моделі відповідати як людині, уникати Markdown-таблиць, мінімізувати порожні рядки, дотримуватися звичайних інтервалів чату й не друкувати буквальні послідовності `\n`.
Системний prompt агента включає вступ для групи на першому ході нової групової сесії. Він нагадує моделі відповідати як людині, уникати Markdown-таблиць, мінімізувати порожні рядки, дотримуватися звичайних інтервалів у чаті й не вводити буквально послідовності `\n`. Назви груп і мітки учасників, отримані з каналу, відображаються як огороджені недовірені метадані, а не як вбудовані системні інструкції.
## Особливості iMessage
- Для маршрутизації або allowlist-ів надавайте перевагу `chat_id:<id>`.
- Переглянути чати: `imsg chats --limit 20`.
- Відповіді в групі завжди повертаються до того самого `chat_id`.
- Віддавайте перевагу `chat_id:<id>` для маршрутизації або списків дозволених.
- Список чатів: `imsg chats --limit 20`.
- Відповіді в групах завжди повертаються до того самого `chat_id`.
## Системні prompt WhatsApp
## Системні prompt для WhatsApp
Див. [WhatsApp](/uk/channels/whatsapp#system-prompts) для канонічних правил системних prompt-ів WhatsApp, зокрема розв’язання prompt-ів для груп і прямих повідомлень, поведінки wildcard і семантики перевизначення облікового запису.
Див. [WhatsApp](/uk/channels/whatsapp#system-prompts) для канонічних правил системних prompt WhatsApp, зокрема для визначення prompt у групах і прямих чатах, поведінки wildcard і семантики перевизначення облікового запису.
## Особливості WhatsApp
Див. [Групові повідомлення](/uk/channels/group-messages) для поведінки, специфічної лише для WhatsApp (впровадження історії, деталі обробки згадок).
Див. [Групові повідомлення](/uk/channels/group-messages) щодо поведінки лише для WhatsApp (впровадження історії, подробиці обробки згадок).

View File

@ -4,25 +4,25 @@ read_when:
summary: Підтримка каналу WhatsApp, контроль доступу, поведінка доставки та операції
title: WhatsApp
x-i18n:
generated_at: "2026-04-23T06:42:48Z"
generated_at: "2026-04-23T17:19:32Z"
model: gpt-5.4
provider: openai
source_hash: e14735a33ffb48334b920a5e63645abf3445f56481b1ce8b7c128800e2adc981
source_hash: 3fb32e2ca2ced699198d92a2fc15aa5f62806540f197e71a332def0f05dd1d25
source_path: channels/whatsapp.md
workflow: 15
---
# WhatsApp (веб-канал)
# WhatsApp (вебканал)
Статус: готовий до production через WhatsApp Web (Baileys). Gateway керує прив’язаними сесіями.
Статус: готовий до використання в продакшені через WhatsApp Web (Baileys). Gateway володіє прив’язаними сесіями.
## Встановлення (за потреби)
- Onboarding (`openclaw onboard`) і `openclaw channels add --channel whatsapp`
запропонують установити Plugin WhatsApp, коли ви вперше виберете його.
- `openclaw channels login --channel whatsapp` також пропонує процес встановлення, якщо
Plugin ще не встановлено.
- Dev channel + git checkout: за замовчуванням використовується локальний шлях до Plugin.
- Під час онбордингу (`openclaw onboard`) і `openclaw channels add --channel whatsapp`
буде запропоновано встановити plugin WhatsApp, коли ви вперше його виберете.
- `openclaw channels login --channel whatsapp` також пропонує встановлення,
якщо plugin ще не встановлено.
- Канал dev + checkout із git: за замовчуванням використовується локальний шлях до plugin.
- Stable/Beta: за замовчуванням використовується npm-пакет `@openclaw/whatsapp`.
Ручне встановлення також доступне:
@ -32,13 +32,13 @@ openclaw plugins install @openclaw/whatsapp
```
<CardGroup cols={3}>
<Card title="Pairing" icon="link" href="/uk/channels/pairing">
Типова політика DM для невідомих відправників — pairing.
<Card title="Прив’язування" icon="link" href="/uk/channels/pairing">
Типова політика DM — прив’язування для невідомих відправників.
</Card>
<Card title="Усунення несправностей каналу" icon="wrench" href="/uk/channels/troubleshooting">
Міжканальна діагностика та сценарії відновлення.
</Card>
<Card title="Налаштування Gateway" icon="settings" href="/uk/gateway/configuration">
<Card title="Конфігурація Gateway" icon="settings" href="/uk/gateway/configuration">
Повні шаблони та приклади конфігурації каналів.
</Card>
</CardGroup>
@ -77,7 +77,7 @@ openclaw channels login --channel whatsapp --account work
</Step>
<Step title="Запустіть gateway">
<Step title="Запустіть Gateway">
```bash
openclaw gateway
@ -85,31 +85,31 @@ openclaw gateway
</Step>
<Step title="Схваліть перший запит на pairing (якщо використовується режим pairing)">
<Step title="Підтвердьте перший запит на прив’язування (якщо використовується режим прив’язування)">
```bash
openclaw pairing list whatsapp
openclaw pairing approve whatsapp <CODE>
```
Строк дії запитів на pairing спливає через 1 годину. Кількість запитів, що очікують, обмежена до 3 на канал.
Термін дії запитів на прив’язування спливає через 1 годину. Кількість запитів у стані очікування обмежена до 3 на канал.
</Step>
</Steps>
<Note>
OpenClaw рекомендує за можливості запускати WhatsApp на окремому номері. (Метадані каналу та процес налаштування оптимізовані для такого варіанта, але конфігурації з особистим номером також підтримуються.)
OpenClaw рекомендує, за можливості, використовувати WhatsApp з окремим номером. (Метадані каналу та сценарій налаштування оптимізовані для такого варіанта, але конфігурації з особистим номером також підтримуються.)
</Note>
## Схеми розгортання
## Шаблони розгортання
<AccordionGroup>
<Accordion title="Окремий номер (рекомендовано)">
Це найзручніший режим з погляду експлуатації:
Це найчистіший операційний режим:
- окремий ідентифікатор WhatsApp для OpenClaw
- чіткіші списки дозволів DM і межі маршрутизації
- менша ймовірність плутанини із self-chat
- зрозуміліші allowlist для DM та межі маршрутизації
- менша ймовірність плутанини із самочатом
Мінімальний шаблон політики:
@ -126,18 +126,18 @@ OpenClaw рекомендує за можливості запускати Whats
</Accordion>
<Accordion title="Резервний варіант з особистим номером">
Onboarding підтримує режим особистого номера і записує базову конфігурацію, зручну для self-chat:
<Accordion title="Резервний варіант із особистим номером">
Онбординг підтримує режим особистого номера та записує базову конфігурацію, дружню до самочату:
- `dmPolicy: "allowlist"`
- `allowFrom` містить ваш особистий номер
- `selfChatMode: true`
Під час виконання захист self-chat спирається на прив’язаний власний номер і `allowFrom`.
Під час виконання захисти самочату спираються на прив’язаний власний номер і `allowFrom`.
</Accordion>
<Accordion title="Область каналу лише для WhatsApp Web">
<Accordion title="Обсяг каналу лише для WhatsApp Web">
Канал платформи обміну повідомленнями в поточній архітектурі каналів OpenClaw базується на WhatsApp Web (`Baileys`).
Окремого каналу обміну повідомленнями Twilio WhatsApp у вбудованому реєстрі чат-каналів немає.
@ -147,12 +147,12 @@ OpenClaw рекомендує за можливості запускати Whats
## Модель виконання
- Gateway керує сокетом WhatsApp і циклом перепідключення.
- Для надсилання вихідних повідомлень потрібен активний слухач WhatsApp для цільового облікового запису.
- Gateway володіє сокетом WhatsApp і циклом перепідключення.
- Для вихідного надсилання потрібен активний слухач WhatsApp для цільового облікового запису.
- Чати статусів і розсилок ігноруються (`@status`, `@broadcast`).
- Прямі чати використовують правила сесій DM (`session.dmScope`; значення `main` за замовчуванням згортає DM до основної сесії агента).
- Прямі чати використовують правила сесій DM (`session.dmScope`; значення за замовчуванням `main` зводить DM до головної сесії агента).
- Групові сесії ізольовані (`agent:<agentId>:whatsapp:group:<jid>`).
- Транспорт WhatsApp Web враховує стандартні проксі-змінні середовища на хості gateway (`HTTPS_PROXY`, `HTTP_PROXY`, `NO_PROXY` / варіанти в нижньому регістрі). Віддавайте перевагу конфігурації проксі на рівні хоста, а не специфічним налаштуванням проксі WhatsApp для каналу.
- Транспорт WhatsApp Web враховує стандартні змінні середовища проксі на хості Gateway (`HTTPS_PROXY`, `HTTP_PROXY`, `NO_PROXY` / варіанти в нижньому регістрі). Надавайте перевагу конфігурації проксі на рівні хоста замість специфічних налаштувань проксі WhatsApp для каналу.
## Контроль доступу та активація
@ -160,96 +160,96 @@ OpenClaw рекомендує за можливості запускати Whats
<Tab title="Політика DM">
`channels.whatsapp.dmPolicy` керує доступом до прямих чатів:
- `pairing` (типово)
- `pairing` (за замовчуванням)
- `allowlist`
- `open` (вимагає, щоб `allowFrom` містив `"*"`)
- `open` (потрібно, щоб `allowFrom` містив `"*"`)
- `disabled`
`allowFrom` приймає номери у форматі E.164 (внутрішньо нормалізуються).
`allowFrom` приймає номери у стилі E.164 (внутрішньо нормалізуються).
Перевизначення для кількох облікових записів: `channels.whatsapp.accounts.<id>.dmPolicy` (і `allowFrom`) мають пріоритет над типовими значеннями на рівні каналу для цього облікового запису.
Перевизначення для кількох облікових записів: `channels.whatsapp.accounts.<id>.dmPolicy` (і `allowFrom`) мають пріоритет над значеннями каналу за замовчуванням для цього облікового запису.
Докладно про поведінку під час виконання:
Деталі поведінки під час виконання:
- pairing-зв’язки зберігаються в allow-store каналу та об’єднуються з налаштованим `allowFrom`
- якщо список дозволів не налаштовано, прив’язаний власний номер дозволяється за замовчуванням
- вихідні DM `fromMe` ніколи не проходять auto-paired
- прив’язування зберігаються в allow-store каналу та об’єднуються з налаштованим `allowFrom`
- якщо allowlist не налаштовано, прив’язаний власний номер дозволяється за замовчуванням
- вихідні `fromMe` DM ніколи не проходять автоприв’язування
</Tab>
<Tab title="Групова політика + списки дозволів">
<Tab title="Політика груп + allowlist">
Доступ до груп має два рівні:
1. **Список дозволів членства груп** (`channels.whatsapp.groups`)
1. **Allowlist членства в групі** (`channels.whatsapp.groups`)
- якщо `groups` пропущено, придатними вважаються всі групи
- якщо `groups` присутній, він діє як список дозволів груп (`"*"` дозволено)
- якщо `groups` присутній, він працює як group allowlist (`"*"` дозволено)
2. **Політика відправників у групі** (`channels.whatsapp.groupPolicy` + `groupAllowFrom`)
- `open`: список дозволів відправників обходиться
2. **Політика відправників групи** (`channels.whatsapp.groupPolicy` + `groupAllowFrom`)
- `open`: allowlist відправників обходиться
- `allowlist`: відправник має відповідати `groupAllowFrom` (або `*`)
- `disabled`: блокувати всі вхідні повідомлення груп
- `disabled`: блокувати весь вхідний трафік із груп
Резервна поведінка списку дозволів відправників:
Резервна логіка allowlist відправників:
- якщо `groupAllowFrom` не задано, під час виконання використовується `allowFrom`, коли він доступний
- списки дозволів відправників оцінюються до активації за згадуванням/відповіддю
- якщо `groupAllowFrom` не задано, під час виконання використовується резервне значення `allowFrom`, якщо воно доступне
- allowlist відправників перевіряються до активації згадкою/відповіддю
Примітка: якщо блоку `channels.whatsapp` взагалі немає, резервна групова політика під час виконання — `allowlist` (із попередженням у логах), навіть якщо задано `channels.defaults.groupPolicy`.
Примітка: якщо блока `channels.whatsapp` немає взагалі, резервна політика груп під час виконання — `allowlist` (із попереджувальним записом у журнал), навіть якщо встановлено `channels.defaults.groupPolicy`.
</Tab>
<Tab title="Згадування + /activation">
Відповіді в групах за замовчуванням вимагають згадування.
<Tab title="Згадки + /activation">
За замовчуванням для відповідей у групі потрібна згадка.
Виявлення згадувань включає:
Визначення згадки включає:
- явні згадування WhatsApp ідентичності бота
- налаштовані regex-шаблони згадувань (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`)
- неявне виявлення відповіді боту (відправник відповіді відповідає ідентичності бота)
- явні згадки WhatsApp ідентичності бота
- налаштовані шаблони regex для згадок (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`)
- неявне визначення відповіді боту (відправник відповіді збігається з ідентичністю бота)
Примітка щодо безпеки:
- цитування/відповідь лише задовольняє обмеження за згадуванням; це **не** надає авторизацію відправнику
- з `groupPolicy: "allowlist"` відправники поза списком дозволів усе одно блокуються, навіть якщо вони відповідають на повідомлення користувача зі списку дозволів
- цитування/відповідь лише задовольняє умову проходження фільтра згадки; це **не** надає авторизацію відправнику
- з `groupPolicy: "allowlist"` відправники поза allowlist усе одно блокуються, навіть якщо вони відповідають на повідомлення користувача з allowlist
Команда активації на рівні сесії:
- `/activation mention`
- `/activation always`
`activation` оновлює стан сесії (а не глобальну конфігурацію). Вона обмежена власником.
`activation` оновлює стан сесії (а не глобальну конфігурацію). Доступ до неї обмежено власником.
</Tab>
</Tabs>
## Поведінка особистого номера та self-chat
## Поведінка особистого номера та самочату
Коли прив’язаний власний номер також присутній у `allowFrom`, активується захист self-chat у WhatsApp:
Коли прив’язаний власний номер також присутній у `allowFrom`, активуються захисти самочату WhatsApp:
- пропускати read receipts для кроків self-chat
- ігнорувати поведінку auto-trigger за mention-JID, яка інакше пінгувала б вас самих
- якщо `messages.responsePrefix` не задано, відповіді self-chat за замовчуванням використовують `[{identity.name}]` або `[openclaw]`
- пропускати підтвердження прочитання для ходів самочату
- ігнорувати поведінку автозапуску за mention-JID, яка інакше надсилала б сповіщення вам самим
- якщо `messages.responsePrefix` не задано, відповіді в самочаті за замовчуванням мають вигляд `[{identity.name}]` або `[openclaw]`
## Нормалізація повідомлень і контекст
<AccordionGroup>
<Accordion title="Вхідний конверт + контекст відповіді">
Вхідні повідомлення WhatsApp обгортаються у спільний вхідний конверт.
<Accordion title="Вхідна оболонка + контекст відповіді">
Вхідні повідомлення WhatsApp загортаються у спільну вхідну оболонку.
Якщо існує цитована відповідь, контекст додається в такому вигляді:
Якщо існує цитована відповідь, контекст додається в такій формі:
```text
[Replying to <sender> id:<stanzaId>]
[Відповідь на <sender> id:<stanzaId>]
<quoted body or media placeholder>
[/Replying]
[/Відповідь]
```
Поля метаданих відповіді також заповнюються, коли доступні (`ReplyToId`, `ReplyToBody`, `ReplyToSender`, sender JID/E.164).
Поля метаданих відповіді також заповнюються, коли вони доступні (`ReplyToId`, `ReplyToBody`, `ReplyToSender`, JID/E.164 відправника).
</Accordion>
<Accordion title="Заповнювачі медіа та витягування локації/контакту">
Вхідні повідомлення, що містять лише медіа, нормалізуються за допомогою заповнювачів, таких як:
Вхідні повідомлення лише з медіа нормалізуються за допомогою заповнювачів, таких як:
- `<media:image>`
- `<media:video>`
@ -257,27 +257,27 @@ OpenClaw рекомендує за можливості запускати Whats
- `<media:document>`
- `<media:sticker>`
Дані локації та контакту нормалізуються в текстовий контекст перед маршрутизацією.
Для локацій у вмісті використовується стислий текст координат. Мітки/коментарі локацій і деталі contact/vCard відображаються як огороджені недовірені метадані, а не як вбудований текст запиту.
</Accordion>
<Accordion title="Вставлення історії очікування групи">
Для груп необроблені повідомлення можуть буферизуватися та вставлятися як контекст, коли бот нарешті активується.
<Accordion title="Ін’єкція історії очікування групи">
Для груп необроблені повідомлення можуть буферизуватися та ін’єктуватися як контекст, коли бот нарешті буде активовано.
- типове обмеження: `50`
- обмеження за замовчуванням: `50`
- конфігурація: `channels.whatsapp.historyLimit`
- резервно: `messages.groupChat.historyLimit`
- резервне значення: `messages.groupChat.historyLimit`
- `0` вимикає
Маркери вставлення:
Маркери ін’єкції:
- `[Chat messages since your last reply - for context]`
- `[Current message - respond to this]`
- `[Повідомлення чату з вашої останньої відповіді — для контексту]`
- `[Поточне повідомлення — дайте відповідь на нього]`
</Accordion>
<Accordion title="Read receipts">
Read receipts увімкнені за замовчуванням для прийнятих вхідних повідомлень WhatsApp.
<Accordion title="Підтвердження прочитання">
Підтвердження прочитання увімкнені за замовчуванням для прийнятих вхідних повідомлень WhatsApp.
Вимкнення глобально:
@ -291,7 +291,7 @@ OpenClaw рекомендує за можливості запускати Whats
}
```
Перевизначення для облікового запису:
Перевизначення для окремого облікового запису:
```json5
{
@ -307,48 +307,48 @@ OpenClaw рекомендує за можливості запускати Whats
}
```
Для self-chat read receipts пропускаються, навіть якщо глобально вони увімкнені.
Для ходів самочату підтвердження прочитання пропускаються, навіть коли вони глобально увімкнені.
</Accordion>
</AccordionGroup>
## Доставка, поділ на частини та медіа
## Доставка, розбиття на частини та медіа
<AccordionGroup>
<Accordion title="Поділ тексту на частини">
- типове обмеження частини: `channels.whatsapp.textChunkLimit = 4000`
<Accordion title="Розбиття тексту на частини">
- обмеження розміру частини за замовчуванням: `channels.whatsapp.textChunkLimit = 4000`
- `channels.whatsapp.chunkMode = "length" | "newline"`
- режим `newline` надає перевагу межам абзаців (порожні рядки), а потім резервно використовує безпечний поділ за довжиною
- режим `newline` надає перевагу межам абзаців (порожнім рядкам), а потім резервно переходить до безпечного за довжиною розбиття
</Accordion>
<Accordion title="Поведінка вихідних медіа">
- підтримуються зображення, відео, аудіо (голосові PTT-нотатки) та документи
- `audio/ogg` переписується на `audio/ogg; codecs=opus` для сумісності з голосовими нотатками
- відтворення анімованих GIF підтримується через `gifPlayback: true` під час надсилання відео
- підтримуються payload image, video, audio (голосове повідомлення PTT) і document
- `audio/ogg` переписується на `audio/ogg; codecs=opus` для сумісності з голосовими повідомленнями
- відтворення анімованих GIF підтримується через `gifPlayback: true` під час надсилання video
- підписи застосовуються до першого елемента медіа під час надсилання payload відповіді з кількома медіа
- джерелом медіа може бути HTTP(S), `file://` або локальні шляхи
</Accordion>
<Accordion title="Обмеження розміру медіа та резервна поведінка">
- ліміт збереження вхідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`)
- ліміт надсилання вихідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`)
- перевизначення для облікових записів використовують `channels.whatsapp.accounts.<accountId>.mediaMaxMb`
- зображення автоматично оптимізуються (підбір розміру/якості), щоб укладатися в ліміти
- у разі помилки надсилання медіа резервний механізм для першого елемента надсилає текстове попередження замість того, щоб мовчки відкинути відповідь
- ліміт збереження вхідних медіа: `channels.whatsapp.mediaMaxMb` (за замовчуванням `50`)
- ліміт надсилання вихідних медіа: `channels.whatsapp.mediaMaxMb` (за замовчуванням `50`)
- перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts.<accountId>.mediaMaxMb`
- зображення автоматично оптимізуються (перебір зміни розміру/якості), щоб відповідати лімітам
- у разі збою надсилання медіа резервна логіка для першого елемента надсилає текстове попередження замість того, щоб мовчки відкинути відповідь
</Accordion>
</AccordionGroup>
## Цитування відповіді
WhatsApp підтримує нативне цитування відповіді, коли вихідні відповіді візуально цитують вхідне повідомлення. Керуйте цим через `channels.whatsapp.replyToMode`.
WhatsApp підтримує нативне цитування відповіді, де вихідні відповіді візуально цитують вхідне повідомлення. Керуйте цим за допомогою `channels.whatsapp.replyToMode`.
| Значення | Поведінка |
| -------- | ---------------------------------------------------------------------------------- |
| `"auto"` | Цитувати вхідне повідомлення, коли провайдер це підтримує; інакше пропускати цитування |
| Value | Поведінка |
| -------- | --------------------------------------------------------------------------------- |
| `"auto"` | Цитувати вхідне повідомлення, якщо provider це підтримує; інакше пропускати цитування |
| `"on"` | Завжди цитувати вхідне повідомлення; якщо цитування відхилено, перейти до звичайного надсилання |
| `"off"` | Ніколи не цитувати; надсилати як звичайне повідомлення |
| `"off"` | Ніколи не цитувати; надсилати як звичайне повідомлення |
Типове значення`"auto"`. Перевизначення для облікових записів використовують `channels.whatsapp.accounts.<id>.replyToMode`.
Значення за замовчуванням`"auto"`. Перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts.<id>.replyToMode`.
```json5
{
@ -362,18 +362,18 @@ WhatsApp підтримує нативне цитування відповіді
## Рівень реакцій
`channels.whatsapp.reactionLevel` визначає, наскільки широко агент використовує emoji-реакції у WhatsApp:
`channels.whatsapp.reactionLevel` визначає, наскільки широко агент використовує емодзі-реакції в WhatsApp:
| Рівень | Ack-реакції | Ініційовані агентом реакції | Опис |
| ------------ | ----------- | --------------------------- | ------------------------------------------------ |
| `"off"` | Ні | Ні | Жодних реакцій |
| `"ack"` | Так | Ні | Лише ack-реакції (квитанція до відповіді) |
| `"minimal"` | Так | Так (обережно) | Ack + реакції агента з обережними рекомендаціями |
| `"extensive"`| Так | Так (заохочується) | Ack + реакції агента з рекомендованим використанням |
| Level | Реакції-підтвердження | Реакції, ініційовані агентом | Опис |
| ------------- | --------------------- | ---------------------------- | ------------------------------------------------ |
| `"off"` | Ні | Ні | Жодних реакцій |
| `"ack"` | Так | Ні | Лише реакції-підтвердження (підтвердження до відповіді) |
| `"minimal"` | Так | Так (консервативно) | Підтвердження + реакції агента з консервативними рекомендаціями |
| `"extensive"` | Так | Так (заохочуються) | Підтвердження + реакції агента із заохочувальними рекомендаціями |
Типово: `"minimal"`.
За замовчуванням: `"minimal"`.
Перевизначення для облікових записів використовують `channels.whatsapp.accounts.<id>.reactionLevel`.
Перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts.<id>.reactionLevel`.
```json5
{
@ -387,8 +387,8 @@ WhatsApp підтримує нативне цитування відповіді
## Реакції-підтвердження
WhatsApp підтримує негайні ack-реакції після отримання вхідного повідомлення через `channels.whatsapp.ackReaction`.
Ack-реакції залежать від `reactionLevel` — вони пригнічуються, коли `reactionLevel` має значення `"off"`.
WhatsApp підтримує негайні реакції-підтвердження після отримання вхідного повідомлення через `channels.whatsapp.ackReaction`.
Реакції-підтвердження обмежуються `reactionLevel` — вони пригнічуються, коли `reactionLevel` має значення `"off"`.
```json5
{
@ -406,9 +406,9 @@ Ack-реакції залежать від `reactionLevel` — вони приг
Примітки щодо поведінки:
- надсилається одразу після прийняття вхідного повідомлення (до відповіді)
- збої логуються, але не блокують звичайну доставку відповіді
- режим групи `mentions` реагує на кроки, активовані згадуванням; групова активація `always` діє як обхід цієї перевірки
- надсилаються негайно після прийняття вхідного повідомлення (до відповіді)
- збої журналюються, але не блокують звичайну доставку відповіді
- у режимі груп `mentions` реагування відбувається на ходах, активованих згадкою; активація групи `always` працює як обхід цієї перевірки
- WhatsApp використовує `channels.whatsapp.ackReaction` (застарілий `messages.ackReaction` тут не використовується)
## Кілька облікових записів і облікові дані
@ -416,20 +416,20 @@ Ack-реакції залежать від `reactionLevel` — вони приг
<AccordionGroup>
<Accordion title="Вибір облікового запису та значення за замовчуванням">
- ідентифікатори облікових записів беруться з `channels.whatsapp.accounts`
- вибір облікового запису за замовчуванням: `default`, якщо присутній, інакше перший налаштований ідентифікатор облікового запису (після сортування)
- вибір облікового запису за замовчуванням: `default`, якщо присутній, інакше перший налаштований ідентифікатор облікового запису (відсортований)
- ідентифікатори облікових записів внутрішньо нормалізуються для пошуку
</Accordion>
<Accordion title="Шляхи до облікових даних і сумісність зі старими варіантами">
<Accordion title="Шляхи до облікових даних і сумісність зі застарілими варіантами">
- поточний шлях автентифікації: `~/.openclaw/credentials/whatsapp/<accountId>/creds.json`
- резервний файл: `creds.json.bak`
- стара автентифікація за замовчуванням у `~/.openclaw/credentials/` усе ще розпізнається/мігрується для сценаріїв з обліковим записом за замовчуванням
- застаріла стандартна автентифікація в `~/.openclaw/credentials/` усе ще розпізнається/мігрується для сценаріїв стандартного облікового запису
</Accordion>
<Accordion title="Поведінка під час виходу">
`openclaw channels logout --channel whatsapp [--account <id>]` очищає стан автентифікації WhatsApp для цього облікового запису.
<Accordion title="Поведінка виходу">
`openclaw channels logout --channel whatsapp [--account <id>]` очищує стан автентифікації WhatsApp для цього облікового запису.
У старих каталогах автентифікації `oauth.json` зберігається, а файли автентифікації Baileys видаляються.
У каталогах застарілої автентифікації `oauth.json` зберігається, тоді як файли автентифікації Baileys видаляються.
</Accordion>
</AccordionGroup>
@ -440,13 +440,13 @@ Ack-реакції залежать від `reactionLevel` — вони приг
- Обмеження дій:
- `channels.whatsapp.actions.reactions`
- `channels.whatsapp.actions.polls`
- Запис конфігурації, ініційований каналом, увімкнений за замовчуванням (вимикається через `channels.whatsapp.configWrites=false`).
- Записи конфігурації, ініційовані каналом, увімкнені за замовчуванням (вимкнення через `channels.whatsapp.configWrites=false`).
## Усунення несправностей
<AccordionGroup>
<Accordion title="Не прив’язано (потрібен QR)">
Симптом: статус каналу повідомляє, що прив’язка відсутня.
Симптом: статус каналу повідомляє, що його не прив’язано.
Виправлення:
@ -467,61 +467,61 @@ Ack-реакції залежать від `reactionLevel` — вони приг
openclaw logs --follow
```
За потреби повторно прив’яжіть через `channels login`.
За потреби прив’яжіть повторно через `channels login`.
</Accordion>
<Accordion title="Немає активного слухача під час надсилання">
Вихідні надсилання швидко завершуються помилкою, якщо для цільового облікового запису немає активного слухача gateway.
Вихідні надсилання швидко завершуються помилкою, якщо для цільового облікового запису не існує активного слухача Gateway.
Переконайтеся, що gateway запущений і обліковий запис прив’язаний.
Переконайтеся, що Gateway запущено і обліковий запис прив’язано.
</Accordion>
<Accordion title="Повідомлення групи неочікувано ігноруються">
<Accordion title="Групові повідомлення неочікувано ігноруються">
Перевіряйте в такому порядку:
- `groupPolicy`
- `groupAllowFrom` / `allowFrom`
- записи списку дозволів `groups`
- обмеження за згадуванням (`requireMention` + шаблони згадувань)
- дубльовані ключі в `openclaw.json` (JSON5): пізніші записи перевизначають попередні, тому зберігайте лише один `groupPolicy` на кожну область
- записи allowlist у `groups`
- фільтр згадок (`requireMention` + шаблони згадок)
- дубльовані ключі в `openclaw.json` (JSON5): пізніші записи перевизначають попередні, тож зберігайте лише один `groupPolicy` на область
</Accordion>
<Accordion title="Попередження про середовище виконання Bun">
Середовище виконання gateway для WhatsApp має використовувати Node. Bun позначено як несумісний зі стабільною роботою gateway WhatsApp/Telegram.
<Accordion title="Попередження середовища виконання Bun">
Середовище виконання Gateway для WhatsApp має використовувати Node. Bun позначено як несумісний для стабільної роботи Gateway WhatsApp/Telegram.
</Accordion>
</AccordionGroup>
## Системні prompts
## Системні запити
WhatsApp підтримує системні prompts у стилі Telegram для груп і прямих чатів через мапи `groups` і `direct`.
WhatsApp підтримує системні запити в стилі Telegram для груп і прямих чатів через мапи `groups` і `direct`.
Ієрархія визначення для групових повідомлень:
Ефективна мапа `groups` визначається спочатку: якщо обліковий запис має власну `groups`, вона повністю замінює кореневу мапу `groups` (без deep merge). Потім пошук prompt виконується за результуючою єдиною мапою:
Спочатку визначається ефективна мапа `groups`: якщо обліковий запис визначає власну `groups`, вона повністю замінює кореневу мапу `groups` (без глибокого злиття). Потім пошук запиту виконується в отриманій єдиній мапі:
1. **Системний prompt для конкретної групи** (`groups["<groupId>"].systemPrompt`): використовується, якщо запис конкретної групи визначає `systemPrompt`.
2. **Системний prompt wildcard для груп** (`groups["*"].systemPrompt`): використовується, коли запис конкретної групи відсутній або не визначає `systemPrompt`.
1. **Системний запит для конкретної групи** (`groups["<groupId>"].systemPrompt`): використовується, якщо запис конкретної групи визначає `systemPrompt`.
2. **Системний запит wildcard для груп** (`groups["*"].systemPrompt`): використовується, коли запис конкретної групи відсутній або не визначає `systemPrompt`.
Ієрархія визначення для прямих повідомлень:
Ефективна мапа `direct` визначається спочатку: якщо обліковий запис має власну `direct`, вона повністю замінює кореневу мапу `direct` (без deep merge). Потім пошук prompt виконується за результуючою єдиною мапою:
Спочатку визначається ефективна мапа `direct`: якщо обліковий запис визначає власну `direct`, вона повністю замінює кореневу мапу `direct` (без глибокого злиття). Потім пошук запиту виконується в отриманій єдиній мапі:
1. **Системний prompt для конкретного прямого чату** (`direct["<peerId>"].systemPrompt`): використовується, якщо запис конкретного peer визначає `systemPrompt`.
2. **Системний prompt wildcard для прямих чатів** (`direct["*"].systemPrompt`): використовується, коли запис конкретного peer відсутній або не визначає `systemPrompt`.
1. **Системний запит для конкретного прямого чату** (`direct["<peerId>"].systemPrompt`): використовується, якщо запис конкретного співрозмовника визначає `systemPrompt`.
2. **Системний запит wildcard для прямих чатів** (`direct["*"].systemPrompt`): використовується, коли запис конкретного співрозмовника відсутній або не визначає `systemPrompt`.
Примітка: `dms` залишається спрощеним контейнером перевизначення історії для окремих DM (`dms.<id>.historyLimit`); перевизначення prompt розміщуються в `direct`.
Примітка: `dms` залишається полегшеним контейнером перевизначень історії для окремих DM (`dms.<id>.historyLimit`); перевизначення запитів розміщуються в `direct`.
**Відмінність від поведінки Telegram з кількома обліковими записами:** У Telegram коренева `groups` навмисно пригнічується для всіх облікових записів у конфігурації з кількома обліковими записами — навіть для тих, що не визначають власної `groups` — щоб бот не отримував групові повідомлення для груп, до яких він не належить. WhatsApp не застосовує цей захист: кореневі `groups` і кореневі `direct` завжди успадковуються обліковими записами, які не визначають перевизначення на рівні облікового запису, незалежно від кількості налаштованих облікових записів. У конфігурації WhatsApp з кількома обліковими записами, якщо ви хочете мати поканальні prompts для груп або прямих чатів, явно визначайте повну мапу в кожному обліковому записі, а не покладайтеся на типові значення кореневого рівня.
**Відмінність від поведінки Telegram з кількома обліковими записами:** у Telegram кореневу `groups` навмисно пригнічено для всіх облікових записів у конфігурації з кількома обліковими записами — навіть для тих, що не визначають власну `groups` — щоб запобігти отриманню ботом групових повідомлень від груп, до яких він не належить. У WhatsApp цей захист не застосовується: кореневі `groups` і кореневі `direct` завжди успадковуються обліковими записами, які не визначають перевизначення на рівні облікового запису, незалежно від кількості налаштованих облікових записів. У конфігурації WhatsApp з кількома обліковими записами, якщо вам потрібні запити для груп або прямих чатів окремо для кожного облікового запису, явно визначайте повну мапу в межах кожного облікового запису, а не покладайтеся на кореневі значення за замовчуванням.
Важлива поведінка:
- `channels.whatsapp.groups` — це і мапа конфігурації для окремих груп, і список дозволів груп на рівні чату. На кореневому рівні або в області облікового запису `groups["*"]` означає «усі групи допущено» для цієї області.
- Додавайте wildcard `systemPrompt` для груп лише тоді, коли ви вже хочете, щоб ця область допускала всі групи. Якщо ви все ще хочете, щоб придатним був лише фіксований набір ідентифікаторів груп, не використовуйте `groups["*"]` як значення prompt за замовчуванням. Натомість повторіть prompt у кожному явно дозволеному записі групи.
- Допуск групи та авторизація відправника — це окремі перевірки. `groups["*"]` розширює набір груп, які можуть потрапити до обробки груп, але сам по собі не авторизує кожного відправника в цих групах. Доступ відправника, як і раніше, окремо контролюється через `channels.whatsapp.groupPolicy` і `channels.whatsapp.groupAllowFrom`.
- `channels.whatsapp.direct` не має такого ж побічного ефекту для DM. `direct["*"]` лише надає типову конфігурацію прямого чату після того, як DM уже допущено через `dmPolicy` плюс правила `allowFrom` або pairing-store.
- `channels.whatsapp.groups` є і мапою конфігурації для кожної групи, і allowlist груп на рівні чату. У кореневій області або в області облікового запису `groups["*"]` означає «усі групи допущено» для цієї області.
- Додавайте wildcard `systemPrompt` для груп лише тоді, коли ви вже хочете, щоб ця область допускала всі групи. Якщо вам усе ще потрібно, щоб придатними були лише фіксований набір ідентифікаторів груп, не використовуйте `groups["*"]` для запиту за замовчуванням. Натомість повторіть запит у кожному явно дозволеному записі групи.
- Допуск групи та авторизація відправника — це окремі перевірки. `groups["*"]` розширює набір груп, які можуть потрапити до обробки груп, але саме по собі не авторизує кожного відправника в цих групах. Доступ відправників усе ще окремо контролюється через `channels.whatsapp.groupPolicy` і `channels.whatsapp.groupAllowFrom`.
- `channels.whatsapp.direct` не має такого побічного ефекту для DM. `direct["*"]` лише надає стандартну конфігурацію прямого чату після того, як DM уже допущено за `dmPolicy` плюс `allowFrom` або правилами pairing-store.
Приклад:
@ -530,31 +530,31 @@ WhatsApp підтримує системні prompts у стилі Telegram дл
channels: {
whatsapp: {
groups: {
// Використовуйте лише якщо на кореневому рівні мають допускатися всі групи.
// Використовуйте лише якщо в кореневій області слід допускати всі групи.
// Застосовується до всіх облікових записів, які не визначають власну мапу groups.
"*": { systemPrompt: "Типовий prompt для всіх груп." },
"*": { systemPrompt: "Стандартний запит для всіх груп." },
},
direct: {
// Застосовується до всіх облікових записів, які не визначають власну мапу direct.
"*": { systemPrompt: "Типовий prompt для всіх прямих чатів." },
"*": { systemPrompt: "Стандартний запит для всіх прямих чатів." },
},
accounts: {
work: {
groups: {
// Цей обліковий запис визначає власну groups, тому коренева groups повністю
// замінюється. Щоб зберегти wildcard, явно визначте тут і "*" також.
// Цей обліковий запис визначає власні groups, тому кореневі groups
// повністю замінюються. Щоб зберегти wildcard, явно визначте тут і "*" також.
"120363406415684625@g.us": {
requireMention: false,
systemPrompt: "Зосередься на керуванні проєктами.",
systemPrompt: "Зосереджуйся на управлінні проєктами.",
},
// Використовуйте лише якщо в цьому обліковому записі мають допускатися всі групи.
"*": { systemPrompt: "Типовий prompt для робочих груп." },
// Використовуйте лише якщо в цьому обліковому записі слід допускати всі групи.
"*": { systemPrompt: "Стандартний запит для робочих груп." },
},
direct: {
// Цей обліковий запис визначає власну мапу direct, тому кореневі записи direct
// повністю замінюються. Щоб зберегти wildcard, явно визначте тут і "*" також.
"+15551234567": { systemPrompt: "Prompt для конкретного робочого прямого чату." },
"*": { systemPrompt: "Типовий prompt для робочих прямих чатів." },
"+15551234567": { systemPrompt: "Запит для конкретного робочого прямого чату." },
"*": { systemPrompt: "Стандартний запит для робочих прямих чатів." },
},
},
},
@ -569,18 +569,18 @@ WhatsApp підтримує системні prompts у стилі Telegram дл
- [Довідник конфігурації - WhatsApp](/uk/gateway/configuration-reference#whatsapp)
Високопріоритетні поля WhatsApp:
Ключові поля WhatsApp:
- доступ: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`
- доставка: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `sendReadReceipts`, `ackReaction`, `reactionLevel`
- кілька облікових записів: `accounts.<id>.enabled`, `accounts.<id>.authDir`, перевизначення на рівні облікового запису
- операції: `configWrites`, `debounceMs`, `web.enabled`, `web.heartbeatSeconds`, `web.reconnect.*`
- поведінка сесії: `session.dmScope`, `historyLimit`, `dmHistoryLimit`, `dms.<id>.historyLimit`
- prompts: `groups.<id>.systemPrompt`, `groups["*"].systemPrompt`, `direct.<id>.systemPrompt`, `direct["*"].systemPrompt`
- запити: `groups.<id>.systemPrompt`, `groups["*"].systemPrompt`, `direct.<id>.systemPrompt`, `direct["*"].systemPrompt`
## Пов’язане
- [Pairing](/uk/channels/pairing)
- [Прив’язування](/uk/channels/pairing)
- [Групи](/uk/channels/groups)
- [Безпека](/uk/gateway/security)
- [Маршрутизація каналів](/uk/channels/channel-routing)