chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-26 16:56:41 +00:00
parent 733566bc2b
commit c7ed57567b

View File

@ -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 — сполучення для невідомих відправників.
</Card>
<Card title="Усунення несправностей каналу" icon="wrench" href="/uk/channels/troubleshooting">
Діагностика між каналами та сценарії виправлення.
Міжканальна діагностика та сценарії відновлення.
</Card>
<Card title="Конфігурація Gateway" icon="settings" href="/uk/gateway/configuration">
Повні шаблони та приклади конфігурації каналу.
<Card title="Налаштування Gateway" icon="settings" href="/uk/gateway/configuration">
Повні шаблони та приклади конфігурації каналів.
</Card>
</CardGroup>
@ -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
</Step>
<Step title="Схваліть перший запит на сполучення (якщо використовується режим сполучення)">
<Step title="Схваліть перший запит на сполучення (якщо використовується режим pairing)">
```bash
openclaw pairing list whatsapp
openclaw pairing approve whatsapp <CODE>
```
Термін дії запитів на сполучення спливає через 1 годину. Кількість очікувальних запитів обмежена 3 на канал.
Запити на сполучення спливають через 1 годину. Кількість запитів у стані очікування обмежена до 3 на канал.
</Step>
</Steps>
<Note>
OpenClaw рекомендує, за можливості, використовувати WhatsApp на окремому номері. (Метадані каналу та процес налаштування оптимізовані для такого сценарію, але також підтримуються сценарії з особистим номером.)
OpenClaw рекомендує, за можливості, запускати WhatsApp на окремому номері. (Метадані каналу та процес налаштування оптимізовані для такого сценарію, але конфігурації з особистим номером також підтримуються.)
</Note>
## Шаблони розгортання
@ -114,7 +114,7 @@ OpenClaw рекомендує, за можливості, використову
- окрема ідентичність WhatsApp для OpenClaw
- чіткіші allowlist для DM і межі маршрутизації
- менша ймовірність плутанини з чатом із самим собою
- нижча ймовірність плутанини із самочатом
Мінімальний шаблон політики:
@ -131,19 +131,19 @@ OpenClaw рекомендує, за можливості, використову
</Accordion>
<Accordion title="Резервний варіант із особистим номером">
Онбординг підтримує режим особистого номера й записує базову конфігурацію, дружню до чату із самим собою:
<Accordion title="Резервний варіант з особистим номером">
Початкове налаштування підтримує режим особистого номера і записує базову конфігурацію, дружню до самочату:
- `dmPolicy: "allowlist"`
- `allowFrom` містить ваш особистий номер
- `selfChatMode: true`
Під час виконання захист для чату із самим собою прив’язується до підключеного власного номера та `allowFrom`.
Під час виконання захист самочату прив’язується до пов’язаного власного номера та `allowFrom`.
</Accordion>
<Accordion title="Охоплення каналу лише для WhatsApp Web">
Канал платформи обміну повідомленнями у поточній архітектурі каналів OpenClaw базується на WhatsApp Web (`Baileys`).
<Accordion title="Область каналу лише для WhatsApp Web">
Канал платформи обміну повідомленнями в поточній архітектурі каналів 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:<agentId>:whatsapp:group:<jid>`).
- Транспорт 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.
## Керування доступом і активація
## Контроль доступу та активація
<Tabs>
<Tab title="Політика DM">
@ -208,55 +209,55 @@ WhatsApp не транслює вхідні payload `message_received` хукі
- `pairing` (типово)
- `allowlist`
- `open` (вимагає, щоб `allowFrom` містив `"*"`)
- `open` (потрібно, щоб `allowFrom` містив `"*"`)
- `disabled`
`allowFrom` приймає номери у форматі E.164 (внутрішньо нормалізуються).
`allowFrom` приймає номери у стилі E.164 (внутрішньо нормалізуються).
Перевизначення для кількох облікових записів: `channels.whatsapp.accounts.<id>.dmPolicy` (і `allowFrom`) мають пріоритет над типовими значеннями на рівні каналу для цього облікового запису.
Деталі поведінки під час виконання:
- сполучення зберігаються в allow-store каналу та об’єднуються з налаштованим `allowFrom`
- якщо allowlist не налаштовано, пов’язаний власний номер дозволяється за замовчуванням
- OpenClaw ніколи не виконує автоматичне сполучення для вихідних `fromMe` DM (повідомлень, які ви надсилаєте собі з пов’язаного пристрою)
- сполучення зберігаються у channel allow-store і об’єднуються з налаштованим `allowFrom`
- якщо allowlist не налаштовано, пов’язаний власний номер дозволяється типово
- OpenClaw ніколи не виконує автоматичне сполучення вихідних DM `fromMe` (повідомлень, які ви надсилаєте собі з пов’язаного пристрою)
</Tab>
<Tab title="Групова політика + allowlist">
<Tab title="Політика груп + allowlist">
Доступ до груп має два рівні:
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`.
</Tab>
<Tab title="Згадки + /activation">
Відповіді в групах за замовчуванням вимагають згадки.
За замовчуванням відповіді в групі потребують згадки.
Виявлення згадок включає:
Визначення згадки включає:
- явні згадки 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` оновлює стан сесії (а не глобальну конфігурацію). Вона обмежена власником.
</Tab>
</Tabs>
## Особистий номер і поведінка чату із самим собою
## Поведінка особистого номера та самочату
Коли пов’язаний власний номер також присутній у `allowFrom`, активується захист чату із самим собою в WhatsApp:
Коли пов’язаний власний номер також присутній у `allowFrom`, активується захист самочату WhatsApp:
- пропускати read receipts для ходів у чаті із самим собою
- ігнорувати поведінку автоматичного тригера mention-JID, яка інакше надсилала б згадку вам самим
- якщо `messages.responsePrefix` не встановлено, відповіді в чаті із самим собою за замовчуванням використовують `[{identity.name}]` або `[openclaw]`
- пропускати read receipts для ходів самочату
- ігнорувати поведінку автозапуску mention-JID, яка інакше могла б пінгувати вас самих
- якщо `messages.responsePrefix` не встановлено, відповіді в самочаті типово використовують `[{identity.name}]` або `[openclaw]`
## Нормалізація повідомлень і контекст
<AccordionGroup>
<Accordion title="Вхідний конверт + контекст відповіді">
Вхідні повідомлення WhatsApp загортаються у спільний вхідний конверт.
Вхідні повідомлення WhatsApp обгортаються у спільний вхідний конверт.
Якщо існує цитована відповідь, контекст додається в такому вигляді:
Якщо існує цитована відповідь, контекст додається в такій формі:
```text
[Replying to <sender> id:<stanzaId>]
[Відповідь на <sender> id:<stanzaId>]
<quoted body or media placeholder>
[/Replying]
[/Відповідь]
```
Метадані відповіді також заповнюються, коли доступні (`ReplyToId`, `ReplyToBody`, `ReplyToSender`, JID/E.164 відправника).
Метадані відповіді також заповнюються, коли доступні (`ReplyToId`, `ReplyToBody`, `ReplyToSender`, sender JID/E.164).
</Accordion>
<Accordion title="Заповнювачі медіа та витягування локації/контактів">
Вхідні повідомлення лише з медіа нормалізуються з такими заповнювачами:
<Accordion title="Заповнювачі медіа та видобування location/contact">
Вхідні повідомлення лише з медіа нормалізуються із заповнювачами на кшталт:
- `<media:image>`
- `<media:video>`
@ -304,34 +305,34 @@ WhatsApp не транслює вхідні payload `message_received` хукі
- `<media:document>`
- `<media:sticker>`
Авторизовані голосові повідомлення в групах транскрибуються до перевірки згадки, коли
тіло містить лише `<media:audio>`, тому згадка бота в голосовому повідомленні
може спровокувати відповідь. Якщо транскрипт усе одно не містить згадки бота,
Авторизовані голосові повідомлення в групі транскрибуються до перевірки згадки, коли
тіло повідомлення — лише `<media:audio>`, тож згадка бота в голосовому повідомленні може
запустити відповідь. Якщо транскрипт усе ще не містить згадки бота,
транскрипт зберігається в історії очікування групи замість сирого заповнювача.
Тіла повідомлень із локацією використовують стислий текст координат. Мітки/коментарі локацій і деталі контакту/vCard відображаються як огороджені ненадійні метадані, а не як вбудований текст prompt.
Тіла location використовують стислий текст координат. Мітки/коментарі location та деталі contact/vCard відображаються як fenced недовірені метадані, а не як вбудований текст prompt.
</Accordion>
<Accordion title="Ін’єкція історії очікування групи">
Для груп необроблені повідомлення можуть буферизуватися та вставлятися як контекст, коли бот нарешті активується.
Для груп необроблені повідомлення можуть буферизуватися та ін’єктуватися як контекст, коли бот нарешті активується.
- типове обмеження: `50`
- конфігурація: `channels.whatsapp.historyLimit`
- резервне значення: `messages.groupChat.historyLimit`
- резервний варіант: `messages.groupChat.historyLimit`
- `0` вимикає
Маркери вставки:
Маркери ін’єкції:
- `[Chat messages since your last reply - for context]`
- `[Current message - respond to this]`
- `[Повідомлення чату з вашої останньої відповіді — для контексту]`
- `[Поточне повідомлення — дайте відповідь на нього]`
</Accordion>
<Accordion title="Підтвердження прочитання">
Підтвердження прочитання увімкнено за замовчуванням для прийнятих вхідних повідомлень WhatsApp.
Підтвердження прочитання увімкнено типово для прийнятих вхідних повідомлень WhatsApp.
Вимкнення глобально:
Вимкнути глобально:
```json5
{
@ -343,7 +344,7 @@ WhatsApp не транслює вхідні payload `message_received` хукі
}
```
Перевизначення для кожного облікового запису:
Перевизначення для окремого облікового запису:
```json5
{
@ -359,7 +360,7 @@ WhatsApp не транслює вхідні payload `message_received` хукі
}
```
Для ходів у чаті із самим собою підтвердження прочитання пропускаються навіть тоді, коли вони глобально увімкнені.
Для ходів самочату підтвердження прочитання пропускаються навіть коли вони глобально увімкнені.
</Accordion>
</AccordionGroup>
@ -370,40 +371,40 @@ WhatsApp не транслює вхідні payload `message_received` хукі
<Accordion title="Розбиття тексту на частини">
- типове обмеження частини: `channels.whatsapp.textChunkLimit = 4000`
- `channels.whatsapp.chunkMode = "length" | "newline"`
- режим `newline` надає перевагу межам абзаців (порожнім рядкам), а потім переходить до безпечного за довжиною розбиття
- режим `newline` надає перевагу межам абзаців (порожні рядки), а потім повертається до безпечного за довжиною розбиття
</Accordion>
<Accordion title="Поведінка вихідних медіа">
- підтримуються 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://` або локальні шляхи
</Accordion>
<Accordion title="Обмеження розміру медіа та резервна поведінка">
- обмеження збереження вхідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`)
- обмеження надсилання вихідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`)
- ліміт збереження вхідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`)
- ліміт надсилання вихідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`)
- перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts.<accountId>.mediaMaxMb`
- зображення автоматично оптимізуються (зміна розміру/підбір якості), щоб відповідати обмеженням
- у разі помилки надсилання медіа резервний варіант для першого елемента надсилає текстове попередження замість того, щоб мовчки відкинути відповідь
- зображення автоматично оптимізуються (перебір розміру/якості), щоб відповідати обмеженням
- у разі помилки надсилання медіа резервний варіант для першого елемента надсилає текстове попередження замість тихого скидання відповіді
</Accordion>
</AccordionGroup>
## Цитування у відповідях
WhatsApp підтримує нативне цитування відповідей, коли вихідні відповіді видимо цитують вхідне повідомлення. Керування здійснюється через `channels.whatsapp.replyToMode`.
WhatsApp підтримує нативне цитування у відповідях, коли вихідні відповіді видимо цитують вхідне повідомлення. Це керується через `channels.whatsapp.replyToMode`.
| Значення | Поведінка |
| ----------- | --------------------------------------------------------------------- |
| `"off"` | Ніколи не цитувати; надсилати як звичайне повідомлення |
| `"first"` | Цитувати лише першу частину вихідної відповіді |
| `"all"` | Цитувати кожну частину вихідної відповіді |
| `"batched"` | Цитувати поставлені в чергу пакетні відповіді, лишаючи негайні без цитування |
| `"batched"` | Цитувати поставлені в чергу пакетні відповіді, залишаючи негайні відповіді без цитування |
Типове значення — `"off"`. Перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts.<id>.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.<id>.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 підтримує негайні реакції підтверджен
<AccordionGroup>
<Accordion title="Вибір облікового запису та типові значення">
- ідентифікатори облікових записів беруться з `channels.whatsapp.accounts`
- вибір типового облікового запису: `default`, якщо присутній, інакше перший налаштований ідентифікатор облікового запису (після сортування)
- ідентифікатори облікових записів нормалізуються внутрішньо для пошуку
- вибір типового облікового запису: `default`, якщо присутній, інакше перший налаштований ідентифікатор облікового запису (відсортований)
- ідентифікатори облікових записів внутрішньо нормалізуються для пошуку
</Accordion>
<Accordion title="Шляхи до облікових даних і сумісність із застарілими варіантами">
<Accordion title="Шляхи до облікових даних і сумісність зі застарілими варіантами">
- поточний шлях автентифікації: `~/.openclaw/credentials/whatsapp/<accountId>/creds.json`
- резервний файл: `creds.json.bak`
- застаріла типова автентифікація в `~/.openclaw/credentials/` усе ще розпізнається/мігрує для потоків типового облікового запису
- застаріла типова автентифікація в `~/.openclaw/credentials/` усе ще розпізнається/мігрується для сценаріїв типового облікового запису
</Accordion>
<Accordion title="Поведінка виходу">
`openclaw channels logout --channel whatsapp [--account <id>]` очищає стан автентифікації WhatsApp для цього облікового запису.
У застарілих каталогах автентифікації `oauth.json` зберігається, а файли автентифікації Baileys видаляються.
У каталогах застарілої автентифікації `oauth.json` зберігається, тоді як файли автентифікації Baileys видаляються.
</Accordion>
</AccordionGroup>
## Інструменти, дії та запис конфігурації
## Інструменти, дії та записи конфігурації
- Підтримка інструментів агента включає дію реакції WhatsApp (`react`).
- Обмеження дій:
- `channels.whatsapp.actions.reactions`
- `channels.whatsapp.actions.polls`
- Запис конфігурації, ініційований каналом, увімкнений за замовчуванням (вимкнення через `channels.whatsapp.configWrites=false`).
- Записи конфігурації, ініційовані каналом, увімкнено типово (вимкнення через `channels.whatsapp.configWrites=false`).
## Усунення несправностей
<AccordionGroup>
<Accordion title="Не пов’язано (потрібен QR)">
Симптом: статус каналу показує, що зв’язок не встановлено.
Симптом: статус каналу повідомляє, що канал не пов’язано.
Виправлення:
@ -514,8 +515,12 @@ WhatsApp підтримує негайні реакції підтверджен
</Accordion>
<Accordion title="Пов’язано, але відключено / цикл перепідключення">
Симптом: пов’язаний обліковий запис із повторними відключеннями або спробами перепідключення.
<Accordion title="Пов’язано, але відключено / цикл повторного підключення">
Симптом: пов’язаний обліковий запис із повторюваними відключеннями або спробами повторного підключення.
Тихі облікові записи можуть залишатися підключеними довше за звичайний тайм-аут повідомлень; watchdog
перезапускає з’єднання, коли зупиняється транспортна активність WhatsApp Web, сокет закривається або
активність на рівні застосунку залишається тихою довше за розширене безпечне вікно.
Виправлення:
@ -524,14 +529,14 @@ WhatsApp підтримує негайні реакції підтверджен
openclaw logs --follow
```
За потреби повторно встановіть зв’язок через `channels login`.
За потреби повторно пов’яжіть через `channels login`.
</Accordion>
<Accordion title="Немає активного слухача під час надсилання">
Вихідні надсилання швидко завершуються з помилкою, якщо для цільового облікового запису немає активного слухача Gateway.
Вихідні надсилання завершуються з помилкою одразу, якщо для цільового облікового запису немає активного слухача Gateway.
Переконайтеся, що Gateway запущено та обліковий запис пов’язано.
Переконайтеся, що Gateway запущено і обліковий запис пов’язано.
</Accordion>
@ -541,13 +546,13 @@ WhatsApp підтримує негайні реакції підтверджен
- `groupPolicy`
- `groupAllowFrom` / `allowFrom`
- записи allowlist у `groups`
- перевірка згадок (`requireMention` + шаблони згадок)
- дублікати ключів у `openclaw.json` (JSON5): пізніші записи перевизначають попередні, тому зберігайте лише один `groupPolicy` для кожної області
- обмеження згадкою (`requireMention` + шаблони згадок)
- дубльовані ключі в `openclaw.json` (JSON5): пізніші записи перевизначають попередні, тож зберігайте лише один `groupPolicy` на область
</Accordion>
<Accordion title="Попередження про середовище виконання Bun">
Для середовища виконання Gateway WhatsApp слід використовувати Node. Bun позначено як несумісний для стабільної роботи Gateway WhatsApp/Telegram.
<Accordion title="Попередження середовища виконання Bun">
Середовище виконання Gateway для WhatsApp має використовувати Node. Bun позначено як несумісне для стабільної роботи Gateway WhatsApp/Telegram.
</Accordion>
</AccordionGroup>
@ -557,28 +562,28 @@ WhatsApp підтримує системні prompt у стилі Telegram дл
Ієрархія визначення для групових повідомлень:
Спочатку визначається ефективна мапа `groups`: якщо обліковий запис визначає власну `groups`, вона повністю замінює кореневу мапу `groups` (без глибокого злиття). Потім пошук prompt виконується в отриманій єдиній мапі:
Спочатку визначається ефективна мапа `groups`: якщо обліковий запис має власний `groups`, він повністю замінює кореневу мапу `groups` (без deep merge). Потім пошук prompt виконується за єдиною результуючою мапою:
1. **Системний prompt для конкретної групи** (`groups["<groupId>"].systemPrompt`): використовується, коли запис конкретної групи існує в мапі **і** в ньому визначено ключ `systemPrompt`. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard пригнічується і системний prompt не застосовується.
2. **Системний prompt wildcard для груп** (`groups["*"].systemPrompt`): використовується, коли запис конкретної групи повністю відсутній у мапі або коли він існує, але не визначає ключ `systemPrompt`.
1. **Системний prompt для конкретної групи** (`groups["<groupId>"].systemPrompt`): використовується, коли запис конкретної групи існує в мапі **і** його ключ `systemPrompt` визначено. Якщо `systemPrompt` — порожній рядок (`""`), wildcard пригнічується і системний prompt не застосовується.
2. **Wildcard-системний prompt групи** (`groups["*"].systemPrompt`): використовується, коли запис конкретної групи повністю відсутній у мапі або коли він існує, але не має ключа `systemPrompt`.
Ієрархія визначення для прямих повідомлень:
Спочатку визначається ефективна мапа `direct`: якщо обліковий запис визначає власну `direct`, вона повністю замінює кореневу мапу `direct` (без глибокого злиття). Потім пошук prompt виконується в отриманій єдиній мапі:
Спочатку визначається ефективна мапа `direct`: якщо обліковий запис має власний `direct`, він повністю замінює кореневу мапу `direct` (без deep merge). Потім пошук prompt виконується за єдиною результуючою мапою:
1. **Системний prompt для конкретного прямого чату** (`direct["<peerId>"].systemPrompt`): використовується, коли запис конкретного співрозмовника існує в мапі **і** в ньому визначено ключ `systemPrompt`. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard пригнічується і системний prompt не застосовується.
2. **Системний prompt wildcard для прямих чатів** (`direct["*"].systemPrompt`): використовується, коли запис конкретного співрозмовника повністю відсутній у мапі або коли він існує, але не визначає ключ `systemPrompt`.
1. **Системний prompt для конкретного прямого чату** (`direct["<peerId>"].systemPrompt`): використовується, коли запис конкретного peer існує в мапі **і** його ключ `systemPrompt` визначено. Якщо `systemPrompt` — порожній рядок (`""`), wildcard пригнічується і системний prompt не застосовується.
2. **Wildcard-системний prompt прямого чату** (`direct["*"].systemPrompt`): використовується, коли запис конкретного peer повністю відсутній у мапі або коли він існує, але не має ключа `systemPrompt`.
Примітка: `dms` залишається спрощеним контейнером перевизначень історії для окремих DM (`dms.<id>.historyLimit`); перевизначення prompt містяться в `direct`.
Примітка: `dms` лишається спрощеним контейнером перевизначення історії для окремих DM (`dms.<id>.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: