chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-05-02 20:15:13 +00:00
parent 5dda0652c9
commit 258c30af2a
3 changed files with 247 additions and 244 deletions

View File

@ -1,26 +1,26 @@
---
read_when:
- Робота з поведінкою каналу WhatsApp/веб або маршрутизацією вхідних повідомлень
summary: Підтримка каналу WhatsApp, засоби контролю доступу, поведінка доставки та експлуатація
- Робота над поведінкою каналу WhatsApp/web або маршрутизацією вхідних повідомлень
summary: Підтримка каналу WhatsApp, засоби керування доступом, поведінка доставки та операційні процедури
title: WhatsApp
x-i18n:
generated_at: "2026-05-02T07:07:30Z"
generated_at: "2026-05-02T20:13:37Z"
model: gpt-5.5
provider: openai
source_hash: 0a38b2338056b55364577c72b643dac28ebb0006cdc61b480555e6079fb71573
source_hash: bb8afa93f0470e0454cf59e19193d8c2f204db63b428a4de579e93f01bf3ee62
source_path: channels/whatsapp.md
workflow: 16
---
Статус: готово до production через WhatsApp Web (Baileys). Gateway керує пов’язаними сеансами.
Статус: готовий до production через WhatsApp Web (Baileys). Gateway керує прив’язаними сеансами.
## Встановлення (за потреби)
## Встановлення (на вимогу)
- Онбординг (`openclaw onboard`) і `openclaw channels add --channel whatsapp`
пропонують встановити WhatsApp plugin під час першого вибору.
- `openclaw channels login --channel whatsapp` також пропонує процес встановлення, коли
- Onboarding (`openclaw onboard`) і `openclaw channels add --channel whatsapp`
пропонують установити WhatsApp plugin під час першого вибору.
- `openclaw channels login --channel whatsapp` також пропонує потік установлення, коли
plugin ще відсутній.
- Dev-канал + git checkout: за замовчуванням використовує локальний шлях plugin.
- Dev channel + git checkout: типово використовує локальний шлях plugin.
- Stable/Beta: використовує npm-пакет `@openclaw/whatsapp`, коли актуальний пакет
опубліковано.
@ -30,26 +30,26 @@ x-i18n:
openclaw plugins install @openclaw/whatsapp
```
Якщо npm повідомляє, що пакет, який належить OpenClaw, застарілий або відсутній, використовуйте
актуальну пакетовану збірку OpenClaw або локальний checkout, доки черга npm-пакетів
не наздожене зміни.
Якщо npm повідомляє, що пакет, яким володіє OpenClaw, застарілий або відсутній, використовуйте
актуальну пакетовану збірку OpenClaw або локальний checkout, доки ланцюг npm-пакетів
не наздожене.
<CardGroup cols={3}>
<Card title="Сполучення" icon="link" href="/uk/channels/pairing">
Типова політика DM для невідомих відправників — сполучення.
<Card title="Pairing" icon="link" href="/uk/channels/pairing">
Типова політика DM — pairing для невідомих відправників.
</Card>
<Card title="Усунення несправностей каналу" icon="wrench" href="/uk/channels/troubleshooting">
Міжканальна діагностика та playbook-и відновлення.
<Card title="Channel troubleshooting" icon="wrench" href="/uk/channels/troubleshooting">
Міжканальна діагностика та інструкції з виправлення.
</Card>
<Card title="Конфігурація Gateway" icon="settings" href="/uk/gateway/configuration">
Повні шаблони й приклади конфігурації каналів.
<Card title="Gateway configuration" icon="settings" href="/uk/gateway/configuration">
Повні шаблони й приклади конфігурації каналу.
</Card>
</CardGroup>
## Швидке налаштування
<Steps>
<Step title="Налаштуйте політику доступу WhatsApp">
<Step title="Configure WhatsApp access policy">
```json5
{
@ -66,19 +66,19 @@ openclaw plugins install @openclaw/whatsapp
</Step>
<Step title="Пов’яжіть WhatsApp (QR)">
<Step title="Link WhatsApp (QR)">
```bash
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
@ -87,7 +87,7 @@ openclaw channels login --channel whatsapp --account work
</Step>
<Step title="Запустіть gateway">
<Step title="Start the gateway">
```bash
openclaw gateway
@ -95,31 +95,31 @@ openclaw gateway
</Step>
<Step title="Підтвердьте перший запит на сполучення (якщо використовується режим сполучення)">
<Step title="Approve first pairing request (if using pairing mode)">
```bash
openclaw pairing list whatsapp
openclaw pairing approve whatsapp <CODE>
```
Запити на сполучення спливають через 1 годину. Кількість очікуваних запитів обмежена 3 на канал.
Запити pairing спливають через 1 годину. Очікувані запити обмежено до 3 на канал.
</Step>
</Steps>
<Note>
OpenClaw рекомендує за можливості запускати WhatsApp на окремому номері. (Метадані каналу та процес налаштування оптимізовані для такого варіанта, але налаштування з особистим номером також підтримуються.)
OpenClaw рекомендує за можливості запускати WhatsApp на окремому номері. (Метадані каналу та потік налаштування оптимізовані для такого налаштування, але налаштування з особистим номером також підтримуються.)
</Note>
## Шаблони розгортання
<AccordionGroup>
<Accordion title="Окремий номер (рекомендовано)">
<Accordion title="Dedicated number (recommended)">
Це найчистіший операційний режим:
- окрема ідентичність WhatsApp для OpenClaw
- зрозуміліші allowlist-и DM та межі маршрутизації
- менша ймовірність плутанини із чатом із самим собою
- чіткіші allowlist DM і межі маршрутизації
- менша ймовірність плутанини із self-chat
Мінімальний шаблон політики:
@ -136,43 +136,44 @@ OpenClaw рекомендує за можливості запускати Whats
</Accordion>
<Accordion title="Резервний варіант з особистим номером">
Онбординг підтримує режим особистого номера та записує базову конфігурацію, зручну для чату із самим собою:
<Accordion title="Personal-number fallback">
Onboarding підтримує режим особистого номера й записує базову конфігурацію, дружню до self-chat:
- `dmPolicy: "allowlist"`
- `allowFrom` містить ваш особистий номер
- `selfChatMode: true`
Під час виконання захисти чату із самим собою спираються на пов’язаний власний номер і `allowFrom`.
Під час виконання захисти self-chat спираються на прив’язаний власний номер і `allowFrom`.
</Accordion>
<Accordion title="Область каналу лише WhatsApp Web">
Канал платформи повідомлень базується на WhatsApp Web (`Baileys`) у поточній архітектурі каналів OpenClaw.
<Accordion title="WhatsApp Web-only channel scope">
Канал платформи обміну повідомленнями базується на WhatsApp Web (`Baileys`) у поточній архітектурі каналів OpenClaw.
У вбудованому реєстрі чат-каналів немає окремого каналу повідомлень Twilio WhatsApp.
Окремого каналу повідомлень Twilio WhatsApp у вбудованому реєстрі чат-каналів немає.
</Accordion>
</AccordionGroup>
## Модель виконання
- Gateway керує сокетом WhatsApp і циклом повторного підключення.
- Watchdog повторного підключення використовує активність транспорту WhatsApp Web, а не лише обсяг вхідних повідомлень застосунку, тож тихий сеанс пов’язаного пристрою не перезапускається тільки тому, що останнім часом ніхто не надсилав повідомлень. Довший ліміт тиші застосунку все одно примусово виконує повторне підключення, якщо транспортні кадри продовжують надходити, але протягом вікна watchdog не обробляються повідомлення застосунку; після тимчасового повторного підключення для нещодавно активного сеансу ця перевірка тиші застосунку використовує звичайний timeout повідомлень для першого вікна відновлення.
- Таймінги сокета Baileys явно налаштовуються в `web.whatsapp.*`: `keepAliveIntervalMs` керує application ping-ами WhatsApp Web, `connectTimeoutMs` керує timeout початкового handshake, а `defaultQueryTimeoutMs` керує timeout-ами запитів Baileys.
- Вихідні надсилання потребують активного слухача WhatsApp для цільового акаунта.
- Статусні та broadcast-чати ігноруються (`@status`, `@broadcast`).
- Watchdog повторного підключення стежить за активністю транспорту WhatsApp Web, а не лише за обсягом вхідних повідомлень застосунку: тихі сеанси пов’язаних пристроїв залишаються активними, доки надходять транспортні кадри, але зупинка транспорту примушує повторне підключення значно раніше за пізніший шлях віддаленого від’єднання.
- Прямі чати використовують правила DM-сеансів (`session.dmScope`; типове значення `main` згортає DM до головного сеансу агента).
- Gateway володіє WhatsApp socket і циклом повторного підключення.
- Watchdog повторного підключення використовує активність транспорту WhatsApp Web, а не лише обсяг вхідних повідомлень застосунку, тому тихий сеанс прив’язаного пристрою не перезапускається тільки через те, що останнім часом ніхто не надсилав повідомлень. Довший ліміт тиші застосунку все одно примусово виконує повторне підключення, якщо транспортні кадри продовжують надходити, але протягом вікна watchdog не обробляються повідомлення застосунку; після тимчасового повторного підключення для нещодавно активного сеансу ця перевірка тиші застосунку використовує звичайний тайм-аут повідомлень для першого вікна відновлення.
- Таймінги Baileys socket явно задані в `web.whatsapp.*`: `keepAliveIntervalMs` керує ping WhatsApp Web застосунку, `connectTimeoutMs` керує тайм-аутом початкового handshake, а `defaultQueryTimeoutMs` керує тайм-аутами запитів Baileys.
- Вихідні надсилання потребують активного слухача WhatsApp для цільового облікового запису.
- Чати статусів і трансляцій ігноруються (`@status`, `@broadcast`).
- Watchdog повторного підключення стежить за активністю транспорту WhatsApp Web, а не лише за обсягом вхідних повідомлень застосунку: тихі сеанси прив’язаних пристроїв залишаються активними, доки транспортні кадри продовжують надходити, але зупинка транспорту примушує повторне підключення задовго до пізнішого шляху віддаленого від’єднання.
- Прямі чати використовують правила сеансів DM (`session.dmScope`; типове `main` згортає DM у головний сеанс агента).
- Групові сеанси ізольовані (`agent:<agentId>:whatsapp:group:<jid>`).
- Транспорт WhatsApp Web поважає стандартні змінні середовища проксі на хості gateway (`HTTPS_PROXY`, `HTTP_PROXY`, `NO_PROXY` / варіанти в нижньому регістрі). Надавайте перевагу конфігурації проксі на рівні хоста замість специфічних для каналу налаштувань проксі WhatsApp.
- Коли ввімкнено `messages.removeAckAfterReply`, OpenClaw очищає реакцію підтвердження WhatsApp після доставки видимої відповіді.
- WhatsApp Channels/Newsletters можуть бути явними вихідними цілями зі своїм нативним JID `@newsletter`. Вихідні надсилання до newsletter використовують метадані сеансу каналу (`agent:<agentId>:whatsapp:channel:<jid>`), а не семантику сеансів DM.
- Транспорт WhatsApp Web поважає стандартні змінні середовища proxy на хості gateway (`HTTPS_PROXY`, `HTTP_PROXY`, `NO_PROXY` / варіанти в нижньому регістрі). Віддавайте перевагу конфігурації proxy на рівні хоста, а не специфічним для каналу налаштуванням proxy WhatsApp.
- Коли ввімкнено `messages.removeAckAfterReply`, OpenClaw очищає реакцію ack у WhatsApp після доставки видимої відповіді.
## Хуки Plugin і приватність
## Plugin hooks і приватність
Вхідні повідомлення WhatsApp можуть містити особистий вміст повідомлень, номери телефонів,
ідентифікатори груп, імена відправників і поля кореляції сеансів. З цієї причини
WhatsApp не транслює вхідні payload-и hook `message_received` до plugins,
WhatsApp не транслює вхідні payload `message_received` hook до plugins,
якщо ви явно не ввімкнете це:
```json5
@ -187,7 +188,7 @@ WhatsApp не транслює вхідні payload-и hook `message_received`
}
```
Можна обмежити opt-in одним акаунтом:
Можна обмежити ввімкнення одним обліковим записом:
```json5
{
@ -205,13 +206,13 @@ WhatsApp не транслює вхідні payload-и hook `message_received`
}
```
Вмикайте це лише для plugins, яким ви довіряєте отримувати вміст і
ідентифікатори вхідних повідомлень WhatsApp.
Вмикайте це лише для plugins, яким ви довіряєте отримувати вміст і ідентифікатори
вхідних повідомлень WhatsApp.
## Контроль доступу й активація
## Контроль доступу та активація
<Tabs>
<Tab title="Політика DM">
<Tab title="DM policy">
`channels.whatsapp.dmPolicy` керує доступом до прямих чатів:
- `pairing` (типово)
@ -221,75 +222,77 @@ WhatsApp не транслює вхідні payload-и hook `message_received`
`allowFrom` приймає номери у стилі E.164 (нормалізуються внутрішньо).
Перевизначення для кількох акаунтів: `channels.whatsapp.accounts.<id>.dmPolicy` (і `allowFrom`) мають пріоритет над типовими значеннями рівня каналу для цього акаунта.
`allowFrom` — це список контролю доступу для відправників DM. Він не обмежує явні вихідні надсилання до JID груп WhatsApp або JID каналів `@newsletter`.
Перевизначення для кількох облікових записів: `channels.whatsapp.accounts.<id>.dmPolicy` (і `allowFrom`) мають пріоритет над типовими значеннями рівня каналу для цього облікового запису.
Деталі поведінки під час виконання:
- сполучення зберігаються в allow-store каналу й об’єднуються з налаштованим `allowFrom`
- запланована автоматизація та fallback одержувача Heartbeat використовують явні цілі доставки або налаштований `allowFrom`; підтвердження DM-сполучень не є неявними одержувачами Cron чи Heartbeat
- якщо allowlist не налаштовано, пов’язаний власний номер дозволено за замовчуванням
- OpenClaw ніколи автоматично не сполучає вихідні DM `fromMe` (повідомлення, які ви надсилаєте собі з пов’язаного пристрою)
- pairings зберігаються в allow-store каналу та об’єднуються з налаштованим `allowFrom`
- запланована автоматизація і fallback одержувачів Heartbeat використовують явні цілі доставки або налаштований `allowFrom`; схвалення DM pairing не є неявними одержувачами Cron чи Heartbeat
- якщо allowlist не налаштовано, прив’язаний власний номер дозволено типово
- OpenClaw ніколи автоматично не створює pairing для вихідних DM `fromMe` (повідомлень, які ви надсилаєте собі з прив’язаного пристрою)
</Tab>
<Tab title="Політика груп + allowlist-и">
<Tab title="Group policy + allowlists">
Доступ до груп має два рівні:
1. **Allowlist членства в групах** (`channels.whatsapp.groups`)
- якщо `groups` пропущено, усі групи придатні
- якщо `groups` пропущено, всі групи придатні
- якщо `groups` присутній, він діє як allowlist груп (`"*"` дозволено)
2. **Політика відправників групи** (`channels.whatsapp.groupPolicy` + `groupAllowFrom`)
- `open`: allowlist відправників обходиться
- `allowlist`: відправник має відповідати `groupAllowFrom` (або `*`)
- `disabled`: блокує всі групові вхідні повідомлення
- `disabled`: блокувати всі вхідні повідомлення груп
Fallback allowlist-а відправників:
Fallback allowlist відправників:
- якщо `groupAllowFrom` не задано, під час виконання використовується fallback до `allowFrom`, коли він доступний
- allowlist-и відправників оцінюються перед активацією за згадкою/відповіддю
- allowlists відправників оцінюються перед активацією через згадку/відповідь
Примітка: якщо блоку `channels.whatsapp` взагалі немає, fallback політики груп під час виконання — `allowlist` (із попередженням у логах), навіть якщо задано `channels.defaults.groupPolicy`.
Примітка: якщо блок `channels.whatsapp` взагалі відсутній, fallback політики груп під час виконання — `allowlist` (із warning log), навіть якщо задано `channels.defaults.groupPolicy`.
</Tab>
<Tab title="Згадки + /activation">
Групові відповіді за замовчуванням потребують згадки.
<Tab title="Mentions + /activation">
Відповіді в групах типово потребують згадки.
Виявлення згадок охоплює:
Виявлення згадок включає:
- явні згадки WhatsApp ідентичності бота
- налаштовані regex-шаблони згадок (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`)
- транскрипти вхідних голосових нотаток для авторизованих групових повідомлень
- неявне виявлення відповіді боту (відправник відповіді збігається з ідентичністю бота)
- транскрипти voice-note для авторизованих групових повідомлень
- неявне виявлення reply-to-bot (відправник відповіді збігається з ідентичністю бота)
Примітка щодо безпеки:
- цитата/відповідь лише задовольняє gating згадки; вона **не** надає авторизацію відправнику
- з `groupPolicy: "allowlist"` відправники поза allowlist усе одно блокуються, навіть якщо вони відповідають на повідомлення користувача з allowlist
- quote/reply лише задовольняє gating за згадкою; він **не** надає авторизацію відправнику
- з `groupPolicy: "allowlist"` відправники, яких немає в allowlist, усе одно блокуються, навіть якщо вони відповідають на повідомлення користувача з allowlist
Команда активації на рівні сеансу:
- `/activation mention`
- `/activation always`
`activation` оновлює стан сеансу (не глобальну конфігурацію). Вона gated власником.
`activation` оновлює стан сеансу (не глобальну конфігурацію). Вона обмежена власником.
</Tab>
</Tabs>
## Поведінка особистого номера та чату із самим собою
## Поведінка особистого номера та self-chat
Коли пов’язаний власний номер також присутній у `allowFrom`, активуються захисти WhatsApp для чату із самим собою:
Коли прив’язаний власний номер також присутній у `allowFrom`, активуються захисти self-chat WhatsApp:
- пропускати read receipts для ходів чату із самим собою
- ігнорувати поведінку автоактивації mention-JID, яка інакше пінгувала б вас самих
- якщо `messages.responsePrefix` не задано, відповіді в чаті із самим собою за замовчуванням мають вигляд `[{identity.name}]` або `[openclaw]`
- пропускати read receipts для turns self-chat
- ігнорувати поведінку автоматичного запуску mention-JID, яка інакше пінгувала б вас
- якщо `messages.responsePrefix` не задано, відповіді self-chat типово мають префікс `[{identity.name}]` або `[openclaw]`
## Нормалізація повідомлень і контекст
<AccordionGroup>
<Accordion title="Вхідний envelope + контекст відповіді">
<Accordion title="Inbound envelope + reply context">
Вхідні повідомлення WhatsApp обгортаються у спільний вхідний envelope.
Якщо існує цитована відповідь, контекст додається в такій формі:
@ -302,14 +305,14 @@ WhatsApp не транслює вхідні payload-и hook `message_received`
Поля метаданих відповіді також заповнюються, коли доступні (`ReplyToId`, `ReplyToBody`, `ReplyToSender`, JID/E.164 відправника).
Коли ціль цитованої відповіді — медіа, яке можна завантажити, OpenClaw зберігає його через
звичайне сховище вхідних медіа й надає його як `MediaPath`/`MediaType`, щоб
агент міг переглянути зображення, на яке є посилання, замість того щоб бачити лише
звичайне сховище вхідних медіа та показує як `MediaPath`/`MediaType`, щоб
агент міг переглянути згадане зображення, а не бачив лише
`<media:image>`.
</Accordion>
<Accordion title="Медіа-плейсхолдери та витягування локації/контактів">
Вхідні повідомлення лише з медіа нормалізуються з плейсхолдерами на кшталт:
<Accordion title="Media placeholders and location/contact extraction">
Вхідні повідомлення лише з медіа нормалізуються з placeholders, такими як:
- `<media:image>`
- `<media:video>`
@ -317,24 +320,24 @@ WhatsApp не транслює вхідні payload-и hook `message_received`
- `<media:document>`
- `<media:sticker>`
Авторизовані групові голосові нотатки транскрибуються перед gating згадки, коли
тіло містить лише `<media:audio>`, тож вимовлення згадки бота в голосовій нотатці може
активувати відповідь. Якщо транскрипт усе одно не згадує бота, його
зберігають в історії очікуваної групи замість сирого плейсхолдера.
Авторизовані групові voice notes транскрибуються перед gating за згадкою, коли
body містить лише `<media:audio>`, тому вимовляння згадки бота у voice note може
запустити відповідь. Якщо транскрипт усе ще не згадує бота,
транскрипт зберігається в очікуваній історії групи замість сирого placeholder.
Тіла локацій використовують стислий текст координат. Позначки/коментарі локацій і деталі контактів/vCard рендеряться як fenced недовірені метадані, а не як inline prompt text.
Тіла локацій використовують стислий текст координат. Мітки/коментарі локацій і деталі контакту/vCard відображаються як fenced недовірені метадані, а не inline текст prompt.
</Accordion>
<Accordion title="Ін’єкція очікуваної історії групи">
Для груп необроблені повідомлення можуть буферизуватися та ін’єктуватися як контекст, коли бот нарешті активується.
<Accordion title="Pending group history injection">
Для груп необроблені повідомлення можуть буферизуватися та вставлятися як контекст, коли бота нарешті запускають.
- типовий ліміт: `50`
- конфігурація: `channels.whatsapp.historyLimit`
- fallback: `messages.groupChat.historyLimit`
- `0` вимикає
Маркери ін’єкції:
Маркери вставлення:
- `[Chat messages since your last reply - for context]`
- `[Current message - respond to this]`
@ -342,7 +345,7 @@ WhatsApp не транслює вхідні payload-и hook `message_received`
</Accordion>
<Accordion title="Read receipts">
Read receipts за замовчуванням увімкнені для прийнятих вхідних повідомлень WhatsApp.
Read receipts типово ввімкнені для прийнятих вхідних повідомлень WhatsApp.
Вимкнути глобально:
@ -356,7 +359,7 @@ WhatsApp не транслює вхідні payload-и hook `message_received`
}
```
Перевизначення для акаунта:
Перевизначення для облікового запису:
```json5
{
@ -372,56 +375,56 @@ WhatsApp не транслює вхідні payload-и hook `message_received`
}
```
Ходи чату із самим собою пропускають read receipts, навіть коли вони глобально ввімкнені.
Повороти самочату пропускають сповіщення про прочитання, навіть коли їх увімкнено глобально.
</Accordion>
</AccordionGroup>
## Доставка, chunking і медіа
## Доставка, поділ на фрагменти та медіа
<AccordionGroup>
<Accordion title="Розбиття тексту на фрагменти">
<Accordion title="Поділ тексту на фрагменти">
- стандартний ліміт фрагмента: `channels.whatsapp.textChunkLimit = 4000`
- `channels.whatsapp.chunkMode = "length" | "newline"`
- режим `newline` віддає перевагу межам абзаців (порожнім рядкам), потім повертається до безпечного за довжиною розбиття на фрагменти
- режим `newline` надає перевагу межам абзаців (порожнім рядкам), а потім переходить до безпечного за довжиною поділу на фрагменти
</Accordion>
<Accordion title="Поведінка вихідних медіа">
- підтримує зображення, відео, аудіо (голосову нотатку PTT) і документні payloads
- підтримує зображення, відео, аудіо (голосову нотатку PTT) і документні payload
- аудіомедіа надсилається через Baileys payload `audio` з `ptt: true`, тому клієнти WhatsApp відображають його як голосову нотатку push-to-talk
- reply payloads зберігають `audioAsVoice`; вивід голосових нотаток TTS для WhatsApp лишається на цьому PTT-шляху, навіть коли провайдер повертає MP3 або WebM
- нативне Ogg/Opus-аудіо надсилається як `audio/ogg; codecs=opus` для сумісності з голосовими нотатками
- аудіо не у форматі Ogg, зокрема MP3/WebM-вивід Microsoft Edge TTS, перекодовується через `ffmpeg` у моно Ogg/Opus 48 кГц перед доставкою PTT
- `/tts latest` надсилає останню відповідь асистента як одну голосову нотатку й приглушує повторні надсилання для тієї самої відповіді; `/tts chat on|off|default` керує авто-TTS для поточного чату WhatsApp
- payload-и відповідей зберігають `audioAsVoice`; вихід голосової нотатки TTS для WhatsApp залишається на цьому шляху PTT, навіть коли провайдер повертає MP3 або WebM
- нативне аудіо Ogg/Opus надсилається як `audio/ogg; codecs=opus` для сумісності з голосовими нотатками
- аудіо не у форматі Ogg, зокрема вихід Microsoft Edge TTS MP3/WebM, транскодується через `ffmpeg` у моно Ogg/Opus 48 кГц перед доставкою PTT
- `/tts latest` надсилає останню відповідь асистента як одну голосову нотатку й пригнічує повторні надсилання для тієї самої відповіді; `/tts chat on|off|default` керує auto-TTS для поточного чату WhatsApp
- відтворення анімованих GIF підтримується через `gifPlayback: true` під час надсилання відео
- підписи застосовуються до першого медіаелемента під час надсилання reply payloads із кількома медіа, окрім голосових нотаток PTT: аудіо надсилається першим, а видимий текст окремо, бо клієнти WhatsApp не відображають підписи до голосових нотаток узгоджено
- джерело медіа може бути HTTP(S), `file://` або локальними шляхами
- підписи застосовуються до першого медіаелемента під час надсилання payload-ів відповіді з кількома медіа, окрім голосових нотаток PTT: для них спочатку надсилається аудіо, а видимий текст окремо, бо клієнти WhatsApp не відображають підписи голосових нотаток стабільно
- джерелом медіа може бути HTTP(S), `file://` або локальні шляхи
</Accordion>
<Accordion title="Обмеження розміру медіа та поведінка fallback">
- ліміт збереження вхідних медіа: `channels.whatsapp.mediaMaxMb` (стандартно `50`)
- ліміт надсилання вихідних медіа: `channels.whatsapp.mediaMaxMb` (стандартно `50`)
<Accordion title="Обмеження розміру медіа та резервна поведінка">
- ліміт збереження вхідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`)
- ліміт надсилання вихідних медіа: `channels.whatsapp.mediaMaxMb` (типово `50`)
- перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts.<accountId>.mediaMaxMb`
- зображення автоматично оптимізуються (зміна розміру/підбір якості), щоб уміститися в ліміти
- у разі помилки надсилання медіа fallback для першого елемента надсилає текстове попередження замість мовчазного відкидання відповіді
- у разі помилки надсилання медіа резервна поведінка для першого елемента надсилає текстове попередження замість тихого відкидання відповіді
</Accordion>
</AccordionGroup>
## Цитування відповідей
## Цитування відповіді
WhatsApp підтримує нативне цитування відповідей, коли вихідні відповіді видимо цитують вхідне повідомлення. Керуйте цим через `channels.whatsapp.replyToMode`.
| Значення | Поведінка |
| ----------- | --------------------------------------------------------------------- |
| `"off"` | Ніколи не цитувати; надсилати як звичайне повідомлення |
| `"first"` | Цитувати лише перший фрагмент вихідної відповіді |
| `"all"` | Цитувати кожен фрагмент вихідної відповіді |
| `"batched"` | Цитувати поставлені в чергу пакетні відповіді, лишаючи негайні відповіді без цитування |
| Значення | Поведінка |
| ----------- | ------------------------------------------------------------------- |
| `"off"` | Ніколи не цитувати; надсилати як звичайне повідомлення |
| `"first"` | Цитувати лише перший фрагмент вихідної відповіді |
| `"all"` | Цитувати кожен фрагмент вихідної відповіді |
| `"batched"` | Цитувати поставлені в чергу пакетні відповіді, залишаючи негайні відповіді без цитування |
Стандартно `"off"`. Перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts.<id>.replyToMode`.
Типово: `"off"`. Перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts.<id>.replyToMode`.
```json5
{
@ -437,14 +440,14 @@ WhatsApp підтримує нативне цитування відповіде
`channels.whatsapp.reactionLevel` керує тим, наскільки широко агент використовує emoji-реакції у WhatsApp:
| Рівень | Ack-реакції | Реакції, ініційовані агентом | Опис |
| ------------- | ----------- | ---------------------------- | ------------------------------------------------ |
| `"off"` | Ні | Ні | Жодних реакцій |
| `"ack"` | Так | Ні | Лише ack-реакції (підтвердження перед відповіддю) |
| `"minimal"` | Так | Так (консервативно) | Ack + реакції агента з консервативними настановами |
| `"extensive"` | Так | Так (заохочується) | Ack + реакції агента із заохочувальними настановами |
| Рівень | Ack-реакції | Реакції, ініційовані агентом | Опис |
| ------------- | ----------- | ---------------------------- | --------------------------------------------------- |
| `"off"` | Ні | Ні | Жодних реакцій |
| `"ack"` | Так | Ні | Лише Ack-реакції (квитанція перед відповіддю) |
| `"minimal"` | Так | Так (консервативно) | Ack + реакції агента з консервативними вказівками |
| `"extensive"` | Так | Так (заохочується) | Ack + реакції агента із заохочувальними вказівками |
Стандартно: `"minimal"`.
Типово: `"minimal"`.
Перевизначення для окремого облікового запису використовують `channels.whatsapp.accounts.<id>.reactionLevel`.
@ -460,8 +463,8 @@ WhatsApp підтримує нативне цитування відповіде
## Реакції підтвердження
WhatsApp підтримує негайні ack-реакції після отримання вхідного повідомлення через `channels.whatsapp.ackReaction`.
Ack-реакції обмежуються `reactionLevel`вони приглушуються, коли `reactionLevel` дорівнює `"off"`.
WhatsApp підтримує негайні Ack-реакції після отримання вхідного повідомлення через `channels.whatsapp.ackReaction`.
Ack-реакції обмежуються `reactionLevel`їх пригнічено, коли `reactionLevel` дорівнює `"off"`.
```json5
{
@ -477,53 +480,53 @@ 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`, якщо він наявний, інакше перший налаштований ідентифікатор облікового запису (за відсортованим порядком)
- стандартний вибір облікового запису: `default`, якщо він присутній, інакше перший налаштований ідентифікатор облікового запису (відсортований)
- ідентифікатори облікових записів нормалізуються внутрішньо для пошуку
</Accordion>
<Accordion title="Шляхи облікових даних і сумісність із застарілим форматом">
- поточний шлях auth: `~/.openclaw/credentials/whatsapp/<accountId>/creds.json`
<Accordion title="Шляхи облікових даних і сумісність із застарілими версіями">
- поточний шлях автентифікації: `~/.openclaw/credentials/whatsapp/<accountId>/creds.json`
- файл резервної копії: `creds.json.bak`
- застарілий стандартний auth у `~/.openclaw/credentials/` досі розпізнається/мігрується для потоків стандартного облікового запису
- застаріла стандартна автентифікація в `~/.openclaw/credentials/` досі розпізнається/мігрується для потоків стандартного облікового запису
</Accordion>
<Accordion title="Поведінка виходу">
`openclaw channels logout --channel whatsapp [--account <id>]` очищає стан auth WhatsApp для цього облікового запису.
`openclaw channels logout --channel whatsapp [--account <id>]` очищає стан автентифікації WhatsApp для цього облікового запису.
Коли Gateway доступний, вихід спочатку зупиняє активний слухач WhatsApp для вибраного облікового запису, щоб пов'язана сесія не продовжувала отримувати повідомлення до наступного перезапуску. `openclaw channels remove --channel whatsapp` також зупиняє активний слухач перед вимкненням або видаленням конфігурації облікового запису.
У застарілих каталогах auth `oauth.json` зберігається, а auth-файли Baileys видаляються.
У застарілих каталогах автентифікації `oauth.json` зберігається, а файли автентифікації Baileys видаляються.
</Accordion>
</AccordionGroup>
## Інструменти, дії та записи конфігурації
- Підтримка інструментів агента включає дію реакції WhatsApp (`react`).
- Обмеження дій:
- Підтримка інструментів агента охоплює дію реакції WhatsApp (`react`).
- Обмежувачі дій:
- `channels.whatsapp.actions.reactions`
- `channels.whatsapp.actions.polls`
- Записи конфігурації, ініційовані каналом, увімкнено стандартно (вимкнення через `channels.whatsapp.configWrites=false`).
- Записи конфігурації, ініційовані каналом, увімкнено типово (вимикається через `channels.whatsapp.configWrites=false`).
## Усунення несправностей
<AccordionGroup>
<Accordion title="Не пов'язано (потрібен QR)">
Симптом: стан каналу повідомляє, що він не пов'язаний.
Симптом: статус каналу повідомляє, що він не пов'язаний.
Виправлення:
@ -534,16 +537,16 @@ Ack-реакції обмежуються `reactionLevel` — вони приг
</Accordion>
<Accordion title="Пов'язано, але відключено / цикл перепідключення">
Симптом: пов'язаний обліковий запис із повторними відключеннями або спробами перепідключення.
<Accordion title="Пов'язано, але від'єднано / цикл повторного підключення">
Симптом: пов'язаний обліковий запис із повторними від'єднаннями або спробами повторного підключення.
Тихі облікові записи можуть лишатися підключеними після звичайного тайм-ауту повідомлень; watchdog
Тихі облікові записи можуть залишатися підключеними після звичайного тайм-ауту повідомлень; watchdog
перезапускається, коли транспортна активність WhatsApp Web зупиняється, сокет закривається або
активність на рівні застосунку лишається тихою довше за довше безпечне вікно.
активність на рівні застосунку залишається беззвучною довше за довше вікно безпеки.
Якщо журнали показують повторюваний `status=408 Request Time-out Connection was lost`, налаштуйте
Якщо журнали показують повторюване `status=408 Request Time-out Connection was lost`, налаштуйте
таймінги сокета Baileys у `web.whatsapp`. Почніть зі скорочення
`keepAliveIntervalMs` нижче за тайм-аут простою вашої мережі та збільшення
`keepAliveIntervalMs` нижче тайм-ауту простою вашої мережі та збільшення
`connectTimeoutMs` на повільних або нестабільних з'єднаннях:
```json5
@ -570,82 +573,82 @@ Ack-реакції обмежуються `reactionLevel` — вони приг
gateway і WhatsApp справні, запустіть `openclaw doctor`. У Linux doctor
попереджає про застарілі записи crontab, які досі викликають
`~/.openclaw/bin/ensure-whatsapp.sh`; видаліть ці застарілі записи через
`crontab -e`, бо cron може не мати середовища user-bus systemd і
змушувати старий скрипт неправильно повідомляти про справність gateway.
`crontab -e`, бо cron може не мати середовища користувацької шини systemd і
змушувати старий скрипт хибно звітувати про стан gateway.
За потреби повторно пов'яжіть через `channels login`.
</Accordion>
<Accordion title="QR-вхід завершується тайм-аутом за проксі">
Симптом: `openclaw channels login --channel whatsapp` завершується помилкою до показу придатного QR-коду з `status=408 Request Time-out` або відключенням TLS-сокета.
<Accordion title="Вхід через QR завершується тайм-аутом за проксі">
Симптом: `openclaw channels login --channel whatsapp` завершується помилкою до показу придатного QR-коду з `status=408 Request Time-out` або від'єднанням TLS-сокета.
Вхід у WhatsApp Web використовує стандартне proxy-середовище хоста gateway (`HTTPS_PROXY`, `HTTP_PROXY`, варіанти в нижньому регістрі та `NO_PROXY`). Перевірте, що процес gateway успадковує proxy env і що `NO_PROXY` не відповідає `mmg.whatsapp.net`.
Вхід у WhatsApp Web використовує стандартне проксі-середовище хоста gateway (`HTTPS_PROXY`, `HTTP_PROXY`, варіанти в нижньому регістрі та `NO_PROXY`). Перевірте, що процес gateway успадковує проксі-змінні середовища і що `NO_PROXY` не відповідає `mmg.whatsapp.net`.
</Accordion>
<Accordion title="Немає активного слухача під час надсилання">
Вихідні надсилання швидко завершуються помилкою, коли для цільового облікового запису немає активного слухача gateway.
Переконайтеся, що gateway запущено, а обліковий запис пов'язано.
Переконайтеся, що gateway запущений, а обліковий запис пов'язано.
</Accordion>
<Accordion title="Відповідь з'являється в транскрипті, але не у WhatsApp">
Рядки транскрипту записують те, що згенерував агент. Доставка WhatsApp перевіряється окремо: OpenClaw вважає автовідповідь надісланою лише після того, як Baileys повертає ідентифікатор вихідного повідомлення принаймні для одного видимого текстового або медіанадсилання.
<Accordion title="Відповідь є у транскрипті, але не у WhatsApp">
Рядки транскрипту записують те, що згенерував агент. Доставка WhatsApp перевіряється окремо: OpenClaw вважає автоматичну відповідь надісланою лише після того, як Baileys повертає ідентифікатор вихідного повідомлення принаймні для одного видимого текстового або медіа-надсилання.
Ack-реакції є незалежними підтвердженнями перед відповіддю. Успішна реакція не доводить, що пізніша текстова або медіавідповідь була прийнята WhatsApp.
Ack-реакції є незалежними квитанціями перед відповіддю. Успішна реакція не доводить, що пізніша текстова або медіа-відповідь була прийнята WhatsApp.
Перевірте журнали gateway на `auto-reply delivery failed` або `auto-reply was not accepted by WhatsApp provider`.
</Accordion>
<Accordion title="Групові повідомлення несподівано ігноруються">
<Accordion title="Групові повідомлення неочікувано ігноруються">
Перевіряйте в такому порядку:
- `groupPolicy`
- `groupAllowFrom` / `allowFrom`
- записи allowlist `groups`
- обмеження за згадками (`requireMention` + шаблони згадок)
- дублікати ключів у `openclaw.json` (JSON5): пізніші записи перевизначають попередні, тому тримайте один `groupPolicy` для кожного scope
- записи allowlist у `groups`
- обмеження згадками (`requireMention` + шаблони згадок)
- дублікати ключів у `openclaw.json` (JSON5): пізніші записи перевизначають попередні, тому залишайте один `groupPolicy` на кожну область
</Accordion>
<Accordion title="Попередження runtime Bun">
Runtime gateway WhatsApp має використовувати Node. Bun позначено як несумісний для стабільної роботи gateway WhatsApp/Telegram.
<Accordion title="Попередження середовища виконання Bun">
Середовище виконання gateway WhatsApp має використовувати Node. Bun позначено як несумісний для стабільної роботи gateway WhatsApp/Telegram.
</Accordion>
</AccordionGroup>
## Системні prompts
## Системні промпти
WhatsApp підтримує системні prompts у стилі Telegram для груп і прямих чатів через maps `groups` і `direct`.
WhatsApp підтримує системні промпти в стилі Telegram для груп і прямих чатів через мапи `groups` і `direct`.
Ієрархія розв'язання для групових повідомлень:
Ефективна map `groups` визначається першою: якщо обліковий запис визначає власну `groups`, вона повністю замінює кореневу map `groups` (без глибокого merge). Потім пошук prompt виконується на отриманій єдиній map:
Ефективна мапа `groups` визначається першою: якщо обліковий запис визначає власну `groups`, вона повністю замінює кореневу мапу `groups` (без глибокого злиття). Потім пошук промпта виконується на отриманій єдиній мапі:
1. **Системний prompt для конкретної групи** (`groups["<groupId>"].systemPrompt`): використовується, коли конкретний запис групи існує в map **і** його ключ `systemPrompt` визначено. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard приглушується й системний prompt не застосовується.
2. **Wildcard системного prompt для групи** (`groups["*"].systemPrompt`): використовується, коли конкретний запис групи повністю відсутній у map або коли він існує, але не визначає ключ `systemPrompt`.
1. **Системний промпт конкретної групи** (`groups["<groupId>"].systemPrompt`): використовується, коли конкретний запис групи існує в мапі **і** його ключ `systemPrompt` визначено. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard пригнічується і системний промпт не застосовується.
2. **Wildcard-системний промпт групи** (`groups["*"].systemPrompt`): використовується, коли конкретний запис групи повністю відсутній у мапі або коли він існує, але не визначає ключ `systemPrompt`.
Ієрархія розв'язання для прямих повідомлень:
Ефективна map `direct` визначається першою: якщо обліковий запис визначає власну `direct`, вона повністю замінює кореневу map `direct` (без глибокого merge). Потім пошук prompt виконується на отриманій єдиній map:
Ефективна мапа `direct` визначається першою: якщо обліковий запис визначає власну `direct`, вона повністю замінює кореневу мапу `direct` (без глибокого злиття). Потім пошук промпта виконується на отриманій єдиній мапі:
1. **Системний prompt для конкретного direct** (`direct["<peerId>"].systemPrompt`): використовується, коли конкретний peer-запис існує в map **і** його ключ `systemPrompt` визначено. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard приглушується й системний prompt не застосовується.
2. **Wildcard системного prompt для direct** (`direct["*"].systemPrompt`): використовується, коли конкретний peer-запис повністю відсутній у map або коли він існує, але не визначає ключ `systemPrompt`.
1. **Системний промпт конкретного прямого чату** (`direct["<peerId>"].systemPrompt`): використовується, коли конкретний запис співрозмовника існує в мапі **і** його ключ `systemPrompt` визначено. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard пригнічується і системний промпт не застосовується.
2. **Wildcard-системний промпт прямого чату** (`direct["*"].systemPrompt`): використовується, коли конкретний запис співрозмовника повністю відсутній у мапі або коли він існує, але не визначає ключ `systemPrompt`.
<Note>
`dms` лишається легким контейнером перевизначень історії для окремих DM (`dms.<id>.historyLimit`). Перевизначення prompt розміщуються в `direct`.
`dms` залишається легким контейнером перевизначень історії для окремих DM (`dms.<id>.historyLimit`). Перевизначення промптів розміщуються в `direct`.
</Note>
**Відмінність від поведінки кількох облікових записів Telegram:** У Telegram кореневі `groups` навмисно пригнічуються для всіх облікових записів у конфігурації з кількома обліковими записами — навіть для облікових записів, які не визначають власних `groups`, — щоб запобігти отриманню ботом групових повідомлень із груп, до яких він не належить. WhatsApp не застосовує цей запобіжник: кореневі `groups` і кореневі `direct` завжди успадковуються обліковими записами, які не визначають перевизначення на рівні облікового запису, незалежно від кількості налаштованих облікових записів. У конфігурації WhatsApp із кількома обліковими записами, якщо потрібні групові або прямі промпти для кожного облікового запису окремо, явно визначте повну мапу в кожному обліковому записі, а не покладайтеся на кореневі значення за замовчуванням.
**Відмінність від поведінки Telegram з кількома обліковими записами:** У Telegram кореневий `groups` навмисно пригнічується для всіх облікових записів у налаштуванні з кількома обліковими записами — навіть для облікових записів, які не визначають власних `groups`, — щоб бот не отримував групові повідомлення з груп, до яких він не належить. WhatsApp не застосовує цей захист: кореневі `groups` і кореневий `direct` завжди успадковуються обліковими записами, які не визначають перевизначення на рівні облікового запису, незалежно від кількості налаштованих облікових записів. У налаштуванні WhatsApp з кількома обліковими записами, якщо потрібні окремі для кожного облікового запису групові або прямі підказки, явно визначайте повну мапу в кожному обліковому записі, а не покладайтеся на типові значення кореневого рівня.
Важлива поведінка:
- `channels.whatsapp.groups` є одночасно мапою конфігурації для окремих груп і allowlist груп на рівні чату. У кореневій області або в області облікового запису `groups["*"]` означає "усі групи допускаються" для цієї області.
- Додавайте wildcard-групу `systemPrompt` лише тоді, коли ви вже хочете, щоб ця область допускала всі групи. Якщо ви все ще хочете, щоб придатним був лише фіксований набір ID груп, не використовуйте `groups["*"]` для стандартного промпта. Натомість повторіть промпт у кожному явно дозволеному записі групи.
- Допуск групи та авторизація відправника є окремими перевірками. `groups["*"]` розширює набір груп, які можуть потрапити до обробки груп, але сам по собі не авторизує кожного відправника в цих групах. Доступ відправників і надалі окремо контролюється через `channels.whatsapp.groupPolicy` і `channels.whatsapp.groupAllowFrom`.
- `channels.whatsapp.direct` не має такого самого побічного ефекту для DM. `direct["*"]` лише надає стандартну конфігурацію прямого чату після того, як DM уже допущено через `dmPolicy` разом із `allowFrom` або правилами сховища спарювання.
- `channels.whatsapp.groups` є і мапою конфігурації для кожної групи, і дозвільним списком груп на рівні чату. У кореневій області або області облікового запису `groups["*"]` означає "усі групи допускаються" для цієї області.
- Додавайте груповий символ узагальнення `systemPrompt` лише тоді, коли вже потрібно, щоб ця область допускала всі групи. Якщо все ще потрібно, щоб придатним був лише фіксований набір ID груп, не використовуйте `groups["*"]` як типову підказку. Натомість повторіть підказку в кожному явно дозволеному записі групи.
- Допуск групи й авторизація відправника є окремими перевірками. `groups["*"]` розширює набір груп, які можуть потрапити до обробки груп, але сам по собі не авторизує кожного відправника в цих групах. Доступ відправників і далі окремо контролюється `channels.whatsapp.groupPolicy` і `channels.whatsapp.groupAllowFrom`.
- `channels.whatsapp.direct` не має такого самого побічного ефекту для приватних повідомлень. `direct["*"]` лише надає типову конфігурацію прямого чату після того, як приватне повідомлення вже допущено правилами `dmPolicy` плюс `allowFrom` або сховища сполучень.
Приклад:
@ -693,20 +696,20 @@ WhatsApp підтримує системні prompts у стилі Telegram дл
- [Довідник конфігурації - 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.*`, `web.whatsapp.*`
- поведінка сесії: `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)
- [Маршрутизація кількох агентів](/uk/concepts/multi-agent)
- [Маршрутизація між агентами](/uk/concepts/multi-agent)
- [Усунення несправностей](/uk/channels/troubleshooting)

View File

@ -1,34 +1,34 @@
---
read_when:
- Ви хочете знайти ідентифікатори контактів/груп/власного облікового запису для каналу
- Ви хочете знайти ідентифікатори контактів, груп або власні ідентифікатори для каналу
- Ви розробляєте адаптер каталогу каналів
summary: Довідник CLI для `openclaw directory` (себе, однорангових учасників, груп)
summary: Довідник CLI для `openclaw directory` (себе, однорангові вузли, групи)
title: Каталог
x-i18n:
generated_at: "2026-05-02T05:25:24Z"
generated_at: "2026-05-02T20:13:43Z"
model: gpt-5.5
provider: openai
source_hash: dcd0be284c0ec1aa347084d84f7001f1e2f47977ec5198025ba303297858aaab
source_hash: 011f762d6f53605a37bd12b31c767594c0efa5681da4b2aabe7fb358751b1542
source_path: cli/directory.md
workflow: 16
---
# `openclaw directory`
Пошук у каталозі для каналів, які це підтримують (контакти/співрозмовники, групи та «me»).
Пошук у каталозі для каналів, які його підтримують (контакти/однорангові учасники, групи та «я»).
## Спільні прапорці
## Загальні прапорці
- `--channel <name>`: ідентифікатор/псевдонім каналу (обов’язково, коли налаштовано кілька каналів; автоматично, коли налаштовано лише один)
- `--account <id>`: ідентифікатор облікового запису (типово: стандартний для каналу)
- `--channel <name>`: ID/псевдонім каналу (обов’язково, коли налаштовано кілька каналів; автоматично, коли налаштовано лише один)
- `--account <id>`: ID облікового запису (типове значення: типове для каналу)
- `--json`: вивести JSON
## Примітки
- `directory` призначено, щоб допомогти вам знайти ідентифікатори, які можна вставити в інші команди (особливо `openclaw message send --target ...`).
- `directory` призначено, щоб допомогти вам знайти ID, які можна вставити в інші команди (особливо `openclaw message send --target ...`).
- Для багатьох каналів результати базуються на конфігурації (списки дозволених / налаштовані групи), а не на живому каталозі провайдера.
- Установлені Plugin каналів усе ще можуть не підтримувати каталог; у такому разі команда повідомляє про непідтримувану операцію каталогу замість перевстановлення Plugin.
- Типовий вивід — це `id` (а іноді `name`), розділені табуляцією; використовуйте `--json` для сценаріїв.
- Встановлені плагіни каналів усе одно можуть не підтримувати каталог; у такому разі команда повідомляє про непідтримувану операцію каталогу замість перевстановлення плагіна.
- Типовий вивід — `id` (а іноді `name`), розділені табуляцією; використовуйте `--json` для скриптів.
## Використання результатів із `message send`
@ -37,16 +37,16 @@ openclaw directory peers list --channel slack --query "U0"
openclaw message send --channel slack --target user:U012ABCDEF --message "hello"
```
## Формати ідентифікаторів (за каналом)
## Формати ID (за каналом)
- WhatsApp: `+15551234567` (DM), `1234567890-1234567890@g.us` (група)
- Telegram: `@username` або числовий ідентифікатор чату; групи мають числові ідентифікатори
- WhatsApp: `+15551234567` (DM), `1234567890-1234567890@g.us` (група), `120363123456789@newsletter` (вихідна ціль Channel/Newsletter)
- Telegram: `@username` або числовий ID чату; групи мають числові ID
- Slack: `user:U…` і `channel:C…`
- Discord: `user:<id>` і `channel:<id>`
- Matrix (Plugin): `user:@user:server`, `room:!roomId:server` або `#alias:server`
- Microsoft Teams (Plugin): `user:<id>` і `conversation:<id>`
- Zalo (Plugin): ідентифікатор користувача (Bot API)
- Zalo Personal / `zalouser` (Plugin): ідентифікатор потоку (DM/група) з `zca` (`me`, `friend list`, `group list`)
- Matrix (плагін): `user:@user:server`, `room:!roomId:server` або `#alias:server`
- Microsoft Teams (плагін): `user:<id>` і `conversation:<id>`
- Zalo (плагін): ID користувача (Bot API)
- Zalo Personal / `zalouser` (плагін): ID потоку (DM/група) з `zca` (`me`, `friend list`, `group list`)
## Себе ("me")
@ -54,7 +54,7 @@ openclaw message send --channel slack --target user:U012ABCDEF --message "hello"
openclaw directory self --channel zalouser
```
## Співрозмовники (контакти/користувачі)
## Однорангові учасники (контакти/користувачі)
```bash
openclaw directory peers list --channel zalouser

View File

@ -2,21 +2,21 @@
read_when:
- Додавання або змінення дій CLI для повідомлень
- Зміна поведінки вихідного каналу
summary: Довідник CLI для `openclaw message` (send + дії каналу)
summary: Довідник CLI для `openclaw message` (надсилання + дії з каналами)
title: Повідомлення
x-i18n:
generated_at: "2026-05-02T02:28:46Z"
generated_at: "2026-05-02T20:13:43Z"
model: gpt-5.5
provider: openai
source_hash: f429acc2c81f33d1ade543ab1170220e293077e1d1721ac0940937de3d19f0d2
source_hash: 6b73a50da34838f80ad5d0d266f5c66f95436f8535e6312296ae022918b1ab55
source_path: cli/message.md
workflow: 16
---
# `openclaw message`
Єдина вихідна команда для надсилання повідомлень і дій каналів
(Discord/Google Chat/iMessage/Matrix/Mattermost (plugin)/Microsoft Teams/Signal/Slack/Telegram/WhatsApp).
Єдина вихідна команда для надсилання повідомлень і дій каналу
(Discord/Google Chat/iMessage/Matrix/Mattermost (Plugin)/Microsoft Teams/Signal/Slack/Telegram/WhatsApp).
## Використання
@ -28,62 +28,62 @@ openclaw message <subcommand> [flags]
- `--channel` обов’язковий, якщо налаштовано більше ніж один канал.
- Якщо налаштовано рівно один канал, він стає типовим.
- Значення: `discord|googlechat|imessage|matrix|mattermost|msteams|signal|slack|telegram|whatsapp` (Mattermost вимагає plugin)
- `openclaw message` зіставляє вибраний канал із Plugin, якому він належить, коли наявний `--channel` або ціль із префіксом каналу; інакше завантажує налаштовані Plugin каналів для визначення типового каналу.
- Значення: `discord|googlechat|imessage|matrix|mattermost|msteams|signal|slack|telegram|whatsapp` (Mattermost потребує Plugin)
- `openclaw message` зіставляє вибраний канал із Plugin, якому він належить, коли присутній `--channel` або ціль із префіксом каналу; інакше він завантажує налаштовані Plugin каналів для визначення типового каналу.
Формати цілі (`--target`):
Формати цілей (`--target`):
- WhatsApp: E.164 або JID групи
- Telegram: id чату або `@username`
- Discord: `channel:<id>` або `user:<id>` (або згадка `<@id>`; необроблені числові id вважаються каналами)
- WhatsApp: E.164, JID групи або JID каналу/розсилки WhatsApp (`...@newsletter`)
- Telegram: ідентифікатор чату або `@username`
- Discord: `channel:<id>` або `user:<id>` (або згадка `<@id>`; необроблені числові ідентифікатори вважаються каналами)
- Google Chat: `spaces/<spaceId>` або `users/<userId>`
- Slack: `channel:<id>` або `user:<id>` (необроблений id каналу приймається)
- Mattermost (plugin): `channel:<id>`, `user:<id>` або `@username` (id без префікса вважаються каналами)
- Slack: `channel:<id>` або `user:<id>` (необроблений ідентифікатор каналу приймається)
- Mattermost (Plugin): `channel:<id>`, `user:<id>` або `@username` (ідентифікатори без префікса вважаються каналами)
- Signal: `+E.164`, `group:<id>`, `signal:+E.164`, `signal:group:<id>` або `username:<name>`/`u:<name>`
- iMessage: дескриптор, `chat_id:<id>`, `chat_guid:<guid>` або `chat_identifier:<id>`
- Matrix: `@user:server`, `!room:server` або `#alias:server`
- Microsoft Teams: id розмови (`19:...@thread.tacv2`) або `conversation:<id>` чи `user:<aad-object-id>`
- Microsoft Teams: ідентифікатор розмови (`19:...@thread.tacv2`) або `conversation:<id>` чи `user:<aad-object-id>`
Пошук за назвою:
- Для підтримуваних провайдерів (Discord/Slack/тощо) назви каналів, як-от `Help` або `#help`, зіставляються через кеш каталогу.
- У разі промаху кешу OpenClaw спробує виконати живий пошук у каталозі, якщо провайдер це підтримує.
- Для підтримуваних провайдерів (Discord/Slack тощо) назви каналів на кшталт `Help` або `#help` зіставляються через кеш каталогу.
- Якщо в кеші немає збігу, OpenClaw спробує виконати живий пошук у каталозі, коли провайдер це підтримує.
## Поширені прапорці
- `--channel <name>`
- `--account <id>`
- `--target <dest>` (цільовий канал або користувач для send/poll/read/тощо)
- `--targets <name>` (повторюваний; лише трансляція)
- `--target <dest>` (цільовий канал або користувач для send/poll/read тощо)
- `--targets <name>` (повторюваний; лише широкомовлення)
- `--json`
- `--dry-run`
- `--verbose`
## Поведінка SecretRef
- `openclaw message` розв’язує підтримувані SecretRefs каналів перед запуском вибраної дії.
- Розв’язання, коли можливо, обмежується активною ціллю дії:
- у межах каналу, коли встановлено `--channel` (або виведено з цілей із префіксом, як-от `discord:...`)
- у межах облікового запису, коли встановлено `--account` (глобальні поверхні каналу + поверхні вибраного облікового запису)
- коли `--account` пропущено, OpenClaw не примушує область SecretRef облікового запису `default`
- Нерозв’язані SecretRefs у непов’язаних каналах не блокують цільову дію з повідомленням.
- Якщо SecretRef вибраного каналу/облікового запису не розв’язано, команда для цієї дії завершується із закритою відмовою.
- `openclaw message` зіставляє підтримувані SecretRefs каналів перед виконанням вибраної дії.
- Зіставлення за можливості обмежується активною ціллю дії:
- на рівні каналу, коли задано `--channel` (або виведено з цілей із префіксом, як-от `discord:...`)
- на рівні облікового запису, коли задано `--account` (глобальні поверхні каналу + поверхні вибраного облікового запису)
- коли `--account` опущено, OpenClaw не примушує область SecretRef типового облікового запису `default`
- Нерозв’язані SecretRefs у непов’язаних каналах не блокують цільову дію повідомлення.
- Якщо SecretRef вибраного каналу/облікового запису не розв’язано, команда завершується закрито для цієї дії.
## Дії
### Ядро
- `send`
- Канали: WhatsApp/Telegram/Discord/Google Chat/Slack/Mattermost (plugin)/Signal/iMessage/Matrix/Microsoft Teams
- Канали: WhatsApp/Telegram/Discord/Google Chat/Slack/Mattermost (Plugin)/Signal/iMessage/Matrix/Microsoft Teams
- Обов’язково: `--target`, а також `--message`, `--media` або `--presentation`
- Необов’язково: `--media`, `--presentation`, `--delivery`, `--pin`, `--reply-to`, `--thread-id`, `--gif-playback`, `--force-document`, `--silent`
- Спільні payload презентації: `--presentation` надсилає семантичні блоки (`text`, `context`, `divider`, `buttons`, `select`), які ядро рендерить через оголошені можливості вибраного каналу. Див. [Презентація повідомлень](/uk/plugins/message-presentation).
- Загальні налаштування доставки: `--delivery` приймає підказки доставки, як-от `{ "pin": true }`; `--pin` є скороченням для закріпленої доставки, коли канал це підтримує.
- Спільні корисні навантаження представлення: `--presentation` надсилає семантичні блоки (`text`, `context`, `divider`, `buttons`, `select`), які ядро рендерить через оголошені можливості вибраного каналу. Див. [Представлення повідомлень](/uk/plugins/message-presentation).
- Загальні параметри доставки: `--delivery` приймає підказки доставки, як-от `{ "pin": true }`; `--pin` є скороченням для закріпленої доставки, коли канал це підтримує.
- Лише Telegram: `--force-document` (надсилати зображення та GIF як документи, щоб уникнути стиснення Telegram)
- Лише Telegram: `--thread-id` (id теми форуму)
- Лише Slack: `--thread-id` (мітка часу потоку; `--reply-to` використовує те саме поле)
- Лише Telegram: `--thread-id` (ідентифікатор теми форуму)
- Лише Slack: `--thread-id` (часова мітка гілки; `--reply-to` використовує те саме поле)
- Telegram + Discord: `--silent`
- Лише WhatsApp: `--gif-playback`
- Лише WhatsApp: `--gif-playback`; канали/розсилки WhatsApp адресуються їхнім нативним JID `@newsletter`.
- `poll`
- Канали: WhatsApp/Telegram/Discord/Matrix/Microsoft Teams
@ -96,9 +96,9 @@ openclaw message <subcommand> [flags]
- Канали: Discord/Google Chat/Slack/Telegram/WhatsApp/Signal/Matrix
- Обов’язково: `--message-id`, `--target`
- Необов’язково: `--emoji`, `--remove`, `--participant`, `--from-me`, `--target-author`, `--target-author-uuid`
- Примітка: `--remove` вимагає `--emoji` (пропустіть `--emoji`, щоб очистити власні реакції там, де це підтримується; див. /tools/reactions)
- Примітка: `--remove` потребує `--emoji` (опустіть `--emoji`, щоб очистити власні реакції там, де це підтримується; див. /tools/reactions)
- Лише WhatsApp: `--participant`, `--from-me`
- Реакції в групах Signal: потрібен `--target-author` або `--target-author-uuid`
- Реакції групи Signal: потрібен `--target-author` або `--target-author-uuid`
- `reactions`
- Канали: Discord/Google Chat/Slack/Matrix
@ -109,7 +109,7 @@ openclaw message <subcommand> [flags]
- Канали: Discord/Slack/Matrix
- Обов’язково: `--target`
- Необов’язково: `--limit`, `--message-id`, `--before`, `--after`
- Лише Slack: `--message-id` читає конкретну мітку часу повідомлення Slack; поєднуйте з `--thread-id`, щоб прочитати точну відповідь у потоці.
- Лише Slack: `--message-id` читає конкретну часову мітку повідомлення Slack; поєднайте з `--thread-id`, щоб прочитати точну відповідь у гілці.
- Лише Discord: `--around`
- `edit`
@ -131,18 +131,18 @@ openclaw message <subcommand> [flags]
- `permissions`
- Канали: Discord/Matrix
- Обов’язково: `--target`
- Лише Matrix: доступно, коли ввімкнено шифрування Matrix і дозволено дії перевірки
- Лише Matrix: доступно, коли шифрування Matrix увімкнено і дії перевірки дозволені
- `search`
- Канали: Discord
- Обов’язково: `--guild-id`, `--query`
- Необов’язково: `--channel-id`, `--channel-ids` (повторюваний), `--author-id`, `--author-ids` (повторюваний), `--limit`
### Потоки
### Гілки
- `thread create`
- Канали: Discord
- Обов’язково: `--thread-name`, `--target` (id каналу)
- Обов’язково: `--thread-name`, `--target` (ідентифікатор каналу)
- Необов’язково: `--message-id`, `--message`, `--auto-archive-min`
- `thread list`
@ -152,7 +152,7 @@ openclaw message <subcommand> [flags]
- `thread reply`
- Канали: Discord
- Обов’язково: `--target` (id потоку), `--message`
- Обов’язково: `--target` (ідентифікатор гілки), `--message`
- Необов’язково: `--media`, `--reply-to`
### Емодзі
@ -194,12 +194,12 @@ openclaw message <subcommand> [flags]
### Модерація (Discord)
- `timeout`: `--guild-id`, `--user-id` (необов’язково `--duration-min` або `--until`; пропустіть обидва, щоб очистити timeout)
- `timeout`: `--guild-id`, `--user-id` (необов’язково `--duration-min` або `--until`; опустіть обидва, щоб очистити timeout)
- `kick`: `--guild-id`, `--user-id` (+ `--reason`)
- `ban`: `--guild-id`, `--user-id` (+ `--delete-days`, `--reason`)
- `timeout` також підтримує `--reason`
### Трансляція
### Широкомовлення
- `broadcast`
- Канали: будь-який налаштований канал; використовуйте `--channel all`, щоб націлитися на всіх провайдерів
@ -223,9 +223,9 @@ openclaw message send --channel discord \
--presentation '{"blocks":[{"type":"buttons","buttons":[{"label":"Approve","value":"approve","style":"success"},{"label":"Decline","value":"decline","style":"danger"}]}]}'
```
Ядро рендерить той самий payload `presentation` у компоненти Discord, блоки Slack, вбудовані кнопки Telegram, props Mattermost або картки Teams/Feishu залежно від можливостей каналу. Див. [Презентація повідомлень](/uk/plugins/message-presentation), щоб переглянути повний контракт і правила fallback.
Ядро рендерить те саме корисне навантаження `presentation` у компоненти Discord, блоки Slack, вбудовані кнопки Telegram, властивості Mattermost або картки Teams/Feishu залежно від можливостей каналу. Повний контракт і правила резервного варіанта див. у [Представлення повідомлень](/uk/plugins/message-presentation).
Надіслати багатший payload презентації:
Надіслати багатше корисне навантаження представлення:
```bash
openclaw message send --channel googlechat --target spaces/AAA... \
@ -243,7 +243,7 @@ openclaw message poll --channel discord \
--poll-multi --poll-duration-hours 48
```
Створити опитування Telegram (автоматично закриється за 2 хвилини):
Створити опитування Telegram (автоматичне закриття через 2 хвилини):
```
openclaw message poll --channel telegram \
@ -269,14 +269,14 @@ openclaw message poll --channel msteams \
--poll-option Pizza --poll-option Sushi
```
Додати реакцію в Slack:
Відреагувати у Slack:
```
openclaw message react --channel slack \
--target C123 --message-id 456 --emoji "✅"
```
Додати реакцію в групі Signal:
Відреагувати в групі Signal:
```
openclaw message react --channel signal \
@ -284,14 +284,14 @@ openclaw message react --channel signal \
--emoji "✅" --target-author-uuid 123e4567-e89b-12d3-a456-426614174000
```
Надіслати вбудовані кнопки Telegram через загальну презентацію:
Надіслати вбудовані кнопки Telegram через загальне представлення:
```
openclaw message send --channel telegram --target @mychat --message "Choose:" \
--presentation '{"blocks":[{"type":"buttons","buttons":[{"label":"Yes","value":"cmd:yes"},{"label":"No","value":"cmd:no"}]}]}'
```
Надіслати картку Teams через загальну презентацію:
Надіслати картку Teams через загальне представлення:
```bash
openclaw message send --channel msteams \
@ -306,7 +306,7 @@ openclaw message send --channel telegram --target @mychat \
--media ./diagram.png --force-document
```
## Пов’язане
## Пов’язано
- [Довідник CLI](/uk/cli)
- [Надсилання агента](/uk/tools/agent-send)
- [Надсилання агентом](/uk/tools/agent-send)