chore(i18n): refresh uk translations
This commit is contained in:
parent
4c5913e81f
commit
fa282e220c
@ -1,50 +1,50 @@
|
||||
---
|
||||
read_when:
|
||||
- Робота над поведінкою каналу WhatsApp/веб або маршрутизацією вхідних повідомлень
|
||||
summary: Підтримка каналу WhatsApp, контроль доступу, поведінка доставки та операційні аспекти
|
||||
- Робота над поведінкою WhatsApp/веб-каналу або маршрутизацією вхідних повідомлень
|
||||
summary: Підтримка каналу WhatsApp, керування доступом, поведінка доставлення та операції
|
||||
title: WhatsApp
|
||||
x-i18n:
|
||||
generated_at: "2026-04-28T11:05:43Z"
|
||||
generated_at: "2026-04-28T13:50:40Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 2b18b3c05e391b26005c1c87a6fb6c4e6e02f095d5d3e655fc78898a0b6b8736
|
||||
source_hash: ec5dc5c600cd151bb4c8b05827e7c8516f9db79f4170d11ff15073160f410671
|
||||
source_path: channels/whatsapp.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Статус: готово до production через WhatsApp Web (Baileys). Gateway володіє пов’язаними сеансами.
|
||||
Status: готово до 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 ще відсутній.
|
||||
- Канал розробки + git checkout: за замовчуванням використовує локальний шлях Plugin.
|
||||
- Stable/Beta: за замовчуванням використовує npm-пакет `@openclaw/whatsapp`.
|
||||
- Канал розробки + git checkout: типово використовує локальний шлях Plugin.
|
||||
- Stable/Beta: типово використовує npm-пакет `@openclaw/whatsapp`.
|
||||
|
||||
Ручне встановлення залишається доступним:
|
||||
Ручне встановлення лишається доступним:
|
||||
|
||||
```bash
|
||||
openclaw plugins install @openclaw/whatsapp
|
||||
```
|
||||
|
||||
<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">
|
||||
Діагностика між каналами та інструкції з відновлення.
|
||||
<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
|
||||
{
|
||||
@ -61,7 +61,7 @@ openclaw plugins install @openclaw/whatsapp
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Пов’яжіть WhatsApp (QR)">
|
||||
<Step title="Link WhatsApp (QR)">
|
||||
|
||||
```bash
|
||||
openclaw channels login --channel whatsapp
|
||||
@ -82,7 +82,7 @@ openclaw channels login --channel whatsapp --account work
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Запустіть gateway">
|
||||
<Step title="Start the gateway">
|
||||
|
||||
```bash
|
||||
openclaw gateway
|
||||
@ -90,31 +90,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
|
||||
- чіткіші списки дозволів DM і межі маршрутизації
|
||||
- нижча ймовірність плутанини із self-chat
|
||||
- чіткіші allowlist DM і межі маршрутизації
|
||||
- менша ймовірність плутанини із self-chat
|
||||
|
||||
Мінімальний шаблон політики:
|
||||
|
||||
@ -131,40 +131,41 @@ OpenClaw рекомендує за можливості запускати Whats
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Резервний варіант з особистим номером">
|
||||
Онбординг підтримує режим особистого номера та записує базову конфігурацію, дружню до self-chat:
|
||||
<Accordion title="Personal-number fallback">
|
||||
Onboarding підтримує режим особистого номера й записує базову конфігурацію, дружню до self-chat:
|
||||
|
||||
- `dmPolicy: "allowlist"`
|
||||
- `allowFrom` містить ваш особистий номер
|
||||
- `selfChatMode: true`
|
||||
|
||||
Під час виконання захист self-chat спирається на пов’язаний власний номер і `allowFrom`.
|
||||
Під час виконання захисти self-chat спираються на пов’язаний власний номер і `allowFrom`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Обсяг каналу лише WhatsApp Web">
|
||||
Канал платформи обміну повідомленнями у поточній архітектурі каналів OpenClaw базується на WhatsApp Web (`Baileys`).
|
||||
<Accordion title="WhatsApp Web-only channel scope">
|
||||
Канал платформи обміну повідомленнями базується на WhatsApp Web (`Baileys`) у поточній архітектурі каналів OpenClaw.
|
||||
|
||||
У вбудованому реєстрі чат-каналів немає окремого каналу обміну повідомленнями Twilio WhatsApp.
|
||||
У вбудованому реєстрі чат-каналів немає окремого каналу повідомлень Twilio WhatsApp.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## Модель виконання
|
||||
|
||||
- Gateway володіє сокетом WhatsApp і циклом повторного підключення.
|
||||
- Watchdog повторного підключення використовує активність транспорту WhatsApp Web, а не лише обсяг вхідних повідомлень застосунку, тому тихий сеанс пов’язаного пристрою не перезапускається тільки через те, що останнім часом ніхто не надсилав повідомлень. Довше обмеження тиші застосунку все одно примусово виконує повторне підключення, якщо транспортні кадри продовжують надходити, але протягом вікна watchdog не обробляються повідомлення застосунку.
|
||||
- Для вихідних надсилань потрібен активний слухач WhatsApp для цільового облікового запису.
|
||||
- Gateway керує сокетом WhatsApp і циклом перепідключення.
|
||||
- Watchdog перепідключення використовує активність транспорту WhatsApp Web, а не лише обсяг вхідних повідомлень застосунку, тому тиха сесія пов’язаного пристрою не перезапускається лише через те, що останнім часом ніхто не надсилав повідомлення. Довший ліміт мовчання застосунку все одно примусово перепідключає, якщо транспортні кадри продовжують надходити, але жодні повідомлення застосунку не обробляються протягом вікна watchdog.
|
||||
- Таймінги сокета Baileys явно задані в `web.whatsapp.*`: `keepAliveIntervalMs` керує ping WhatsApp Web на рівні застосунку, `connectTimeoutMs` керує тайм-аутом початкового handshake, а `defaultQueryTimeoutMs` керує тайм-аутами запитів Baileys.
|
||||
- Вихідні надсилання потребують активного слухача WhatsApp для цільового облікового запису.
|
||||
- Чати статусів і трансляцій ігноруються (`@status`, `@broadcast`).
|
||||
- Прямі чати використовують правила сеансу DM (`session.dmScope`; типовий `main` згортає DM до головного сеансу агента).
|
||||
- Групові сеанси ізольовані (`agent:<agentId>:whatsapp:group:<jid>`).
|
||||
- Транспорт WhatsApp Web поважає стандартні змінні середовища проксі на хості gateway (`HTTPS_PROXY`, `HTTP_PROXY`, `NO_PROXY` / варіанти в нижньому регістрі). Надавайте перевагу конфігурації проксі на рівні хоста над специфічними для каналу налаштуваннями проксі WhatsApp.
|
||||
- Коли `messages.removeAckAfterReply` увімкнено, OpenClaw очищає реакцію підтвердження WhatsApp після доставки видимої відповіді.
|
||||
- Прямі чати використовують правила DM-сесій (`session.dmScope`; типове `main` згортає DM у головну сесію агента).
|
||||
- Групові сесії ізольовані (`agent:<agentId>:whatsapp:group:<jid>`).
|
||||
- Транспорт WhatsApp Web враховує стандартні змінні середовища проксі на хості Gateway (`HTTPS_PROXY`, `HTTP_PROXY`, `NO_PROXY` / варіанти в нижньому регістрі). Надавайте перевагу конфігурації проксі на рівні хоста над специфічними для каналу налаштуваннями проксі WhatsApp.
|
||||
- Коли `messages.removeAckAfterReply` увімкнено, OpenClaw очищає ack-реакцію WhatsApp після доставки видимої відповіді.
|
||||
|
||||
## Хуки Plugin і приватність
|
||||
|
||||
Вхідні повідомлення WhatsApp можуть містити особистий вміст повідомлень, номери телефонів,
|
||||
ідентифікатори груп, імена відправників і поля кореляції сеансу. З цієї причини
|
||||
ідентифікатори груп, імена відправників і поля кореляції сесій. З цієї причини
|
||||
WhatsApp не транслює вхідні payload хуків `message_received` до plugins,
|
||||
якщо ви явно не ввімкнете це:
|
||||
|
||||
@ -180,7 +181,7 @@ WhatsApp не транслює вхідні payload хуків `message_received
|
||||
}
|
||||
```
|
||||
|
||||
Ви можете обмежити opt-in одним обліковим записом:
|
||||
Ви можете обмежити ввімкнення одним обліковим записом:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -198,16 +199,16 @@ WhatsApp не транслює вхідні payload хуків `message_received
|
||||
}
|
||||
```
|
||||
|
||||
Вмикайте це лише для plugins, яким ви довіряєте отримання вмісту та ідентифікаторів
|
||||
вхідних повідомлень WhatsApp.
|
||||
Вмикайте це лише для plugins, яким ви довіряєте отримувати вміст і
|
||||
ідентифікатори вхідних повідомлень WhatsApp.
|
||||
|
||||
## Контроль доступу та активація
|
||||
## Контроль доступу й активація
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Політика DM">
|
||||
<Tab title="DM policy">
|
||||
`channels.whatsapp.dmPolicy` керує доступом до прямих чатів:
|
||||
|
||||
- `pairing` (за замовчуванням)
|
||||
- `pairing` (типово)
|
||||
- `allowlist`
|
||||
- `open` (потребує, щоб `allowFrom` містив `"*"`)
|
||||
- `disabled`
|
||||
@ -218,37 +219,37 @@ WhatsApp не транслює вхідні payload хуків `message_received
|
||||
|
||||
Деталі поведінки під час виконання:
|
||||
|
||||
- сполучення зберігаються в allow-store каналу та об’єднуються з налаштованим `allowFrom`
|
||||
- якщо список дозволів не налаштовано, пов’язаний власний номер дозволено за замовчуванням
|
||||
- OpenClaw ніколи автоматично не сполучає вихідні DM `fromMe` (повідомлення, які ви надсилаєте собі з пов’язаного пристрою)
|
||||
- pairings зберігаються в allow-store каналу й об’єднуються з налаштованим `allowFrom`
|
||||
- якщо allowlist не налаштовано, пов’язаний власний номер дозволено типово
|
||||
- OpenClaw ніколи автоматично не створює pairing для вихідних DM `fromMe` (повідомлень, які ви надсилаєте собі з пов’язаного пристрою)
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab title="Політика груп + списки дозволів">
|
||||
<Tab title="Group policy + allowlists">
|
||||
Доступ до груп має два рівні:
|
||||
|
||||
1. **Список дозволених групових членств** (`channels.whatsapp.groups`)
|
||||
1. **Allowlist членства в групах** (`channels.whatsapp.groups`)
|
||||
- якщо `groups` пропущено, усі групи придатні
|
||||
- якщо `groups` присутній, він діє як список дозволених груп (`"*"` дозволено)
|
||||
- якщо `groups` наявний, він працює як allowlist груп (`"*"` дозволено)
|
||||
|
||||
2. **Політика відправників у групі** (`channels.whatsapp.groupPolicy` + `groupAllowFrom`)
|
||||
- `open`: список дозволів відправників обходиться
|
||||
2. **Політика відправників у групах** (`channels.whatsapp.groupPolicy` + `groupAllowFrom`)
|
||||
- `open`: allowlist відправників обходиться
|
||||
- `allowlist`: відправник має збігатися з `groupAllowFrom` (або `*`)
|
||||
- `disabled`: блокує всі вхідні повідомлення груп
|
||||
- `disabled`: блокувати всі групові вхідні повідомлення
|
||||
|
||||
Резервний список дозволів відправників:
|
||||
Резервний allowlist відправників:
|
||||
|
||||
- якщо `groupAllowFrom` не задано, виконання повертається до `allowFrom`, коли він доступний
|
||||
- списки дозволів відправників оцінюються перед активацією за згадкою/відповіддю
|
||||
- якщо `groupAllowFrom` не задано, runtime повертається до `allowFrom`, коли він доступний
|
||||
- allowlists відправників оцінюються перед активацією за згадкою/відповіддю
|
||||
|
||||
Примітка: якщо блоку `channels.whatsapp` взагалі немає, резервна політика груп під час виконання — `allowlist` (із попередженням у журналі), навіть якщо `channels.defaults.groupPolicy` задано.
|
||||
Примітка: якщо блок `channels.whatsapp` взагалі відсутній, резервна групова політика runtime — `allowlist` (із попередженням у журналі), навіть якщо задано `channels.defaults.groupPolicy`.
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab title="Згадки + /activation">
|
||||
Групові відповіді за замовчуванням потребують згадки.
|
||||
<Tab title="Mentions + /activation">
|
||||
Групові відповіді типово потребують згадки.
|
||||
|
||||
Виявлення згадок включає:
|
||||
Виявлення згадок охоплює:
|
||||
|
||||
- явні згадки WhatsApp ідентичності бота
|
||||
- налаштовані regex-шаблони згадок (`agents.list[].groupChat.mentionPatterns`, резервний варіант `messages.groupChat.mentionPatterns`)
|
||||
@ -257,34 +258,34 @@ WhatsApp не транслює вхідні payload хуків `message_received
|
||||
|
||||
Примітка щодо безпеки:
|
||||
|
||||
- цитата/відповідь лише задовольняє перевірку згадки; вона **не** надає авторизацію відправнику
|
||||
- з `groupPolicy: "allowlist"` відправники поза списком дозволів усе ще блокуються, навіть якщо відповідають на повідомлення користувача зі списку дозволів
|
||||
- цитата/відповідь лише задовольняє gating згадки; вона **не** надає авторизацію відправнику
|
||||
- з `groupPolicy: "allowlist"` відправники поза allowlist усе одно блокуються, навіть якщо вони відповідають на повідомлення користувача з allowlist
|
||||
|
||||
Команда активації на рівні сеансу:
|
||||
Команда активації на рівні сесії:
|
||||
|
||||
- `/activation mention`
|
||||
- `/activation always`
|
||||
|
||||
`activation` оновлює стан сеансу (не глобальну конфігурацію). Вона обмежена власником.
|
||||
`activation` оновлює стан сесії (не глобальну конфігурацію). Вона обмежена власником.
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Поведінка особистого номера та self-chat
|
||||
|
||||
Коли пов’язаний власний номер також присутній в `allowFrom`, активуються засоби захисту WhatsApp self-chat:
|
||||
Коли пов’язаний власний номер також присутній у `allowFrom`, активуються захисти self-chat WhatsApp:
|
||||
|
||||
- пропускати read receipts для ходів self-chat
|
||||
- ігнорувати поведінку автоматичного запуску mention-JID, яка інакше пінгувала б вас самих
|
||||
- якщо `messages.responsePrefix` не задано, відповіді self-chat за замовчуванням мають вигляд `[{identity.name}]` або `[openclaw]`
|
||||
- пропускати сповіщення про прочитання для ходів self-chat
|
||||
- ігнорувати поведінку авто-тригера mention-JID, яка інакше пінгувала б вас самих
|
||||
- якщо `messages.responsePrefix` не задано, відповіді self-chat типово мають префікс `[{identity.name}]` або `[openclaw]`
|
||||
|
||||
## Нормалізація повідомлень і контекст
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Вхідний конверт + контекст відповіді">
|
||||
Вхідні повідомлення WhatsApp загортаються у спільний вхідний конверт.
|
||||
<Accordion title="Inbound envelope + reply context">
|
||||
Вхідні повідомлення WhatsApp загортаються у спільний вхідний envelope.
|
||||
|
||||
Якщо існує цитована відповідь, контекст додається у такій формі:
|
||||
Якщо існує цитована відповідь, контекст додається в такій формі:
|
||||
|
||||
```text
|
||||
[Replying to <sender> id:<stanzaId>]
|
||||
@ -292,12 +293,12 @@ WhatsApp не транслює вхідні payload хуків `message_received
|
||||
[/Replying]
|
||||
```
|
||||
|
||||
Поля метаданих відповіді також заповнюються, коли доступні (`ReplyToId`, `ReplyToBody`, `ReplyToSender`, JID/E.164 відправника).
|
||||
Поля метаданих відповіді також заповнюються, коли доступні (`ReplyToId`, `ReplyToBody`, `ReplyToSender`, sender JID/E.164).
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Медіаплейсхолдери та витягування геолокації/контактів">
|
||||
Вхідні повідомлення лише з медіа нормалізуються з плейсхолдерами, такими як:
|
||||
<Accordion title="Media placeholders and location/contact extraction">
|
||||
Вхідні повідомлення лише з медіа нормалізуються із placeholder на кшталт:
|
||||
|
||||
- `<media:image>`
|
||||
- `<media:video>`
|
||||
@ -305,24 +306,24 @@ WhatsApp не транслює вхідні payload хуків `message_received
|
||||
- `<media:document>`
|
||||
- `<media:sticker>`
|
||||
|
||||
Авторизовані групові голосові нотатки транскрибуються перед перевіркою згадки, коли
|
||||
Авторизовані групові голосові нотатки транскрибуються перед gating згадки, коли
|
||||
тіло містить лише `<media:audio>`, тому вимовлена згадка бота в голосовій нотатці може
|
||||
запустити відповідь. Якщо транскрипт усе ще не згадує бота, його
|
||||
зберігають в історії групи в очікуванні замість сирого плейсхолдера.
|
||||
викликати відповідь. Якщо транскрипт усе ще не згадує бота,
|
||||
транскрипт зберігається в очікуваній груповій історії замість сирого placeholder.
|
||||
|
||||
Тіла геолокації використовують стислий текст координат. Мітки/коментарі геолокації та деталі контакту/vCard відтворюються як fenced недовірені метадані, а не як вбудований текст промпта.
|
||||
Тіла локацій використовують стислий текст координат. Мітки/коментарі локацій і дані контакту/vCard відображаються як fenced ненадійні метадані, а не як inline prompt text.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Ін’єкція історії групи в очікуванні">
|
||||
Для груп необроблені повідомлення можуть буферизуватися й ін’єктуватися як контекст, коли бот нарешті спрацьовує.
|
||||
<Accordion title="Pending group history injection">
|
||||
Для груп необроблені повідомлення можуть буферизуватися та вставлятися як контекст, коли бот нарешті спрацьовує.
|
||||
|
||||
- ліміт за замовчуванням: `50`
|
||||
- типовий ліміт: `50`
|
||||
- конфігурація: `channels.whatsapp.historyLimit`
|
||||
- резервний варіант: `messages.groupChat.historyLimit`
|
||||
- `0` вимикає
|
||||
|
||||
Маркери ін’єкції:
|
||||
Маркери вставлення:
|
||||
|
||||
- `[Chat messages since your last reply - for context]`
|
||||
- `[Current message - respond to this]`
|
||||
@ -330,7 +331,7 @@ WhatsApp не транслює вхідні payload хуків `message_received
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Read receipts">
|
||||
Read receipts увімкнені за замовчуванням для прийнятих вхідних повідомлень WhatsApp.
|
||||
Сповіщення про прочитання типово ввімкнені для прийнятих вхідних повідомлень WhatsApp.
|
||||
|
||||
Вимкнути глобально:
|
||||
|
||||
@ -360,30 +361,30 @@ WhatsApp не транслює вхідні payload хуків `message_received
|
||||
}
|
||||
```
|
||||
|
||||
Ходи self-chat пропускають read receipts, навіть коли вони глобально ввімкнені.
|
||||
Ходи self-chat пропускають сповіщення про прочитання, навіть коли вони ввімкнені глобально.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## Доставка, поділ на фрагменти та медіа
|
||||
## Доставка, фрагментація та медіа
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Поділ тексту на фрагменти">
|
||||
<Accordion title="Text chunking">
|
||||
- типовий ліміт фрагмента: `channels.whatsapp.textChunkLimit = 4000`
|
||||
- `channels.whatsapp.chunkMode = "length" | "newline"`
|
||||
- режим `newline` надає перевагу межам абзаців (порожнім рядкам), а потім повертається до безпечного за довжиною поділу на фрагменти
|
||||
- режим `newline` віддає перевагу межам абзаців (порожнім рядкам), а потім повертається до фрагментації, безпечної за довжиною
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Поведінка вихідних медіа">
|
||||
- підтримує корисні навантаження зображень, відео, аудіо (голосова нотатка PTT) і документів
|
||||
- аудіомедіа надсилається через корисне навантаження Baileys `audio` з `ptt: true`, тому клієнти WhatsApp відображають його як голосову нотатку push-to-talk
|
||||
- корисні навантаження відповідей зберігають `audioAsVoice`; вивід голосових нотаток TTS для WhatsApp залишається на цьому шляху PTT, навіть коли провайдер повертає MP3 або WebM
|
||||
- підтримує зображення, відео, аудіо (голосову нотатку PTT) і документні payloads
|
||||
- аудіомедіа надсилається через Baileys `audio` payload із `ptt: true`, тому клієнти WhatsApp відображають його як голосову нотатку push-to-talk
|
||||
- payloads відповідей зберігають `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` керує автоматичним TTS для поточного чату WhatsApp
|
||||
- аудіо не у форматі Ogg, зокрема вихідні MP3/WebM від Microsoft Edge TTS, перекодовується за допомогою `ffmpeg` у моно Ogg/Opus 48 кГц перед доставкою PTT
|
||||
- `/tts latest` надсилає останню відповідь асистента як одну голосову нотатку й пригнічує повторні надсилання для тієї самої відповіді; `/tts chat on|off|default` керує автоматичним TTS для поточного чату WhatsApp
|
||||
- відтворення анімованих GIF підтримується через `gifPlayback: true` під час надсилання відео
|
||||
- підписи застосовуються до першого медіаелемента під час надсилання корисних навантажень відповідей із кількома медіа, за винятком голосових нотаток PTT: для них аудіо надсилається першим, а видимий текст окремо, оскільки клієнти WhatsApp не відображають підписи голосових нотаток узгоджено
|
||||
- підписи застосовуються до першого медіаелемента під час надсилання payloads відповіді з кількома медіа, окрім голосових нотаток PTT: аудіо надсилається першим, а видимий текст окремо, оскільки клієнти WhatsApp не відображають підписи до голосових нотаток стабільно
|
||||
- джерелом медіа може бути HTTP(S), `file://` або локальні шляхи
|
||||
|
||||
</Accordion>
|
||||
@ -391,9 +392,9 @@ 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>
|
||||
@ -402,14 +403,14 @@ WhatsApp не транслює вхідні payload хуків `message_received
|
||||
|
||||
WhatsApp підтримує нативне цитування відповідей, коли вихідні відповіді видимо цитують вхідне повідомлення. Керуйте цим за допомогою `channels.whatsapp.replyToMode`.
|
||||
|
||||
| Значення | Поведінка |
|
||||
| ----------- | ------------------------------------------------------------------- |
|
||||
| `"off"` | Ніколи не цитувати; надсилати як звичайне повідомлення |
|
||||
| `"first"` | Цитувати лише перший фрагмент вихідної відповіді |
|
||||
| `"all"` | Цитувати кожен фрагмент вихідної відповіді |
|
||||
| Значення | Поведінка |
|
||||
| ----------- | --------------------------------------------------------------------- |
|
||||
| `"off"` | Ніколи не цитувати; надсилати як звичайне повідомлення |
|
||||
| `"first"` | Цитувати лише перший фрагмент вихідної відповіді |
|
||||
| `"all"` | Цитувати кожен фрагмент вихідної відповіді |
|
||||
| `"batched"` | Цитувати поставлені в чергу пакетні відповіді, залишаючи негайні відповіді без цитування |
|
||||
|
||||
Типове значення — `"off"`. Перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts.<id>.replyToMode`.
|
||||
Типово: `"off"`. Перевизначення для окремого акаунта використовують `channels.whatsapp.accounts.<id>.replyToMode`.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -423,18 +424,18 @@ WhatsApp підтримує нативне цитування відповіде
|
||||
|
||||
## Рівень реакцій
|
||||
|
||||
`channels.whatsapp.reactionLevel` керує тим, наскільки широко агент використовує реакції емодзі в WhatsApp:
|
||||
`channels.whatsapp.reactionLevel` керує тим, наскільки широко агент використовує реакції emoji у WhatsApp:
|
||||
|
||||
| Рівень | Реакції підтвердження | Реакції, ініційовані агентом | Опис |
|
||||
| ------------ | --------------------- | ---------------------------- | ------------------------------------------------------ |
|
||||
| `"off"` | Ні | Ні | Жодних реакцій |
|
||||
| `"ack"` | Так | Ні | Лише реакції підтвердження (квитанція перед відповіддю) |
|
||||
| `"minimal"` | Так | Так (обережно) | Підтвердження + реакції агента з обережними вказівками |
|
||||
| `"extensive"` | Так | Так (заохочується) | Підтвердження + реакції агента із заохочувальними вказівками |
|
||||
| Рівень | Ack-реакції | Реакції, ініційовані агентом | Опис |
|
||||
| ------------- | ------------- | ------------------------- | ------------------------------------------------ |
|
||||
| `"off"` | Ні | Ні | Жодних реакцій |
|
||||
| `"ack"` | Так | Ні | Лише Ack-реакції (підтвердження перед відповіддю) |
|
||||
| `"minimal"` | Так | Так (обережно) | Ack + реакції агента з обережними настановами |
|
||||
| `"extensive"` | Так | Так (заохочується) | Ack + реакції агента із заохочувальними настановами |
|
||||
|
||||
Типово: `"minimal"`.
|
||||
|
||||
Перевизначення для окремих облікових записів використовують `channels.whatsapp.accounts.<id>.reactionLevel`.
|
||||
Перевизначення для окремого акаунта використовують `channels.whatsapp.accounts.<id>.reactionLevel`.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -448,8 +449,8 @@ WhatsApp підтримує нативне цитування відповіде
|
||||
|
||||
## Реакції підтвердження
|
||||
|
||||
WhatsApp підтримує негайні реакції підтвердження після отримання вхідного повідомлення через `channels.whatsapp.ackReaction`.
|
||||
Реакції підтвердження обмежуються `reactionLevel` — вони пригнічуються, коли `reactionLevel` дорівнює `"off"`.
|
||||
WhatsApp підтримує негайні Ack-реакції після отримання вхідного повідомлення через `channels.whatsapp.ackReaction`.
|
||||
Ack-реакції обмежуються `reactionLevel` — вони пригнічуються, коли `reactionLevel` дорівнює `"off"`.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -465,32 +466,32 @@ WhatsApp підтримує негайні реакції підтверджен
|
||||
}
|
||||
```
|
||||
|
||||
Примітки щодо поведінки:
|
||||
Нотатки щодо поведінки:
|
||||
|
||||
- надсилається негайно після прийняття вхідного повідомлення (до відповіді)
|
||||
- помилки журналюються, але не блокують звичайну доставку відповіді
|
||||
- режим групи `mentions` реагує на ходи, спричинені згадкою; активація групи `always` діє як обхід цієї перевірки
|
||||
- надсилаються негайно після прийняття вхідного повідомлення (перед відповіддю)
|
||||
- помилки записуються в журнал, але не блокують звичайну доставку відповіді
|
||||
- режим групи `mentions` реагує на ходи, ініційовані згадкою; активація групи `always` діє як обхід для цієї перевірки
|
||||
- WhatsApp використовує `channels.whatsapp.ackReaction` (застаріле `messages.ackReaction` тут не використовується)
|
||||
|
||||
## Кілька облікових записів і облікові дані
|
||||
## Кілька акаунтів і облікові дані
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Вибір облікового запису та типові значення">
|
||||
- ідентифікатори облікових записів беруться з `channels.whatsapp.accounts`
|
||||
- вибір типового облікового запису: `default`, якщо він є, інакше перший налаштований ідентифікатор облікового запису (відсортовано)
|
||||
- ідентифікатори облікових записів внутрішньо нормалізуються для пошуку
|
||||
<Accordion title="Вибір акаунта та типові значення">
|
||||
- ідентифікатори акаунтів надходять із `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 для цього облікового запису.
|
||||
`openclaw channels logout --channel whatsapp [--account <id>]` очищає стан автентифікації WhatsApp для цього акаунта.
|
||||
|
||||
У застарілих каталогах автентифікації `oauth.json` зберігається, а файли автентифікації Baileys видаляються.
|
||||
|
||||
@ -500,10 +501,10 @@ WhatsApp підтримує негайні реакції підтверджен
|
||||
## Інструменти, дії та записи конфігурації
|
||||
|
||||
- Підтримка інструментів агента включає дію реакції WhatsApp (`react`).
|
||||
- Обмеження дій:
|
||||
- Обмежувачі дій:
|
||||
- `channels.whatsapp.actions.reactions`
|
||||
- `channels.whatsapp.actions.polls`
|
||||
- Записи конфігурації, ініційовані каналом, увімкнені типово (вимкнення через `channels.whatsapp.configWrites=false`).
|
||||
- Записи конфігурації, ініційовані каналом, увімкнені типово (вимкніть через `channels.whatsapp.configWrites=false`).
|
||||
|
||||
## Усунення несправностей
|
||||
|
||||
@ -521,11 +522,28 @@ WhatsApp підтримує негайні реакції підтверджен
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Прив’язано, але від’єднано / цикл повторного підключення">
|
||||
Симптом: прив’язаний обліковий запис із повторними від’єднаннями або спробами повторного підключення.
|
||||
Симптом: прив’язаний акаунт із повторними від’єднаннями або спробами повторного підключення.
|
||||
|
||||
Тихі облікові записи можуть залишатися підключеними після звичайного тайм-ауту повідомлення; сторожовий процес
|
||||
перезапускається, коли активність транспорту WhatsApp Web зупиняється, сокет закривається або
|
||||
активність на рівні застосунку залишається тихою довше за довше захисне вікно.
|
||||
Тихі акаунти можуть залишатися підключеними після звичайного тайм-ауту повідомлень; watchdog
|
||||
перезапускається, коли транспортна активність WhatsApp Web зупиняється, сокет закривається або
|
||||
активність на рівні застосунку залишається тихою довше за довше вікно безпеки.
|
||||
|
||||
Якщо журнали показують повторні `status=408 Request Time-out Connection was lost`, налаштуйте
|
||||
таймінги сокета Baileys у `web.whatsapp`. Почніть зі скорочення
|
||||
`keepAliveIntervalMs` нижче тайм-ауту простою вашої мережі та збільшення
|
||||
`connectTimeoutMs` на повільних або нестабільних з’єднаннях:
|
||||
|
||||
```json5
|
||||
{
|
||||
web: {
|
||||
whatsapp: {
|
||||
keepAliveIntervalMs: 15000,
|
||||
connectTimeoutMs: 60000,
|
||||
defaultQueryTimeoutMs: 60000,
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Виправлення:
|
||||
|
||||
@ -539,16 +557,16 @@ WhatsApp підтримує негайні реакції підтверджен
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Вхід за QR завершується тайм-аутом за проксі">
|
||||
Симптом: `openclaw channels login --channel whatsapp` завершується помилкою перед показом придатного QR-коду з `status=408 Request Time-out` або від’єднанням TLS-сокета.
|
||||
Симптом: `openclaw channels login --channel whatsapp` завершується збоєм до показу придатного QR-коду з `status=408 Request Time-out` або від’єднанням TLS-сокета.
|
||||
|
||||
Вхід у WhatsApp Web використовує стандартне проксі-середовище хоста Gateway (`HTTPS_PROXY`, `HTTP_PROXY`, варіанти в нижньому регістрі та `NO_PROXY`). Перевірте, що процес Gateway успадковує середовище проксі та що `NO_PROXY` не відповідає `mmg.whatsapp.net`.
|
||||
Вхід у WhatsApp Web використовує стандартне проксі-середовище хоста Gateway (`HTTPS_PROXY`, `HTTP_PROXY`, варіанти в нижньому регістрі та `NO_PROXY`). Перевірте, що процес Gateway успадковує env проксі та що `NO_PROXY` не збігається з `mmg.whatsapp.net`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Немає активного слухача під час надсилання">
|
||||
Вихідні надсилання швидко завершуються помилкою, коли для цільового облікового запису немає активного слухача Gateway.
|
||||
Вихідні надсилання швидко завершуються збоєм, коли для цільового акаунта немає активного слухача Gateway.
|
||||
|
||||
Переконайтеся, що Gateway запущений, а обліковий запис прив’язаний.
|
||||
Переконайтеся, що Gateway запущено, а акаунт прив’язано.
|
||||
|
||||
</Accordion>
|
||||
|
||||
@ -557,14 +575,14 @@ WhatsApp підтримує негайні реакції підтверджен
|
||||
|
||||
- `groupPolicy`
|
||||
- `groupAllowFrom` / `allowFrom`
|
||||
- записи allowlist `groups`
|
||||
- обмеження за згадкою (`requireMention` + шаблони згадок)
|
||||
- записи allowlist у `groups`
|
||||
- обмеження згадками (`requireMention` + шаблони згадок)
|
||||
- дублікати ключів у `openclaw.json` (JSON5): пізніші записи перевизначають попередні, тому тримайте один `groupPolicy` для кожної області
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Попередження середовища виконання Bun">
|
||||
Середовище виконання Gateway для WhatsApp має використовувати Node. Bun позначається як несумісний для стабільної роботи Gateway WhatsApp/Telegram.
|
||||
<Accordion title="Попередження runtime Bun">
|
||||
Runtime Gateway WhatsApp має використовувати Node. Bun позначено як несумісний для стабільної роботи Gateway WhatsApp/Telegram.
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
@ -574,30 +592,30 @@ WhatsApp підтримує системні промпти в стилі Telegr
|
||||
|
||||
Ієрархія розв’язання для групових повідомлень:
|
||||
|
||||
Ефективна мапа `groups` визначається першою: якщо обліковий запис визначає власні `groups`, вона повністю замінює кореневу мапу `groups` (без глибокого злиття). Потім пошук промпту виконується в отриманій єдиній мапі:
|
||||
Ефективна мапа `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` (без глибокого злиття). Потім пошук промпту виконується в отриманій єдиній мапі:
|
||||
Ефективна мапа `direct` визначається першою: якщо акаунт визначає власну `direct`, вона повністю замінює кореневу мапу `direct` (без глибокого злиття). Потім пошук промпта виконується в отриманій єдиній мапі:
|
||||
|
||||
1. **Системний промпт для конкретного прямого чату** (`direct["<peerId>"].systemPrompt`): використовується, коли конкретний запис співрозмовника існує в мапі **і** його ключ `systemPrompt` визначено. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard пригнічується й системний промпт не застосовується.
|
||||
2. **Wildcard системного промпту прямого чату** (`direct["*"].systemPrompt`): використовується, коли конкретного запису співрозмовника взагалі немає в мапі або коли він існує, але не визначає ключ `systemPrompt`.
|
||||
1. **Системний промпт для конкретного прямого чату** (`direct["<peerId>"].systemPrompt`): використовується, коли конкретний запис peer існує в мапі **і** його ключ `systemPrompt` визначено. Якщо `systemPrompt` є порожнім рядком (`""`), wildcard пригнічується, і системний промпт не застосовується.
|
||||
2. **Wildcard-системний промпт прямого чату** (`direct["*"].systemPrompt`): використовується, коли конкретного запису peer повністю немає в мапі або коли він існує, але не визначає ключ `systemPrompt`.
|
||||
|
||||
<Note>
|
||||
`dms` залишається легким контейнером перевизначення історії для окремих DM (`dms.<id>.historyLimit`). Перевизначення промптів розташовуються під `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` лише тоді, коли ви вже хочете, щоб ця область допускала всі групи. Якщо ви все ще хочете, щоб придатним був лише фіксований набір ідентифікаторів груп, не використовуйте `groups["*"]` для типового промпту. Натомість повторіть промпт у кожному явно дозволеному записі групи.
|
||||
- Допуск групи й авторизація відправника є окремими перевірками. `groups["*"]` розширює набір груп, які можуть потрапити до обробки груп, але сам по собі не авторизує кожного відправника в цих групах. Доступ відправників усе ще окремо контролюється `channels.whatsapp.groupPolicy` і `channels.whatsapp.groupAllowFrom`.
|
||||
- `channels.whatsapp.direct` не має такого самого побічного ефекту для DM. `direct["*"]` лише надає типову конфігурацію прямого чату після того, як DM уже допущено через `dmPolicy` разом із `allowFrom` або правилами сховища сполучень.
|
||||
- `channels.whatsapp.groups` є одночасно мапою конфігурації для кожної групи та allowlist груп на рівні чату. На кореневому рівні або в області акаунта `groups["*"]` означає «усі групи дозволені» для цієї області.
|
||||
- Додавайте wildcard-груповий `systemPrompt` лише тоді, коли ви вже хочете, щоб ця область допускала всі групи. Якщо ви все ще хочете, щоб придатним був лише фіксований набір ідентифікаторів груп, не використовуйте `groups["*"]` як типове значення промпта. Натомість повторіть промпт у кожному явно дозволеному записі групи.
|
||||
- Допуск групи та авторизація відправника є окремими перевірками. `groups["*"]` розширює набір груп, які можуть потрапити в обробку груп, але сам по собі не авторизує кожного відправника в цих групах. Доступ відправника все ще окремо контролюється `channels.whatsapp.groupPolicy` і `channels.whatsapp.groupAllowFrom`.
|
||||
- `channels.whatsapp.direct` не має такого самого побічного ефекту для DM. `direct["*"]` лише надає типову конфігурацію прямого чату після того, як DM уже допущено за `dmPolicy` плюс `allowFrom` або правилами сховища парування.
|
||||
|
||||
Приклад:
|
||||
|
||||
@ -639,24 +657,24 @@ WhatsApp підтримує системні промпти в стилі Telegr
|
||||
}
|
||||
```
|
||||
|
||||
## Посилання на довідку з конфігурації
|
||||
## Вказівники до довідки з конфігурації
|
||||
|
||||
Основна довідка:
|
||||
|
||||
- [Довідка з конфігурації - WhatsApp](/uk/gateway/config-channels#whatsapp)
|
||||
|
||||
Високоінформативні поля WhatsApp:
|
||||
Найважливіші поля WhatsApp:
|
||||
|
||||
- доступ: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`
|
||||
- доставка: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `sendReadReceipts`, `ackReaction`, `reactionLevel`
|
||||
- доставлення: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `sendReadReceipts`, `ackReaction`, `reactionLevel`
|
||||
- кілька облікових записів: `accounts.<id>.enabled`, `accounts.<id>.authDir`, перевизначення на рівні облікового запису
|
||||
- операції: `configWrites`, `debounceMs`, `web.enabled`, `web.heartbeatSeconds`, `web.reconnect.*`
|
||||
- операції: `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`
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Зв’язування](/uk/channels/pairing)
|
||||
- [Сполучення](/uk/channels/pairing)
|
||||
- [Групи](/uk/channels/groups)
|
||||
- [Безпека](/uk/gateway/security)
|
||||
- [Маршрутизація каналів](/uk/channels/channel-routing)
|
||||
|
||||
@ -1,56 +1,56 @@
|
||||
---
|
||||
read_when:
|
||||
- Налаштування плагіна каналу (автентифікація, контроль доступу, підтримка кількох облікових записів)
|
||||
- Усунення проблем із поканальними ключами конфігурації
|
||||
- Аудит політики DM, групової політики або контролю за згадками
|
||||
summary: 'Конфігурація каналів: контроль доступу, сполучення, поканальні ключі для Slack, Discord, Telegram, WhatsApp, Matrix, iMessage та інших'
|
||||
- Налаштування Plugin каналу (автентифікація, контроль доступу, робота з кількома обліковими записами)
|
||||
- Усунення несправностей із ключами конфігурації для окремих каналів
|
||||
- Аудит політики приватних повідомлень, групової політики або обмеження згадок
|
||||
summary: 'Конфігурація каналів: контроль доступу, створення пари та ключі для кожного каналу в Slack, Discord, Telegram, WhatsApp, Matrix, iMessage тощо'
|
||||
title: Конфігурація — канали
|
||||
x-i18n:
|
||||
generated_at: "2026-04-28T11:10:47Z"
|
||||
generated_at: "2026-04-28T13:50:58Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: a60e225174f2a27384b1ee0baa92b396060a62d050573e564391b0a1c26d64d5
|
||||
source_hash: e56a515d15fc6122d4de6cb30b81d969da9d72d9bb8fbba8a19542af35102058
|
||||
source_path: gateway/config-channels.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Ключі конфігурації для окремих каналів у `channels.*`. Охоплює доступ до DM і груп,
|
||||
налаштування кількох облікових записів, керування згадками та ключі для окремих каналів Slack, Discord,
|
||||
Ключі конфігурації для кожного каналу в `channels.*`. Охоплює доступ до DM і груп,
|
||||
налаштування кількох облікових записів, обмеження за згадками та ключі для кожного каналу для Slack, Discord,
|
||||
Telegram, WhatsApp, Matrix, iMessage та інших вбудованих плагінів каналів.
|
||||
|
||||
Для агентів, інструментів, середовища виконання Gateway та інших ключів верхнього рівня див.
|
||||
Для агентів, інструментів, середовища виконання gateway та інших ключів верхнього рівня див.
|
||||
[Довідник конфігурації](/uk/gateway/configuration-reference).
|
||||
|
||||
## Канали
|
||||
|
||||
Кожен канал запускається автоматично, коли існує його розділ конфігурації (якщо не вказано `enabled: false`).
|
||||
Кожен канал запускається автоматично, коли існує його секція конфігурації (якщо не задано `enabled: false`).
|
||||
|
||||
### Доступ до DM і груп
|
||||
|
||||
Усі канали підтримують політики DM і політики груп:
|
||||
|
||||
| Політика DM | Поведінка |
|
||||
| Політика DM | Поведінка |
|
||||
| ------------------- | --------------------------------------------------------------- |
|
||||
| `pairing` (типово) | Невідомі відправники отримують одноразовий код сполучення; власник має схвалити |
|
||||
| `allowlist` | Лише відправники в `allowFrom` (або у сховищі дозволених сполучень) |
|
||||
| `open` | Дозволити всі вхідні DM (потрібно `allowFrom: ["*"]`) |
|
||||
| `disabled` | Ігнорувати всі вхідні DM |
|
||||
| `allowlist` | Лише відправники в `allowFrom` (або у сховищі дозволених після сполучення) |
|
||||
| `open` | Дозволити всі вхідні DM (потрібно `allowFrom: ["*"]`) |
|
||||
| `disabled` | Ігнорувати всі вхідні DM |
|
||||
|
||||
| Політика групи | Поведінка |
|
||||
| --------------------- | ------------------------------------------------------ |
|
||||
| `allowlist` (типово) | Лише групи, що відповідають налаштованому списку дозволених |
|
||||
| `open` | Обходити списки дозволених груп (керування згадками все ще застосовується) |
|
||||
| `disabled` | Блокувати всі повідомлення груп/кімнат |
|
||||
| `allowlist` (типово) | Лише групи, що відповідають налаштованому списку дозволених |
|
||||
| `open` | Обійти списки дозволених груп (обмеження за згадками все ще застосовується) |
|
||||
| `disabled` | Блокувати всі повідомлення груп/кімнат |
|
||||
|
||||
<Note>
|
||||
`channels.defaults.groupPolicy` задає типове значення, коли `groupPolicy` провайдера не встановлено.
|
||||
Коди сполучення спливають через 1 годину. Очікувані запити сполучення DM обмежені **3 на канал**.
|
||||
Якщо блок провайдера повністю відсутній (`channels.<provider>` відсутній), політика груп середовища виконання повертається до `allowlist` (закрито за замовчуванням) із попередженням під час запуску.
|
||||
`channels.defaults.groupPolicy` задає типове значення, коли `groupPolicy` провайдера не задано.
|
||||
Коди сполучення спливають через 1 годину. Очікувані запити на сполучення DM обмежені **3 на канал**.
|
||||
Якщо блок провайдера повністю відсутній (`channels.<provider>` відсутній), політика груп у середовищі виконання повертається до `allowlist` (закрито в разі помилки) із попередженням під час запуску.
|
||||
</Note>
|
||||
|
||||
### Перевизначення моделі каналу
|
||||
|
||||
Використовуйте `channels.modelByChannel`, щоб закріпити конкретні ID каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Відображення каналів застосовується, коли сеанс ще не має перевизначення моделі (наприклад, заданого через `/model`).
|
||||
Використовуйте `channels.modelByChannel`, щоб закріпити конкретні ID каналів за моделлю. Значення приймають `provider/model` або налаштовані псевдоніми моделей. Зіставлення каналів застосовується, коли сесія ще не має перевизначення моделі (наприклад, заданого через `/model`).
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -73,7 +73,7 @@ Telegram, WhatsApp, Matrix, iMessage та інших вбудованих пла
|
||||
|
||||
### Типові значення каналів і Heartbeat
|
||||
|
||||
Використовуйте `channels.defaults` для спільної політики груп і поведінки Heartbeat між провайдерами:
|
||||
Використовуйте `channels.defaults` для спільної поведінки політики груп і Heartbeat між провайдерами:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -91,18 +91,25 @@ Telegram, WhatsApp, Matrix, iMessage та інших вбудованих пла
|
||||
}
|
||||
```
|
||||
|
||||
- `channels.defaults.groupPolicy`: резервна політика групи, коли `groupPolicy` на рівні провайдера не встановлено.
|
||||
- `channels.defaults.contextVisibility`: типовий режим видимості додаткового контексту для всіх каналів. Значення: `all` (типово, включати весь контекст цитат/тредів/історії), `allowlist` (включати лише контекст від дозволених відправників), `allowlist_quote` (те саме, що allowlist, але зберігати явний контекст цитати/відповіді). Перевизначення для окремого каналу: `channels.<channel>.contextVisibility`.
|
||||
- `channels.defaults.heartbeat.showOk`: включати справні стани каналів у вивід Heartbeat.
|
||||
- `channels.defaults.heartbeat.showAlerts`: включати погіршені стани/помилки у вивід Heartbeat.
|
||||
- `channels.defaults.heartbeat.useIndicator`: відтворювати компактний вивід Heartbeat у стилі індикатора.
|
||||
- `channels.defaults.groupPolicy`: резервна політика груп, коли `groupPolicy` на рівні провайдера не задано.
|
||||
- `channels.defaults.contextVisibility`: типовий режим видимості додаткового контексту для всіх каналів. Значення: `all` (типово, включати весь цитований/ланцюжковий/історичний контекст), `allowlist` (включати лише контекст від відправників зі списку дозволених), `allowlist_quote` (те саме, що allowlist, але зберігати явний контекст цитати/відповіді). Перевизначення для каналу: `channels.<channel>.contextVisibility`.
|
||||
- `channels.defaults.heartbeat.showOk`: включати справні статуси каналів у вивід Heartbeat.
|
||||
- `channels.defaults.heartbeat.showAlerts`: включати погіршені/помилкові статуси у вивід Heartbeat.
|
||||
- `channels.defaults.heartbeat.useIndicator`: відображати компактний індикаторний вивід Heartbeat.
|
||||
|
||||
### WhatsApp
|
||||
|
||||
WhatsApp працює через вебканал Gateway (Baileys Web). Він запускається автоматично, коли існує прив’язаний сеанс.
|
||||
WhatsApp працює через вебканал gateway (Baileys Web). Він запускається автоматично, коли існує пов’язана сесія.
|
||||
|
||||
```json5
|
||||
{
|
||||
web: {
|
||||
whatsapp: {
|
||||
keepAliveIntervalMs: 25000,
|
||||
connectTimeoutMs: 60000,
|
||||
defaultQueryTimeoutMs: 60000,
|
||||
},
|
||||
},
|
||||
channels: {
|
||||
whatsapp: {
|
||||
dmPolicy: "pairing", // pairing | allowlist | open | disabled
|
||||
@ -151,9 +158,9 @@ WhatsApp працює через вебканал Gateway (Baileys Web). Він
|
||||
```
|
||||
|
||||
- Вихідні команди типово використовують обліковий запис `default`, якщо він є; інакше перший налаштований ID облікового запису (відсортований).
|
||||
- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей резервний вибір типового облікового запису, коли збігається з налаштованим ID облікового запису.
|
||||
- Застарілий каталог авторизації Baileys для одного облікового запису мігрується командою `openclaw doctor` у `whatsapp/default`.
|
||||
- Перевизначення для окремого облікового запису: `channels.whatsapp.accounts.<id>.sendReadReceipts`, `channels.whatsapp.accounts.<id>.dmPolicy`, `channels.whatsapp.accounts.<id>.allowFrom`.
|
||||
- Необов’язковий `channels.whatsapp.defaultAccount` перевизначає цей резервний вибір типового облікового запису, коли він відповідає налаштованому ID облікового запису.
|
||||
- Застарілий каталог автентифікації Baileys для одного облікового запису мігрується `openclaw doctor` у `whatsapp/default`.
|
||||
- Перевизначення для облікового запису: `channels.whatsapp.accounts.<id>.sendReadReceipts`, `channels.whatsapp.accounts.<id>.dmPolicy`, `channels.whatsapp.accounts.<id>.allowFrom`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
@ -212,13 +219,13 @@ WhatsApp працює через вебканал Gateway (Baileys Web). Він
|
||||
}
|
||||
```
|
||||
|
||||
- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; символьні посилання відхиляються), із `TELEGRAM_BOT_TOKEN` як резервним варіантом для типового облікового запису.
|
||||
- `apiRoot` — це лише корінь Telegram Bot API. Використовуйте `https://api.telegram.org` або власний self-hosted/proxy корінь, а не `https://api.telegram.org/bot<TOKEN>`; `openclaw doctor --fix` видаляє випадковий кінцевий суфікс `/bot<TOKEN>`.
|
||||
- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір типового облікового запису, коли збігається з налаштованим ID облікового запису.
|
||||
- У налаштуваннях із кількома обліковими записами (2+ ID облікових записів) задайте явне типове значення (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути резервної маршрутизації; `openclaw doctor` попереджає, коли воно відсутнє або недійсне.
|
||||
- `configWrites: false` блокує ініційовані Telegram записи конфігурації (міграції ID супергруп, `/config set|unset`).
|
||||
- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні прив’язки ACP для тем форуму (використовуйте канонічний `chatId:topic:topicId` у `match.peer.id`). Семантика полів спільна в [Агенти ACP](/uk/tools/acp-agents#channel-specific-settings).
|
||||
- Попередні перегляди потоків Telegram використовують `sendMessage` + `editMessageText` (працює в прямих і групових чатах).
|
||||
- Токен бота: `channels.telegram.botToken` або `channels.telegram.tokenFile` (лише звичайний файл; символічні посилання відхиляються), з `TELEGRAM_BOT_TOKEN` як резервним варіантом для типового облікового запису.
|
||||
- `apiRoot` є лише коренем Telegram Bot API. Використовуйте `https://api.telegram.org` або власний розміщений/проксі-корінь, а не `https://api.telegram.org/bot<TOKEN>`; `openclaw doctor --fix` видаляє випадковий кінцевий суфікс `/bot<TOKEN>`.
|
||||
- Необов’язковий `channels.telegram.defaultAccount` перевизначає вибір типового облікового запису, коли він відповідає налаштованому ID облікового запису.
|
||||
- У налаштуваннях із кількома обліковими записами (2+ ID облікових записів) задайте явний типовий (`channels.telegram.defaultAccount` або `channels.telegram.accounts.default`), щоб уникнути резервної маршрутизації; `openclaw doctor` попереджає, коли він відсутній або недійсний.
|
||||
- `configWrites: false` блокує записи конфігурації, ініційовані Telegram (міграції ID супергруп, `/config set|unset`).
|
||||
- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують постійні прив’язки ACP для тем форуму (використовуйте канонічний `chatId:topic:topicId` у `match.peer.id`). Семантику полів наведено в [Агенти ACP](/uk/tools/acp-agents#channel-specific-settings).
|
||||
- Попередні перегляди потоків Telegram використовують `sendMessage` + `editMessageText` (працює в особистих і групових чатах).
|
||||
- Політика повторних спроб: див. [Політика повторних спроб](/uk/concepts/retry).
|
||||
|
||||
### Discord
|
||||
@ -321,37 +328,37 @@ WhatsApp працює через вебканал Gateway (Baileys Web). Він
|
||||
}
|
||||
```
|
||||
|
||||
- Токен: `channels.discord.token`, з `DISCORD_BOT_TOKEN` як резервом для стандартного облікового запису.
|
||||
- Прямі вихідні виклики, що надають явний Discord `token`, використовують цей токен для виклику; параметри повторних спроб/політик облікового запису все одно беруться з вибраного облікового запису в активному знімку runtime.
|
||||
- Необов’язковий `channels.discord.defaultAccount` перевизначає вибір стандартного облікового запису, коли він збігається з налаштованим id облікового запису.
|
||||
- Використовуйте `user:<id>` (DM) або `channel:<id>` (канал гільдії) для цілей доставки; голі числові ID відхиляються.
|
||||
- Slug гільдій записуються малими літерами, а пробіли замінюються на `-`; ключі каналів використовують назву у форматі slug (без `#`). Віддавайте перевагу ID гільдій.
|
||||
- Повідомлення, створені ботами, за замовчуванням ігноруються. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно фільтруються).
|
||||
- Токен: `channels.discord.token`, з `DISCORD_BOT_TOKEN` як резервним значенням для типового облікового запису.
|
||||
- Прямі вихідні виклики, які надають явний Discord `token`, використовують цей токен для виклику; параметри повторної спроби/політики облікового запису все одно беруться з вибраного облікового запису в активному знімку runtime.
|
||||
- Необов'язковий `channels.discord.defaultAccount` перевизначає вибір типового облікового запису, коли збігається з налаштованим id облікового запису.
|
||||
- Використовуйте `user:<id>` (DM) або `channel:<id>` (канал гільдії) для цілей доставки; прості числові ID відхиляються.
|
||||
- Слаги гільдій записуються нижнім регістром із заміною пробілів на `-`; ключі каналів використовують слаговану назву (без `#`). Надавайте перевагу ID гільдій.
|
||||
- Повідомлення, створені ботом, типово ігноруються. `allowBots: true` вмикає їх; використовуйте `allowBots: "mentions"`, щоб приймати лише повідомлення ботів, які згадують бота (власні повідомлення все одно фільтруються).
|
||||
- `channels.discord.guilds.<id>.ignoreOtherMentions` (і перевизначення каналів) відкидає повідомлення, які згадують іншого користувача або роль, але не бота (за винятком @everyone/@here).
|
||||
- `maxLinesPerMessage` (за замовчуванням 17) розбиває високі повідомлення, навіть якщо вони менші за 2000 символів.
|
||||
- `channels.discord.threadBindings` керує маршрутизацією Discord, прив’язаною до threads:
|
||||
- `enabled`: перевизначення Discord для функцій сесій, прив’язаних до threads (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age` і прив’язана доставка/маршрутизація)
|
||||
- `maxLinesPerMessage` (типово 17) розбиває високі повідомлення, навіть якщо вони менші за 2000 символів.
|
||||
- `channels.discord.threadBindings` керує маршрутизацією Discord, прив'язаною до тредів:
|
||||
- `enabled`: перевизначення Discord для функцій сесій, прив'язаних до тредів (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`, а також прив'язана доставка/маршрутизація)
|
||||
- `idleHours`: перевизначення Discord для автоматичного unfocus через неактивність у годинах (`0` вимикає)
|
||||
- `maxAgeHours`: перевизначення Discord для жорсткого максимального віку в годинах (`0` вимикає)
|
||||
- `spawnSubagentSessions`: opt-in перемикач для автоматичного створення/прив’язування threads через `sessions_spawn({ thread: true })`
|
||||
- Елементи верхнього рівня `bindings[]` з `type: "acp"` налаштовують сталі прив’язки ACP для каналів і threads (використовуйте id каналу/thread у `match.peer.id`). Семантика полів спільна в [Агенти ACP](/uk/tools/acp-agents#channel-specific-settings).
|
||||
- `channels.discord.ui.components.accentColor` задає акцентний колір для контейнерів Discord components v2.
|
||||
- `channels.discord.voice` вмикає розмови в голосових каналах Discord і необов’язкові перевизначення auto-join + LLM + TTS.
|
||||
- `channels.discord.voice.model` необов’язково перевизначає модель LLM, яку використовують для відповідей у голосових каналах Discord.
|
||||
- `channels.discord.voice.daveEncryption` і `channels.discord.voice.decryptionFailureTolerance` передаються до параметрів DAVE `@discordjs/voice` (`true` і `24` за замовчуванням).
|
||||
- OpenClaw додатково намагається відновлювати приймання голосу, виходячи з голосової сесії та повторно приєднуючись до неї після повторних помилок розшифрування.
|
||||
- `channels.discord.streaming` є канонічним ключем режиму потокової передачі. Застарілі значення `streamMode` і булеві `streaming` мігруються автоматично.
|
||||
- `channels.discord.autoPresence` зіставляє доступність runtime із присутністю бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов’язкові перевизначення тексту статусу.
|
||||
- `channels.discord.dangerouslyAllowNameMatching` знову вмикає змінне зіставлення за іменем/тегом (режим сумісності break-glass).
|
||||
- `channels.discord.execApprovals`: нативна для Discord доставка підтверджень exec і авторизація approver.
|
||||
- `enabled`: `true`, `false` або `"auto"` (за замовчуванням). В автоматичному режимі підтвердження exec активуються, коли approver можна визначити з `approvers` або `commands.ownerAllowFrom`.
|
||||
- `approvers`: ID користувачів Discord, яким дозволено підтверджувати запити exec. Якщо пропущено, використовується резерв `commands.ownerAllowFrom`.
|
||||
- `agentFilter`: необов’язковий allowlist ID агентів. Пропустіть, щоб пересилати підтвердження для всіх агентів.
|
||||
- `sessionFilter`: необов’язкові шаблони ключів сесій (підрядок або regex).
|
||||
- `target`: куди надсилати запити підтвердження. `"dm"` (за замовчуванням) надсилає в DM approver, `"channel"` надсилає в початковий канал, `"both"` надсилає в обидва місця. Коли target містить `"channel"`, кнопки можуть використовувати лише визначені approver.
|
||||
- `cleanupAfterResolve`: коли `true`, видаляє DM із підтвердженнями після схвалення, відмови або timeout.
|
||||
- `spawnSubagentSessions`: перемикач opt-in для автоматичного створення/прив'язування тредів `sessions_spawn({ thread: true })`
|
||||
- Записи верхнього рівня `bindings[]` з `type: "acp"` налаштовують сталі прив'язки ACP для каналів і тредів (використовуйте id каналу/треду в `match.peer.id`). Семантика полів спільна в [агентах ACP](/uk/tools/acp-agents#channel-specific-settings).
|
||||
- `channels.discord.ui.components.accentColor` задає акцентний колір для контейнерів компонентів Discord v2.
|
||||
- `channels.discord.voice` вмикає розмови в голосових каналах Discord і необов'язкові перевизначення авто-приєднання + LLM + TTS.
|
||||
- `channels.discord.voice.model` необов'язково перевизначає модель LLM, що використовується для відповідей у голосових каналах Discord.
|
||||
- `channels.discord.voice.daveEncryption` і `channels.discord.voice.decryptionFailureTolerance` передаються до параметрів DAVE `@discordjs/voice` (типово `true` і `24`).
|
||||
- OpenClaw додатково намагається відновити приймання голосу, залишаючи голосову сесію та повторно приєднуючись після повторних помилок розшифрування.
|
||||
- `channels.discord.streaming` є канонічним ключем режиму потоку. Застарілі значення `streamMode` і булеві `streaming` автоматично мігруються.
|
||||
- `channels.discord.autoPresence` зіставляє доступність runtime із присутністю бота (healthy => online, degraded => idle, exhausted => dnd) і дозволяє необов'язкові перевизначення тексту статусу.
|
||||
- `channels.discord.dangerouslyAllowNameMatching` повторно вмикає змінне зіставлення імені/тега (режим аварійної сумісності).
|
||||
- `channels.discord.execApprovals`: вбудована в Discord доставка підтверджень exec і авторизація затверджувачів.
|
||||
- `enabled`: `true`, `false` або `"auto"` (типово). В автоматичному режимі підтвердження exec активуються, коли затверджувачів можна визначити з `approvers` або `commands.ownerAllowFrom`.
|
||||
- `approvers`: ID користувачів Discord, яким дозволено затверджувати запити exec. Якщо не вказано, використовується резервне `commands.ownerAllowFrom`.
|
||||
- `agentFilter`: необов'язковий allowlist ID агентів. Не вказуйте, щоб пересилати підтвердження для всіх агентів.
|
||||
- `sessionFilter`: необов'язкові шаблони ключів сесій (підрядок або regex).
|
||||
- `target`: куди надсилати запити на підтвердження. `"dm"` (типово) надсилає в DM затверджувачам, `"channel"` надсилає в початковий канал, `"both"` надсилає в обидва місця. Коли ціль містить `"channel"`, кнопками можуть користуватися лише визначені затверджувачі.
|
||||
- `cleanupAfterResolve`: коли `true`, видаляє DM із підтвердженнями після затвердження, відмови або тайм-ауту.
|
||||
|
||||
**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, за замовчуванням), `all` (усі повідомлення), `allowlist` (з `guilds.<id>.users` для всіх повідомлень).
|
||||
**Режими сповіщень про реакції:** `off` (немає), `own` (повідомлення бота, типово), `all` (усі повідомлення), `allowlist` (з `guilds.<id>.users` для всіх повідомлень).
|
||||
|
||||
### Google Chat
|
||||
|
||||
@ -382,11 +389,11 @@ WhatsApp працює через вебканал Gateway (Baileys Web). Він
|
||||
}
|
||||
```
|
||||
|
||||
- JSON облікового запису service account: вбудований (`serviceAccount`) або файловий (`serviceAccountFile`).
|
||||
- SecretRef облікового запису service account також підтримується (`serviceAccountRef`).
|
||||
- Резерви env: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`.
|
||||
- JSON сервісного облікового запису: вбудований (`serviceAccount`) або на основі файлу (`serviceAccountFile`).
|
||||
- SecretRef сервісного облікового запису також підтримується (`serviceAccountRef`).
|
||||
- Резервні значення env: `GOOGLE_CHAT_SERVICE_ACCOUNT` або `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`.
|
||||
- Використовуйте `spaces/<spaceId>` або `users/<userId>` для цілей доставки.
|
||||
- `channels.googlechat.dangerouslyAllowNameMatching` знову вмикає змінне зіставлення email principal (режим сумісності break-glass).
|
||||
- `channels.googlechat.dangerouslyAllowNameMatching` повторно вмикає змінне зіставлення email-принципала (режим аварійної сумісності).
|
||||
|
||||
### Slack
|
||||
|
||||
@ -458,36 +465,36 @@ WhatsApp працює через вебканал Gateway (Baileys Web). Він
|
||||
}
|
||||
```
|
||||
|
||||
- **Socket mode** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` як резерв env для стандартного облікового запису).
|
||||
- **HTTP mode** потребує `botToken` плюс `signingSecret` (у корені або для окремого облікового запису).
|
||||
- `socketMode` передає налаштування транспорту Slack SDK Socket Mode до публічного API Bolt receiver. Використовуйте його лише під час дослідження timeout ping/pong або поведінки застарілого websocket.
|
||||
- **Режим Socket** потребує і `botToken`, і `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` для резервного env типового облікового запису).
|
||||
- **Режим HTTP** потребує `botToken` плюс `signingSecret` (у корені або для кожного облікового запису).
|
||||
- `socketMode` передає налаштування транспорту Slack SDK Socket Mode до публічного API приймача Bolt. Використовуйте це лише під час розслідування тайм-аутів ping/pong або поведінки застарілого websocket.
|
||||
- `botToken`, `appToken`, `signingSecret` і `userToken` приймають plaintext
|
||||
рядки або об’єкти SecretRef.
|
||||
- Знімки облікових записів Slack надають поля джерела/статусу для окремих облікових даних, як-от
|
||||
`botTokenSource`, `botTokenStatus`, `appTokenStatus`, а в HTTP mode —
|
||||
рядки або об'єкти SecretRef.
|
||||
- Знімки облікових записів Slack надають поля джерела/статусу для кожних облікових даних, як-от
|
||||
`botTokenSource`, `botTokenStatus`, `appTokenStatus`, а в режимі HTTP —
|
||||
`signingSecretStatus`. `configured_unavailable` означає, що обліковий запис
|
||||
налаштовано через SecretRef, але поточний шлях команди/runtime не зміг
|
||||
визначити значення secret.
|
||||
- `configWrites: false` блокує ініційовані Slack записи конфігурації.
|
||||
- Необов’язковий `channels.slack.defaultAccount` перевизначає вибір стандартного облікового запису, коли він збігається з налаштованим id облікового запису.
|
||||
- `channels.slack.streaming.mode` є канонічним ключем режиму потокової передачі Slack. `channels.slack.streaming.nativeTransport` керує нативним транспортом потокової передачі Slack. Застарілі значення `streamMode`, булеві `streaming` і `nativeStreaming` мігруються автоматично.
|
||||
отримати значення секрету.
|
||||
- `configWrites: false` блокує записи конфігурації, ініційовані Slack.
|
||||
- Необов'язковий `channels.slack.defaultAccount` перевизначає вибір типового облікового запису, коли збігається з налаштованим id облікового запису.
|
||||
- `channels.slack.streaming.mode` є канонічним ключем режиму потоку Slack. `channels.slack.streaming.nativeTransport` керує нативним потоковим транспортом Slack. Застарілі значення `streamMode`, булеві `streaming` і `nativeStreaming` автоматично мігруються.
|
||||
- Використовуйте `user:<id>` (DM) або `channel:<id>` для цілей доставки.
|
||||
|
||||
**Режими сповіщень про реакції:** `off`, `own` (за замовчуванням), `all`, `allowlist` (з `reactionAllowlist`).
|
||||
**Режими сповіщень про реакції:** `off`, `own` (типово), `all`, `allowlist` (з `reactionAllowlist`).
|
||||
|
||||
**Ізоляція сесій thread:** `thread.historyScope` є окремим для кожного thread (за замовчуванням) або спільним для каналу. `thread.inheritParent` копіює transcript батьківського каналу в нові threads.
|
||||
**Ізоляція тредових сесій:** `thread.historyScope` є окремим для кожного треду (типово) або спільним для каналу. `thread.inheritParent` копіює transcript батьківського каналу до нових тредів.
|
||||
|
||||
- Нативна потокова передача Slack разом зі статусом thread у стилі Slack assistant `"is typing..."` потребують цілі reply thread. DM верхнього рівня за замовчуванням лишаються поза thread, тому вони використовують `typingReaction` або звичайну доставку замість preview у стилі thread.
|
||||
- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а потім видаляє її після завершення. Використовуйте Slack emoji shortcode, наприклад `"hourglass_flowing_sand"`.
|
||||
- `channels.slack.execApprovals`: нативна для Slack доставка підтверджень exec і авторизація approver. Та сама схема, що й у Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`).
|
||||
- Нативний streaming Slack плюс статус треду в стилі асистента Slack "is typing..." потребують цільового треду для відповіді. DM верхнього рівня типово залишаються поза тредами, тому використовують `typingReaction` або звичайну доставку замість preview у стилі треду.
|
||||
- `typingReaction` додає тимчасову реакцію до вхідного повідомлення Slack, поки виконується відповідь, а потім видаляє її після завершення. Використовуйте shortcode емодзі Slack, наприклад `"hourglass_flowing_sand"`.
|
||||
- `channels.slack.execApprovals`: вбудована в Slack доставка підтверджень exec і авторизація затверджувачів. Та сама схема, що й у Discord: `enabled` (`true`/`false`/`"auto"`), `approvers` (ID користувачів Slack), `agentFilter`, `sessionFilter` і `target` (`"dm"`, `"channel"` або `"both"`).
|
||||
|
||||
| Група дій | За замовчуванням | Примітки |
|
||||
| Група дій | Типово | Примітки |
|
||||
| ------------ | ------- | ---------------------- |
|
||||
| reactions | enabled | Реагувати + перелічувати реакції |
|
||||
| messages | enabled | Читати/надсилати/редагувати/видаляти |
|
||||
| pins | enabled | Закріпити/відкріпити/перелічити |
|
||||
| memberInfo | enabled | Інформація про учасника |
|
||||
| emojiList | enabled | Список користувацьких emoji |
|
||||
| reactions | увімкнено | Реагувати + перелік реакцій |
|
||||
| messages | увімкнено | Читати/надсилати/редагувати/видаляти |
|
||||
| pins | увімкнено | Закріпити/відкріпити/перелічити |
|
||||
| memberInfo | увімкнено | Інформація про учасника |
|
||||
| emojiList | увімкнено | Список власних емодзі |
|
||||
|
||||
### Mattermost
|
||||
|
||||
@ -521,23 +528,23 @@ Mattermost постачається як Plugin: `openclaw plugins install @open
|
||||
}
|
||||
```
|
||||
|
||||
Режими чату: `oncall` (відповідати на @-згадку, за замовчуванням), `onmessage` (кожне повідомлення), `onchar` (повідомлення, що починаються з префікса-тригера).
|
||||
Режими чату: `oncall` (відповідати на @-згадку, типово), `onmessage` (кожне повідомлення), `onchar` (повідомлення, що починаються з префікса-тригера).
|
||||
|
||||
Коли нативні команди Mattermost увімкнено:
|
||||
|
||||
- `commands.callbackPath` має бути шляхом (наприклад `/api/channels/mattermost/command`), а не повною URL-адресою.
|
||||
- `commands.callbackUrl` має вказувати на endpoint Gateway OpenClaw і бути доступним із сервера Mattermost.
|
||||
- Нативні slash callback автентифікуються токенами окремих команд, які повертає
|
||||
- `commands.callbackUrl` має вказувати на endpoint OpenClaw gateway і бути доступним із сервера Mattermost.
|
||||
- Нативні slash callbacks автентифікуються токенами кожної команди, які повертає
|
||||
Mattermost під час реєстрації slash command. Якщо реєстрація не вдається або жодні
|
||||
команди не активовано, OpenClaw відхиляє callback з
|
||||
команди не активовано, OpenClaw відхиляє callbacks із
|
||||
`Unauthorized: invalid command token.`
|
||||
- Для приватних/tailnet/внутрішніх callback hosts Mattermost може вимагати,
|
||||
щоб `ServiceSettings.AllowedUntrustedInternalConnections` містив callback host/domain.
|
||||
Використовуйте значення host/domain, а не повні URL-адреси.
|
||||
- `channels.mattermost.configWrites`: дозволити або заборонити ініційовані Mattermost записи конфігурації.
|
||||
- Для приватних/tailnet/внутрішніх хостів callback Mattermost може вимагати,
|
||||
щоб `ServiceSettings.AllowedUntrustedInternalConnections` містив хост/домен callback.
|
||||
Використовуйте значення хоста/домену, а не повні URL-адреси.
|
||||
- `channels.mattermost.configWrites`: дозволити або заборонити записи конфігурації, ініційовані Mattermost.
|
||||
- `channels.mattermost.requireMention`: вимагати `@mention` перед відповіддю в каналах.
|
||||
- `channels.mattermost.groups.<channelId>.requireMention`: перевизначення mention-gating для окремого каналу (`"*"` для стандартного).
|
||||
- Необов’язковий `channels.mattermost.defaultAccount` перевизначає вибір стандартного облікового запису, коли він збігається з налаштованим id облікового запису.
|
||||
- `channels.mattermost.groups.<channelId>.requireMention`: перевизначення mention-gating для кожного каналу (`"*"` для типового).
|
||||
- Необов'язковий `channels.mattermost.defaultAccount` перевизначає вибір типового облікового запису, коли збігається з налаштованим id облікового запису.
|
||||
|
||||
### Signal
|
||||
|
||||
@ -558,15 +565,15 @@ Mattermost постачається як Plugin: `openclaw plugins install @open
|
||||
}
|
||||
```
|
||||
|
||||
**Режими сповіщень про реакції:** `off`, `own` (за замовчуванням), `all`, `allowlist` (з `reactionAllowlist`).
|
||||
**Режими сповіщень про реакції:** `off`, `own` (типово), `all`, `allowlist` (з `reactionAllowlist`).
|
||||
|
||||
- `channels.signal.account`: прив’язати запуск каналу до конкретної ідентичності облікового запису Signal.
|
||||
- `channels.signal.configWrites`: дозволити або заборонити записи конфігурації, ініційовані Signal.
|
||||
- Необов’язковий `channels.signal.defaultAccount` перевизначає вибір облікового запису за замовчуванням, коли він збігається з налаштованим ідентифікатором облікового запису.
|
||||
- Необов’язковий `channels.signal.defaultAccount` перевизначає вибір типового облікового запису, коли збігається з налаштованим ідентифікатором облікового запису.
|
||||
|
||||
### BlueBubbles
|
||||
|
||||
BlueBubbles — рекомендований шлях для iMessage (на основі Plugin, налаштовується у `channels.bluebubbles`).
|
||||
BlueBubbles — рекомендований шлях для iMessage (на базі Plugin, налаштовується в `channels.bluebubbles`).
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -582,9 +589,9 @@ BlueBubbles — рекомендований шлях для iMessage (на ос
|
||||
```
|
||||
|
||||
- Основні шляхи ключів, описані тут: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`.
|
||||
- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає вибір облікового запису за замовчуванням, коли він збігається з налаштованим ідентифікатором облікового запису.
|
||||
- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови BlueBubbles до постійних сесій ACP. Використовуйте дескриптор BlueBubbles або цільовий рядок (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Семантика спільних полів: [агенти ACP](/uk/tools/acp-agents#channel-specific-settings).
|
||||
- Повну конфігурацію каналу BlueBubbles задокументовано в [BlueBubbles](/uk/channels/bluebubbles).
|
||||
- Необов’язковий `channels.bluebubbles.defaultAccount` перевизначає вибір типового облікового запису, коли збігається з налаштованим ідентифікатором облікового запису.
|
||||
- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови BlueBubbles до постійних сеансів ACP. Використовуйте дескриптор BlueBubbles або цільовий рядок (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [Агенти ACP](/uk/tools/acp-agents#channel-specific-settings).
|
||||
- Повна конфігурація каналу BlueBubbles задокументована в [BlueBubbles](/uk/channels/bluebubbles).
|
||||
|
||||
### iMessage
|
||||
|
||||
@ -612,15 +619,15 @@ OpenClaw запускає `imsg rpc` (JSON-RPC через stdio). Демон а
|
||||
}
|
||||
```
|
||||
|
||||
- Необов’язковий `channels.imessage.defaultAccount` перевизначає вибір облікового запису за замовчуванням, коли він збігається з налаштованим ідентифікатором облікового запису.
|
||||
- Необов’язковий `channels.imessage.defaultAccount` перевизначає вибір типового облікового запису, коли збігається з налаштованим ідентифікатором облікового запису.
|
||||
|
||||
- Потребує Full Disk Access до бази даних Messages.
|
||||
- Надавайте перевагу цілям `chat_id:<id>`. Використовуйте `imsg chats --limit 20`, щоб перелічити чати.
|
||||
- Надавайте перевагу цілям `chat_id:<id>`. Використовуйте `imsg chats --limit 20`, щоб отримати список чатів.
|
||||
- `cliPath` може вказувати на SSH-обгортку; задайте `remoteHost` (`host` або `user@host`) для отримання вкладень через SCP.
|
||||
- `attachmentRoots` і `remoteAttachmentRoots` обмежують шляхи вхідних вкладень (за замовчуванням: `/Users/*/Library/Messages/Attachments`).
|
||||
- SCP використовує сувору перевірку ключа хоста, тож переконайтеся, що ключ хоста ретранслятора вже існує в `~/.ssh/known_hosts`.
|
||||
- `attachmentRoots` і `remoteAttachmentRoots` обмежують шляхи вхідних вкладень (типово: `/Users/*/Library/Messages/Attachments`).
|
||||
- SCP використовує сувору перевірку ключа хоста, тому переконайтеся, що ключ хоста ретранслятора вже існує в `~/.ssh/known_hosts`.
|
||||
- `channels.imessage.configWrites`: дозволити або заборонити записи конфігурації, ініційовані iMessage.
|
||||
- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови iMessage до постійних сесій ACP. Використовуйте нормалізований дескриптор або явну ціль чату (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Семантика спільних полів: [агенти ACP](/uk/tools/acp-agents#channel-specific-settings).
|
||||
- Записи верхнього рівня `bindings[]` з `type: "acp"` можуть прив’язувати розмови iMessage до постійних сеансів ACP. Використовуйте нормалізований дескриптор або явну ціль чату (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) у `match.peer.id`. Спільна семантика полів: [Агенти ACP](/uk/tools/acp-agents#channel-specific-settings).
|
||||
|
||||
<Accordion title="Приклад SSH-обгортки iMessage">
|
||||
|
||||
@ -633,7 +640,7 @@ exec ssh -T gateway-host imsg "$@"
|
||||
|
||||
### Matrix
|
||||
|
||||
Matrix працює на основі Plugin і налаштовується у `channels.matrix`.
|
||||
Matrix працює на базі Plugin і налаштовується в `channels.matrix`.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -664,24 +671,24 @@ Matrix працює на основі Plugin і налаштовується у
|
||||
```
|
||||
|
||||
- Автентифікація токеном використовує `accessToken`; автентифікація паролем використовує `userId` + `password`.
|
||||
- `channels.matrix.proxy` маршрутизує HTTP-трафік Matrix через явний HTTP(S)-проксі. Іменовані облікові записи можуть перевизначити його через `channels.matrix.accounts.<id>.proxy`.
|
||||
- `channels.matrix.network.dangerouslyAllowPrivateNetwork` дозволяє приватні/внутрішні homeserver-и. `proxy` і це мережеве явне ввімкнення є незалежними елементами керування.
|
||||
- `channels.matrix.proxy` спрямовує HTTP-трафік Matrix через явний HTTP(S)-проксі. Іменовані облікові записи можуть перевизначати його через `channels.matrix.accounts.<id>.proxy`.
|
||||
- `channels.matrix.network.dangerouslyAllowPrivateNetwork` дозволяє приватні/внутрішні homeserver-и. `proxy` і це явне мережеве ввімкнення є незалежними елементами керування.
|
||||
- `channels.matrix.defaultAccount` вибирає бажаний обліковий запис у налаштуваннях із кількома обліковими записами.
|
||||
- `channels.matrix.autoJoin` за замовчуванням має значення `off`, тому запрошені кімнати й нові запрошення у стилі DM ігноруються, доки ви не задасте `autoJoin: "allowlist"` з `autoJoinAllowlist` або `autoJoin: "always"`.
|
||||
- `channels.matrix.execApprovals`: нативна для Matrix доставка підтверджень виконання й авторизація затверджувачів.
|
||||
- `enabled`: `true`, `false` або `"auto"` (за замовчуванням). В автоматичному режимі підтвердження виконання активуються, коли затверджувачів можна визначити з `approvers` або `commands.ownerAllowFrom`.
|
||||
- `approvers`: ідентифікатори користувачів Matrix (наприклад, `@owner:example.org`), яким дозволено затверджувати запити на виконання.
|
||||
- `agentFilter`: необов’язковий список дозволених ідентифікаторів агентів. Не вказуйте, щоб пересилати підтвердження для всіх агентів.
|
||||
- `sessionFilter`: необов’язкові шаблони ключів сесій (підрядок або регулярний вираз).
|
||||
- `target`: куди надсилати запити на підтвердження. `"dm"` (за замовчуванням), `"channel"` (початкова кімната) або `"both"`.
|
||||
- Перевизначення для окремого облікового запису: `channels.matrix.accounts.<id>.execApprovals`.
|
||||
- `channels.matrix.dm.sessionScope` керує тим, як DM-и Matrix групуються в сесії: `per-user` (за замовчуванням) спільно використовує сесію за маршрутизованим співрозмовником, тоді як `per-room` ізолює кожну кімнату DM.
|
||||
- Проби стану Matrix і live-пошуки в каталозі використовують ту саму політику проксі, що й трафік під час виконання.
|
||||
- Повну конфігурацію Matrix, правила націлювання та приклади налаштування задокументовано в [Matrix](/uk/channels/matrix).
|
||||
- `channels.matrix.autoJoin` типово має значення `off`, тому запрошені кімнати та нові запрошення у стилі DM ігноруються, доки ви не задасте `autoJoin: "allowlist"` з `autoJoinAllowlist` або `autoJoin: "always"`.
|
||||
- `channels.matrix.execApprovals`: нативна для Matrix доставка схвалень exec і авторизація схвалювачів.
|
||||
- `enabled`: `true`, `false` або `"auto"` (типово). В автоматичному режимі схвалення exec активуються, коли схвалювачів можна визначити з `approvers` або `commands.ownerAllowFrom`.
|
||||
- `approvers`: ідентифікатори користувачів Matrix (наприклад, `@owner:example.org`), яким дозволено схвалювати запити exec.
|
||||
- `agentFilter`: необов’язковий allowlist ідентифікаторів агентів. Не вказуйте, щоб пересилати схвалення для всіх агентів.
|
||||
- `sessionFilter`: необов’язкові шаблони ключів сеансів (підрядок або регулярний вираз).
|
||||
- `target`: куди надсилати запити на схвалення. `"dm"` (типово), `"channel"` (початкова кімната) або `"both"`.
|
||||
- Перевизначення для окремих облікових записів: `channels.matrix.accounts.<id>.execApprovals`.
|
||||
- `channels.matrix.dm.sessionScope` керує тим, як DM Matrix групуються в сеанси: `per-user` (типово) спільно використовує сеанс за маршрутизованим співрозмовником, а `per-room` ізолює кожну DM-кімнату.
|
||||
- Перевірки статусу Matrix і живі пошуки в каталозі використовують ту саму політику проксі, що й трафік під час виконання.
|
||||
- Повна конфігурація Matrix, правила таргетингу та приклади налаштування задокументовані в [Matrix](/uk/channels/matrix).
|
||||
|
||||
### Microsoft Teams
|
||||
|
||||
Microsoft Teams працює на основі Plugin і налаштовується у `channels.msteams`.
|
||||
Microsoft Teams працює на базі Plugin і налаштовується в `channels.msteams`.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -697,11 +704,11 @@ Microsoft Teams працює на основі Plugin і налаштовуєт
|
||||
```
|
||||
|
||||
- Основні шляхи ключів, описані тут: `channels.msteams`, `channels.msteams.configWrites`.
|
||||
- Повну конфігурацію Microsoft Teams (облікові дані, webhook, політику DM/груп, перевизначення для окремих команд/каналів) задокументовано в [Microsoft Teams](/uk/channels/msteams).
|
||||
- Повна конфігурація Teams (облікові дані, Webhook, політика DM/груп, перевизначення для окремих команд/каналів) задокументована в [Microsoft Teams](/uk/channels/msteams).
|
||||
|
||||
### IRC
|
||||
|
||||
IRC працює на основі Plugin і налаштовується у `channels.irc`.
|
||||
IRC працює на базі Plugin і налаштовується в `channels.irc`.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -723,12 +730,12 @@ IRC працює на основі Plugin і налаштовується у `ch
|
||||
```
|
||||
|
||||
- Основні шляхи ключів, описані тут: `channels.irc`, `channels.irc.dmPolicy`, `channels.irc.configWrites`, `channels.irc.nickserv.*`.
|
||||
- Необов’язковий `channels.irc.defaultAccount` перевизначає вибір облікового запису за замовчуванням, коли він збігається з налаштованим ідентифікатором облікового запису.
|
||||
- Повну конфігурацію каналу IRC (хост/порт/TLS/канали/списки дозволених/фільтрація згадок) задокументовано в [IRC](/uk/channels/irc).
|
||||
- Необов’язковий `channels.irc.defaultAccount` перевизначає вибір типового облікового запису, коли збігається з налаштованим ідентифікатором облікового запису.
|
||||
- Повна конфігурація каналу IRC (хост/порт/TLS/канали/allowlist-и/обмеження за згадками) задокументована в [IRC](/uk/channels/irc).
|
||||
|
||||
### Кілька облікових записів (усі канали)
|
||||
|
||||
Запустіть кілька облікових записів на канал (кожен із власним `accountId`):
|
||||
Запускайте кілька облікових записів на канал (кожен із власним `accountId`):
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -750,29 +757,29 @@ IRC працює на основі Plugin і налаштовується у `ch
|
||||
```
|
||||
|
||||
- `default` використовується, коли `accountId` опущено (CLI + маршрутизація).
|
||||
- Токени середовища застосовуються лише до облікового запису **за замовчуванням**.
|
||||
- Токени env застосовуються лише до **типового** облікового запису.
|
||||
- Базові налаштування каналу застосовуються до всіх облікових записів, якщо їх не перевизначено для окремого облікового запису.
|
||||
- Використовуйте `bindings[].match.accountId`, щоб маршрутизувати кожен обліковий запис до іншого агента.
|
||||
- Якщо ви додаєте обліковий запис не за замовчуванням через `openclaw channels add` (або онбординг каналу), залишаючись на однообліковій конфігурації каналу верхнього рівня, OpenClaw спершу переносить однооблікові значення верхнього рівня з областю дії облікового запису в мапу облікових записів каналу, щоб початковий обліковий запис продовжив працювати. Більшість каналів переміщує їх у `channels.<channel>.accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану ціль або ціль за замовчуванням.
|
||||
- Наявні прив’язки лише до каналу (без `accountId`) продовжують відповідати обліковому запису за замовчуванням; прив’язки з областю дії облікового запису залишаються необов’язковими.
|
||||
- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи однооблікові значення верхнього рівня з областю дії облікового запису в підвищений обліковий запис, вибраний для цього каналу. Більшість каналів використовує `accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану ціль або ціль за замовчуванням.
|
||||
- Використовуйте `bindings[].match.accountId`, щоб спрямовувати кожен обліковий запис до іншого агента.
|
||||
- Якщо ви додаєте нетиповий обліковий запис через `openclaw channels add` (або онбординг каналу), поки конфігурація каналу верхнього рівня все ще має один обліковий запис, OpenClaw спершу переносить значення верхнього рівня для одного облікового запису, що належать до області облікового запису, у мапу облікових записів каналу, щоб початковий обліковий запис продовжував працювати. Більшість каналів переміщують їх у `channels.<channel>.accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/типову ціль.
|
||||
- Наявні прив’язки лише до каналу (без `accountId`) продовжують відповідати типовому обліковому запису; прив’язки з областю облікового запису залишаються необов’язковими.
|
||||
- `openclaw doctor --fix` також виправляє змішані форми, переміщуючи значення верхнього рівня для одного облікового запису, що належать до області облікового запису, у підвищений обліковий запис, вибраний для цього каналу. Більшість каналів використовують `accounts.default`; Matrix натомість може зберегти наявну відповідну іменовану/типову ціль.
|
||||
|
||||
### Інші канали Plugin
|
||||
### Інші Plugin-канали
|
||||
|
||||
Багато каналів Plugin налаштовуються як `channels.<id>` і документуються на власних сторінках каналів (наприклад, Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch).
|
||||
Див. повний індекс каналів: [канали](/uk/channels).
|
||||
Багато Plugin-каналів налаштовуються як `channels.<id>` і задокументовані на своїх окремих сторінках каналів (наприклад, Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat і Twitch).
|
||||
Дивіться повний індекс каналів: [Канали](/uk/channels).
|
||||
|
||||
### Фільтрація згадок у груповому чаті
|
||||
### Обмеження згадками в груповому чаті
|
||||
|
||||
Для групових повідомлень за замовчуванням **потрібна згадка** (згадка в метаданих або безпечні шаблони регулярних виразів). Застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat та iMessage.
|
||||
Групові повідомлення типово **вимагають згадки** (згадка в метаданих або безпечні шаблони регулярних виразів). Застосовується до групових чатів WhatsApp, Telegram, Discord, Google Chat та iMessage.
|
||||
|
||||
Видимі відповіді керуються окремо. Для групових/канальних кімнат за замовчуванням використовується `messages.groupChat.visibleReplies: "message_tool"`: OpenClaw усе одно обробляє хід, але звичайні фінальні відповіді залишаються приватними, а видимий вивід у кімнату потребує `message(action=send)`. Задавайте `"automatic"` лише тоді, коли потрібна застаріла поведінка, за якої звичайні відповіді публікуються назад у кімнату.
|
||||
Видимі відповіді керуються окремо. Для групових/канальних кімнат типове значення `messages.groupChat.visibleReplies: "message_tool"`: OpenClaw все одно обробляє хід, але звичайні фінальні відповіді залишаються приватними, а видимий вивід у кімнату потребує `message(action=send)`. Задавайте `"automatic"` лише тоді, коли хочете застарілу поведінку, за якої звичайні відповіді публікуються назад у кімнату.
|
||||
|
||||
**Типи згадок:**
|
||||
|
||||
- **Згадки в метаданих**: нативні @-згадки платформи. Ігноруються в режимі чату із собою у WhatsApp.
|
||||
- **Згадки в метаданих**: нативні @-згадки платформи. Ігноруються в режимі чату WhatsApp із самим собою.
|
||||
- **Текстові шаблони**: безпечні шаблони регулярних виразів у `agents.list[].groupChat.mentionPatterns`. Недійсні шаблони та небезпечні вкладені повторення ігноруються.
|
||||
- Фільтрація згадок застосовується лише тоді, коли виявлення можливе (нативні згадки або принаймні один шаблон).
|
||||
- Обмеження згадками застосовується лише тоді, коли виявлення можливе (нативні згадки або принаймні один шаблон).
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -788,9 +795,9 @@ IRC працює на основі Plugin і налаштовується у `ch
|
||||
}
|
||||
```
|
||||
|
||||
`messages.groupChat.historyLimit` задає глобальне значення за замовчуванням. Канали можуть перевизначити його через `channels.<channel>.historyLimit` (або для окремого облікового запису). Задайте `0`, щоб вимкнути.
|
||||
`messages.groupChat.historyLimit` задає глобальне типове значення. Канали можуть перевизначати його через `channels.<channel>.historyLimit` (або для окремого облікового запису). Задайте `0`, щоб вимкнути.
|
||||
|
||||
`messages.groupChat.visibleReplies` є глобальним для ходів із джерел груп/каналів; списки дозволених каналів і фільтрація згадок усе ще визначають, чи буде хід оброблено.
|
||||
`messages.groupChat.visibleReplies` є глобальним для ходів із групових/канальних джерел; allowlist-и каналів і обмеження згадками все одно вирішують, чи обробляти хід.
|
||||
|
||||
#### Ліміти історії DM
|
||||
|
||||
@ -807,13 +814,13 @@ IRC працює на основі Plugin і налаштовується у `ch
|
||||
}
|
||||
```
|
||||
|
||||
Порядок визначення: перевизначення для окремого DM → стандартне значення провайдера → без ліміту (зберігається все).
|
||||
Визначення: перевизначення для окремого DM → типове значення провайдера → без ліміту (усе зберігається).
|
||||
|
||||
Підтримується: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`.
|
||||
|
||||
#### Режим чату із собою
|
||||
#### Режим чату із самим собою
|
||||
|
||||
Додайте власний номер до `allowFrom`, щоб увімкнути режим чату із собою (ігнорує нативні @-згадки, відповідає лише на текстові шаблони):
|
||||
Додайте власний номер до `allowFrom`, щоб увімкнути режим чату із самим собою (ігнорує нативні @-згадки, відповідає лише на текстові шаблони):
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -834,7 +841,7 @@ IRC працює на основі Plugin і налаштовується у `ch
|
||||
}
|
||||
```
|
||||
|
||||
### Команди (обробка команд у чаті)
|
||||
### Команди (обробка команд чату)
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -863,32 +870,32 @@ IRC працює на основі Plugin і налаштовується у `ch
|
||||
|
||||
<Accordion title="Відомості про команди">
|
||||
|
||||
- Цей блок налаштовує поверхні команд. Поточний каталог вбудованих і пакетних команд див. у розділі [Слеш-команди](/uk/tools/slash-commands).
|
||||
- Ця сторінка є **довідником конфігураційних ключів**, а не повним каталогом команд. Команди, що належать каналам або Plugin, як-от QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, device-pair `/pair`, memory `/dreaming`, phone-control `/phone` і Talk `/voice`, задокументовані на сторінках відповідних каналів або Plugin, а також у [Слеш-командах](/uk/tools/slash-commands).
|
||||
- Цей блок налаштовує поверхні команд. Поточний вбудований і включений каталог команд див. у [Слеш-команди](/uk/tools/slash-commands).
|
||||
- Ця сторінка є **довідником ключів конфігурації**, а не повним каталогом команд. Команди, що належать каналу/Plugin, як-от QQ Bot `/bot-ping` `/bot-help` `/bot-logs`, LINE `/card`, device-pair `/pair`, memory `/dreaming`, phone-control `/phone` і Talk `/voice`, задокументовано на сторінках відповідних каналів/Plugin, а також у [Слеш-команди](/uk/tools/slash-commands).
|
||||
- Текстові команди мають бути **окремими** повідомленнями з початковим `/`.
|
||||
- `native: "auto"` вмикає нативні команди для Discord/Telegram, залишає Slack вимкненим.
|
||||
- `nativeSkills: "auto"` вмикає нативні команди Skills для Discord/Telegram, залишає Slack вимкненим.
|
||||
- Перевизначення для окремого каналу: `channels.discord.commands.native` (bool або `"auto"`). `false` очищає раніше зареєстровані команди.
|
||||
- Перевизначайте реєстрацію нативних Skills для окремого каналу через `channels.<provider>.commands.nativeSkills`.
|
||||
- `channels.telegram.customCommands` додає додаткові пункти меню бота Telegram.
|
||||
- `native: "auto"` вмикає нативні команди для Discord/Telegram і залишає Slack вимкненим.
|
||||
- `nativeSkills: "auto"` вмикає нативні команди Skills для Discord/Telegram і залишає Slack вимкненим.
|
||||
- Перевизначення для окремого каналу: `channels.discord.commands.native` (логічне значення або `"auto"`). `false` очищає раніше зареєстровані команди.
|
||||
- Перевизначте реєстрацію нативних Skills для окремого каналу за допомогою `channels.<provider>.commands.nativeSkills`.
|
||||
- `channels.telegram.customCommands` додає додаткові записи меню бота Telegram.
|
||||
- `bash: true` вмикає `! <cmd>` для оболонки хоста. Потребує `tools.elevated.enabled` і відправника в `tools.elevated.allowFrom.<channel>`.
|
||||
- `config: true` вмикає `/config` (читання/запис `openclaw.json`). Для клієнтів Gateway `chat.send` постійні записи `/config set|unset` також потребують `operator.admin`; `/config show` лише для читання залишається доступним звичайним клієнтам операторів із правом запису.
|
||||
- `config: true` вмикає `/config` (читає/записує `openclaw.json`). Для клієнтів Gateway `chat.send` постійні записи `/config set|unset` також потребують `operator.admin`; доступний лише для читання `/config show` залишається доступним для звичайних операторських клієнтів з областю запису.
|
||||
- `mcp: true` вмикає `/mcp` для конфігурації MCP-сервера, керованого OpenClaw, у `mcp.servers`.
|
||||
- `plugins: true` вмикає `/plugins` для виявлення Plugin, встановлення та керування ввімкненням/вимкненням.
|
||||
- `channels.<provider>.configWrites` обмежує мутації конфігурації для окремого каналу (типово: true).
|
||||
- Для багаторахункових каналів `channels.<provider>.accounts.<id>.configWrites` також обмежує записи, спрямовані на цей рахунок (наприклад, `/allowlist --config --account <id>` або `/config set channels.<provider>.accounts.<id>...`).
|
||||
- `restart: false` вимикає `/restart` і дії інструмента перезапуску Gateway. Типово: `true`.
|
||||
- `ownerAllowFrom` — явний список дозволених власників для команд/інструментів лише для власника. Він відокремлений від `allowFrom`.
|
||||
- `ownerDisplay: "hash"` хешує ідентифікатори власників у системному промпті. Задайте `ownerDisplaySecret`, щоб керувати хешуванням.
|
||||
- `allowFrom` задається для кожного провайдера. Коли його встановлено, він є **єдиним** джерелом авторизації (списки дозволених каналів/сполучення та `useAccessGroups` ігноруються).
|
||||
- `useAccessGroups: false` дозволяє командам обходити політики груп доступу, коли `allowFrom` не задано.
|
||||
- `plugins: true` вмикає `/plugins` для виявлення, встановлення та керування ввімкненням/вимкненням Plugin.
|
||||
- `channels.<provider>.configWrites` обмежує зміни конфігурації для кожного каналу (типово: true).
|
||||
- Для багатокористувацьких каналів `channels.<provider>.accounts.<id>.configWrites` також обмежує записи, спрямовані на цей обліковий запис (наприклад, `/allowlist --config --account <id>` або `/config set channels.<provider>.accounts.<id>...`).
|
||||
- `restart: false` вимикає `/restart` і дії інструмента перезапуску Gateway. Типове значення: `true`.
|
||||
- `ownerAllowFrom` — це явний список дозволених власників для команд/інструментів лише для власника. Він окремий від `allowFrom`.
|
||||
- `ownerDisplay: "hash"` хешує ідентифікатори власників у системній підказці. Задайте `ownerDisplaySecret`, щоб керувати хешуванням.
|
||||
- `allowFrom` задається для кожного провайдера. Коли його встановлено, це **єдине** джерело авторизації (списки дозволених каналів/сполучення та `useAccessGroups` ігноруються).
|
||||
- `useAccessGroups: false` дозволяє командам обходити політики груп доступу, коли `allowFrom` не встановлено.
|
||||
- Мапа документації команд:
|
||||
- вбудований і пакетний каталог: [Слеш-команди](/uk/tools/slash-commands)
|
||||
- поверхні команд, специфічні для каналів: [Канали](/uk/channels)
|
||||
- вбудований і включений каталог: [Слеш-команди](/uk/tools/slash-commands)
|
||||
- поверхні команд, специфічні для каналу: [Канали](/uk/channels)
|
||||
- команди QQ Bot: [QQ Bot](/uk/channels/qqbot)
|
||||
- команди сполучення: [Сполучення](/uk/channels/pairing)
|
||||
- команда картки LINE: [LINE](/uk/channels/line)
|
||||
- memory dreaming: [Dreaming](/uk/concepts/dreaming)
|
||||
- Dreaming пам’яті: [Dreaming](/uk/concepts/dreaming)
|
||||
|
||||
</Accordion>
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user