diff --git a/docs/uk/channels/whatsapp.md b/docs/uk/channels/whatsapp.md
index 3e34063eb..752012253 100644
--- a/docs/uk/channels/whatsapp.md
+++ b/docs/uk/channels/whatsapp.md
@@ -1,26 +1,26 @@
---
read_when:
- Робота над поведінкою каналу WhatsApp/web або маршрутизацією вхідних повідомлень
-summary: Підтримка каналу WhatsApp, керування доступом, поведінка доставки та операції
+summary: Підтримка каналу WhatsApp, засоби контролю доступу, поведінка доставки та операції
title: WhatsApp
x-i18n:
- generated_at: "2026-04-26T04:50:03Z"
+ generated_at: "2026-04-26T16:54:55Z"
model: gpt-5.4
provider: openai
- source_hash: fd4217adb673bc4c071fc1bff6994fb214966c2b28fe59253a1a6f4b4b7fcdba
+ source_hash: 120a41eabfd7eb2a68555609f8f8282025ecedf54fae9846e85f78f5de2825a1
source_path: channels/whatsapp.md
workflow: 15
---
-Статус: готовий до продакшену через WhatsApp Web (Baileys). Gateway керує пов’язаною сесією(ями).
+Статус: готовий до production через WhatsApp Web (Baileys). Gateway керує пов’язаними сесіями.
## Встановлення (за потреби)
-- Онбординг (`openclaw onboard`) і `openclaw channels add --channel whatsapp`
- пропонують встановити Plugin WhatsApp, коли ви вперше його вибираєте.
-- `openclaw channels login --channel whatsapp` також пропонує процес встановлення, якщо
+- Під час початкового налаштування (`openclaw onboard`) і `openclaw channels add --channel whatsapp`
+ буде запропоновано встановити Plugin WhatsApp, коли ви вперше виберете його.
+- `openclaw channels login --channel whatsapp` також пропонує процес встановлення, коли
Plugin ще не встановлено.
-- Канал розробки + git checkout: за замовчуванням використовується локальний шлях до Plugin.
+- Канал для розробки + git checkout: за замовчуванням використовується локальний шлях Plugin.
- Stable/Beta: за замовчуванням використовується npm-пакет `@openclaw/whatsapp`.
Ручне встановлення також доступне:
@@ -34,10 +34,10 @@ openclaw plugins install @openclaw/whatsapp
Типова політика DM — сполучення для невідомих відправників.
- Діагностика між каналами та сценарії виправлення.
+ Міжканальна діагностика та сценарії відновлення.
-
- Повні шаблони та приклади конфігурації каналу.
+
+ Повні шаблони та приклади конфігурації каналів.
@@ -67,13 +67,13 @@ openclaw plugins install @openclaw/whatsapp
openclaw channels login --channel whatsapp
```
- Для певного облікового запису:
+ Для конкретного облікового запису:
```bash
openclaw channels login --channel whatsapp --account work
```
- Щоб підключити наявний/власний каталог автентифікації WhatsApp Web перед входом:
+ Щоб під’єднати наявний/власний каталог автентифікації WhatsApp Web перед входом:
```bash
openclaw channels add --channel whatsapp --account work --auth-dir /path/to/wa-auth
@@ -90,20 +90,20 @@ openclaw gateway
-
+
```bash
openclaw pairing list whatsapp
openclaw pairing approve whatsapp
```
- Термін дії запитів на сполучення спливає через 1 годину. Кількість очікувальних запитів обмежена 3 на канал.
+ Запити на сполучення спливають через 1 годину. Кількість запитів у стані очікування обмежена до 3 на канал.
-OpenClaw рекомендує, за можливості, використовувати WhatsApp на окремому номері. (Метадані каналу та процес налаштування оптимізовані для такого сценарію, але також підтримуються сценарії з особистим номером.)
+OpenClaw рекомендує, за можливості, запускати WhatsApp на окремому номері. (Метадані каналу та процес налаштування оптимізовані для такого сценарію, але конфігурації з особистим номером також підтримуються.)
## Шаблони розгортання
@@ -114,7 +114,7 @@ OpenClaw рекомендує, за можливості, використову
- окрема ідентичність WhatsApp для OpenClaw
- чіткіші allowlist для DM і межі маршрутизації
- - менша ймовірність плутанини з чатом із самим собою
+ - нижча ймовірність плутанини із самочатом
Мінімальний шаблон політики:
@@ -131,19 +131,19 @@ OpenClaw рекомендує, за можливості, використову
-
- Онбординг підтримує режим особистого номера й записує базову конфігурацію, дружню до чату із самим собою:
+
+ Початкове налаштування підтримує режим особистого номера і записує базову конфігурацію, дружню до самочату:
- `dmPolicy: "allowlist"`
- `allowFrom` містить ваш особистий номер
- `selfChatMode: true`
- Під час виконання захист для чату із самим собою прив’язується до підключеного власного номера та `allowFrom`.
+ Під час виконання захист самочату прив’язується до пов’язаного власного номера та `allowFrom`.
-
- Канал платформи обміну повідомленнями у поточній архітектурі каналів OpenClaw базується на WhatsApp Web (`Baileys`).
+
+ Канал платформи обміну повідомленнями в поточній архітектурі каналів OpenClaw базується на WhatsApp Web (`Baileys`).
Окремого каналу обміну повідомленнями Twilio WhatsApp у вбудованому реєстрі чат-каналів немає.
@@ -152,19 +152,20 @@ OpenClaw рекомендує, за можливості, використову
## Модель виконання
-- Gateway керує сокетом WhatsApp і циклом перепідключення.
+- Gateway керує сокетом WhatsApp і циклом повторного підключення.
+- Watchdog повторного підключення використовує активність транспорту WhatsApp Web, а не лише обсяг вхідних повідомлень застосунку, тому тиха сесія пов’язаного пристрою не перезапускається лише через те, що ніхто не надсилав повідомлень останнім часом. Довше обмеження тиші на рівні застосунку все ж примусово викликає повторне підключення, якщо транспортні фрейми продовжують надходити, але жодні повідомлення застосунку не обробляються в межах вікна watchdog.
- Для вихідних надсилань потрібен активний слухач WhatsApp для цільового облікового запису.
- Чати статусів і розсилок ігноруються (`@status`, `@broadcast`).
- Прямі чати використовують правила сесій 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 для каналу.
- Коли увімкнено `messages.removeAckAfterReply`, OpenClaw очищає реакцію підтвердження WhatsApp після доставки видимої відповіді.
## Хуки Plugin і конфіденційність
-Вхідні повідомлення WhatsApp можуть містити особистий вміст повідомлень, номери телефонів,
-ідентифікатори груп, імена відправників і поля кореляції сесій. З цієї причини
-WhatsApp не транслює вхідні payload `message_received` хуків до Plugin
+Вхідні повідомлення WhatsApp можуть містити особистий вміст повідомлень, номери
+телефонів, ідентифікатори груп, імена відправників і поля кореляції сесій. З цієї причини
+WhatsApp не транслює вхідні payload хуку `message_received` до Plugin
без вашої явної згоди:
```json5
@@ -197,10 +198,10 @@ WhatsApp не транслює вхідні payload `message_received` хукі
}
```
-Увімкніть це лише для Plugin, яким ви довіряєте отримання вхідного вмісту
-повідомлень WhatsApp та ідентифікаторів.
+Увімкніть це лише для тих Plugin, яким ви довіряєте отримання вмісту
+та ідентифікаторів вхідних повідомлень WhatsApp.
-## Керування доступом і активація
+## Контроль доступу та активація
@@ -208,55 +209,55 @@ WhatsApp не транслює вхідні payload `message_received` хукі
- `pairing` (типово)
- `allowlist`
- - `open` (вимагає, щоб `allowFrom` містив `"*"`)
+ - `open` (потрібно, щоб `allowFrom` містив `"*"`)
- `disabled`
- `allowFrom` приймає номери у форматі E.164 (внутрішньо нормалізуються).
+ `allowFrom` приймає номери у стилі E.164 (внутрішньо нормалізуються).
Перевизначення для кількох облікових записів: `channels.whatsapp.accounts..dmPolicy` (і `allowFrom`) мають пріоритет над типовими значеннями на рівні каналу для цього облікового запису.
Деталі поведінки під час виконання:
- - сполучення зберігаються в allow-store каналу та об’єднуються з налаштованим `allowFrom`
- - якщо allowlist не налаштовано, пов’язаний власний номер дозволяється за замовчуванням
- - OpenClaw ніколи не виконує автоматичне сполучення для вихідних `fromMe` DM (повідомлень, які ви надсилаєте собі з пов’язаного пристрою)
+ - сполучення зберігаються у channel allow-store і об’єднуються з налаштованим `allowFrom`
+ - якщо allowlist не налаштовано, пов’язаний власний номер дозволяється типово
+ - OpenClaw ніколи не виконує автоматичне сполучення вихідних DM `fromMe` (повідомлень, які ви надсилаєте собі з пов’язаного пристрою)
-
+
Доступ до груп має два рівні:
- 1. **Allowlist членства в групі** (`channels.whatsapp.groups`)
- - якщо `groups` пропущено, придатними вважаються всі групи
- - якщо `groups` присутній, він діє як allowlist груп (`"*"` дозволено)
+ 1. **Allowlist членства у групі** (`channels.whatsapp.groups`)
+ - якщо `groups` не вказано, усі групи є потенційно допустимими
+ - якщо `groups` задано, воно діє як group allowlist (дозволено `"*"`)
2. **Політика відправників у групі** (`channels.whatsapp.groupPolicy` + `groupAllowFrom`)
- - `open`: allowlist відправників обходиться
+ - `open`: allowlist відправників оминається
- `allowlist`: відправник має відповідати `groupAllowFrom` (або `*`)
- - `disabled`: блокувати всі вхідні повідомлення груп
+ - `disabled`: блокувати всі вхідні повідомлення з груп
- Резервне значення allowlist відправників:
+ Резервний варіант allowlist відправників:
- - якщо `groupAllowFrom` не задано, під час виконання використовується `allowFrom`, якщо воно доступне
- - allowlist відправників перевіряються перед активацією згадкою/відповіддю
+ - якщо `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"` відправники поза allowlist усе одно блокуються, навіть якщо вони відповідають на повідомлення користувача з allowlist
Команда активації на рівні сесії:
@@ -264,39 +265,39 @@ WhatsApp не транслює вхідні payload `message_received` хукі
- `/activation mention`
- `/activation always`
- `activation` оновлює стан сесії (а не глобальну конфігурацію). Доступ до неї обмежений власником.
+ `activation` оновлює стан сесії (а не глобальну конфігурацію). Вона обмежена власником.
-## Особистий номер і поведінка чату із самим собою
+## Поведінка особистого номера та самочату
-Коли пов’язаний власний номер також присутній у `allowFrom`, активується захист чату із самим собою в WhatsApp:
+Коли пов’язаний власний номер також присутній у `allowFrom`, активується захист самочату WhatsApp:
-- пропускати read receipts для ходів у чаті із самим собою
-- ігнорувати поведінку автоматичного тригера mention-JID, яка інакше надсилала б згадку вам самим
-- якщо `messages.responsePrefix` не встановлено, відповіді в чаті із самим собою за замовчуванням використовують `[{identity.name}]` або `[openclaw]`
+- пропускати read receipts для ходів самочату
+- ігнорувати поведінку автозапуску mention-JID, яка інакше могла б пінгувати вас самих
+- якщо `messages.responsePrefix` не встановлено, відповіді в самочаті типово використовують `[{identity.name}]` або `[openclaw]`
## Нормалізація повідомлень і контекст
- Вхідні повідомлення WhatsApp загортаються у спільний вхідний конверт.
+ Вхідні повідомлення WhatsApp обгортаються у спільний вхідний конверт.
- Якщо існує цитована відповідь, контекст додається в такому вигляді:
+ Якщо існує цитована відповідь, контекст додається в такій формі:
```text
- [Replying to id:]
+ [Відповідь на id:]
- [/Replying]
+ [/Відповідь]
```
- Метадані відповіді також заповнюються, коли доступні (`ReplyToId`, `ReplyToBody`, `ReplyToSender`, JID/E.164 відправника).
+ Метадані відповіді також заповнюються, коли доступні (`ReplyToId`, `ReplyToBody`, `ReplyToSender`, sender JID/E.164).
-
- Вхідні повідомлення лише з медіа нормалізуються з такими заповнювачами:
+
+ Вхідні повідомлення лише з медіа нормалізуються із заповнювачами на кшталт:
- ``
- ``
@@ -304,34 +305,34 @@ WhatsApp не транслює вхідні payload `message_received` хукі
- ``
- ``
- Авторизовані голосові повідомлення в групах транскрибуються до перевірки згадки, коли
- тіло містить лише ``, тому згадка бота в голосовому повідомленні
- може спровокувати відповідь. Якщо транскрипт усе одно не містить згадки бота,
+ Авторизовані голосові повідомлення в групі транскрибуються до перевірки згадки, коли
+ тіло повідомлення — лише ``, тож згадка бота в голосовому повідомленні може
+ запустити відповідь. Якщо транскрипт усе ще не містить згадки бота,
транскрипт зберігається в історії очікування групи замість сирого заповнювача.
- Тіла повідомлень із локацією використовують стислий текст координат. Мітки/коментарі локацій і деталі контакту/vCard відображаються як огороджені ненадійні метадані, а не як вбудований текст prompt.
+ Тіла location використовують стислий текст координат. Мітки/коментарі location та деталі contact/vCard відображаються як fenced недовірені метадані, а не як вбудований текст prompt.
- Для груп необроблені повідомлення можуть буферизуватися та вставлятися як контекст, коли бот нарешті активується.
+ Для груп необроблені повідомлення можуть буферизуватися та ін’єктуватися як контекст, коли бот нарешті активується.
- типове обмеження: `50`
- конфігурація: `channels.whatsapp.historyLimit`
- - резервне значення: `messages.groupChat.historyLimit`
+ - резервний варіант: `messages.groupChat.historyLimit`
- `0` вимикає
- Маркери вставки:
+ Маркери ін’єкції:
- - `[Chat messages since your last reply - for context]`
- - `[Current message - respond to this]`
+ - `[Повідомлення чату з вашої останньої відповіді — для контексту]`
+ - `[Поточне повідомлення — дайте відповідь на нього]`
- Підтвердження прочитання увімкнено за замовчуванням для прийнятих вхідних повідомлень WhatsApp.
+ Підтвердження прочитання увімкнено типово для прийнятих вхідних повідомлень WhatsApp.
- Вимкнення глобально:
+ Вимкнути глобально:
```json5
{
@@ -343,7 +344,7 @@ WhatsApp не транслює вхідні payload `message_received` хукі
}
```
- Перевизначення для кожного облікового запису:
+ Перевизначення для окремого облікового запису:
```json5
{
@@ -359,7 +360,7 @@ WhatsApp не транслює вхідні payload `message_received` хукі
}
```
- Для ходів у чаті із самим собою підтвердження прочитання пропускаються навіть тоді, коли вони глобально увімкнені.
+ Для ходів самочату підтвердження прочитання пропускаються навіть коли вони глобально увімкнені.
@@ -370,40 +371,40 @@ WhatsApp не транслює вхідні payload `message_received` хукі
- типове обмеження частини: `channels.whatsapp.textChunkLimit = 4000`
- `channels.whatsapp.chunkMode = "length" | "newline"`
- - режим `newline` надає перевагу межам абзаців (порожнім рядкам), а потім переходить до безпечного за довжиною розбиття
+ - режим `newline` надає перевагу межам абзаців (порожні рядки), а потім повертається до безпечного за довжиною розбиття
- - підтримуються payload зображень, відео, аудіо (голосові повідомлення PTT) і документів
- - аудіомедіа надсилаються через payload `audio` Baileys з `ptt: true`, тому клієнти WhatsApp відображають їх як голосове повідомлення push-to-talk
- - payload відповідей зберігають `audioAsVoice`; вихід TTS у вигляді голосових повідомлень для WhatsApp залишається на цьому шляху PTT, навіть коли провайдер повертає MP3 або WebM
- - нативне аудіо Ogg/Opus надсилається як `audio/ogg; codecs=opus` для сумісності з голосовими повідомленнями
- - аудіо не у форматі Ogg, включно з MP3/WebM від Microsoft Edge TTS, перед доставкою PTT перекодовується за допомогою `ffmpeg` у моно Ogg/Opus 48 кГц
- - `/tts latest` надсилає останню відповідь асистента як одне голосове повідомлення та пригнічує повторні надсилання для тієї самої відповіді; `/tts chat on|off|default` керує автоматичним TTS для поточного чату WhatsApp
+ - підтримуються payload зображень, відео, аудіо (голосова нотатка PTT) і документів
+ - аудіомедіа надсилаються через payload `audio` у Baileys з `ptt: true`, тому клієнти WhatsApp відображають їх як голосову нотатку push-to-talk
+ - payload відповідей зберігають `audioAsVoice`; вихід TTS голосової нотатки для WhatsApp лишається на цьому шляху PTT навіть тоді, коли провайдер повертає MP3 або WebM
+ - нативне аудіо Ogg/Opus надсилається як `audio/ogg; codecs=opus` для сумісності з голосовими нотатками
+ - аудіо не у форматі Ogg, включно з виходом Microsoft Edge TTS у MP3/WebM, перекодовується за допомогою `ffmpeg` у 48 кГц mono Ogg/Opus перед доставкою як PTT
+ - `/tts latest` надсилає останню відповідь асистента як одну голосову нотатку та пригнічує повторне надсилання для тієї самої відповіді; `/tts chat on|off|default` керує авто-TTS для поточного чату WhatsApp
- відтворення анімованих GIF підтримується через `gifPlayback: true` під час надсилання відео
- - підписи застосовуються до першого елемента медіа під час надсилання payload відповіді з кількома медіа, за винятком того, що PTT-голосові повідомлення надсилають аудіо першим і видимий текст окремо, оскільки клієнти WhatsApp ненадійно відображають підписи голосових повідомлень
- - джерелом медіа може бути HTTP(S), `file://` або локальні шляхи
+ - підписи застосовуються до першого елемента медіа під час надсилання payload відповіді з кількома медіа, окрім того, що голосові нотатки PTT надсилають аудіо спочатку, а видимий текст окремо, оскільки клієнти WhatsApp не відображають підписи до голосових нотаток послідовно
+ - джерелом медіа можуть бути HTTP(S), `file://` або локальні шляхи
- - обмеження збереження вхідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`)
- - обмеження надсилання вихідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`)
+ - ліміт збереження вхідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`)
+ - ліміт надсилання вихідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`)
- перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts..mediaMaxMb`
- - зображення автоматично оптимізуються (зміна розміру/підбір якості), щоб відповідати обмеженням
- - у разі помилки надсилання медіа резервний варіант для першого елемента надсилає текстове попередження замість того, щоб мовчки відкинути відповідь
+ - зображення автоматично оптимізуються (перебір розміру/якості), щоб відповідати обмеженням
+ - у разі помилки надсилання медіа резервний варіант для першого елемента надсилає текстове попередження замість тихого скидання відповіді
## Цитування у відповідях
-WhatsApp підтримує нативне цитування відповідей, коли вихідні відповіді видимо цитують вхідне повідомлення. Керування здійснюється через `channels.whatsapp.replyToMode`.
+WhatsApp підтримує нативне цитування у відповідях, коли вихідні відповіді видимо цитують вхідне повідомлення. Це керується через `channels.whatsapp.replyToMode`.
| Значення | Поведінка |
| ----------- | --------------------------------------------------------------------- |
| `"off"` | Ніколи не цитувати; надсилати як звичайне повідомлення |
| `"first"` | Цитувати лише першу частину вихідної відповіді |
| `"all"` | Цитувати кожну частину вихідної відповіді |
-| `"batched"` | Цитувати поставлені в чергу пакетні відповіді, лишаючи негайні без цитування |
+| `"batched"` | Цитувати поставлені в чергу пакетні відповіді, залишаючи негайні відповіді без цитування |
Типове значення — `"off"`. Перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts..replyToMode`.
@@ -421,14 +422,14 @@ WhatsApp підтримує нативне цитування відповіде
`channels.whatsapp.reactionLevel` визначає, наскільки широко агент використовує emoji-реакції у WhatsApp:
-| Рівень | Реакції підтвердження | Реакції, ініційовані агентом | Опис |
-| ------------- | --------------------- | ---------------------------- | ------------------------------------------------ |
-| `"off"` | Ні | Ні | Жодних реакцій |
-| `"ack"` | Так | Ні | Лише реакції підтвердження (отримання до відповіді) |
-| `"minimal"` | Так | Так (консервативно) | Підтвердження + реакції агента з консервативними вказівками |
-| `"extensive"` | Так | Так (заохочено) | Підтвердження + реакції агента із заохочувальними вказівками |
+| Рівень | Ack-реакції | Реакції, ініційовані агентом | Опис |
+| ------------ | ----------- | ---------------------------- | ------------------------------------------------ |
+| `"off"` | Ні | Ні | Жодних реакцій |
+| `"ack"` | Так | Ні | Лише ack-реакції (підтвердження до відповіді) |
+| `"minimal"` | Так | Так (обережно) | Ack + реакції агента з консервативними вказівками |
+| `"extensive"`| Так | Так (заохочується) | Ack + реакції агента із заохочувальними вказівками |
-Типове значення: `"minimal"`.
+Типово: `"minimal"`.
Перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts..reactionLevel`.
@@ -442,10 +443,10 @@ WhatsApp підтримує нативне цитування відповіде
}
```
-## Реакції підтвердження
+## Реакції-підтвердження
-WhatsApp підтримує негайні реакції підтвердження після отримання вхідного повідомлення через `channels.whatsapp.ackReaction`.
-Реакції підтвердження обмежуються `reactionLevel` — вони пригнічуються, коли `reactionLevel` має значення `"off"`.
+WhatsApp підтримує негайні ack-реакції під час отримання вхідного повідомлення через `channels.whatsapp.ackReaction`.
+Ack-реакції обмежуються `reactionLevel` — вони пригнічуються, коли `reactionLevel` має значення `"off"`.
```json5
{
@@ -464,8 +465,8 @@ WhatsApp підтримує негайні реакції підтверджен
Примітки щодо поведінки:
- надсилаються негайно після прийняття вхідного повідомлення (до відповіді)
-- помилки журналюються, але не блокують звичайну доставку відповіді
-- груповий режим `mentions` реагує на ходи, активовані згадкою; групова активація `always` працює як обхід цієї перевірки
+- збої записуються в журнал, але не блокують звичайну доставку відповіді
+- груповий режим `mentions` реагує на ходи, запущені згадкою; групова активація `always` працює як обхід цієї перевірки
- WhatsApp використовує `channels.whatsapp.ackReaction` (застарілий `messages.ackReaction` тут не використовується)
## Кілька облікових записів і облікові дані
@@ -473,37 +474,37 @@ WhatsApp підтримує негайні реакції підтверджен
- ідентифікатори облікових записів беруться з `channels.whatsapp.accounts`
- - вибір типового облікового запису: `default`, якщо присутній, інакше перший налаштований ідентифікатор облікового запису (після сортування)
- - ідентифікатори облікових записів нормалізуються внутрішньо для пошуку
+ - вибір типового облікового запису: `default`, якщо присутній, інакше перший налаштований ідентифікатор облікового запису (відсортований)
+ - ідентифікатори облікових записів внутрішньо нормалізуються для пошуку
-
+
- поточний шлях автентифікації: `~/.openclaw/credentials/whatsapp//creds.json`
- резервний файл: `creds.json.bak`
- - застаріла типова автентифікація в `~/.openclaw/credentials/` усе ще розпізнається/мігрує для потоків типового облікового запису
+ - застаріла типова автентифікація в `~/.openclaw/credentials/` усе ще розпізнається/мігрується для сценаріїв типового облікового запису
`openclaw channels logout --channel whatsapp [--account ]` очищає стан автентифікації WhatsApp для цього облікового запису.
- У застарілих каталогах автентифікації `oauth.json` зберігається, а файли автентифікації Baileys видаляються.
+ У каталогах застарілої автентифікації `oauth.json` зберігається, тоді як файли автентифікації Baileys видаляються.
-## Інструменти, дії та запис конфігурації
+## Інструменти, дії та записи конфігурації
- Підтримка інструментів агента включає дію реакції WhatsApp (`react`).
- Обмеження дій:
- `channels.whatsapp.actions.reactions`
- `channels.whatsapp.actions.polls`
-- Запис конфігурації, ініційований каналом, увімкнений за замовчуванням (вимкнення через `channels.whatsapp.configWrites=false`).
+- Записи конфігурації, ініційовані каналом, увімкнено типово (вимкнення через `channels.whatsapp.configWrites=false`).
## Усунення несправностей
- Симптом: статус каналу показує, що зв’язок не встановлено.
+ Симптом: статус каналу повідомляє, що канал не пов’язано.
Виправлення:
@@ -514,8 +515,12 @@ WhatsApp підтримує негайні реакції підтверджен
-
- Симптом: пов’язаний обліковий запис із повторними відключеннями або спробами перепідключення.
+
+ Симптом: пов’язаний обліковий запис із повторюваними відключеннями або спробами повторного підключення.
+
+ Тихі облікові записи можуть залишатися підключеними довше за звичайний тайм-аут повідомлень; watchdog
+ перезапускає з’єднання, коли зупиняється транспортна активність WhatsApp Web, сокет закривається або
+ активність на рівні застосунку залишається тихою довше за розширене безпечне вікно.
Виправлення:
@@ -524,14 +529,14 @@ WhatsApp підтримує негайні реакції підтверджен
openclaw logs --follow
```
- За потреби повторно встановіть зв’язок через `channels login`.
+ За потреби повторно пов’яжіть через `channels login`.
- Вихідні надсилання швидко завершуються з помилкою, якщо для цільового облікового запису немає активного слухача Gateway.
+ Вихідні надсилання завершуються з помилкою одразу, якщо для цільового облікового запису немає активного слухача Gateway.
- Переконайтеся, що Gateway запущено та обліковий запис пов’язано.
+ Переконайтеся, що Gateway запущено і обліковий запис пов’язано.
@@ -541,13 +546,13 @@ WhatsApp підтримує негайні реакції підтверджен
- `groupPolicy`
- `groupAllowFrom` / `allowFrom`
- записи allowlist у `groups`
- - перевірка згадок (`requireMention` + шаблони згадок)
- - дублікати ключів у `openclaw.json` (JSON5): пізніші записи перевизначають попередні, тому зберігайте лише один `groupPolicy` для кожної області
+ - обмеження згадкою (`requireMention` + шаблони згадок)
+ - дубльовані ключі в `openclaw.json` (JSON5): пізніші записи перевизначають попередні, тож зберігайте лише один `groupPolicy` на область
-
- Для середовища виконання Gateway WhatsApp слід використовувати Node. Bun позначено як несумісний для стабільної роботи Gateway WhatsApp/Telegram.
+
+ Середовище виконання Gateway для WhatsApp має використовувати Node. Bun позначено як несумісне для стабільної роботи Gateway WhatsApp/Telegram.
@@ -557,28 +562,28 @@ WhatsApp підтримує системні prompt у стилі Telegram дл
Ієрархія визначення для групових повідомлень:
-Спочатку визначається ефективна мапа `groups`: якщо обліковий запис визначає власну `groups`, вона повністю замінює кореневу мапу `groups` (без глибокого злиття). Потім пошук prompt виконується в отриманій єдиній мапі:
+Спочатку визначається ефективна мапа `groups`: якщо обліковий запис має власний `groups`, він повністю замінює кореневу мапу `groups` (без deep merge). Потім пошук prompt виконується за єдиною результуючою мапою:
-1. **Системний prompt для конкретної групи** (`groups[""].systemPrompt`): використовується, коли запис конкретної групи існує в мапі **і** в ньому визначено ключ `systemPrompt`. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard пригнічується і системний prompt не застосовується.
-2. **Системний prompt wildcard для груп** (`groups["*"].systemPrompt`): використовується, коли запис конкретної групи повністю відсутній у мапі або коли він існує, але не визначає ключ `systemPrompt`.
+1. **Системний prompt для конкретної групи** (`groups[""].systemPrompt`): використовується, коли запис конкретної групи існує в мапі **і** його ключ `systemPrompt` визначено. Якщо `systemPrompt` — порожній рядок (`""`), wildcard пригнічується і системний prompt не застосовується.
+2. **Wildcard-системний prompt групи** (`groups["*"].systemPrompt`): використовується, коли запис конкретної групи повністю відсутній у мапі або коли він існує, але не має ключа `systemPrompt`.
Ієрархія визначення для прямих повідомлень:
-Спочатку визначається ефективна мапа `direct`: якщо обліковий запис визначає власну `direct`, вона повністю замінює кореневу мапу `direct` (без глибокого злиття). Потім пошук prompt виконується в отриманій єдиній мапі:
+Спочатку визначається ефективна мапа `direct`: якщо обліковий запис має власний `direct`, він повністю замінює кореневу мапу `direct` (без deep merge). Потім пошук prompt виконується за єдиною результуючою мапою:
-1. **Системний prompt для конкретного прямого чату** (`direct[""].systemPrompt`): використовується, коли запис конкретного співрозмовника існує в мапі **і** в ньому визначено ключ `systemPrompt`. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard пригнічується і системний prompt не застосовується.
-2. **Системний prompt wildcard для прямих чатів** (`direct["*"].systemPrompt`): використовується, коли запис конкретного співрозмовника повністю відсутній у мапі або коли він існує, але не визначає ключ `systemPrompt`.
+1. **Системний prompt для конкретного прямого чату** (`direct[""].systemPrompt`): використовується, коли запис конкретного peer існує в мапі **і** його ключ `systemPrompt` визначено. Якщо `systemPrompt` — порожній рядок (`""`), wildcard пригнічується і системний prompt не застосовується.
+2. **Wildcard-системний prompt прямого чату** (`direct["*"].systemPrompt`): використовується, коли запис конкретного peer повністю відсутній у мапі або коли він існує, але не має ключа `systemPrompt`.
-Примітка: `dms` залишається спрощеним контейнером перевизначень історії для окремих DM (`dms..historyLimit`); перевизначення prompt містяться в `direct`.
+Примітка: `dms` лишається спрощеним контейнером перевизначення історії для окремих DM (`dms..historyLimit`); перевизначення prompt живуть у `direct`.
-**Відмінність від поведінки Telegram з кількома обліковими записами:** у Telegram кореневий `groups` навмисно пригнічується для всіх облікових записів у конфігурації з кількома обліковими записами — навіть для облікових записів, які не визначають власний `groups`, — щоб бот не отримував групові повідомлення для груп, до яких він не належить. WhatsApp не застосовує цей захист: кореневі `groups` і кореневі `direct` завжди успадковуються обліковими записами, які не визначають перевизначення на рівні облікового запису, незалежно від кількості налаштованих облікових записів. У конфігурації WhatsApp з кількома обліковими записами, якщо вам потрібні prompt для груп або прямих чатів на рівні облікового запису, визначайте повну мапу явно під кожним обліковим записом, а не покладайтеся на типові значення кореневого рівня.
+**Відмінність від поведінки Telegram з кількома обліковими записами:** У Telegram кореневий `groups` навмисно пригнічується для всіх облікових записів у конфігурації з кількома обліковими записами — навіть для тих, які не мають власного `groups`, — щоб бот не отримував групові повідомлення для груп, до яких він не належить. WhatsApp не застосовує цей запобіжник: кореневі `groups` і кореневі `direct` завжди успадковуються обліковими записами, які не мають перевизначення на рівні облікового запису, незалежно від кількості налаштованих облікових записів. У конфігурації WhatsApp з кількома обліковими записами, якщо вам потрібні групові або прямі prompt для кожного облікового запису окремо, явно визначайте повну мапу в кожному обліковому записі, а не покладайтеся на кореневі типові значення.
Важлива поведінка:
-- `channels.whatsapp.groups` — це і мапа конфігурації для окремих груп, і allowlist груп на рівні чату. На кореневому рівні або на рівні облікового запису `groups["*"]` означає, що «усі групи допущені» для цієї області.
-- Додавайте wildcard `systemPrompt` для груп лише тоді, коли ви вже хочете, щоб ця область допускала всі групи. Якщо ви все ще хочете, щоб допустимим був лише фіксований набір ідентифікаторів груп, не використовуйте `groups["*"]` для типового prompt. Натомість повторіть prompt у кожному явно внесеному до allowlist записі групи.
-- Допуск груп і авторизація відправників — це окремі перевірки. `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["*"]` як типове значення prompt. Натомість повторіть prompt у кожному явно дозволеному записі групи.
+- Допуск груп і авторизація відправника — це окремі перевірки. `groups["*"]` розширює набір груп, які можуть потрапити до обробки груп, але сам по собі не авторизує кожного відправника в цих групах. Доступ відправників і далі окремо контролюється через `channels.whatsapp.groupPolicy` і `channels.whatsapp.groupAllowFrom`.
+- `channels.whatsapp.direct` не має такого самого побічного ефекту для DM. `direct["*"]` лише надає типову конфігурацію прямого чату після того, як DM вже допущено через `dmPolicy` плюс `allowFrom` або правила pairing-store.
Приклад:
@@ -587,29 +592,29 @@ WhatsApp підтримує системні prompt у стилі Telegram дл
channels: {
whatsapp: {
groups: {
- // Використовуйте лише якщо всі групи мають бути допущені на кореневому рівні.
- // Застосовується до всіх облікових записів, які не визначають власну мапу groups.
+ // Use only if all groups should be admitted at the root scope.
+ // Applies to all accounts that do not define their own groups map.
"*": { systemPrompt: "Типовий prompt для всіх груп." },
},
direct: {
- // Застосовується до всіх облікових записів, які не визначають власну мапу direct.
+ // Applies to all accounts that do not define their own direct map.
"*": { systemPrompt: "Типовий prompt для всіх прямих чатів." },
},
accounts: {
work: {
groups: {
- // Цей обліковий запис визначає власну groups, тому коренева groups повністю
- // замінюється. Щоб зберегти wildcard, явно визначте тут також "*".
+ // This account defines its own groups, so root groups are fully
+ // replaced. To keep a wildcard, define "*" explicitly here too.
"120363406415684625@g.us": {
requireMention: false,
- systemPrompt: "Зосереджуйся на керуванні проєктами.",
+ systemPrompt: "Зосередься на керуванні проєктами.",
},
- // Використовуйте лише якщо всі групи мають бути допущені в цьому обліковому записі.
+ // Use only if all groups should be admitted in this account.
"*": { systemPrompt: "Типовий prompt для робочих груп." },
},
direct: {
- // Цей обліковий запис визначає власну мапу direct, тому кореневі записи direct
- // повністю замінюються. Щоб зберегти wildcard, явно визначте тут також "*".
+ // This account defines its own direct map, so root direct entries are
+ // fully replaced. To keep a wildcard, define "*" explicitly here too.
"+15551234567": { systemPrompt: "Prompt для конкретного робочого прямого чату." },
"*": { systemPrompt: "Типовий prompt для робочих прямих чатів." },
},
@@ -624,7 +629,7 @@ WhatsApp підтримує системні prompt у стилі Telegram дл
Основний довідник:
-- [Довідник конфігурації - WhatsApp](/uk/gateway/config-channels#whatsapp)
+- [Довідник конфігурації — WhatsApp](/uk/gateway/config-channels#whatsapp)
Ключові поля WhatsApp: