From 799d823ea52f1746b9a5d33cee07daff467b6c0f Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Sat, 25 Apr 2026 00:11:05 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/channels/whatsapp.md | 277 ++++++++++++++++++----------------- 1 file changed, 139 insertions(+), 138 deletions(-) diff --git a/docs/uk/channels/whatsapp.md b/docs/uk/channels/whatsapp.md index 5259966eb..3ae4baa0d 100644 --- a/docs/uk/channels/whatsapp.md +++ b/docs/uk/channels/whatsapp.md @@ -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 ``` - - Типова політика DM — сполучення для невідомих відправників. + + Типова політика DM — прив’язування для невідомих відправників. Міжканальна діагностика та сценарії відновлення. @@ -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 - + ```bash openclaw pairing list whatsapp openclaw pairing approve whatsapp ``` - Термін дії запитів на сполучення спливає через 1 годину. Кількість запитів у стані очікування обмежена 3 на канал. + Запити на прив’язування спливають через 1 годину. Кількість запитів у стані очікування обмежена до 3 на канал. -OpenClaw рекомендує, за можливості, запускати WhatsApp на окремому номері. (Метадані каналу та процес налаштування оптимізовані для такого сценарію, але також підтримуються й сценарії з особистим номером.) +OpenClaw рекомендує, за можливості, використовувати WhatsApp з окремим номером. (Метадані каналу та процес налаштування оптимізовані для такого сценарію, але сценарії з особистим номером також підтримуються.) ## Шаблони розгортання - Це найчистіший операційний режим: + Це найчистіший режим з погляду експлуатації: - окрема ідентичність WhatsApp для OpenClaw - - чіткіші allowlist для DM та межі маршрутизації - - менша ймовірність плутанини з чатом із самим собою + - чіткіші allowlist для DM і межі маршрутизації + - нижча ймовірність плутанини з чатом із самим собою Мінімальний шаблон політики: @@ -142,29 +142,29 @@ OpenClaw рекомендує, за можливості, запускати Wha - - Канал платформи обміну повідомленнями в поточній архітектурі каналів OpenClaw базується на WhatsApp Web (`Baileys`). + + Канал платформи повідомлень у поточній архітектурі каналів OpenClaw базується на WhatsApp Web (`Baileys`). - Окремого каналу обміну повідомленнями Twilio WhatsApp у вбудованому реєстрі чат-каналів немає. + Окремого каналу повідомлень Twilio WhatsApp у вбудованому реєстрі чат-каналів немає. ## Модель виконання -- Gateway володіє сокетом WhatsApp і циклом повторного підключення. -- Для вихідного надсилання потрібен активний слухач WhatsApp для цільового облікового запису. -- Чати статусів і трансляцій ігноруються (`@status`, `@broadcast`). -- Прямі чати використовують правила сесій DM (`session.dmScope`; типово `main` зводить DM до основної сесії агента). +- Gateway володіє сокетом WhatsApp і циклом перепідключення. +- Надсилання назовні вимагає активного слухача 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. ## Хуки 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. -## Керування доступом і активація +## Контроль доступу та активація @@ -207,54 +207,54 @@ WhatsApp не транслює вхідні payload хуків `message_received - `pairing` (типово) - `allowlist` - - `open` (потрібно, щоб `allowFrom` містив `"*"`) + - `open` (вимагає, щоб `allowFrom` містив `"*"`) - `disabled` `allowFrom` приймає номери у стилі E.164 (внутрішньо нормалізуються). - Перевизначення для кількох облікових записів: `channels.whatsapp.accounts..dmPolicy` (і `allowFrom`) мають пріоритет над типовими значеннями на рівні каналу для цього облікового запису. + Перевизначення для кількох облікових записів: `channels.whatsapp.accounts..dmPolicy` (і `allowFrom`) мають пріоритет над типовими значеннями рівня каналу для цього облікового запису. Деталі поведінки під час виконання: - - сполучення зберігаються в allow-store каналу та об’єднуються з налаштованим `allowFrom` - - якщо allowlist не налаштовано, прив’язаний власний номер дозволяється типово - - OpenClaw ніколи не виконує автоматичне сполучення вихідних DM `fromMe` (повідомлень, які ви надсилаєте собі з прив’язаного пристрою) + - прив’язування зберігаються у allow-store каналу та об’єднуються з налаштованим `allowFrom` + - якщо allowlist не налаштовано, прив’язаний власний номер дозволяється за замовчуванням + - OpenClaw ніколи не виконує автоматичне прив’язування для вихідних DM `fromMe` (повідомлень, які ви надсилаєте собі з прив’язаного пристрою) - Доступ до груп має два шари: + Доступ до груп має два рівні: - 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`. - За замовчуванням для відповідей у групі потрібна згадка. + Відповіді в групах за замовчуванням вимагають згадки. - Виявлення згадок включає: + Виявлення згадки включає: - явні згадки 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` оновлює стан сесії (а не глобальну конфігурацію). Вона обмежена власником. ## Поведінка особистого номера і чату із самим собою -Коли прив’язаний власний номер також присутній у `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 Вхідні повідомлення WhatsApp обгортаються у спільний вхідний конверт. - Якщо існує цитована відповідь, контекст додається в такій формі: + Якщо існує цитована відповідь, контекст додається в такому вигляді: ```text [Відповідь на id:] - <цитоване тіло або заповнювач медіа> + <цитований текст або заповнювач медіа> [/Відповідь] ``` @@ -293,8 +293,8 @@ WhatsApp не транслює вхідні payload хуків `message_received - - Вхідні повідомлення лише з медіа нормалізуються із заповнювачами, такими як: + + Вхідні повідомлення лише з медіа нормалізуються за допомогою заповнювачів, таких як: - `` - `` @@ -302,27 +302,27 @@ WhatsApp не транслює вхідні payload хуків `message_received - `` - `` - Тіло повідомлення з геоданими використовує стислий текст координат. Мітки/коментарі геоданих і дані контакту/vCard відображаються як огороджені недовірені метадані, а не як вбудований текст запиту. + Тіла location використовують стислий текст координат. Мітки/коментарі location та дані contact/vCard відображаються як відгороджені недовірені метадані, а не як вбудований текст підказки. - - Для груп необроблені повідомлення можуть буферизуватися й додаватися як контекст, коли бот нарешті активується. + + Для груп необроблені повідомлення можуть буферизуватися та ін’єктуватися як контекст, коли бот нарешті активується. - типовий ліміт: `50` - конфігурація: `channels.whatsapp.historyLimit` - - резервно: `messages.groupChat.historyLimit` + - резервне значення: `messages.groupChat.historyLimit` - `0` вимикає - Маркери вставлення: + Маркери ін’єкції: - `[Повідомлення чату з часу вашої останньої відповіді — для контексту]` - - `[Поточне повідомлення — дайте відповідь на нього]` + - `[Поточне повідомлення — відповідайте на нього]` - Read receipts увімкнені типово для прийнятих вхідних повідомлень WhatsApp. + Read receipts увімкнені за замовчуванням для прийнятих вхідних повідомлень WhatsApp. Вимкнути глобально: @@ -352,7 +352,7 @@ WhatsApp не транслює вхідні payload хуків `message_received } ``` - Для ходів у чаті із самим собою read receipts пропускаються, навіть якщо вони глобально увімкнені. + Ходи в чаті із самим собою пропускають read receipts навіть тоді, коли вони глобально ввімкнені. @@ -363,12 +363,12 @@ WhatsApp не транслює вхідні payload хуків `message_received - типовий ліміт частини: `channels.whatsapp.textChunkLimit = 4000` - `channels.whatsapp.chunkMode = "length" | "newline"` - - режим `newline` надає перевагу межам абзаців (порожнім рядкам), а потім резервно переходить до безпечного за довжиною розбиття + - режим `newline` віддає перевагу межам абзаців (порожнім рядкам), а потім повертається до безпечного за довжиною розбиття - - підтримуються 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 - обмеження збереження вхідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`) - обмеження надсилання вихідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`) - - перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts..mediaMaxMb` - - зображення автоматично оптимізуються (підбір розміру/якості), щоб вкладатися в ліміти - - у разі помилки надсилання медіа резервний варіант для першого елемента надсилає текстове попередження замість того, щоб мовчки відкинути відповідь + - перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts..mediaMaxMb` + - зображення автоматично оптимізуються (цикл зміни розміру/якості), щоб відповідати лімітам + - у разі помилки надсилання медіа резервна поведінка для першого елемента надсилає текстове попередження замість того, щоб мовчки втратити відповідь ## Цитування відповіді -WhatsApp підтримує нативне цитування відповідей, коли вихідні відповіді видимо цитують вхідне повідомлення. Керуйте цим через `channels.whatsapp.replyToMode`. +WhatsApp підтримує нативне цитування відповіді, коли вихідні відповіді візуально цитують вхідне повідомлення. Керуйте цим через `channels.whatsapp.replyToMode`. -| Value | Поведінка | -| -------- | --------------------------------------------------------------------------------- | -| `"auto"` | Цитувати вхідне повідомлення, коли провайдер це підтримує; інакше пропускати цитування | -| `"on"` | Завжди цитувати вхідне повідомлення; якщо цитування відхилено, перейти до звичайного надсилання | -| `"off"` | Ніколи не цитувати; надсилати як звичайне повідомлення | +| Значення | Поведінка | +| ----------- | --------------------------------------------------------------------- | +| `"off"` | Ніколи не цитувати; надсилати як звичайне повідомлення | +| `"first"` | Цитувати лише першу частину вихідної відповіді | +| `"all"` | Цитувати кожну частину вихідної відповіді | +| `"batched"` | Цитувати replies, поставлені в чергу пакетно, залишаючи негайні replies без цитування | -Типове значення — `"auto"`. Перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts..replyToMode`. +Типове значення — `"off"`. Перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts..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..reactionLevel`. +Перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts..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` тут не використовується) ## Кілька облікових записів і облікові дані - - ідентифікатори облікових записів походять із `channels.whatsapp.accounts` - - типовий вибір облікового запису: `default`, якщо він є; інакше — перший налаштований ідентифікатор облікового запису (відсортований) + - ідентифікатори облікових записів беруться з `channels.whatsapp.accounts` + - типовий вибір облікового запису: `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 видаляються. @@ -485,13 +486,13 @@ Ack-реакції обмежуються `reactionLevel` — вони вими - Обмеження дій: - `channels.whatsapp.actions.reactions` - `channels.whatsapp.actions.polls` -- Запис конфігурації, ініційований каналом, увімкнено типово (вимкнення через `channels.whatsapp.configWrites=false`). +- Запис конфігурації, ініційований каналом, увімкнений за замовчуванням (вимикається через `channels.whatsapp.configWrites=false`). ## Усунення несправностей - Симптом: статус каналу показує, що прив’язку не виконано. + Симптом: статус каналу повідомляє, що прив’язування відсутнє. Виправлення: @@ -502,8 +503,8 @@ Ack-реакції обмежуються `reactionLevel` — вони вими - - Симптом: прив’язаний обліковий запис із повторними відключеннями або спробами повторного підключення. + + Симптом: прив’язаний обліковий запис із повторними від’єднаннями або спробами перепідключення. Виправлення: @@ -512,14 +513,14 @@ Ack-реакції обмежуються `reactionLevel` — вони вими openclaw logs --follow ``` - За потреби виконайте повторну прив’язку через `channels login`. + За потреби виконайте повторне прив’язування через `channels login`. - Вихідні надсилання завершуються одразу з помилкою, якщо для цільового облікового запису немає активного слухача Gateway. + Вихідні надсилання швидко завершуються з помилкою, якщо для цільового облікового запису немає активного слухача Gateway. - Переконайтеся, що Gateway запущено і обліковий запис прив’язано. + Переконайтеся, що Gateway запущено, а обліковий запис прив’язано. @@ -528,45 +529,45 @@ Ack-реакції обмежуються `reactionLevel` — вони вими - `groupPolicy` - `groupAllowFrom` / `allowFrom` - - записи allowlist `groups` - - обмеження згадками (`requireMention` + шаблони згадок) + - записи allowlist у `groups` + - обмеження за згадкою (`requireMention` + шаблони згадки) - дубльовані ключі в `openclaw.json` (JSON5): пізніші записи перевизначають раніші, тому зберігайте лише один `groupPolicy` на область - - Runtime Gateway для WhatsApp має використовувати Node. Bun позначено як несумісний зі стабільною роботою Gateway для WhatsApp/Telegram. + + Runtime Gateway для WhatsApp має використовувати Node. Bun позначено як несумісний для стабільної роботи Gateway WhatsApp/Telegram. -## Системні промпти +## Системні підказки -WhatsApp підтримує системні промпти у стилі Telegram для груп і прямих чатів через мапи `groups` і `direct`. +WhatsApp підтримує системні підказки в стилі Telegram для груп і прямих чатів через мапи `groups` і `direct`. Ієрархія визначення для групових повідомлень: -Спочатку визначається ефективна мапа `groups`: якщо обліковий запис задає власну `groups`, вона повністю замінює кореневу мапу `groups` (без deep merge). Пошук промпта потім виконується за отриманою єдиною мапою: +Спочатку визначається ефективна мапа `groups`: якщо обліковий запис визначає власну `groups`, вона повністю замінює кореневу мапу `groups` (без глибокого злиття). Пошук підказки потім виконується по отриманій єдиній мапі: -1. **Системний промпт для конкретної групи** (`groups[""].systemPrompt`): використовується, коли запис конкретної групи існує в мапі **і** для нього визначено ключ `systemPrompt`. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard пригнічується, і системний промпт не застосовується. -2. **Wildcard-системний промпт для груп** (`groups["*"].systemPrompt`): використовується, коли запис конкретної групи повністю відсутній у мапі або коли він існує, але не містить ключа `systemPrompt`. +1. **Системна підказка для конкретної групи** (`groups[""].systemPrompt`): використовується, коли запис конкретної групи існує в мапі **і** для нього визначено ключ `systemPrompt`. Якщо `systemPrompt` — це порожній рядок (`""`), wildcard пригнічується і системна підказка не застосовується. +2. **Системна підказка wildcard для груп** (`groups["*"].systemPrompt`): використовується, коли запис конкретної групи повністю відсутній у мапі або коли він існує, але не визначає ключ `systemPrompt`. Ієрархія визначення для прямих повідомлень: -Спочатку визначається ефективна мапа `direct`: якщо обліковий запис задає власну `direct`, вона повністю замінює кореневу мапу `direct` (без deep merge). Пошук промпта потім виконується за отриманою єдиною мапою: +Спочатку визначається ефективна мапа `direct`: якщо обліковий запис визначає власну `direct`, вона повністю замінює кореневу мапу `direct` (без глибокого злиття). Пошук підказки потім виконується по отриманій єдиній мапі: -1. **Системний промпт для конкретного прямого чату** (`direct[""].systemPrompt`): використовується, коли запис конкретного співрозмовника існує в мапі **і** для нього визначено ключ `systemPrompt`. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard пригнічується, і системний промпт не застосовується. -2. **Wildcard-системний промпт для прямих чатів** (`direct["*"].systemPrompt`): використовується, коли запис конкретного співрозмовника повністю відсутній у мапі або коли він існує, але не містить ключа `systemPrompt`. +1. **Системна підказка для конкретного прямого чату** (`direct[""].systemPrompt`): використовується, коли запис конкретного співрозмовника існує в мапі **і** для нього визначено ключ `systemPrompt`. Якщо `systemPrompt` — це порожній рядок (`""`), wildcard пригнічується і системна підказка не застосовується. +2. **Системна підказка wildcard для прямих чатів** (`direct["*"].systemPrompt`): використовується, коли запис конкретного співрозмовника повністю відсутній у мапі або коли він існує, але не визначає ключ `systemPrompt`. -Примітка: `dms` залишається спрощеним контейнером перевизначення історії для окремих DM (`dms..historyLimit`); перевизначення промптів живуть у `direct`. +Примітка: `dms` залишається полегшеним контейнером перевизначення історії для окремих DM (`dms..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..enabled`, `accounts..authDir`, перевизначення на рівні облікового запису - операції: `configWrites`, `debounceMs`, `web.enabled`, `web.heartbeatSeconds`, `web.reconnect.*` - поведінка сесії: `session.dmScope`, `historyLimit`, `dmHistoryLimit`, `dms..historyLimit` -- промпти: `groups..systemPrompt`, `groups["*"].systemPrompt`, `direct..systemPrompt`, `direct["*"].systemPrompt` +- підказки: `groups..systemPrompt`, `groups["*"].systemPrompt`, `direct..systemPrompt`, `direct["*"].systemPrompt` ## Пов’язане -- [Сполучення](/uk/channels/pairing) +- [Прив’язування](/uk/channels/pairing) - [Групи](/uk/channels/groups) - [Безпека](/uk/gateway/security) - [Маршрутизація каналів](/uk/channels/channel-routing)