chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-25 00:11:05 +00:00
parent 28667ca304
commit 799d823ea5

View File

@ -1,27 +1,27 @@
---
read_when:
- Робота над поведінкою каналу WhatsApp/web або маршрутизацією вхідних повідомлень
summary: Підтримка каналу WhatsApp, керування доступом, поведінка доставки та операції
summary: Підтримка каналу WhatsApp, контроль доступу, поведінка доставки та операції
title: WhatsApp
x-i18n:
generated_at: "2026-04-24T20:11:18Z"
generated_at: "2026-04-25T00:09:31Z"
model: gpt-5.4
provider: openai
source_hash: a74c21cbc178c2e629f6d1273e37e9f8b503d9fedc51bada530c765a1fca0b11
source_hash: d35888ce536d82d52a94c369e85af77447435a09092226fc3317e11edb1f5c71
source_path: channels/whatsapp.md
workflow: 15
---
Статус: готовий до production через WhatsApp Web (Baileys). Gateway володіє прив’язаною сесією(ями).
Статус: готово до використання у production через WhatsApp Web (Baileys). Gateway володіє прив’язаними сесіями.
## Встановлення (за потреби)
- Під час онбордингу (`openclaw onboard`) і `openclaw channels add --channel whatsapp`
вперше, коли ви обираєте його, з’являється запит на встановлення Plugin для WhatsApp.
- Онбординг (`openclaw onboard`) і `openclaw channels add --channel whatsapp`
під час першого вибору пропонують встановити Plugin WhatsApp.
- `openclaw channels login --channel whatsapp` також пропонує процес встановлення,
якщо Plugin ще не встановлено.
- Канал dev + git checkout: типово використовується локальний шлях Plugin.
- Stable/Beta: типово використовується npm-пакет `@openclaw/whatsapp`.
- Канал dev + checkout з git: за замовчуванням використовується локальний шлях Plugin.
- Stable/Beta: за замовчуванням використовується npm-пакет `@openclaw/whatsapp`.
Ручне встановлення також доступне:
@ -30,8 +30,8 @@ openclaw plugins install @openclaw/whatsapp
```
<CardGroup cols={3}>
<Card title="Сполучення" icon="link" href="/uk/channels/pairing">
Типова політика DM — сполучення для невідомих відправників.
<Card title="Прив’язування" icon="link" href="/uk/channels/pairing">
Типова політика DM — прив’язування для невідомих відправників.
</Card>
<Card title="Усунення несправностей каналу" icon="wrench" href="/uk/channels/troubleshooting">
Міжканальна діагностика та сценарії відновлення.
@ -73,7 +73,7 @@ openclaw channels login --channel whatsapp
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,31 +90,31 @@ openclaw gateway
</Step>
<Step title="Схваліть перший запит на сполучення (якщо використовується режим pairing)">
<Step title="Підтвердьте перший запит на прив’язування (якщо використовується режим прив’язування)">
```bash
openclaw pairing list whatsapp
openclaw pairing approve whatsapp <CODE>
```
Термін дії запитів на сполучення спливає через 1 годину. Кількість запитів у стані очікування обмежена 3 на канал.
Запити на прив’язування спливають через 1 годину. Кількість запитів у стані очікування обмежена до 3 на канал.
</Step>
</Steps>
<Note>
OpenClaw рекомендує, за можливості, запускати WhatsApp на окремому номері. (Метадані каналу та процес налаштування оптимізовані для такого сценарію, але також підтримуються й сценарії з особистим номером.)
OpenClaw рекомендує, за можливості, використовувати WhatsApp з окремим номером. (Метадані каналу та процес налаштування оптимізовані для такого сценарію, але сценарії з особистим номером також підтримуються.)
</Note>
## Шаблони розгортання
<AccordionGroup>
<Accordion title="Окремий номер (рекомендовано)">
Це найчистіший операційний режим:
Це найчистіший режим з погляду експлуатації:
- окрема ідентичність WhatsApp для OpenClaw
- чіткіші allowlist для DM та межі маршрутизації
- менша ймовірність плутанини з чатом із самим собою
- чіткіші allowlist для DM і межі маршрутизації
- нижча ймовірність плутанини з чатом із самим собою
Мінімальний шаблон політики:
@ -142,29 +142,29 @@ OpenClaw рекомендує, за можливості, запускати Wha
</Accordion>
<Accordion title="Область каналу лише WhatsApp Web">
Канал платформи обміну повідомленнями в поточній архітектурі каналів OpenClaw базується на WhatsApp Web (`Baileys`).
<Accordion title="Область каналу лише для WhatsApp Web">
Канал платформи повідомлень у поточній архітектурі каналів OpenClaw базується на WhatsApp Web (`Baileys`).
Окремого каналу обміну повідомленнями Twilio WhatsApp у вбудованому реєстрі чат-каналів немає.
Окремого каналу повідомлень Twilio WhatsApp у вбудованому реєстрі чат-каналів немає.
</Accordion>
</AccordionGroup>
## Модель виконання
- Gateway володіє сокетом WhatsApp і циклом повторного підключення.
- Для вихідного надсилання потрібен активний слухач WhatsApp для цільового облікового запису.
- Чати статусів і трансляцій ігноруються (`@status`, `@broadcast`).
- Прямі чати використовують правила сесій DM (`session.dmScope`; типово `main` зводить DM до основної сесії агента).
- Gateway володіє сокетом WhatsApp і циклом перепідключення.
- Надсилання назовні вимагає активного слухача 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.
## Хуки Plugin і приватність
Вхідні повідомлення WhatsApp можуть містити особистий вміст повідомлень, номери телефонів,
ідентифікатори груп, імена відправників і поля кореляції сесій. З цієї причини
WhatsApp не транслює вхідні payload хуків `message_received` до Plugin
без вашого явного дозволу:
WhatsApp не транслює вхідні payload хука `message_received` до Plugin
, якщо ви явно не ввімкнете це:
```json5
{
@ -178,7 +178,7 @@ WhatsApp не транслює вхідні payload хуків `message_received
}
```
Ви можете обмежити цей дозвіл одним обліковим записом:
Ви можете обмежити цю згоду одним обліковим записом:
```json5
{
@ -196,10 +196,10 @@ WhatsApp не транслює вхідні payload хуків `message_received
}
```
Увімкніть це лише для тих Plugin, яким ви довіряєте отримання вмісту
вхідних повідомлень WhatsApp та ідентифікаторів.
Вмикайте це лише для Plugin, яким ви довіряєте отримання вмісту
та ідентифікаторів вхідних повідомлень WhatsApp.
## Керування доступом і активація
## Контроль доступу та активація
<Tabs>
<Tab title="Політика DM">
@ -207,54 +207,54 @@ WhatsApp не транслює вхідні payload хуків `message_received
- `pairing` (типово)
- `allowlist`
- `open` (потрібно, щоб `allowFrom` містив `"*"`)
- `open` (вимагає, щоб `allowFrom` містив `"*"`)
- `disabled`
`allowFrom` приймає номери у стилі E.164 (внутрішньо нормалізуються).
Перевизначення для кількох облікових записів: `channels.whatsapp.accounts.<id>.dmPolicy` (і `allowFrom`) мають пріоритет над типовими значеннями на рівні каналу для цього облікового запису.
Перевизначення для кількох облікових записів: `channels.whatsapp.accounts.<id>.dmPolicy` (і `allowFrom`) мають пріоритет над типовими значеннями рівня каналу для цього облікового запису.
Деталі поведінки під час виконання:
- сполучення зберігаються в allow-store каналу та об’єднуються з налаштованим `allowFrom`
- якщо allowlist не налаштовано, прив’язаний власний номер дозволяється типово
- OpenClaw ніколи не виконує автоматичне сполучення вихідних DM `fromMe` (повідомлень, які ви надсилаєте собі з прив’язаного пристрою)
- прив’язування зберігаються у allow-store каналу та об’єднуються з налаштованим `allowFrom`
- якщо allowlist не налаштовано, прив’язаний власний номер дозволяється за замовчуванням
- OpenClaw ніколи не виконує автоматичне прив’язування для вихідних DM `fromMe` (повідомлень, які ви надсилаєте собі з прив’язаного пристрою)
</Tab>
<Tab title="Групова політика + allowlist">
Доступ до груп має два шари:
Доступ до груп має два рівні:
1. **Allowlist членства в групі** (`channels.whatsapp.groups`)
- якщо `groups` пропущено, усі групи є допустимими
- якщо `groups` задано, воно працює як allowlist груп (`"*"` дозволено)
1. **Allowlist членства групи** (`channels.whatsapp.groups`)
- якщо `groups` пропущено, усі групи потенційно доступні
- якщо `groups` задано, він працює як allowlist груп (`"*"` дозволено)
2. **Політика відправників у групі** (`channels.whatsapp.groupPolicy` + `groupAllowFrom`)
- `open`: allowlist відправників обходиться
- `allowlist`: відправник має відповідати `groupAllowFrom` (або `*`)
- `disabled`: блокувати всі вхідні повідомлення груп
- `disabled`: блокувати всі вхідні повідомлення з груп
Резервний варіант allowlist відправників:
- якщо `groupAllowFrom` не задано, під час виконання використовується `allowFrom`, якщо воно доступне
- якщо `groupAllowFrom` не задано, під час виконання використовується `allowFrom`, якщо він доступний
- allowlist відправників перевіряються перед активацією за згадкою/відповіддю
Примітка: якщо блоку `channels.whatsapp` взагалі немає, резервна групова політика під час виконання — `allowlist` (із попереджувальним записом у журналі), навіть якщо встановлено `channels.defaults.groupPolicy`.
Примітка: якщо блоку `channels.whatsapp` взагалі не існує, резервна групова політика під час виконання — `allowlist` (із попереджувальним логом), навіть якщо задано `channels.defaults.groupPolicy`.
</Tab>
<Tab title="Згадки + /activation">
За замовчуванням для відповідей у групі потрібна згадка.
Відповіді в групах за замовчуванням вимагають згадки.
Виявлення згадок включає:
Виявлення згадки включає:
- явні згадки WhatsApp ідентичності бота
- налаштовані regex-шаблони згадок (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`)
- налаштовані regex-шаблони згадки (`agents.list[].groupChat.mentionPatterns`, резервно `messages.groupChat.mentionPatterns`)
- неявне виявлення відповіді боту (відправник відповіді збігається з ідентичністю бота)
Примітка щодо безпеки:
- цитування/відповідь лише задовольняє перевірку згадки; це **не** надає авторизації відправнику
- цитування/відповідь лише задовольняє перевірку згадки; це **не** надає авторизацію відправнику
- з `groupPolicy: "allowlist"` відправники поза allowlist усе одно блокуються, навіть якщо вони відповідають на повідомлення користувача з allowlist
Команда активації на рівні сесії:
@ -262,18 +262,18 @@ 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]`
- ігнорувати поведінку автоматичного тригера mention-JID, яка інакше спричинила б згадку самого себе
- якщо `messages.responsePrefix` не задано, відповіді в чаті із самим собою типово мають префікс `[{identity.name}]` або `[openclaw]`
## Нормалізація повідомлень і контекст
@ -281,11 +281,11 @@ WhatsApp не транслює вхідні payload хуків `message_received
<Accordion title="Вхідний конверт + контекст відповіді">
Вхідні повідомлення WhatsApp обгортаються у спільний вхідний конверт.
Якщо існує цитована відповідь, контекст додається в такій формі:
Якщо існує цитована відповідь, контекст додається в такому вигляді:
```text
[Відповідь на <sender> id:<stanzaId>]
<цитоване тіло або заповнювач медіа>
<цитований текст або заповнювач медіа>
[/Відповідь]
```
@ -293,8 +293,8 @@ WhatsApp не транслює вхідні payload хуків `message_received
</Accordion>
<Accordion title="Заповнювачі медіа та витягування геоданих/контактів">
Вхідні повідомлення лише з медіа нормалізуються із заповнювачами, такими як:
<Accordion title="Заповнювачі медіа та вилучення location/contact">
Вхідні повідомлення лише з медіа нормалізуються за допомогою заповнювачів, таких як:
- `<media:image>`
- `<media:video>`
@ -302,27 +302,27 @@ WhatsApp не транслює вхідні payload хуків `message_received
- `<media:document>`
- `<media:sticker>`
Тіло повідомлення з геоданими використовує стислий текст координат. Мітки/коментарі геоданих і дані контакту/vCard відображаються як огороджені недовірені метадані, а не як вбудований текст запиту.
Тіла location використовують стислий текст координат. Мітки/коментарі location та дані contact/vCard відображаються як відгороджені недовірені метадані, а не як вбудований текст підказки.
</Accordion>
<Accordion title="Вставлення очікувальної історії групи">
Для груп необроблені повідомлення можуть буферизуватися й додаватися як контекст, коли бот нарешті активується.
<Accordion title="Ін’єкція історії очікування для груп">
Для груп необроблені повідомлення можуть буферизуватися та ін’єктуватися як контекст, коли бот нарешті активується.
- типовий ліміт: `50`
- конфігурація: `channels.whatsapp.historyLimit`
- резервно: `messages.groupChat.historyLimit`
- резервне значення: `messages.groupChat.historyLimit`
- `0` вимикає
Маркери вставлення:
Маркери ін’єкції:
- `[Повідомлення чату з часу вашої останньої відповіді — для контексту]`
- `[Поточне повідомлення — дайте відповідь на нього]`
- `[Поточне повідомлення — відповідайте на нього]`
</Accordion>
<Accordion title="Read receipts">
Read receipts увімкнені типово для прийнятих вхідних повідомлень WhatsApp.
Read receipts увімкнені за замовчуванням для прийнятих вхідних повідомлень WhatsApp.
Вимкнути глобально:
@ -352,7 +352,7 @@ WhatsApp не транслює вхідні payload хуків `message_received
}
```
Для ходів у чаті із самим собою read receipts пропускаються, навіть якщо вони глобально увімкнені.
Ходи в чаті із самим собою пропускають read receipts навіть тоді, коли вони глобально ввімкнені.
</Accordion>
</AccordionGroup>
@ -363,12 +363,12 @@ WhatsApp не транслює вхідні payload хуків `message_received
<Accordion title="Розбиття тексту на частини">
- типовий ліміт частини: `channels.whatsapp.textChunkLimit = 4000`
- `channels.whatsapp.chunkMode = "length" | "newline"`
- режим `newline` надає перевагу межам абзаців (порожнім рядкам), а потім резервно переходить до безпечного за довжиною розбиття
- режим `newline` віддає перевагу межам абзаців (порожнім рядкам), а потім повертається до безпечного за довжиною розбиття
</Accordion>
<Accordion title="Поведінка вихідних медіа">
- підтримуються payload зображень, відео, аудіо (PTT voice-note) і документів
- `audio/ogg` переписується на `audio/ogg; codecs=opus` для сумісності з голосовими нотатками
- підтримуються payload зображень, відео, аудіо (голосове повідомлення PTT) і документів
- `audio/ogg` переписується як `audio/ogg; codecs=opus` для сумісності з голосовими повідомленнями
- відтворення анімованих GIF підтримується через `gifPlayback: true` під час надсилання відео
- підписи застосовуються до першого елемента медіа під час надсилання payload відповіді з кількома медіа
- джерелом медіа може бути HTTP(S), `file://` або локальні шляхи
@ -377,29 +377,30 @@ WhatsApp не транслює вхідні payload хуків `message_received
<Accordion title="Обмеження розміру медіа та резервна поведінка">
- обмеження збереження вхідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`)
- обмеження надсилання вихідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`)
- перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts.<accountId>.mediaMaxMb`
- зображення автоматично оптимізуються (підбір розміру/якості), щоб вкладатися в ліміти
- у разі помилки надсилання медіа резервний варіант для першого елемента надсилає текстове попередження замість того, щоб мовчки відкинути відповідь
- перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts.<accountId>.mediaMaxMb`
- зображення автоматично оптимізуються (цикл зміни розміру/якості), щоб відповідати лімітам
- у разі помилки надсилання медіа резервна поведінка для першого елемента надсилає текстове попередження замість того, щоб мовчки втратити відповідь
</Accordion>
</AccordionGroup>
## Цитування відповіді
WhatsApp підтримує нативне цитування відповідей, коли вихідні відповіді видимо цитують вхідне повідомлення. Керуйте цим через `channels.whatsapp.replyToMode`.
WhatsApp підтримує нативне цитування відповіді, коли вихідні відповіді візуально цитують вхідне повідомлення. Керуйте цим через `channels.whatsapp.replyToMode`.
| Value | Поведінка |
| -------- | --------------------------------------------------------------------------------- |
| `"auto"` | Цитувати вхідне повідомлення, коли провайдер це підтримує; інакше пропускати цитування |
| `"on"` | Завжди цитувати вхідне повідомлення; якщо цитування відхилено, перейти до звичайного надсилання |
| `"off"` | Ніколи не цитувати; надсилати як звичайне повідомлення |
| Значення | Поведінка |
| ----------- | --------------------------------------------------------------------- |
| `"off"` | Ніколи не цитувати; надсилати як звичайне повідомлення |
| `"first"` | Цитувати лише першу частину вихідної відповіді |
| `"all"` | Цитувати кожну частину вихідної відповіді |
| `"batched"` | Цитувати replies, поставлені в чергу пакетно, залишаючи негайні replies без цитування |
Типове значення — `"auto"`. Перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts.<id>.replyToMode`.
Типове значення — `"off"`. Перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts.<id>.replyToMode`.
```json5
{
channels: {
whatsapp: {
replyToMode: "on",
replyToMode: "first",
},
},
}
@ -407,18 +408,18 @@ WhatsApp підтримує нативне цитування відповіде
## Рівень реакцій
`channels.whatsapp.reactionLevel` керує тим, наскільки широко агент використовує емодзі-реакції у WhatsApp:
`channels.whatsapp.reactionLevel` керує тим, наскільки широко агент використовує реакції емодзі у WhatsApp:
| Рівень | Ack-реакції | Реакції, ініційовані агентом | Опис |
| ------------- | ----------- | ---------------------------- | ------------------------------------------------ |
| `"off"` | Ні | Ні | Жодних реакцій |
| `"ack"` | Так | Ні | Лише ack-реакції (підтвердження до відповіді) |
| `"minimal"` | Так | Так (обережно) | Ack + реакції агента з обережними настановами |
| `"extensive"` | Так | Так (заохочуються) | Ack + реакції агента із заохочувальними настановами |
| Рівень | Реакції підтвердження | Ініційовані агентом реакції | Опис |
| ------------ | --------------------- | --------------------------- | ------------------------------------------------ |
| `"off"` | Ні | Ні | Жодних реакцій |
| `"ack"` | Так | Ні | Лише реакції підтвердження (отримання до відповіді) |
| `"minimal"` | Так | Так (консервативно) | Підтвердження + реакції агента з консервативними вказівками |
| `"extensive"`| Так | Так (заохочуються) | Підтвердження + реакції агента із заохочувальними вказівками |
Типове значення: `"minimal"`.
Перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts.<id>.reactionLevel`.
Перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts.<id>.reactionLevel`.
```json5
{
@ -430,10 +431,10 @@ WhatsApp підтримує нативне цитування відповіде
}
```
## Реакції-підтвердження
## Реакції підтвердження
WhatsApp підтримує негайні ack-реакції після отримання вхідного повідомлення через `channels.whatsapp.ackReaction`.
Ack-реакції обмежуються `reactionLevel` — вони вимикаються, коли `reactionLevel` має значення `"off"`.
WhatsApp підтримує негайні реакції підтвердження під час отримання вхідного повідомлення через `channels.whatsapp.ackReaction`.
Реакції підтвердження обмежуються `reactionLevel` — вони пригнічуються, коли `reactionLevel` має значення `"off"`.
```json5
{
@ -452,29 +453,29 @@ Ack-реакції обмежуються `reactionLevel` — вони вими
Примітки щодо поведінки:
- надсилаються негайно після прийняття вхідного повідомлення (до відповіді)
- збої записуються в журнал, але не блокують звичайну доставку відповіді
- груповий режим `mentions` реагує на ходи, активовані згадкою; групова активація `always` діє як обхід цієї перевірки
- WhatsApp використовує `channels.whatsapp.ackReaction` (застарілий `messages.ackReaction` тут не використовується)
- збої логуються, але не блокують звичайну доставку відповіді
- груповий режим `mentions` реагує на ходи, активовані згадкою; групова активація `always` працює як обхід цієї перевірки
- у WhatsApp використовується `channels.whatsapp.ackReaction` (застарілий `messages.ackReaction` тут не використовується)
## Кілька облікових записів і облікові дані
<AccordionGroup>
<Accordion title="Вибір облікового запису та типові значення">
- ідентифікатори облікових записів походять із `channels.whatsapp.accounts`
- типовий вибір облікового запису: `default`, якщо він є; інакше — перший налаштований ідентифікатор облікового запису (відсортований)
- ідентифікатори облікових записів беруться з `channels.whatsapp.accounts`
- типовий вибір облікового запису: `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>
@ -485,13 +486,13 @@ Ack-реакції обмежуються `reactionLevel` — вони вими
- Обмеження дій:
- `channels.whatsapp.actions.reactions`
- `channels.whatsapp.actions.polls`
- Запис конфігурації, ініційований каналом, увімкнено типово (вимкнення через `channels.whatsapp.configWrites=false`).
- Запис конфігурації, ініційований каналом, увімкнений за замовчуванням (вимикається через `channels.whatsapp.configWrites=false`).
## Усунення несправностей
<AccordionGroup>
<Accordion title="Не прив’язано (потрібен QR)">
Симптом: статус каналу показує, що прив’язку не виконано.
Симптом: статус каналу повідомляє, що прив’язування відсутнє.
Виправлення:
@ -502,8 +503,8 @@ Ack-реакції обмежуються `reactionLevel` — вони вими
</Accordion>
<Accordion title="Прив’язано, але відключено / цикл повторного підключення">
Симптом: прив’язаний обліковий запис із повторними відключеннями або спробами повторного підключення.
<Accordion title="Прив’язано, але від’єднано / цикл перепідключення">
Симптом: прив’язаний обліковий запис із повторними від’єднаннями або спробами перепідключення.
Виправлення:
@ -512,14 +513,14 @@ Ack-реакції обмежуються `reactionLevel` — вони вими
openclaw logs --follow
```
За потреби виконайте повторну прив’язку через `channels login`.
За потреби виконайте повторне прив’язування через `channels login`.
</Accordion>
<Accordion title="Немає активного слухача під час надсилання">
Вихідні надсилання завершуються одразу з помилкою, якщо для цільового облікового запису немає активного слухача Gateway.
Вихідні надсилання швидко завершуються з помилкою, якщо для цільового облікового запису немає активного слухача Gateway.
Переконайтеся, що Gateway запущено і обліковий запис прив’язано.
Переконайтеся, що Gateway запущено, а обліковий запис прив’язано.
</Accordion>
@ -528,45 +529,45 @@ Ack-реакції обмежуються `reactionLevel` — вони вими
- `groupPolicy`
- `groupAllowFrom` / `allowFrom`
- записи allowlist `groups`
- обмеження згадками (`requireMention` + шаблони згадок)
- записи allowlist у `groups`
- обмеження за згадкою (`requireMention` + шаблони згадки)
- дубльовані ключі в `openclaw.json` (JSON5): пізніші записи перевизначають раніші, тому зберігайте лише один `groupPolicy` на область
</Accordion>
<Accordion title="Попередження про runtime Bun">
Runtime Gateway для WhatsApp має використовувати Node. Bun позначено як несумісний зі стабільною роботою Gateway для WhatsApp/Telegram.
<Accordion title="Попередження runtime Bun">
Runtime Gateway для WhatsApp має використовувати Node. Bun позначено як несумісний для стабільної роботи Gateway WhatsApp/Telegram.
</Accordion>
</AccordionGroup>
## Системні промпти
## Системні підказки
WhatsApp підтримує системні промпти у стилі Telegram для груп і прямих чатів через мапи `groups` і `direct`.
WhatsApp підтримує системні підказки в стилі Telegram для груп і прямих чатів через мапи `groups` і `direct`.
Ієрархія визначення для групових повідомлень:
Спочатку визначається ефективна мапа `groups`: якщо обліковий запис задає власну `groups`, вона повністю замінює кореневу мапу `groups` (без deep merge). Пошук промпта потім виконується за отриманою єдиною мапою:
Спочатку визначається ефективна мапа `groups`: якщо обліковий запис визначає власну `groups`, вона повністю замінює кореневу мапу `groups` (без глибокого злиття). Пошук підказки потім виконується по отриманій єдиній мапі:
1. **Системний промпт для конкретної групи** (`groups["<groupId>"].systemPrompt`): використовується, коли запис конкретної групи існує в мапі **і** для нього визначено ключ `systemPrompt`. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard пригнічується, і системний промпт не застосовується.
2. **Wildcard-системний промпт для груп** (`groups["*"].systemPrompt`): використовується, коли запис конкретної групи повністю відсутній у мапі або коли він існує, але не містить ключа `systemPrompt`.
1. **Системна підказка для конкретної групи** (`groups["<groupId>"].systemPrompt`): використовується, коли запис конкретної групи існує в мапі **і** для нього визначено ключ `systemPrompt`. Якщо `systemPrompt` — це порожній рядок (`""`), wildcard пригнічується і системна підказка не застосовується.
2. **Системна підказка wildcard для груп** (`groups["*"].systemPrompt`): використовується, коли запис конкретної групи повністю відсутній у мапі або коли він існує, але не визначає ключ `systemPrompt`.
Ієрархія визначення для прямих повідомлень:
Спочатку визначається ефективна мапа `direct`: якщо обліковий запис задає власну `direct`, вона повністю замінює кореневу мапу `direct` (без deep merge). Пошук промпта потім виконується за отриманою єдиною мапою:
Спочатку визначається ефективна мапа `direct`: якщо обліковий запис визначає власну `direct`, вона повністю замінює кореневу мапу `direct` (без глибокого злиття). Пошук підказки потім виконується по отриманій єдиній мапі:
1. **Системний промпт для конкретного прямого чату** (`direct["<peerId>"].systemPrompt`): використовується, коли запис конкретного співрозмовника існує в мапі **і** для нього визначено ключ `systemPrompt`. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard пригнічується, і системний промпт не застосовується.
2. **Wildcard-системний промпт для прямих чатів** (`direct["*"].systemPrompt`): використовується, коли запис конкретного співрозмовника повністю відсутній у мапі або коли він існує, але не містить ключа `systemPrompt`.
1. **Системна підказка для конкретного прямого чату** (`direct["<peerId>"].systemPrompt`): використовується, коли запис конкретного співрозмовника існує в мапі **і** для нього визначено ключ `systemPrompt`. Якщо `systemPrompt` — це порожній рядок (`""`), wildcard пригнічується і системна підказка не застосовується.
2. **Системна підказка wildcard для прямих чатів** (`direct["*"].systemPrompt`): використовується, коли запис конкретного співрозмовника повністю відсутній у мапі або коли він існує, але не визначає ключ `systemPrompt`.
Примітка: `dms` залишається спрощеним контейнером перевизначення історії для окремих DM (`dms.<id>.historyLimit`); перевизначення промптів живуть у `direct`.
Примітка: `dms` залишається полегшеним контейнером перевизначення історії для окремих DM (`dms.<id>.historyLimit`); перевизначення підказок містяться в `direct`.
**Відмінність від поведінки Telegram з кількома обліковими записами:** У Telegram кореневий `groups` навмисно пригнічується для всіх облікових записів у конфігурації з кількома обліковими записами — навіть для тих облікових записів, які не визначають власний `groups`, — щоб бот не отримував групові повідомлення для груп, до яких він не належить. WhatsApp не застосовує цей запобіжник: кореневі `groups` і `direct` завжди успадковуються обліковими записами, які не мають перевизначення на рівні облікового запису, незалежно від того, скільки облікових записів налаштовано. У конфігурації WhatsApp з кількома обліковими записами, якщо ви хочете окремі групові або прямі промпти для кожного облікового запису, явно визначайте повну мапу в межах кожного облікового запису, а не покладайтеся на типові значення кореневого рівня.
**Відмінність від поведінки Telegram з кількома обліковими записами:** у Telegram кореневий `groups` навмисно пригнічується для всіх облікових записів у конфігурації з кількома обліковими записами — навіть для облікових записів, які не визначають власний `groups`, — щоб запобігти отриманню ботом групових повідомлень для груп, до яких він не належить. У WhatsApp цей захист не застосовується: кореневі `groups` і `direct` завжди успадковуються обліковими записами, які не визначають перевизначення на рівні облікового запису, незалежно від кількості налаштованих облікових записів. У конфігурації WhatsApp з кількома обліковими записами, якщо ви хочете окремі групові або прямі підказки для кожного облікового запису, явно визначайте повну мапу в кожному обліковому записі, а не покладайтеся на типові значення кореневого рівня.
Важлива поведінка:
- `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.
- `channels.whatsapp.groups` — це і мапа конфігурації для окремих груп, і allowlist груп на рівні чату. На кореневому рівні або в області облікового запису `groups["*"]` означає, що «для цієї області допускаються всі групи».
- Додавайте wildcard-групу `systemPrompt` лише тоді, коли ви вже хочете, щоб ця область допускала всі групи. Якщо ви все ще хочете, щоб допустимим залишався лише фіксований набір ідентифікаторів груп, не використовуйте `groups["*"]` як типове значення для підказки. Натомість повторіть підказку в кожному явно дозволеному записі групи.
- Допуск групи та авторизація відправника — це окремі перевірки. `groups["*"]` розширює множину груп, які можуть потрапити в обробку груп, але саме по собі не авторизує кожного відправника в цих групах. Доступ відправників і далі окремо контролюється через `channels.whatsapp.groupPolicy` і `channels.whatsapp.groupAllowFrom`.
- `channels.whatsapp.direct` не має такого самого побічного ефекту для DM. `direct["*"]` лише надає типову конфігурацію прямого чату після того, як DM уже допущено через `dmPolicy` разом із `allowFrom` або правилами сховища прив’язування.
Приклад:
@ -575,31 +576,31 @@ WhatsApp підтримує системні промпти у стилі Telegr
channels: {
whatsapp: {
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: "Типовий промпт для всіх груп." },
// Використовуйте лише тоді, коли на кореневому рівні мають допускатися всі групи.
// Застосовується до всіх облікових записів, які не визначають власну мапу groups.
"*": { systemPrompt: "Типова підказка для всіх груп." },
},
direct: {
// Applies to all accounts that do not define their own direct map.
"*": { systemPrompt: "Типовий промпт для всіх прямих чатів." },
// Застосовується до всіх облікових записів, які не визначають власну мапу direct.
"*": { systemPrompt: "Типова підказка для всіх прямих чатів." },
},
accounts: {
work: {
groups: {
// This account defines its own groups, so root groups are fully
// replaced. To keep a wildcard, define "*" explicitly here too.
// Цей обліковий запис визначає власну groups, тож кореневий groups
// повністю замінюється. Щоб зберегти wildcard, явно визначте "*" і тут.
"120363406415684625@g.us": {
requireMention: false,
systemPrompt: "Зосереджуйтеся на керуванні проєктами.",
},
// Use only if all groups should be admitted in this account.
"*": { systemPrompt: "Типовий промпт для робочих груп." },
// Використовуйте лише тоді, коли в цьому обліковому записі мають допускатися всі групи.
"*": { systemPrompt: "Типова підказка для робочих груп." },
},
direct: {
// This account defines its own direct map, so root direct entries are
// fully replaced. To keep a wildcard, define "*" explicitly here too.
"+15551234567": { systemPrompt: "Промпт для конкретного робочого прямого чату." },
"*": { systemPrompt: "Типовий промпт для робочих прямих чатів." },
// Цей обліковий запис визначає власну мапу direct, тож кореневі записи direct
// повністю замінюються. Щоб зберегти wildcard, явно визначте "*" і тут.
"+15551234567": { systemPrompt: "Підказка для конкретного робочого прямого чату." },
"*": { systemPrompt: "Типова підказка для робочих прямих чатів." },
},
},
},
@ -610,22 +611,22 @@ WhatsApp підтримує системні промпти у стилі Telegr
## Вказівники на довідник конфігурації
Основний довідник:
Основне посилання:
- [Довідник конфігурації - WhatsApp](/uk/gateway/config-channels#whatsapp)
Основні поля WhatsApp:
Ключові поля WhatsApp:
- доступ: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`
- доставка: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `sendReadReceipts`, `ackReaction`, `reactionLevel`
- кілька облікових записів: `accounts.<id>.enabled`, `accounts.<id>.authDir`, перевизначення на рівні облікового запису
- операції: `configWrites`, `debounceMs`, `web.enabled`, `web.heartbeatSeconds`, `web.reconnect.*`
- поведінка сесії: `session.dmScope`, `historyLimit`, `dmHistoryLimit`, `dms.<id>.historyLimit`
- промпти: `groups.<id>.systemPrompt`, `groups["*"].systemPrompt`, `direct.<id>.systemPrompt`, `direct["*"].systemPrompt`
- підказки: `groups.<id>.systemPrompt`, `groups["*"].systemPrompt`, `direct.<id>.systemPrompt`, `direct["*"].systemPrompt`
## Пов’язане
- [Сполучення](/uk/channels/pairing)
- [Прив’язування](/uk/channels/pairing)
- [Групи](/uk/channels/groups)
- [Безпека](/uk/gateway/security)
- [Маршрутизація каналів](/uk/channels/channel-routing)