From c7ed57567b50fc6bff894442473f78efa1572c2f Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Sun, 26 Apr 2026 16:56:41 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/channels/whatsapp.md | 291 ++++++++++++++++++----------------- 1 file changed, 148 insertions(+), 143 deletions(-) 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: