chore(i18n): refresh uk translations
This commit is contained in:
parent
28667ca304
commit
799d823ea5
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user