From 8937382ae6a844dcb30d06da064ce2f1c5404a31 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Thu, 23 Apr 2026 17:21:35 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/channels/groups.md | 190 ++++++++++----------- docs/uk/channels/whatsapp.md | 310 +++++++++++++++++------------------ 2 files changed, 250 insertions(+), 250 deletions(-) diff --git a/docs/uk/channels/groups.md b/docs/uk/channels/groups.md index 5e3c08152..bb9a07ed7 100644 --- a/docs/uk/channels/groups.md +++ b/docs/uk/channels/groups.md @@ -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: { "": { ... } }` (без ключа `"*"`) | -| Лише ви можете активувати відповіді в групах | `groupPolicy: "allowlist"`, `groupAllowFrom: ["+1555..."]` | +| Лише ви можете запускати в групах | `groupPolicy: "allowlist"`, `groupAllowFrom: ["+1555..."]` | ## Ключі сесій - Групові сесії використовують ключі сесій `agent:::group:` (кімнати/канали використовують `agent:::channel:`). -- Теми форуму Telegram додають `:topic:` до ідентифікатора групи, тому кожна тема має власну сесію. +- Теми форумів Telegram додають `:topic:` до ідентифікатора групи, тому кожна тема має власну сесію. - Прямі чати використовують основну сесію (або окрему для кожного відправника, якщо це налаштовано). - Heartbeat пропускаються для групових сесій. @@ -87,26 +87,26 @@ otherwise -> reply ## Шаблон: особисті DM + публічні групи (один агент) -Так — це добре працює, якщо ваш «особистий» трафік — це **DM**, а ваш «публічний» трафік — це **групи**. +Так — це добре працює, якщо ваш «особистий» трафік — це **DM**, а «публічний» трафік — це **групи**. -Чому: у режимі одного агента DM зазвичай потрапляють до **основного** ключа сесії (`agent:main:main`), тоді як групи завжди використовують **неосновні** ключі сесії (`agent:main::group:`). Якщо ввімкнути ізоляцію через `mode: "non-main"`, ці групові сесії працюватимуть у налаштованому backend ізоляції, а ваша основна DM-сесія залишиться на хості. Якщо ви не виберете backend явно, за замовчуванням використовується Docker. +Чому: у режимі одного агента DM зазвичай потрапляють в **основний** ключ сесії (`agent:main:main`), тоді як групи завжди використовують **неосновні** ключі сесії (`agent:main::group:`). Якщо ви ввімкнете ізоляцію через `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`, коли воно доступне, у форматі `:`. +- Мітки інтерфейсу використовують `displayName`, коли він доступний, у форматі `:`. - `#room` зарезервовано для кімнат/каналів; групові чати використовують `g-` (нижній регістр, пробіли -> `-`, зберігати `#@+._-`). -## Політика груп +## Групова політика Керує тим, як обробляються повідомлення груп/кімнат для кожного каналу: @@ -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..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.` відсутній), політика груп переходить у fail-closed режим (зазвичай `allowlist`) замість успадкування `channels.defaults.groupPolicy`. +- Погодження парування для DM (записи в сховищі `*-allowFrom`) застосовуються лише до доступу в DM; авторизація відправників у групах залишається явно прив’язаною до групових списків дозволених. +- Discord: список дозволених використовує `channels.discord.guilds..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.` відсутній), групова політика переходить у 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..historyLimit` (або `channels..accounts.*.historyLimit`) для перевизначень. Встановіть `0`, щоб вимкнути. +- `mentionPatterns` — це безпечні regex-шаблони, нечутливі до регістру; невалідні шаблони та небезпечні форми з вкладеними повтореннями ігноруються. +- Поверхні, що надають явні згадки, усе одно пропускаються; шаблони є резервним варіантом. +- Перевизначення на рівні агента: `agents.list[].groupChat.mentionPatterns` (корисно, коли кілька агентів працюють у спільній групі). +- Обмеження за згадками застосовується лише тоді, коли виявлення згадок можливе (є нативні згадки або налаштовано `mentionPatterns`). +- Значення за замовчуванням для Discord містяться в `channels.discord.guilds."*"` (можна перевизначати для окремого guild/channel). +- Контекст історії груп загортається однаково в усіх каналах і є **лише pending-only** (повідомлення, пропущені через обмеження за згадками); використовуйте `messages.groupChat.historyLimit` для глобального значення за замовчуванням і `channels..historyLimit` (або `channels..accounts.*.historyLimit`) для перевизначень. Установіть `0`, щоб вимкнути. ## Обмеження інструментів для груп/каналів (необов’язково) -Деякі конфігурації каналів підтримують обмеження на те, які інструменти доступні **в межах конкретної групи/кімнати/каналу**. +Деякі конфігурації каналів підтримують обмеження того, які інструменти доступні **всередині конкретної групи/кімнати/каналу**. - `tools`: дозволити/заборонити інструменти для всієї групи. -- `toolsBySender`: перевизначення для окремих відправників у межах групи. +- `toolsBySender`: перевизначення для окремих відправників усередині групи. Використовуйте явні префікси ключів: - `id:`, `e164:`, `username:`, `name:` і wildcard `"*"`. - Старі ключі без префікса все ще приймаються та зіставляються лише як `id:`. + `id:`, `e164:`, `username:`, `name:` і шаблон `"*"`. + Історичні ключі без префікса все ще приймаються і зіставляються лише як `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:`. -- Переглянути чати: `imsg chats --limit 20`. -- Відповіді в групі завжди повертаються до того самого `chat_id`. +- Віддавайте перевагу `chat_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 (впровадження історії, подробиці обробки згадок). diff --git a/docs/uk/channels/whatsapp.md b/docs/uk/channels/whatsapp.md index fbeecdf9c..f6a999074 100644 --- a/docs/uk/channels/whatsapp.md +++ b/docs/uk/channels/whatsapp.md @@ -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 ``` - - Типова політика DM для невідомих відправників — pairing. + + Типова політика DM — прив’язування для невідомих відправників. Міжканальна діагностика та сценарії відновлення. - + Повні шаблони та приклади конфігурації каналів. @@ -77,7 +77,7 @@ openclaw channels login --channel whatsapp --account work - + ```bash openclaw gateway @@ -85,31 +85,31 @@ openclaw gateway - + ```bash openclaw pairing list whatsapp openclaw pairing approve whatsapp ``` - Строк дії запитів на pairing спливає через 1 годину. Кількість запитів, що очікують, обмежена до 3 на канал. + Термін дії запитів на прив’язування спливає через 1 годину. Кількість запитів у стані очікування обмежена до 3 на канал. -OpenClaw рекомендує за можливості запускати WhatsApp на окремому номері. (Метадані каналу та процес налаштування оптимізовані для такого варіанта, але конфігурації з особистим номером також підтримуються.) +OpenClaw рекомендує, за можливості, використовувати WhatsApp з окремим номером. (Метадані каналу та сценарій налаштування оптимізовані для такого варіанта, але конфігурації з особистим номером також підтримуються.) -## Схеми розгортання +## Шаблони розгортання - Це найзручніший режим з погляду експлуатації: + Це найчистіший операційний режим: - окремий ідентифікатор WhatsApp для OpenClaw - - чіткіші списки дозволів DM і межі маршрутизації - - менша ймовірність плутанини із self-chat + - зрозуміліші allowlist для DM та межі маршрутизації + - менша ймовірність плутанини із самочатом Мінімальний шаблон політики: @@ -126,18 +126,18 @@ OpenClaw рекомендує за можливості запускати Whats - - Onboarding підтримує режим особистого номера і записує базову конфігурацію, зручну для self-chat: + + Онбординг підтримує режим особистого номера та записує базову конфігурацію, дружню до самочату: - `dmPolicy: "allowlist"` - `allowFrom` містить ваш особистий номер - `selfChatMode: true` - Під час виконання захист self-chat спирається на прив’язаний власний номер і `allowFrom`. + Під час виконання захисти самочату спираються на прив’язаний власний номер і `allowFrom`. - + Канал платформи обміну повідомленнями в поточній архітектурі каналів 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::whatsapp:group:`). -- Транспорт 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 `channels.whatsapp.dmPolicy` керує доступом до прямих чатів: - - `pairing` (типово) + - `pairing` (за замовчуванням) - `allowlist` - - `open` (вимагає, щоб `allowFrom` містив `"*"`) + - `open` (потрібно, щоб `allowFrom` містив `"*"`) - `disabled` - `allowFrom` приймає номери у форматі E.164 (внутрішньо нормалізуються). + `allowFrom` приймає номери у стилі E.164 (внутрішньо нормалізуються). - Перевизначення для кількох облікових записів: `channels.whatsapp.accounts..dmPolicy` (і `allowFrom`) мають пріоритет над типовими значеннями на рівні каналу для цього облікового запису. + Перевизначення для кількох облікових записів: `channels.whatsapp.accounts..dmPolicy` (і `allowFrom`) мають пріоритет над значеннями каналу за замовчуванням для цього облікового запису. - Докладно про поведінку під час виконання: + Деталі поведінки під час виконання: - - pairing-зв’язки зберігаються в allow-store каналу та об’єднуються з налаштованим `allowFrom` - - якщо список дозволів не налаштовано, прив’язаний власний номер дозволяється за замовчуванням - - вихідні DM `fromMe` ніколи не проходять auto-paired + - прив’язування зберігаються в allow-store каналу та об’єднуються з налаштованим `allowFrom` + - якщо allowlist не налаштовано, прив’язаний власний номер дозволяється за замовчуванням + - вихідні `fromMe` DM ніколи не проходять автоприв’язування - + Доступ до груп має два рівні: - 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`. - - Відповіді в групах за замовчуванням вимагають згадування. + + За замовчуванням для відповідей у групі потрібна згадка. - Виявлення згадувань включає: + Визначення згадки включає: - - явні згадування 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` оновлює стан сесії (а не глобальну конфігурацію). Доступ до неї обмежено власником. -## Поведінка особистого номера та 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]` ## Нормалізація повідомлень і контекст - - Вхідні повідомлення WhatsApp обгортаються у спільний вхідний конверт. + + Вхідні повідомлення WhatsApp загортаються у спільну вхідну оболонку. - Якщо існує цитована відповідь, контекст додається в такому вигляді: + Якщо існує цитована відповідь, контекст додається в такій формі: ```text - [Replying to id:] + [Відповідь на id:] - [/Replying] + [/Відповідь] ``` - Поля метаданих відповіді також заповнюються, коли доступні (`ReplyToId`, `ReplyToBody`, `ReplyToSender`, sender JID/E.164). + Поля метаданих відповіді також заповнюються, коли вони доступні (`ReplyToId`, `ReplyToBody`, `ReplyToSender`, JID/E.164 відправника). - Вхідні повідомлення, що містять лише медіа, нормалізуються за допомогою заповнювачів, таких як: + Вхідні повідомлення лише з медіа нормалізуються за допомогою заповнювачів, таких як: - `` - `` @@ -257,27 +257,27 @@ OpenClaw рекомендує за можливості запускати Whats - `` - `` - Дані локації та контакту нормалізуються в текстовий контекст перед маршрутизацією. + Для локацій у вмісті використовується стислий текст координат. Мітки/коментарі локацій і деталі contact/vCard відображаються як огороджені недовірені метадані, а не як вбудований текст запиту. - - Для груп необроблені повідомлення можуть буферизуватися та вставлятися як контекст, коли бот нарешті активується. + + Для груп необроблені повідомлення можуть буферизуватися та ін’єктуватися як контекст, коли бот нарешті буде активовано. - - типове обмеження: `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]` + - `[Повідомлення чату з вашої останньої відповіді — для контексту]` + - `[Поточне повідомлення — дайте відповідь на нього]` - - Read receipts увімкнені за замовчуванням для прийнятих вхідних повідомлень WhatsApp. + + Підтвердження прочитання увімкнені за замовчуванням для прийнятих вхідних повідомлень WhatsApp. Вимкнення глобально: @@ -291,7 +291,7 @@ OpenClaw рекомендує за можливості запускати Whats } ``` - Перевизначення для облікового запису: + Перевизначення для окремого облікового запису: ```json5 { @@ -307,48 +307,48 @@ OpenClaw рекомендує за можливості запускати Whats } ``` - Для self-chat read receipts пропускаються, навіть якщо глобально вони увімкнені. + Для ходів самочату підтвердження прочитання пропускаються, навіть коли вони глобально увімкнені. -## Доставка, поділ на частини та медіа +## Доставка, розбиття на частини та медіа - - - типове обмеження частини: `channels.whatsapp.textChunkLimit = 4000` + + - обмеження розміру частини за замовчуванням: `channels.whatsapp.textChunkLimit = 4000` - `channels.whatsapp.chunkMode = "length" | "newline"` - - режим `newline` надає перевагу межам абзаців (порожні рядки), а потім резервно використовує безпечний поділ за довжиною + - режим `newline` надає перевагу межам абзаців (порожнім рядкам), а потім резервно переходить до безпечного за довжиною розбиття - - підтримуються зображення, відео, аудіо (голосові 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://` або локальні шляхи - - ліміт збереження вхідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`) - - ліміт надсилання вихідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`) - - перевизначення для облікових записів використовують `channels.whatsapp.accounts..mediaMaxMb` - - зображення автоматично оптимізуються (підбір розміру/якості), щоб укладатися в ліміти - - у разі помилки надсилання медіа резервний механізм для першого елемента надсилає текстове попередження замість того, щоб мовчки відкинути відповідь + - ліміт збереження вхідних медіа: `channels.whatsapp.mediaMaxMb` (за замовчуванням `50`) + - ліміт надсилання вихідних медіа: `channels.whatsapp.mediaMaxMb` (за замовчуванням `50`) + - перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts..mediaMaxMb` + - зображення автоматично оптимізуються (перебір зміни розміру/якості), щоб відповідати лімітам + - у разі збою надсилання медіа резервна логіка для першого елемента надсилає текстове попередження замість того, щоб мовчки відкинути відповідь ## Цитування відповіді -WhatsApp підтримує нативне цитування відповіді, коли вихідні відповіді візуально цитують вхідне повідомлення. Керуйте цим через `channels.whatsapp.replyToMode`. +WhatsApp підтримує нативне цитування відповіді, де вихідні відповіді візуально цитують вхідне повідомлення. Керуйте цим за допомогою `channels.whatsapp.replyToMode`. -| Значення | Поведінка | -| -------- | ---------------------------------------------------------------------------------- | -| `"auto"` | Цитувати вхідне повідомлення, коли провайдер це підтримує; інакше пропускати цитування | +| Value | Поведінка | +| -------- | --------------------------------------------------------------------------------- | +| `"auto"` | Цитувати вхідне повідомлення, якщо provider це підтримує; інакше пропускати цитування | | `"on"` | Завжди цитувати вхідне повідомлення; якщо цитування відхилено, перейти до звичайного надсилання | -| `"off"` | Ніколи не цитувати; надсилати як звичайне повідомлення | +| `"off"` | Ніколи не цитувати; надсилати як звичайне повідомлення | -Типове значення — `"auto"`. Перевизначення для облікових записів використовують `channels.whatsapp.accounts..replyToMode`. +Значення за замовчуванням — `"auto"`. Перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts..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..reactionLevel`. +Перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts..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` — вони приг - ідентифікатори облікових записів беруться з `channels.whatsapp.accounts` - - вибір облікового запису за замовчуванням: `default`, якщо присутній, інакше — перший налаштований ідентифікатор облікового запису (після сортування) + - вибір облікового запису за замовчуванням: `default`, якщо присутній, інакше перший налаштований ідентифікатор облікового запису (відсортований) - ідентифікатори облікових записів внутрішньо нормалізуються для пошуку - + - поточний шлях автентифікації: `~/.openclaw/credentials/whatsapp//creds.json` - резервний файл: `creds.json.bak` - - стара автентифікація за замовчуванням у `~/.openclaw/credentials/` усе ще розпізнається/мігрується для сценаріїв з обліковим записом за замовчуванням + - застаріла стандартна автентифікація в `~/.openclaw/credentials/` усе ще розпізнається/мігрується для сценаріїв стандартного облікового запису - - `openclaw channels logout --channel whatsapp [--account ]` очищає стан автентифікації WhatsApp для цього облікового запису. + + `openclaw channels logout --channel whatsapp [--account ]` очищує стан автентифікації WhatsApp для цього облікового запису. - У старих каталогах автентифікації `oauth.json` зберігається, а файли автентифікації Baileys видаляються. + У каталогах застарілої автентифікації `oauth.json` зберігається, тоді як файли автентифікації Baileys видаляються. @@ -440,13 +440,13 @@ Ack-реакції залежать від `reactionLevel` — вони приг - Обмеження дій: - `channels.whatsapp.actions.reactions` - `channels.whatsapp.actions.polls` -- Запис конфігурації, ініційований каналом, увімкнений за замовчуванням (вимикається через `channels.whatsapp.configWrites=false`). +- Записи конфігурації, ініційовані каналом, увімкнені за замовчуванням (вимкнення через `channels.whatsapp.configWrites=false`). ## Усунення несправностей - Симптом: статус каналу повідомляє, що прив’язка відсутня. + Симптом: статус каналу повідомляє, що його не прив’язано. Виправлення: @@ -467,61 +467,61 @@ Ack-реакції залежать від `reactionLevel` — вони приг openclaw logs --follow ``` - За потреби повторно прив’яжіть через `channels login`. + За потреби прив’яжіть повторно через `channels login`. - Вихідні надсилання швидко завершуються помилкою, якщо для цільового облікового запису немає активного слухача gateway. + Вихідні надсилання швидко завершуються помилкою, якщо для цільового облікового запису не існує активного слухача Gateway. - Переконайтеся, що gateway запущений і обліковий запис прив’язаний. + Переконайтеся, що Gateway запущено і обліковий запис прив’язано. - + Перевіряйте в такому порядку: - `groupPolicy` - `groupAllowFrom` / `allowFrom` - - записи списку дозволів `groups` - - обмеження за згадуванням (`requireMention` + шаблони згадувань) - - дубльовані ключі в `openclaw.json` (JSON5): пізніші записи перевизначають попередні, тому зберігайте лише один `groupPolicy` на кожну область + - записи allowlist у `groups` + - фільтр згадок (`requireMention` + шаблони згадок) + - дубльовані ключі в `openclaw.json` (JSON5): пізніші записи перевизначають попередні, тож зберігайте лише один `groupPolicy` на область - - Середовище виконання gateway для WhatsApp має використовувати Node. Bun позначено як несумісний зі стабільною роботою gateway WhatsApp/Telegram. + + Середовище виконання Gateway для WhatsApp має використовувати Node. Bun позначено як несумісний для стабільної роботи Gateway WhatsApp/Telegram. -## Системні prompts +## Системні запити -WhatsApp підтримує системні prompts у стилі Telegram для груп і прямих чатів через мапи `groups` і `direct`. +WhatsApp підтримує системні запити в стилі Telegram для груп і прямих чатів через мапи `groups` і `direct`. Ієрархія визначення для групових повідомлень: -Ефективна мапа `groups` визначається спочатку: якщо обліковий запис має власну `groups`, вона повністю замінює кореневу мапу `groups` (без deep merge). Потім пошук prompt виконується за результуючою єдиною мапою: +Спочатку визначається ефективна мапа `groups`: якщо обліковий запис визначає власну `groups`, вона повністю замінює кореневу мапу `groups` (без глибокого злиття). Потім пошук запиту виконується в отриманій єдиній мапі: -1. **Системний prompt для конкретної групи** (`groups[""].systemPrompt`): використовується, якщо запис конкретної групи визначає `systemPrompt`. -2. **Системний prompt wildcard для груп** (`groups["*"].systemPrompt`): використовується, коли запис конкретної групи відсутній або не визначає `systemPrompt`. +1. **Системний запит для конкретної групи** (`groups[""].systemPrompt`): використовується, якщо запис конкретної групи визначає `systemPrompt`. +2. **Системний запит wildcard для груп** (`groups["*"].systemPrompt`): використовується, коли запис конкретної групи відсутній або не визначає `systemPrompt`. Ієрархія визначення для прямих повідомлень: -Ефективна мапа `direct` визначається спочатку: якщо обліковий запис має власну `direct`, вона повністю замінює кореневу мапу `direct` (без deep merge). Потім пошук prompt виконується за результуючою єдиною мапою: +Спочатку визначається ефективна мапа `direct`: якщо обліковий запис визначає власну `direct`, вона повністю замінює кореневу мапу `direct` (без глибокого злиття). Потім пошук запиту виконується в отриманій єдиній мапі: -1. **Системний prompt для конкретного прямого чату** (`direct[""].systemPrompt`): використовується, якщо запис конкретного peer визначає `systemPrompt`. -2. **Системний prompt wildcard для прямих чатів** (`direct["*"].systemPrompt`): використовується, коли запис конкретного peer відсутній або не визначає `systemPrompt`. +1. **Системний запит для конкретного прямого чату** (`direct[""].systemPrompt`): використовується, якщо запис конкретного співрозмовника визначає `systemPrompt`. +2. **Системний запит wildcard для прямих чатів** (`direct["*"].systemPrompt`): використовується, коли запис конкретного співрозмовника відсутній або не визначає `systemPrompt`. -Примітка: `dms` залишається спрощеним контейнером перевизначення історії для окремих DM (`dms..historyLimit`); перевизначення prompt розміщуються в `direct`. +Примітка: `dms` залишається полегшеним контейнером перевизначень історії для окремих DM (`dms..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..enabled`, `accounts..authDir`, перевизначення на рівні облікового запису - операції: `configWrites`, `debounceMs`, `web.enabled`, `web.heartbeatSeconds`, `web.reconnect.*` - поведінка сесії: `session.dmScope`, `historyLimit`, `dmHistoryLimit`, `dms..historyLimit` -- prompts: `groups..systemPrompt`, `groups["*"].systemPrompt`, `direct..systemPrompt`, `direct["*"].systemPrompt` +- запити: `groups..systemPrompt`, `groups["*"].systemPrompt`, `direct..systemPrompt`, `direct["*"].systemPrompt` ## Пов’язане -- [Pairing](/uk/channels/pairing) +- [Прив’язування](/uk/channels/pairing) - [Групи](/uk/channels/groups) - [Безпека](/uk/gateway/security) - [Маршрутизація каналів](/uk/channels/channel-routing)