chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-10 20:46:52 +00:00
parent 5880cce409
commit e0dd3085d7
8 changed files with 1371 additions and 1344 deletions

View File

@ -1,15 +1,15 @@
---
read_when:
- Налаштування фонових завдань або пробуджень
- Планування фонових завдань або пробуджень
- Підключення зовнішніх тригерів (вебхуків, Gmail) до OpenClaw
- Вибір між heartbeat і cron для запланованих завдань
summary: Заплановані завдання, вебхуки та тригери Gmail PubSub для планувальника Gateway
title: Заплановані завдання
x-i18n:
generated_at: "2026-04-05T17:57:54Z"
generated_at: "2026-04-10T20:41:25Z"
model: gpt-5.4
provider: openai
source_hash: 43b906914461aba9af327e7e8c22aa856f65802ec2da37ed0c4f872d229cfde6
source_hash: 04d94baa152de17d78515f7d545f099fe4810363ab67e06b465e489737f54665
source_path: automation/cron-jobs.md
workflow: 15
---
@ -39,105 +39,107 @@ openclaw cron runs --id <job-id>
## Як працює cron
- Cron працює **всередині процесу Gateway** (не всередині моделі).
- Cron працює **всередині процесу Gateway** (а не всередині моделі).
- Завдання зберігаються в `~/.openclaw/cron/jobs.json`, тому перезапуски не призводять до втрати розкладів.
- Усі виконання cron створюють записи [фонових завдань](/automation/tasks).
- Одноразові завдання (`--at`) за замовчуванням автоматично видаляються після успішного виконання.
- Ізольовані запуски cron у межах best-effort закривають відстежувані вкладки/процеси браузера для своєї сесії `cron:<jobId>` після завершення запуску, щоб відокремлена автоматизація браузера не залишала осиротілі процеси.
- Усі виконання cron створюють записи [фонових завдань](/uk/automation/tasks).
- Одноразові завдання (`--at`) після успішного виконання автоматично видаляються за замовчуванням.
- Ізольовані запуски cron після завершення намагаються в найкращий спосіб закрити відстежувані вкладки/процеси браузера для своєї сесії `cron:<jobId>`, щоб відокремлена автоматизація браузера не залишала після себе осиротілі процеси.
- Ізольовані запуски cron також захищають від застарілих відповідей-підтверджень. Якщо
перший результат — це лише проміжне оновлення стану (`on it`, `pulling everything
перший результат — це лише проміжне оновлення статусу (`on it`, `pulling everything
together` та подібні підказки), і жоден дочірній запуск subagent більше не
відповідає за фінальну відповідь, OpenClaw повторно надсилає запит один раз для отримання фактичного
відповідає за фінальну відповідь, OpenClaw ще раз надсилає запит на отримання фактичного
результату перед доставкою.
Узгодження завдань для cron належить до runtime: активне завдання cron залишається активним, доки
runtime cron усе ще відстежує це завдання як запущене, навіть якщо старий рядок дочірньої сесії все ще існує.
Щойно runtime перестає володіти завданням і спливає 5-хвилинне вікно пільги, обслуговування може
<a id="maintenance"></a>
Узгодження завдань для cron належить до runtime: активне завдання cron залишається активним, поки
runtime cron все ще відстежує це завдання як таке, що виконується, навіть якщо старий рядок дочірньої сесії все ще існує.
Щойно runtime перестає володіти завданням і спливає 5-хвилинне вікно очікування, обслуговування може
позначити завдання як `lost`.
## Типи розкладу
| Тип | Прапорець CLI | Опис |
| Вид | Прапорець CLI | Опис |
| ------- | ------------- | ------------------------------------------------------- |
| `at` | `--at` | Одноразова мітка часу (ISO 8601 або відносна, наприклад `20m`) |
| `at` | `--at` | Одноразова мітка часу (ISO 8601 або відносно, наприклад `20m`) |
| `every` | `--every` | Фіксований інтервал |
| `cron` | `--cron` | Cron-вираз із 5 або 6 полів із необов'язковим `--tz` |
| `cron` | `--cron` | 5-польовий або 6-польовий cron-вираз з необов’язковим `--tz` |
Мітки часу без часової зони трактуються як UTC. Додайте `--tz America/New_York` для планування за локальним часом.
Мітки часу без часового поясу обробляються як UTC. Додайте `--tz America/New_York` для планування за локальним настінним часом.
Повторювані вирази на початок години автоматично зсуваються до 5 хвилин, щоб зменшити пікове навантаження. Використовуйте `--exact`, щоб примусово ввімкнути точний час, або `--stagger 30s` для явного вікна.
Повторювані вирази на початок години автоматично розподіляються зі зсувом до 5 хвилин, щоб зменшити пікове навантаження. Використовуйте `--exact`, щоб примусово ввімкнути точний час, або `--stagger 30s` для явного вікна.
## Стилі виконання
| Стиль | Значення `--session` | Запускається в | Найкраще підходить для |
| --------------- | -------------------- | ------------------------- | ------------------------------- |
| Основна сесія | `main` | Наступний цикл heartbeat | Нагадувань, системних подій |
| Ізольований | `isolated` | Виділена `cron:<jobId>` | Звітів, фонових завдань |
| Поточна сесія | `current` | Прив'язується під час створення | Повторюваної роботи з урахуванням контексту |
| Користувацька сесія | `session:custom-id` | Постійна іменована сесія | Процесів, що спираються на історію |
| Стиль | Значення `--session` | Виконується в | Найкраще підходить для |
| -------------- | -------------------- | ------------------------ | -------------------------------- |
| Основна сесія | `main` | Наступний heartbeat-цикл | Нагадувань, системних подій |
| Ізольований | `isolated` | Виділений `cron:<jobId>` | Звітів, фонових задач |
| Поточна сесія | `current` | Прив’язується під час створення | Повторюваної роботи з урахуванням контексту |
| Користувацька сесія | `session:custom-id` | Постійна іменована сесія | Робочих процесів, що спираються на історію |
Завдання **основної сесії** ставлять у чергу системну подію й за потреби пробуджують heartbeat (`--wake now` або `--wake next-heartbeat`). **Ізольовані** завдання запускають окремий цикл агента з новою сесією. **Користувацькі сесії** (`session:xxx`) зберігають контекст між запусками, що дає змогу будувати процеси на кшталт щоденних стендапів, які спираються на попередні підсумки.
Завдання **основної сесії** ставлять системну подію в чергу та за потреби пробуджують heartbeat (`--wake now` або `--wake next-heartbeat`). **Ізольовані** завдання запускають окремий цикл агента з новою сесією. **Користувацькі сесії** (`session:xxx`) зберігають контекст між запусками, що дає змогу створювати робочі процеси на кшталт щоденних стендапів, які спираються на попередні підсумки.
Для ізольованих завдань teardown runtime тепер також включає best-effort очищення браузера для цієї сесії cron. Помилки очищення ігноруються, щоб фактичний результат cron усе одно мав пріоритет.
Для ізольованих завдань teardown runtime тепер включає найкращу спробу очищення браузера для цієї cron-сесії. Помилки очищення ігноруються, щоб фактичний результат cron усе одно мав пріоритет.
Коли ізольовані запуски cron оркеструють subagent, доставка також надає перевагу
фінальному результату дочірнього процесу над застарілим проміжним текстом батьківського. Якщо дочірні процеси все ще
виконуються, OpenClaw пригнічує це часткове оновлення батьківського процесу замість того, щоб оголошувати його.
Коли ізольовані запуски cron оркеструють subagents, доставка також надає перевагу
фінальному результату нащадка над застарілим проміжним текстом батьківського запуску. Якщо нащадки все ще
виконуються, OpenClaw пригнічує це часткове оновлення від батьківського запуску замість того, щоб його оголошувати.
### Параметри payload для ізольованих завдань
- `--message`: текст запиту (обов'язковий для isolated)
- `--message`: текст запиту (обов’язково для isolated)
- `--model` / `--thinking`: перевизначення моделі та рівня thinking
- `--light-context`: пропустити ін'єкцію файлів bootstrap робочого простору
- `--light-context`: пропустити інєкцію файлів bootstrap робочого простору
- `--tools exec,read`: обмежити, які інструменти може використовувати завдання
`--model` використовує вибрану дозволену модель для цього завдання. Якщо запитана модель
не дозволена, cron записує попередження в журнал і повертається до вибору моделі
агента/типової моделі для цього завдання. Налаштовані ланцюжки fallback усе ще застосовуються, але просте
не дозволена, cron записує попередження в журнал і повертається до вибору моделі агента/за замовчуванням для цього завдання.
Налаштовані ланцюжки fallback усе ще застосовуються, але звичайне
перевизначення моделі без явного списку fallback для конкретного завдання більше не додає
основну модель агента як приховану додаткову ціль для повторної спроби.
Пріоритет вибору моделі для ізольованих завдань такий:
Пріоритет вибору моделі для ізольованих завдань:
1. Перевизначення моделі Gmail hook (коли запуск надійшов із Gmail і це перевизначення дозволене)
1. Перевизначення моделі Gmail hook (коли запуск походить із Gmail і це перевизначення дозволене)
2. `model` у payload конкретного завдання
3. Збережене перевизначення моделі сесії cron
4. Вибір моделі агента/типової моделі
3. Збережене перевизначення моделі cron-сесії
4. Вибір моделі агента/за замовчуванням
Швидкий режим також наслідує вибраний поточний варіант. Якщо в конфігурації вибраної моделі
є `params.fastMode`, ізольований cron використовує його за замовчуванням. Збережене перевизначення
сесії `fastMode` усе одно має пріоритет над конфігурацією в обох напрямках.
Швидкий режим також дотримується визначеного активного вибору. Якщо конфігурація вибраної моделі
має `params.fastMode`, ізольований cron використовує це за замовчуванням. Збережене перевизначення
`fastMode` у сесії все одно має пріоритет над конфігурацією в будь-якому напрямку.
Якщо ізольований запуск потрапляє на передачу керування під час живого перемикання моделі, cron повторює спробу з
перемкнутим provider/model і зберігає цей поточний вибір перед повторною спробою. Коли
перемикання також несе новий профіль auth, cron зберігає і це перевизначення
профілю auth. Повторні спроби обмежені: після початкової спроби плюс 2 повторних спроб
перемикання cron перериває виконання замість нескінченного циклу.
Якщо ізольований запуск стикається з передачею на іншу модель під час live-перемикання, cron повторює спробу з
перемкненим provider/model і зберігає цей live-вибір перед повторною спробою. Якщо
перемикання також несе новий профіль автентифікації, cron теж зберігає це перевизначення профілю автентифікації.
Кількість повторних спроб обмежена: після початкової спроби та ще 2 повторних спроб через перемикання
cron перериває виконання замість того, щоб зациклитися назавжди.
## Доставка та вивід
| Режим | Що відбувається |
| -------- | --------------------------------------------------------- |
| `announce` | Доставити підсумок у цільовий канал (типово для isolated) |
| `webhook` | Надіслати payload події завершення через POST на URL |
| `none` | Лише внутрішньо, без доставки |
| Режим | Що відбувається |
| --------- | -------------------------------------------------------- |
| `announce` | Доставити підсумок у цільовий канал (за замовчуванням для isolated) |
| `webhook` | Надіслати payload події про завершення методом POST на URL |
| `none` | Лише внутрішнє використання, без доставки |
Використовуйте `--announce --channel telegram --to "-1001234567890"` для доставки в канал. Для тем форуму Telegram використовуйте `-1001234567890:topic:123`. Для цілей Slack/Discord/Mattermost слід використовувати явні префікси (`channel:<id>`, `user:<id>`).
Використовуйте `--announce --channel telegram --to "-1001234567890"` для доставки в канал. Для тем форуму Telegram використовуйте `-1001234567890:topic:123`. Цілі Slack/Discord/Mattermost повинні використовувати явні префікси (`channel:<id>`, `user:<id>`).
Для ізольованих завдань, якими володіє cron, runner керує фінальним шляхом доставки. Агент
отримує запит повернути текстовий підсумок, а потім цей підсумок надсилається через
`announce`, `webhook` або зберігається внутрішньо для `none`. `--no-deliver`
не повертає доставку агенту; воно залишає запуск внутрішнім.
Для ізольованих завдань, що належать cron, runner володіє фінальним шляхом доставки. Агента
просять повернути текстовий підсумок у звичайному форматі, а потім цей підсумок надсилається через
`announce`, `webhook` або залишається внутрішнім для `none`. `--no-deliver` не
повертає доставку назад агенту; він залишає запуск внутрішнім.
Якщо оригінальне завдання явно вказує написати якомусь зовнішньому отримувачу, агент
має зазначити виводом, кому/куди має бути надіслано це повідомлення, замість
спроби відправити його безпосередньо.
Якщо початкове завдання явно вказує на необхідність надіслати повідомлення якомусь зовнішньому одержувачу,
агент повинен зазначити у своєму виводі, кому/куди має піти це повідомлення, замість того щоб
намагатися надіслати його безпосередньо.
Сповіщення про збої йдуть окремим маршрутом призначення:
Сповіщення про збої використовують окремий шлях призначення:
- `cron.failureDestination` задає глобальне типове призначення для сповіщень про збої.
- `job.delivery.failureDestination` перевизначає його для конкретного завдання.
- Якщо не задано жодного з них, а завдання вже доставляє через `announce`, сповіщення про збої тепер за замовчуванням повертаються до цієї основної цілі announce.
- `cron.failureDestination` задає глобальне значення за замовчуванням для сповіщень про збої.
- `job.delivery.failureDestination` перевизначає його для окремого завдання.
- Якщо не задано жодного з них, а завдання вже доставляє результат через `announce`, сповіщення про збої тепер за замовчуванням надсилаються до тієї самої основної цілі announce.
- `delivery.failureDestination` підтримується лише для завдань `sessionTarget="isolated"`, якщо основний режим доставки не є `webhook`.
## Приклади CLI
@ -183,7 +185,7 @@ openclaw cron add \
## Вебхуки
Gateway може відкривати endpoint-и HTTP вебхуків для зовнішніх тригерів. Увімкніть у конфігурації:
Gateway може відкривати HTTP endpoint вебхуків для зовнішніх тригерів. Увімкніть у конфігурації:
```json5
{
@ -202,7 +204,7 @@ Gateway може відкривати endpoint-и HTTP вебхуків для
- `Authorization: Bearer <token>` (рекомендовано)
- `x-openclaw-token: <token>`
Токени в query string відхиляються.
Токени в рядку запиту відхиляються.
### POST /hooks/wake
@ -215,8 +217,8 @@ curl -X POST http://127.0.0.1:18789/hooks/wake \
-d '{"text":"New email received","mode":"now"}'
```
- `text` (обов'язково): опис події
- `mode` (необов'язково): `now` (типово) або `next-heartbeat`
- `text` (обовязково): опис події
- `mode` (необов’язково): `now` (за замовчуванням) або `next-heartbeat`
### POST /hooks/agent
@ -229,27 +231,27 @@ curl -X POST http://127.0.0.1:18789/hooks/agent \
-d '{"message":"Summarize inbox","name":"Email","model":"openai/gpt-5.4-mini"}'
```
Поля: `message` (обов'язково), `name`, `agentId`, `wakeMode`, `deliver`, `channel`, `to`, `model`, `thinking`, `timeoutSeconds`.
Поля: `message` (обовязково), `name`, `agentId`, `wakeMode`, `deliver`, `channel`, `to`, `model`, `thinking`, `timeoutSeconds`.
### Зіставлені hook (POST /hooks/\<name\>)
### Зіставлені hooks (POST /hooks/\<name\>)
Користувацькі назви hook-ів визначаються через `hooks.mappings` у конфігурації. Зіставлення можуть перетворювати довільний payload на дії `wake` або `agent` за допомогою шаблонів чи трансформацій коду.
Користувацькі назви hook визначаються через `hooks.mappings` у конфігурації. Зіставлення можуть перетворювати довільні payload у дії `wake` або `agent` за допомогою шаблонів чи кодових перетворень.
### Безпека
- Тримайте endpoint-и hook-ів за loopback, tailnet або довіреним reverse proxy.
- Використовуйте окремий токен hook; не використовуйте повторно токени auth gateway.
- Тримайте endpoint вебхуків за loopback, tailnet або довіреним reverse proxy.
- Використовуйте окремий токен hook; не використовуйте повторно токени автентифікації gateway.
- Тримайте `hooks.path` на окремому підшляху; `/` відхиляється.
- Установіть `hooks.allowedAgentIds`, щоб обмежити явну маршрутизацію `agentId`.
- Залишайте `hooks.allowRequestSessionKey=false`, якщо вам не потрібні сесії, що обираються викликачем.
- Якщо ви вмикаєте `hooks.allowRequestSessionKey`, також задайте `hooks.allowedSessionKeyPrefixes`, щоб обмежити допустимі форми ключів сесії.
- Payload-и hook-ів за замовчуванням обгортаються межами безпеки.
- Налаштуйте `hooks.allowedAgentIds`, щоб обмежити явну маршрутизацію `agentId`.
- Залишайте `hooks.allowRequestSessionKey=false`, якщо вам не потрібні сесії, вибрані викликачем.
- Якщо ви вмикаєте `hooks.allowRequestSessionKey`, також налаштуйте `hooks.allowedSessionKeyPrefixes`, щоб обмежити дозволені форми ключів сесії.
- Payload hooks за замовчуванням обгортаються захисними межами.
## Інтеграція Gmail PubSub
Підключіть тригери вхідної Gmail до OpenClaw через Google PubSub.
Підключіть тригери вхідних Gmail до OpenClaw через Google PubSub.
**Передумови**: `gcloud` CLI, `gog` (gogcli), увімкнені hooks OpenClaw, Tailscale для публічного HTTPS endpoint.
**Передумови**: CLI `gcloud`, `gog` (gogcli), увімкнені hooks OpenClaw, Tailscale для публічного HTTPS endpoint.
### Налаштування через майстер (рекомендовано)
@ -257,15 +259,15 @@ curl -X POST http://127.0.0.1:18789/hooks/agent \
openclaw webhooks gmail setup --account openclaw@gmail.com
```
Це записує конфігурацію `hooks.gmail`, вмикає пресет Gmail і використовує Tailscale Funnel для push endpoint.
Це записує конфігурацію `hooks.gmail`, вмикає preset Gmail і використовує Tailscale Funnel для endpoint push.
### Автозапуск Gateway
Коли `hooks.enabled=true` і задано `hooks.gmail.account`, Gateway під час запуску стартує `gog gmail watch serve` і автоматично поновлює watch. Установіть `OPENCLAW_SKIP_GMAIL_WATCHER=1`, щоб відмовитися від цього.
Коли `hooks.enabled=true` і задано `hooks.gmail.account`, Gateway під час завантаження запускає `gog gmail watch serve` і автоматично поновлює watch. Встановіть `OPENCLAW_SKIP_GMAIL_WATCHER=1`, щоб відмовитися від цього.
### Ручне одноразове налаштування
1. Виберіть проєкт GCP, який володіє OAuth client, що використовується `gog`:
1. Виберіть проєкт GCP, якому належить OAuth client, що використовується `gog`:
```bash
gcloud auth login
@ -330,14 +332,16 @@ openclaw cron add --name "Ops sweep" --cron "0 6 * * *" --session isolated --mes
openclaw cron edit <jobId> --clear-agent
```
Примітка про перевизначення моделі:
Примітка щодо перевизначення моделі:
- `openclaw cron add|edit --model ...` змінює вибрану модель завдання.
- Якщо модель дозволена, саме цей provider/model потрапляє до ізольованого запуску агента.
- Якщо ні, cron попереджає та повертається до вибору моделі агента/типової моделі завдання.
- Налаштовані ланцюжки fallback усе ще застосовуються, але просте перевизначення `--model` без
явного списку fallback для конкретного завдання більше не переходить до основної моделі агента
як до тихої додаткової цілі повторної спроби.
- Якщо модель дозволена, саме цей provider/model передається ізольованому
запуску агента.
- Якщо вона не дозволена, cron видає попередження і повертається до вибору
моделі агента/за замовчуванням для завдання.
- Налаштовані ланцюжки fallback усе ще застосовуються, але звичайне перевизначення `--model`
без явного списку fallback для конкретного завдання більше не переходить до основної моделі агента
як до мовчазної додаткової цілі для повторної спроби.
## Конфігурація
@ -359,13 +363,13 @@ openclaw cron edit <jobId> --clear-agent
}
```
Вимкнення cron: `cron.enabled: false` або `OPENCLAW_SKIP_CRON=1`.
Вимкнути cron: `cron.enabled: false` або `OPENCLAW_SKIP_CRON=1`.
**Повторна спроба для одноразових завдань**: тимчасові помилки (обмеження швидкості, перевантаження, мережа, помилка сервера) повторюються до 3 разів з експоненційною затримкою. Постійні помилки негайно вимикаються.
**Повторні спроби для одноразових завдань**: тимчасові помилки (обмеження швидкості, перевантаження, мережеві помилки, помилки сервера) повторюються до 3 разів з експоненційною затримкою. Постійні помилки одразу вимикають завдання.
**Повторна спроба для повторюваних завдань**: експоненційна затримка (від 30 с до 60 хв) між спробами. Затримка скидається після наступного успішного запуску.
**Повторні спроби для повторюваних завдань**: експоненційна затримка (від 30 с до 60 хв) між повторними спробами. Після наступного успішного запуску затримка скидається.
**Обслуговування**: `cron.sessionRetention` (типово `24h`) видаляє записи сесій ізольованих запусків. `cron.runLog.maxBytes` / `cron.runLog.keepLines` автоматично очищають файли журналу запусків.
**Обслуговування**: `cron.sessionRetention` (типово `24h`) очищає записи сесій ізольованих запусків. `cron.runLog.maxBytes` / `cron.runLog.keepLines` автоматично очищають файли журналу запусків.
## Усунення несправностей
@ -385,31 +389,31 @@ openclaw doctor
### Cron не спрацьовує
- Перевірте `cron.enabled` і змінну середовища `OPENCLAW_SKIP_CRON`.
- Підтвердьте, що Gateway працює безперервно.
- Для розкладів `cron` перевірте часовий пояс (`--tz`) у порівнянні з часовим поясом хоста.
- Переконайтеся, що Gateway працює безперервно.
- Для розкладів `cron` перевірте часовий пояс (`--tz`) порівняно з часовим поясом хоста.
- `reason: not-due` у виводі запуску означає, що ручний запуск було перевірено через `openclaw cron run <jobId> --due`, але час виконання завдання ще не настав.
### Cron спрацював, але доставки немає
- Режим доставки `none` означає, що зовнішнє повідомлення не очікується.
- Відсутня/некоректна ціль доставки (`channel`/`to`) означає, що вихідне надсилання було пропущено.
- Помилки auth каналу (`unauthorized`, `Forbidden`) означають, що доставку заблоковано обліковими даними.
- Відсутня або недійсна ціль доставки (`channel`/`to`) означає, що вихідне надсилання було пропущено.
- Помилки автентифікації каналу (`unauthorized`, `Forbidden`) означають, що доставку було заблоковано обліковими даними.
- Якщо ізольований запуск повертає лише тихий токен (`NO_REPLY` / `no_reply`),
OpenClaw пригнічує пряме вихідне надсилання, а також запасний
OpenClaw пригнічує пряме вихідне надсилання, а також резервний
шлях доставки підсумку через чергу, тому назад у чат нічого не публікується.
- Для ізольованих завдань, якими володіє cron, не очікуйте, що агент використовуватиме інструмент message
як запасний варіант. Runner керує фінальною доставкою; `--no-deliver` залишає її
внутрішньою, а не дозволяє пряме надсилання.
- Для ізольованих завдань, що належать cron, не очікуйте, що агент використовуватиме інструмент message
як резервний варіант. Runner володіє фінальною доставкою; `--no-deliver` зберігає її
внутрішньою замість дозволу на пряме надсилання.
### Особливості часових поясів
- Cron без `--tz` використовує часовий пояс хоста gateway.
- Розклади `at` без часового поясу трактуються як UTC.
- `activeHours` для heartbeat використовує налаштоване визначення часового поясу.
- Розклади `at` без часового поясу обробляються як UTC.
- Heartbeat `activeHours` використовує налаштоване визначення часового поясу.
## Пов'язане
## Повязане
- [Автоматизація та завдання](/automation) — огляд усіх механізмів автоматизації
- [Фонові завдання](/automation/tasks) — журнал завдань для виконань cron
- [Heartbeat](/gateway/heartbeat) — періодичні цикли основної сесії
- [Часовий пояс](/concepts/timezone) — налаштування часового поясу
- [Автоматизація та завдання](/uk/automation) — огляд усіх механізмів автоматизації
- [Фонові завдання](/uk/automation/tasks) — журнал завдань для виконань cron
- [Heartbeat](/uk/gateway/heartbeat) — періодичні цикли основної сесії
- [Часовий пояс](/uk/concepts/timezone) — налаштування часового поясу

View File

@ -1,62 +1,62 @@
---
read_when:
- Вам потрібна автоматизація на основі подій для /new, /reset, /stop і подій життєвого циклу агента
- Ви хочете створювати, встановлювати або налагоджувати хуки
- Вам потрібно створити, встановити або налагодити хуки
summary: 'Хуки: автоматизація на основі подій для команд і подій життєвого циклу'
title: Хуки
x-i18n:
generated_at: "2026-04-05T17:57:08Z"
generated_at: "2026-04-10T20:41:23Z"
model: gpt-5.4
provider: openai
source_hash: 66eb75bb2b3b2ad229bf3da24fdb0fe021ed08f812fd1d13c69b3bd9df0218e5
source_hash: 14296398e4042d442ebdf071a07c6be99d4afda7cbf3c2b934e76dc5539742c7
source_path: automation/hooks.md
workflow: 15
---
# Хуки
Хуки — це невеликі скрипти, які запускаються, коли щось відбувається всередині Gateway. Вони автоматично виявляються в каталогах, і їх можна переглянути за допомогою `openclaw hooks`.
Хуки — це невеликі скрипти, які запускаються, коли щось відбувається всередині Gateway. Вони автоматично виявляються в каталогах, і їх можна переглядати за допомогою `openclaw hooks`.
В OpenClaw є два типи хуків:
- **Внутрішні хуки** (ця сторінка): запускаються всередині Gateway, коли спрацьовують події агента, як-от `/new`, `/reset`, `/stop` або події життєвого циклу.
- **Вебхуки**: зовнішні HTTP-ендпоїнти, які дозволяють іншим системам запускати роботу в OpenClaw. Див. [Вебхуки](/automation/cron-jobs#webhooks).
- **Вебхуки**: зовнішні HTTP-ендпоїнти, які дозволяють іншим системам запускати роботу в OpenClaw. Див. [Вебхуки](/uk/automation/cron-jobs#webhooks).
Хуки також можуть постачатися всередині plugins. `openclaw hooks list` показує як окремі хуки, так і хуки, керовані plugin.
Хуки також можуть бути вбудовані в плагіни. `openclaw hooks list` показує як окремі хуки, так і хуки, якими керують плагіни.
## Швидкий старт
```bash
# List available hooks
# Список доступних хуків
openclaw hooks list
# Enable a hook
# Увімкнути хук
openclaw hooks enable session-memory
# Check hook status
# Перевірити стан хуків
openclaw hooks check
# Get detailed information
# Отримати докладну інформацію
openclaw hooks info session-memory
```
## Типи подій
| Подія | Коли спрацьовує |
| ------------------------ | --------------------------------------------- |
| `command:new` | Надіслано команду `/new` |
| `command:reset` | Надіслано команду `/reset` |
| `command:stop` | Надіслано команду `/stop` |
| `command` | Будь-яка подія команди (загальний слухач) |
| `session:compact:before` | Перед тим, як стиснення підсумує історію |
| `session:compact:after` | Після завершення стиснення |
| `session:patch` | Коли властивості сесії змінюються |
| `agent:bootstrap` | Перед інʼєкцією bootstrap-файлів робочої теки |
| `gateway:startup` | Після запуску каналів і завантаження хуків |
| `message:received` | Вхідне повідомлення з будь-якого каналу |
| `message:transcribed` | Після завершення транскрибування аудіо |
| `message:preprocessed` | Після завершення обробки всіх медіа і посилань |
| `message:sent` | Вихідне повідомлення доставлено |
| Подія | Коли спрацьовує |
| ------------------------ | ---------------------------------------------- |
| `command:new` | Видано команду `/new` |
| `command:reset` | Видано команду `/reset` |
| `command:stop` | Видано команду `/stop` |
| `command` | Будь-яка подія команди (загальний слухач) |
| `session:compact:before` | Перед тим, як ущільнення підсумовує історію |
| `session:compact:after` | Після завершення ущільнення |
| `session:patch` | Коли властивості сесії змінюються |
| `agent:bootstrap` | Перед вставленням bootstrap-файлів workspace |
| `gateway:startup` | Після запуску каналів і завантаження хуків |
| `message:received` | Вхідне повідомлення з будь-якого каналу |
| `message:transcribed` | Після завершення транскрибування аудіо |
| `message:preprocessed` | Після завершення обробки медіа та посилань |
| `message:sent` | Вихідне повідомлення доставлено |
## Написання хуків
@ -75,27 +75,27 @@ my-hook/
```markdown
---
name: my-hook
description: "Short description of what this hook does"
description: "Короткий опис того, що робить цей хук"
metadata:
{ "openclaw": { "emoji": "🔗", "events": ["command:new"], "requires": { "bins": ["node"] } } }
---
# My Hook
Detailed documentation goes here.
Тут розміщується докладна документація.
```
**Поля метаданих** (`metadata.openclaw`):
| Поле | Опис |
| ---------- | ---------------------------------------------------- |
| `emoji` | Емодзі для відображення в CLI |
| `events` | Масив подій для прослуховування |
| `export` | Іменований експорт для використання (типово `"default"`) |
| `os` | Обовʼязкові платформи (наприклад, `["darwin", "linux"]`) |
| `requires` | Обовʼязкові шляхи `bins`, `anyBins`, `env` або `config` |
| `always` | Обходити перевірки відповідності (boolean) |
| `install` | Методи встановлення |
| Поле | Опис |
| ---------- | ------------------------------------------------------------ |
| `emoji` | Emoji для відображення в CLI |
| `events` | Масив подій для прослуховування |
| `export` | Іменований експорт для використання (типово `"default"`) |
| `os` | Потрібні платформи (наприклад, `["darwin", "linux"]`) |
| `requires` | Потрібні `bins`, `anyBins`, `env` або шляхи `config` |
| `always` | Обійти перевірки відповідності (boolean) |
| `install` | Методи встановлення |
### Реалізація обробника
@ -115,9 +115,9 @@ const handler = async (event) => {
export default handler;
```
Кожна подія містить: `type`, `action`, `sessionKey`, `timestamp`, `messages` (додавайте через push, щоб надсилати користувачу), і `context` (дані, специфічні для події).
Кожна подія містить: `type`, `action`, `sessionKey`, `timestamp`, `messages` (додавайте через push, щоб надіслати користувачу), і `context` (дані, специфічні для події).
### Ключові моменти контексту подій
### Основні елементи контексту подій
**Події команд** (`command:new`, `command:reset`): `context.sessionEntry`, `context.previousSessionEntry`, `context.commandSource`, `context.workspaceDir`, `context.cfg`.
@ -127,53 +127,57 @@ export default handler;
**Події повідомлень** (`message:transcribed`): `context.transcript`, `context.from`, `context.channelId`, `context.mediaPath`.
**Події повідомлень** (`message:preprocessed`): `context.bodyForAgent` (остаточне збагачене тіло), `context.from`, `context.channelId`.
**Події повідомлень** (`message:preprocessed`): `context.bodyForAgent` (остаточний збагачений вміст), `context.from`, `context.channelId`.
**Події bootstrap** (`agent:bootstrap`): `context.bootstrapFiles` (змінюваний масив), `context.agentId`.
**Події patch сесії** (`session:patch`): `context.sessionEntry`, `context.patch` (лише змінені поля), `context.cfg`. Тільки привілейовані клієнти можуть запускати події patch.
**Події patch сесії** (`session:patch`): `context.sessionEntry`, `context.patch` (лише змінені поля), `context.cfg`. Лише привілейовані клієнти можуть запускати події patch.
**Події стиснення**: `session:compact:before` містить `messageCount`, `tokenCount`. `session:compact:after` додає `compactedCount`, `summaryLength`, `tokensBefore`, `tokensAfter`.
**Події ущільнення**: `session:compact:before` включає `messageCount`, `tokenCount`. `session:compact:after` додає `compactedCount`, `summaryLength`, `tokensBefore`, `tokensAfter`.
## Виявлення хуків
Хуки виявляються в таких каталогах у порядку зростання пріоритету перевизначення:
Хуки виявляються з таких каталогів у порядку зростання пріоритету перевизначення:
1. **Вбудовані хуки**: постачаються з OpenClaw
2. **Plugin-хуки**: хуки, вбудовані у встановлені plugins
3. **Керовані хуки**: `~/.openclaw/hooks/` (встановлені користувачем, спільні для всіх робочих тек). Додаткові каталоги з `hooks.internal.load.extraDirs` мають той самий пріоритет.
4. **Хуки робочої теки**: `<workspace>/hooks/` (для кожного агента окремо, типово вимкнені, доки їх явно не ввімкнути)
1. **Вбудовані хуки**: постачаються разом з OpenClaw
2. **Хуки плагінів**: хуки, вбудовані у встановлені плагіни
3. **Керовані хуки**: `~/.openclaw/hooks/` (встановлені користувачем, спільні для всіх workspace). Додаткові каталоги з `hooks.internal.load.extraDirs` мають той самий пріоритет.
4. **Хуки workspace**: `<workspace>/hooks/` (для окремого агента, типово вимкнені, доки їх явно не увімкнути)
Хуки робочої теки можуть додавати нові назви хуків, але не можуть перевизначати вбудовані, керовані або надані plugin хуки з тією самою назвою.
Хуки workspace можуть додавати нові назви хуків, але не можуть перевизначати вбудовані, керовані або надані плагінами хуки з тією ж назвою.
### Пакети хуків
### Набори хуків
Пакети хуків — це npm-пакети, які експортують хуки через `openclaw.hooks` у `package.json`. Встановлення:
Набори хуків — це npm-пакети, які експортують хуки через `openclaw.hooks` у `package.json`. Встановлення:
```bash
openclaw plugins install <path-or-spec>
```
Npm-специфікації підтримують лише реєстр (назва пакета + необовʼязкова точна версія або dist-tag). Специфікації Git/URL/file і діапазони semver відхиляються.
Npm-специфікації підтримують лише реєстр (назва пакета + необовязкова точна версія або dist-tag). Специфікації Git/URL/file і діапазони semver відхиляються.
## Вбудовані хуки
| Хук | Події | Що робить |
| Хук | Події | Що він робить |
| --------------------- | ------------------------------ | ----------------------------------------------------- |
| session-memory | `command:new`, `command:reset` | Зберігає контекст сесії в `<workspace>/memory/` |
| bootstrap-extra-files | `agent:bootstrap` | Інʼєктує додаткові bootstrap-файли за glob-шаблонами |
| bootstrap-extra-files | `agent:bootstrap` | Вставляє додаткові bootstrap-файли з glob-шаблонів |
| command-logger | `command` | Логує всі команди в `~/.openclaw/logs/commands.log` |
| boot-md | `gateway:startup` | Запускає `BOOT.md` під час старту gateway |
| boot-md | `gateway:startup` | Запускає `BOOT.md`, коли запускається gateway |
Увімкнення будь-якого вбудованого хука:
Увімкнути будь-який вбудований хук:
```bash
openclaw hooks enable <hook-name>
```
<a id="session-memory"></a>
### Докладніше про session-memory
Витягує останні 15 повідомлень користувача/асистента, генерує описовий slug імені файлу через LLM і зберігає в `<workspace>/memory/YYYY-MM-DD-slug.md`. Потрібно, щоб `workspace.dir` було налаштовано.
Витягує останні 15 повідомлень користувача/асистента, генерує описовий slug імені файлу через LLM і зберігає його в `<workspace>/memory/YYYY-MM-DD-slug.md`. Потрібно, щоб було налаштовано `workspace.dir`.
<a id="bootstrap-extra-files"></a>
### Конфігурація bootstrap-extra-files
@ -192,13 +196,25 @@ openclaw hooks enable <hook-name>
}
```
Шляхи обчислюються відносно робочої теки. Завантажуються лише розпізнавані базові назви bootstrap-файлів (`AGENTS.md`, `SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`, `BOOTSTRAP.md`, `MEMORY.md`).
Шляхи обчислюються відносно workspace. Завантажуються лише розпізнані базові назви bootstrap-файлів (`AGENTS.md`, `SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`, `BOOTSTRAP.md`, `MEMORY.md`).
## Plugin-хуки
<a id="command-logger"></a>
Plugins можуть реєструвати хуки через Plugin SDK для глибшої інтеграції: перехоплення викликів інструментів, зміни промптів, керування потоком повідомлень тощо. Plugin SDK надає 28 хуків, що охоплюють визначення моделі, життєвий цикл агента, потік повідомлень, виконання інструментів, координацію субагентів і життєвий цикл gateway.
### Докладніше про command-logger
Повний довідник з plugin-хуків, включно з `before_tool_call`, `before_agent_reply`, `before_install` та всіма іншими plugin-хуками, див. у [Архітектура plugins](/plugins/architecture#provider-runtime-hooks).
Логує кожну slash-команду в `~/.openclaw/logs/commands.log`.
<a id="boot-md"></a>
### Докладніше про boot-md
Запускає `BOOT.md` з активного workspace під час запуску gateway.
## Хуки плагінів
Плагіни можуть реєструвати хуки через Plugin SDK для глибшої інтеграції: перехоплення викликів інструментів, зміни промптів, керування потоком повідомлень тощо. Plugin SDK надає 28 хуків, що охоплюють визначення моделі, життєвий цикл агента, потік повідомлень, виконання інструментів, координацію субагентів і життєвий цикл gateway.
Повний довідник із хуків плагінів, включно з `before_tool_call`, `before_agent_reply`, `before_install` та всіма іншими хуками плагінів, див. у [Архітектура плагінів](/uk/plugins/architecture#provider-runtime-hooks).
## Конфігурація
@ -254,37 +270,37 @@ Plugins можуть реєструвати хуки через Plugin SDK дл
## Довідка CLI
```bash
# List all hooks (add --eligible, --verbose, or --json)
# Список усіх хуків (додайте --eligible, --verbose або --json)
openclaw hooks list
# Show detailed info about a hook
# Показати докладну інформацію про хук
openclaw hooks info <hook-name>
# Show eligibility summary
# Показати зведення про відповідність
openclaw hooks check
# Enable/disable
# Увімкнути/вимкнути
openclaw hooks enable <hook-name>
openclaw hooks disable <hook-name>
```
## Рекомендовані практики
- **Зберігайте обробники швидкими.** Хуки запускаються під час обробки команд. Для важкої роботи використовуйте fire-and-forget через `void processInBackground(event)`.
- **Робіть обробники швидкими.** Хуки запускаються під час обробки команд. Для важких задач використовуйте fire-and-forget через `void processInBackground(event)`.
- **Коректно обробляйте помилки.** Обгортайте ризиковані операції в try/catch; не викидайте винятки, щоб інші обробники могли виконатися.
- **Рано фільтруйте події.** Одразу повертайтеся, якщо тип/дія події не є релевантними.
- **Використовуйте конкретні ключі подій.** Віддавайте перевагу `"events": ["command:new"]` замість `"events": ["command"]`, щоб зменшити накладні витрати.
- **Використовуйте конкретні ключі подій.** Надавайте перевагу `"events": ["command:new"]` замість `"events": ["command"]`, щоб зменшити накладні витрати.
## Усунення несправностей
## Усунення неполадок
### Хук не виявляється
### Хук не виявлено
```bash
# Verify directory structure
# Перевірте структуру каталогу
ls -la ~/.openclaw/hooks/my-hook/
# Should show: HOOK.md, handler.ts
# Має показати: HOOK.md, handler.ts
# List all discovered hooks
# Список усіх виявлених хуків
openclaw hooks list
```
@ -294,7 +310,7 @@ openclaw hooks list
openclaw hooks info my-hook
```
Перевірте, чи не бракує бінарних файлів (PATH), змінних середовища, значень конфігурації або сумісності з ОС.
Перевірте відсутні бінарні файли (PATH), змінні середовища, значення конфігурації або сумісність з ОС.
### Хук не виконується
@ -302,9 +318,9 @@ openclaw hooks info my-hook
2. Перезапустіть процес gateway, щоб хуки перезавантажилися.
3. Перевірте логи gateway: `./scripts/clawlog.sh | grep hook`
## Повʼязане
## Повязане
- [Довідка CLI: hooks](/cli/hooks)
- [Вебхуки](/automation/cron-jobs#webhooks)
- [Архітектура plugins](/plugins/architecture#provider-runtime-hooks) — повний довідник з plugin-хуків
- [Конфігурація](/gateway/configuration-reference#hooks)
- [Вебхуки](/uk/automation/cron-jobs#webhooks)
- [Архітектура плагінів](/uk/plugins/architecture#provider-runtime-hooks) — повний довідник із хуків плагінів
- [Конфігурація](/uk/gateway/configuration-reference#hooks)

View File

@ -1,15 +1,15 @@
---
read_when:
- Перше налаштування OpenClaw
- Пошук поширених шаблонів конфігурації
- Перехід до конкретних розділів конфігурації
- Шукаєте поширені шаблони конфігурації
- Перехід до певних розділів конфігурації
summary: 'Огляд конфігурації: поширені завдання, швидке налаштування та посилання на повний довідник'
title: Конфігурація
x-i18n:
generated_at: "2026-04-08T05:15:04Z"
generated_at: "2026-04-10T20:41:24Z"
model: gpt-5.4
provider: openai
source_hash: 199a1e515bd4003319e71593a2659bb883299a76ff67e273d92583df03c96604
source_hash: e874be80d11b9123cac6ce597ec02667fbc798f622a076f68535a1af1f0e399c
source_path: gateway/configuration.md
workflow: 15
---
@ -22,12 +22,12 @@ OpenClaw читає необов’язкову конфігурацію <Toolti
- Підключити канали та визначити, хто може надсилати повідомлення боту
- Налаштувати моделі, інструменти, ізоляцію або автоматизацію (cron, hooks)
- Налаштувати сесії, медіа, мережу або UI
- Тонко налаштувати сесії, медіа, мережу або UI
Див. [повний довідник](/uk/gateway/configuration-reference) для всіх доступних полів.
Перегляньте [повний довідник](/uk/gateway/configuration-reference), щоб побачити всі доступні поля.
<Tip>
**Новачок у конфігурації?** Почніть із `openclaw onboard` для інтерактивного налаштування або перегляньте посібник [Приклади конфігурації](/uk/gateway/configuration-examples) із готовими повними конфігураціями для копіювання.
**Вперше працюєте з конфігурацією?** Почніть з `openclaw onboard` для інтерактивного налаштування або перегляньте посібник [Приклади конфігурації](/uk/gateway/configuration-examples) для готових конфігурацій, які можна повністю скопіювати й вставити.
</Tip>
## Мінімальна конфігурація
@ -58,43 +58,43 @@ OpenClaw читає необов’язкову конфігурацію <Toolti
</Tab>
<Tab title="Control UI">
Відкрийте [http://127.0.0.1:18789](http://127.0.0.1:18789) і використовуйте вкладку **Config**.
Control UI відображає форму на основі актуальної схеми конфігурації, зокрема метадані документації полів
`title` / `description`, а також схеми plugins і каналів, коли вони
доступні, із редактором **Raw JSON** як запасним варіантом. Для деталізованих
UI та інших інструментів gateway також надає `config.schema.lookup`, щоб
отримати один вузол схеми, обмежений шляхом, разом із короткими зведеннями безпосередніх дочірніх елементів.
Control UI відображає форму на основі актуальної схеми конфігурації, включно з
метаданими документації полів `title` / `description`, а також схемами плагінів і каналів,
якщо вони доступні, з редактором **Raw JSON** як запасним варіантом. Для
UI із поглибленою навігацією та інших інструментів gateway також надає `config.schema.lookup`,
щоб отримати один вузол схеми, обмежений шляхом, а також зведення для його безпосередніх дочірніх елементів.
</Tab>
<Tab title="Пряме редагування">
Відредагуйте `~/.openclaw/openclaw.json` напряму. Gateway стежить за файлом і автоматично застосовує зміни (див. [гаряче перезавантаження](#config-hot-reload)).
Відредагуйте `~/.openclaw/openclaw.json` безпосередньо. Gateway стежить за файлом і автоматично застосовує зміни (див. [гаряче перезавантаження](#config-hot-reload)).
</Tab>
</Tabs>
## Сувора валідація
<Warning>
OpenClaw приймає лише конфігурації, які повністю відповідають схемі. Невідомі ключі, некоректні типи або недійсні значення призводять до того, що Gateway **відмовляється запускатися**. Єдиний виняток на рівні кореня — `$schema` (рядок), щоб редактори могли додавати метадані JSON Schema.
OpenClaw приймає лише конфігурації, які повністю відповідають схемі. Невідомі ключі, неправильні типи або недійсні значення призводять до того, що Gateway **відмовляється запускатися**. Єдиний виняток на рівні кореня — `$schema` (рядок), щоб редактори могли додавати метадані JSON Schema.
</Warning>
Примітки щодо інструментів схеми:
Примітки щодо інструментів схем:
- `openclaw config schema` виводить ту саму сім’ю JSON Schema, яку використовують Control UI
- `openclaw config schema` виводить ту саму родину JSON Schema, яку використовують Control UI
і валідація конфігурації.
- Вважайте цей вивід схеми канонічним машинозчитуваним контрактом для
`openclaw.json`; цей огляд і довідник конфігурації її узагальнюють.
- Сприймайте цей вивід схеми як канонічний машиночитний контракт для
`openclaw.json`; цей огляд і довідник конфігурації узагальнюють його.
- Значення полів `title` і `description` переносяться у вивід схеми для
редакторів і формових інструментів.
- Вкладені об’єкти, записи з шаблоном (`*`) і елементи масивів (`[]`) успадковують ті самі
метадані документації там, де існує відповідна документація поля.
- Гілки композицій `anyOf` / `oneOf` / `allOf` також успадковують ті самі
метадані документації, тож варіанти union/intersection зберігають ту саму довідку для поля.
- `config.schema.lookup` повертає один нормалізований шлях конфігурації з неглибоким
вузлом схеми (`title`, `description`, `type`, `enum`, `const`, поширені межі
та подібні поля валідації), відповідними метаданими UI-підказок і короткими зведеннями безпосередніх дочірніх
елементів для інструментів деталізації.
- Схеми plugins/каналів під час виконання додаються через злиття, коли gateway може завантажити
редакторів та інструментів форм.
- Вкладені об’єкти, записи з шаблоном (`*`) і елементи масиву (`[]`) успадковують ті самі
метадані документації там, де існує відповідна документація для полів.
- Гілки композиції `anyOf` / `oneOf` / `allOf` також успадковують ті самі
метадані документації, тож варіанти union/intersection зберігають ту саму довідку для полів.
- `config.schema.lookup` повертає один нормалізований шлях конфігурації з поверхневим
вузлом схеми (`title`, `description`, `type`, `enum`, `const`, поширені обмеження
та подібні поля валідації), відповідними метаданими підказок UI і зведеннями
для безпосередніх дочірніх елементів для інструментів із поглибленою навігацією.
- Схеми плагінів/каналів під час виконання об’єднуються, коли gateway може завантажити
поточний реєстр маніфестів.
- `pnpm config:docs:check` виявляє розходження між артефактами базової конфігурації, орієнтованими на документацію,
і поточною поверхнею схеми.
- `pnpm config:docs:check` виявляє розбіжності між артефактами базової конфігурації для документації
та поточною поверхнею схеми.
Коли валідація не проходить:
@ -107,7 +107,7 @@ OpenClaw приймає лише конфігурації, які повніст
<AccordionGroup>
<Accordion title="Налаштувати канал (WhatsApp, Telegram, Discord тощо)">
Кожен канал має власний розділ конфігурації в `channels.<provider>`. Див. окрему сторінку каналу для кроків налаштування:
Кожен канал має власний розділ конфігурації в `channels.<provider>`. Перегляньте окрему сторінку каналу для кроків налаштування:
- [WhatsApp](/uk/channels/whatsapp) — `channels.whatsapp`
- [Telegram](/uk/channels/telegram) — `channels.telegram`
@ -129,7 +129,7 @@ OpenClaw приймає лише конфігурації, які повніст
enabled: true,
botToken: "123:abc",
dmPolicy: "pairing", // pairing | allowlist | open | disabled
allowFrom: ["tg:123"], // лише для allowlist/open
allowFrom: ["tg:123"], // only for allowlist/open
},
},
}
@ -138,7 +138,7 @@ OpenClaw приймає лише конфігурації, які повніст
</Accordion>
<Accordion title="Вибрати й налаштувати моделі">
Налаштуйте основну модель і необов’язкові резервні:
Вкажіть основну модель і необов’язкові резервні варіанти:
```json5
{
@ -157,30 +157,30 @@ OpenClaw приймає лише конфігурації, які повніст
}
```
- `agents.defaults.models` визначає каталог моделей і діє як allowlist для `/model`.
- `agents.defaults.models` визначає каталог моделей і слугує allowlist для `/model`.
- Посилання на моделі використовують формат `provider/model` (наприклад, `anthropic/claude-opus-4-6`).
- `agents.defaults.imageMaxDimensionPx` керує зменшенням розміру зображень у стенограмах/інструментах (типове значення `1200`); нижчі значення зазвичай зменшують використання vision-token у сесіях із великою кількістю знімків екрана.
- Див. [Models CLI](/uk/concepts/models) для перемикання моделей у чаті та [Model Failover](/uk/concepts/model-failover) для ротації автентифікації й поведінки резервного перемикання.
- Для користувацьких/self-hosted providers див. [Custom providers](/uk/gateway/configuration-reference#custom-providers-and-base-urls) у довіднику.
- `agents.defaults.imageMaxDimensionPx` керує зменшенням розміру зображень у транскриптах/інструментах (типове значення `1200`); менші значення зазвичай зменшують використання vision-токенів у сценаріях із великою кількістю скриншотів.
- Див. [Models CLI](/uk/concepts/models), щоб перемикати моделі в чаті, і [Model Failover](/uk/concepts/model-failover) щодо ротації автентифікації та поведінки резервних варіантів.
- Для власних/self-hosted провайдерів див. [Custom providers](/uk/gateway/configuration-reference#custom-providers-and-base-urls) у довіднику.
</Accordion>
<Accordion title="Керувати тим, хто може надсилати повідомлення боту">
Доступ до DM керується окремо для кожного каналу через `dmPolicy`:
Доступ до DM налаштовується окремо для кожного каналу через `dmPolicy`:
- `"pairing"` (типово): невідомі відправники отримують одноразовий код pairing для підтвердження
- `"allowlist"`: лише відправники з `allowFrom` (або зі сховища paired allow)
- `"open"`: дозволити всі вхідні DM (потрібно `allowFrom: ["*"]`)
- `"disabled"`: ігнорувати всі DM
Для груп використовуйте `groupPolicy` + `groupAllowFrom` або allowlists, специфічні для каналу.
Для груп використовуйте `groupPolicy` + `groupAllowFrom` або allowlist, специфічні для каналу.
Див. [повний довідник](/uk/gateway/configuration-reference#dm-and-group-access) для деталей по кожному каналу.
Перегляньте [повний довідник](/uk/gateway/configuration-reference#dm-and-group-access) для подробиць по кожному каналу.
</Accordion>
<Accordion title="Налаштувати gating згадувань у групових чатах">
Для групових повідомлень типово **потрібна згадка**. Налаштуйте шаблони для кожного агента:
<Accordion title="Налаштувати gating згадок у групових чатах">
Для повідомлень у групах типово **потрібна згадка**. Налаштуйте шаблони для кожного агента:
```json5
{
@ -202,15 +202,15 @@ OpenClaw приймає лише конфігурації, які повніст
}
```
- **Metadata mentions**: нативні @-згадування (WhatsApp tap-to-mention, Telegram @bot тощо)
- **Text patterns**: безпечні regex-шаблони в `mentionPatterns`
- **Згадки в метаданих**: нативні @-згадки (WhatsApp tap-to-mention, Telegram @bot тощо)
- **Текстові шаблони**: безпечні regex-шаблони в `mentionPatterns`
- Див. [повний довідник](/uk/gateway/configuration-reference#group-chat-mention-gating) для перевизначень по каналах і режиму self-chat.
</Accordion>
<Accordion title="Обмежити Skills для кожного агента">
Використовуйте `agents.defaults.skills` для спільної базової конфігурації, а потім перевизначайте конкретних
агентів через `agents.list[].skills`:
Використовуйте `agents.defaults.skills` для спільного базового набору, а потім перевизначайте
окремих агентів через `agents.list[].skills`:
```json5
{
@ -219,24 +219,24 @@ OpenClaw приймає лише конфігурації, які повніст
skills: ["github", "weather"],
},
list: [
{ id: "writer" }, // успадковує github, weather
{ id: "docs", skills: ["docs-search"] }, // замінює значення за замовчуванням
{ id: "locked-down", skills: [] }, // без Skills
{ id: "writer" }, // inherits github, weather
{ id: "docs", skills: ["docs-search"] }, // replaces defaults
{ id: "locked-down", skills: [] }, // no skills
],
},
}
```
- Не вказуйте `agents.defaults.skills`, якщо типово Skills мають бути без обмежень.
- Не вказуйте `agents.defaults.skills`, якщо типово Skills не мають бути обмежені.
- Не вказуйте `agents.list[].skills`, щоб успадкувати значення за замовчуванням.
- Встановіть `agents.list[].skills: []`, щоб не було жодних Skills.
- Укажіть `agents.list[].skills: []`, якщо Skills не потрібні.
- Див. [Skills](/uk/tools/skills), [конфігурація Skills](/uk/tools/skills-config) і
[Довідник конфігурації](/uk/gateway/configuration-reference#agentsdefaultsskills).
[Довідник конфігурації](/uk/gateway/configuration-reference#agents-defaults-skills).
</Accordion>
<Accordion title="Налаштувати моніторинг стану каналів gateway">
Керуйте тим, наскільки агресивно gateway перезапускає канали, які виглядають застарілими:
Керуйте тим, наскільки агресивно gateway перезапускає канали, які виглядають неактивними:
```json5
{
@ -258,20 +258,20 @@ OpenClaw приймає лише конфігурації, які повніст
}
```
- Встановіть `gateway.channelHealthCheckMinutes: 0`, щоб глобально вимкнути перезапуски health-monitor.
- Установіть `gateway.channelHealthCheckMinutes: 0`, щоб глобально вимкнути перезапуски health-monitor.
- `channelStaleEventThresholdMinutes` має бути більшим або дорівнювати інтервалу перевірки.
- Використовуйте `channels.<provider>.healthMonitor.enabled` або `channels.<provider>.accounts.<id>.healthMonitor.enabled`, щоб вимкнути автоперезапуски для одного каналу чи облікового запису без вимкнення глобального монітора.
- Див. [Health Checks](/uk/gateway/health) для операційного налагодження та [повний довідник](/uk/gateway/configuration-reference#gateway) для всіх полів.
- Використовуйте `channels.<provider>.healthMonitor.enabled` або `channels.<provider>.accounts.<id>.healthMonitor.enabled`, щоб вимкнути автоматичні перезапуски для одного каналу або облікового запису без вимкнення глобального монітора.
- Див. [Health Checks](/uk/gateway/health) для операційного налагодження і [повний довідник](/uk/gateway/configuration-reference#gateway) для всіх полів.
</Accordion>
<Accordion title="Налаштувати сесії та скидання">
Сесії керують безперервністю та ізоляцією розмов:
Сесії керують безперервністю розмов і ізоляцією:
```json5
{
session: {
dmScope: "per-channel-peer", // рекомендовано для багатьох користувачів
dmScope: "per-channel-peer", // recommended for multi-user
threadBindings: {
enabled: true,
idleHours: 24,
@ -287,14 +287,14 @@ OpenClaw приймає лише конфігурації, які повніст
```
- `dmScope`: `main` (спільна) | `per-peer` | `per-channel-peer` | `per-account-channel-peer`
- `threadBindings`: глобальні значення за замовчуванням для маршрутизації сесій, прив’язаних до гілок (Discord підтримує `/focus`, `/unfocus`, `/agents`, `/session idle` і `/session max-age`).
- Див. [Керування сесіями](/uk/concepts/session) для області дії, зв’язків ідентичностей і політики надсилання.
- `threadBindings`: глобальні значення за замовчуванням для маршрутизації сесій, прив’язаних до потоків (Discord підтримує `/focus`, `/unfocus`, `/agents`, `/session idle` і `/session max-age`).
- Див. [Керування сесіями](/uk/concepts/session) щодо області видимості, зв’язків ідентичностей і політики надсилання.
- Див. [повний довідник](/uk/gateway/configuration-reference#session) для всіх полів.
</Accordion>
<Accordion title="Увімкнути ізоляцію">
Запускайте сесії агентів в ізольованих контейнерах Docker:
Запускайте сесії агентів в ізольованих Docker-контейнерах:
```json5
{
@ -311,14 +311,14 @@ OpenClaw приймає лише конфігурації, які повніст
Спочатку зберіть образ: `scripts/sandbox-setup.sh`
Див. [Sandboxing](/uk/gateway/sandboxing) для повного посібника та [повний довідник](/uk/gateway/configuration-reference#agentsdefaultssandbox) для всіх параметрів.
Див. [Ізоляція](/uk/gateway/sandboxing) для повного посібника і [повний довідник](/uk/gateway/configuration-reference#agentsdefaultssandbox) для всіх параметрів.
</Accordion>
<Accordion title="Увімкнути push через relay для офіційних збірок iOS">
Push через relay налаштовується в `openclaw.json`.
Додайте це до конфігурації gateway:
Укажіть це в конфігурації gateway:
```json5
{
@ -327,7 +327,7 @@ OpenClaw приймає лише конфігурації, які повніст
apns: {
relay: {
baseUrl: "https://relay.example.com",
// Необов’язково. Типове значення: 10000
// Optional. Default: 10000
timeoutMs: 10000,
},
},
@ -344,35 +344,35 @@ OpenClaw приймає лише конфігурації, які повніст
Що це робить:
- Дозволяє gateway надсилати `push.test`, сигнали пробудження та пробудження для повторного підключення через зовнішній relay.
- Використовує право надсилання, прив’язане до реєстрації, яке пересилає paired iOS app. Gateway не потребує relay-токена рівня всього розгортання.
- Прив’язує кожну реєстрацію через relay до ідентичності gateway, з якою було paired iOS app, тому інший gateway не може повторно використати збережену реєстрацію.
- Залишає локальні/ручні збірки iOS на прямому APNs. Надсилання через relay застосовується лише до офіційних розповсюджуваних збірок, що зареєструвалися через relay.
- Має збігатися з базовим URL relay, вбудованим в офіційну/TestFlight збірку iOS, щоб трафік реєстрації та надсилання потрапляв до одного й того самого розгортання relay.
- Дозволяє gateway надсилати `push.test`, сигнали пробудження та сигнали повторного підключення через зовнішній relay.
- Використовує дозвіл на надсилання в межах реєстрації, який пересилає спарений застосунок iOS. Gateway не потрібен токен relay для всього розгортання.
- Прив’язує кожну реєстрацію через relay до ідентичності gateway, з якою було спарено застосунок iOS, тож інший gateway не може повторно використати збережену реєстрацію.
- Зберігає локальні/ручні збірки iOS на прямому APNs. Надсилання через relay застосовується лише до офіційних поширюваних збірок, які зареєструвалися через relay.
- Має збігатися з базовим URL relay, вбудованим в офіційну/TestFlight збірку iOS, щоб трафік реєстрації та надсилання потрапляв до того самого розгортання relay.
Повний потік роботи:
Повний потік:
1. Встановіть офіційну/TestFlight збірку iOS, скомпільовану з тим самим базовим URL relay.
1. Установіть офіційну/TestFlight збірку iOS, скомпільовану з тим самим базовим URL relay.
2. Налаштуйте `gateway.push.apns.relay.baseUrl` на gateway.
3. Виконайте pairing iOS app із gateway і дочекайтеся підключення сесій вузла й оператора.
4. iOS app отримує ідентичність gateway, реєструється в relay за допомогою App Attest і квитанції app, а потім публікує payload `push.apns.register` через relay до paired gateway.
5. Gateway зберігає relay handle і право надсилання, а потім використовує їх для `push.test`, сигналів пробудження й пробуджень повторного підключення.
3. Спарте застосунок iOS із gateway і дайте підключитися сесіям вузла та оператора.
4. Застосунок iOS отримує ідентичність gateway, реєструється в relay за допомогою App Attest і квитанції застосунку, а потім публікує payload `push.apns.register` через relay на спарений gateway.
5. Gateway зберігає дескриптор relay і дозвіл на надсилання, а потім використовує їх для `push.test`, сигналів пробудження та сигналів повторного підключення.
Операційні примітки:
- Якщо ви перемикаєте iOS app на інший gateway, перепідключіть app, щоб воно могло опублікувати нову реєстрацію relay, прив’язану до цього gateway.
- Якщо ви випускаєте нову збірку iOS, що вказує на інше розгортання relay, app оновлює кешовану реєстрацію relay замість повторного використання старого походження relay.
- Якщо ви перемикаєте застосунок iOS на інший gateway, перепідключіть застосунок, щоб він міг опублікувати нову реєстрацію relay, прив’язану до цього gateway.
- Якщо ви випускаєте нову збірку iOS, яка вказує на інше розгортання relay, застосунок оновлює кешовану реєстрацію relay замість повторного використання старого джерела relay.
Примітка щодо сумісності:
- `OPENCLAW_APNS_RELAY_BASE_URL` і `OPENCLAW_APNS_RELAY_TIMEOUT_MS` усе ще працюють як тимчасові env-перевизначення.
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` залишається лише для loopback як шлях обходу в середовищі розробки; не зберігайте HTTP URL relay у конфігурації.
- `OPENCLAW_APNS_RELAY_BASE_URL` і `OPENCLAW_APNS_RELAY_TIMEOUT_MS` усе ще працюють як тимчасові перевизначення через env.
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` залишається варіантом обходу лише для розробки на loopback; не зберігайте HTTP URL relay у конфігурації.
Див. [iOS App](/uk/platforms/ios#relay-backed-push-for-official-builds) для повного потоку й [Authentication and trust flow](/uk/platforms/ios#authentication-and-trust-flow) для моделі безпеки relay.
Див. [iOS App](/uk/platforms/ios#relay-backed-push-for-official-builds) для повного потоку та [Authentication and trust flow](/uk/platforms/ios#authentication-and-trust-flow) для моделі безпеки relay.
</Accordion>
<Accordion title="Налаштувати heartbeat (періодичні перевірки)">
<Accordion title="Налаштувати heartbeat (періодичні перевірки зв’язку)">
```json5
{
agents: {
@ -386,9 +386,9 @@ OpenClaw приймає лише конфігурації, які повніст
}
```
- `every`: рядок тривалості (`30m`, `2h`). Встановіть `0m`, щоб вимкнути.
- `every`: рядок тривалості (`30m`, `2h`). Установіть `0m`, щоб вимкнути.
- `target`: `last` | `none` | `<channel-id>` (наприклад, `discord`, `matrix`, `telegram` або `whatsapp`)
- `directPolicy`: `allow` (типово) або `block` для heartbeat-цілей у стилі DM
- `directPolicy`: `allow` (типово) або `block` для цілей heartbeat у стилі DM
- Див. [Heartbeat](/uk/gateway/heartbeat) для повного посібника.
</Accordion>
@ -408,14 +408,14 @@ OpenClaw приймає лише конфігурації, які повніст
}
```
- `sessionRetention`: очищати завершені ізольовані сесії запуску з `sessions.json` (типове значення `24h`; встановіть `false`, щоб вимкнути).
- `runLog`: очищати `cron/runs/<jobId>.jsonl` за розміром і кількістю збережених рядків.
- Див. [Cron jobs](/uk/automation/cron-jobs) для огляду функції та прикладів CLI.
- `sessionRetention`: видаляти завершені ізольовані сесії запусків із `sessions.json` (типово `24h`; установіть `false`, щоб вимкнути).
- `runLog`: обрізати `cron/runs/<jobId>.jsonl` за розміром і кількістю збережених рядків.
- Див. [Cron jobs](/uk/automation/cron-jobs) для огляду можливостей і прикладів CLI.
</Accordion>
<Accordion title="Налаштувати webhooks (hooks)">
Увімкніть HTTP webhook endpoints на Gateway:
<Accordion title="Налаштувати webhook (hooks)">
Увімкніть кінцеві точки HTTP webhook на Gateway:
```json5
{
@ -439,20 +439,20 @@ OpenClaw приймає лише конфігурації, які повніст
```
Примітка щодо безпеки:
- Вважайте весь вміст payload hook/webhook недовіреним введенням.
- Сприймайте весь вміст payload hook/webhook як недовірений ввід.
- Використовуйте окремий `hooks.token`; не використовуйте повторно спільний токен Gateway.
- Автентифікація hooks працює лише через заголовки (`Authorization: Bearer ...` або `x-openclaw-token`); токени в рядку запиту відхиляються.
- `hooks.path` не може бути `/`; залишайте webhook ingress на окремому підшляху, наприклад `/hooks`.
- Тримайте прапори обходу небезпечного вмісту вимкненими (`hooks.gmail.allowUnsafeExternalContent`, `hooks.mappings[].allowUnsafeExternalContent`), якщо не виконуєте строго обмежене налагодження.
- Якщо ви вмикаєте `hooks.allowRequestSessionKey`, також задайте `hooks.allowedSessionKeyPrefixes`, щоб обмежити ключі сесій, які вибирає викликач.
- Для агентів, керованих hooks, надавайте перевагу потужним сучасним рівням моделей і суворій політиці інструментів (наприклад, лише обмін повідомленнями плюс ізоляція, де це можливо).
- Автентифікація hook виконується лише через заголовки (`Authorization: Bearer ...` або `x-openclaw-token`); токени в рядку запиту відхиляються.
- `hooks.path` не може бути `/`; використовуйте для webhook ingress окремий підшлях, наприклад `/hooks`.
- Залишайте прапорці обходу небезпечного вмісту вимкненими (`hooks.gmail.allowUnsafeExternalContent`, `hooks.mappings[].allowUnsafeExternalContent`), якщо не виконуєте вузькоспрямоване налагодження.
- Якщо ви вмикаєте `hooks.allowRequestSessionKey`, також установіть `hooks.allowedSessionKeyPrefixes`, щоб обмежити ключі сесій, які можуть обирати викликачі.
- Для агентів, керованих hook, надавайте перевагу потужним сучасним рівням моделей і суворій політиці інструментів (наприклад, лише обмін повідомленнями плюс ізоляція там, де це можливо).
Див. [повний довідник](/uk/gateway/configuration-reference#hooks) для всіх параметрів mappings і інтеграції Gmail.
</Accordion>
<Accordion title="Налаштувати маршрутизацію multi-agent">
Запускайте кількох ізольованих агентів з окремими workspace і сесіями:
<Accordion title="Налаштувати маршрутизацію з кількома агентами">
Запускайте кілька ізольованих агентів з окремими робочими просторами й сесіями:
```json5
{
@ -474,7 +474,7 @@ OpenClaw приймає лише конфігурації, які повніст
</Accordion>
<Accordion title="Розділити конфігурацію на кілька файлів ($include)">
Використовуйте `$include`, щоб упорядкувати великі конфігурації:
Використовуйте `$include` для впорядкування великих конфігурацій:
```json5
// ~/.openclaw/openclaw.json
@ -487,28 +487,28 @@ OpenClaw приймає лише конфігурації, які повніст
}
```
- **Один файл**: замінює об’єкт, у якому міститься
- **Масив файлів**: deep-merge у вказаному порядку (пізніші мають пріоритет)
- **Сусідні ключі**: зливаються після include’ів (перевизначають включені значення)
- **Вкладені include’и**: підтримуються до 10 рівнів вкладеності
- **Відносні шляхи**: обчислюються відносно файла, який виконує включення
- **Обробка помилок**: зрозумілі помилки для відсутніх файлів, помилок парсингу й циклічних include’ів
- **Окремий файл**: замінює об’єкт, у якому міститься
- **Масив файлів**: об’єднується глибоким злиттям у вказаному порядку (пізніші мають пріоритет)
- **Сусідні ключі**: зливаються після includes (перевизначають включені значення)
- **Вкладені includes**: підтримуються до 10 рівнів вкладеності
- **Відносні шляхи**: обчислюються відносно файла, що включає
- **Обробка помилок**: зрозумілі помилки для відсутніх файлів, помилок парсингу й циклічних includes
</Accordion>
</AccordionGroup>
## Гаряче перезавантаження конфігурації
Gateway стежить за `~/.openclaw/openclaw.json` і застосовує зміни автоматично — для більшості налаштувань ручний перезапуск не потрібен.
Gateway стежить за `~/.openclaw/openclaw.json` і автоматично застосовує зміни — для більшості налаштувань ручний перезапуск не потрібен.
### Режими перезавантаження
| Режим | Поведінка |
| ---------------------- | -------------------------------------------------------------------------------------- |
| **`hybrid`** (типово) | Безпечно застосовує зміни одразу. Автоматично перезапускається для критичних змін. |
| **`hot`** | Лише безпечно застосовує зміни. Записує попередження, коли потрібен перезапуск — ви обробляєте це самі. |
| Режим | Поведінка |
| ---------------------- | --------------------------------------------------------------------------------------- |
| **`hybrid`** (типово) | Миттєво гаряче застосовує безпечні зміни. Для критичних змін автоматично перезапускається. |
| **`hot`** | Гаряче застосовує лише безпечні зміни. Коли потрібен перезапуск, записує попередження в журнал — ви обробляєте це самі. |
| **`restart`** | Перезапускає Gateway після будь-якої зміни конфігурації, безпечної чи ні. |
| **`off`** | Вимикає стеження за файлом. Зміни набирають чинності після наступного ручного перезапуску. |
| **`off`** | Вимикає стеження за файлом. Зміни набудуть чинності під час наступного ручного перезапуску. |
```json5
{
@ -520,37 +520,37 @@ Gateway стежить за `~/.openclaw/openclaw.json` і застосовує
### Що застосовується гаряче, а що потребує перезапуску
Більшість полів застосовуються гаряче без простою. У режимі `hybrid` зміни, які потребують перезапуску, обробляються автоматично.
Більшість полів гаряче застосовуються без простою. У режимі `hybrid` зміни, що потребують перезапуску, обробляються автоматично.
| Категорія | Поля | Потрібен перезапуск? |
| ----------------- | -------------------------------------------------------------------- | -------------------- |
| Канали | `channels.*`, `web` (WhatsApp) — усі вбудовані й extension канали | Ні |
| Агент і моделі | `agent`, `agents`, `models`, `routing` | Ні |
| Автоматизація | `hooks`, `cron`, `agent.heartbeat` | Ні |
| Сесії й повідомлення | `session`, `messages` | Ні |
| Інструменти й медіа | `tools`, `browser`, `skills`, `audio`, `talk` | Ні |
| UI та інше | `ui`, `logging`, `identity`, `bindings` | Ні |
| Сервер gateway | `gateway.*` (port, bind, auth, tailscale, TLS, HTTP) | **Так** |
| Інфраструктура | `discovery`, `canvasHost`, `plugins` | **Так** |
| Категорія | Поля | Потрібен перезапуск? |
| ------------------- | -------------------------------------------------------------------- | -------------------- |
| Канали | `channels.*`, `web` (WhatsApp) — усі вбудовані й розширювані канали | Ні |
| Агент і моделі | `agent`, `agents`, `models`, `routing` | Ні |
| Автоматизація | `hooks`, `cron`, `agent.heartbeat` | Ні |
| Сесії й повідомлення | `session`, `messages` | Ні |
| Інструменти й медіа | `tools`, `browser`, `skills`, `audio`, `talk` | Ні |
| UI та інше | `ui`, `logging`, `identity`, `bindings` | Ні |
| Сервер gateway | `gateway.*` (port, bind, auth, tailscale, TLS, HTTP) | **Так** |
| Інфраструктура | `discovery`, `canvasHost`, `plugins` | **Так** |
<Note>
`gateway.reload` і `gateway.remote` — винятки: їх зміна **не** викликає перезапуск.
`gateway.reload` і `gateway.remote` — винятки: зміна цих полів **не** спричиняє перезапуск.
</Note>
## Config RPC (програмні оновлення)
## RPC конфігурації (програмні оновлення)
<Note>
RPC керуючої площини для запису (`config.apply`, `config.patch`, `update.run`) мають обмеження швидкості: **3 запити на 60 секунд** для кожної пари `deviceId+clientIp`. У разі обмеження RPC повертає `UNAVAILABLE` з `retryAfterMs`.
RPC запису control-plane (`config.apply`, `config.patch`, `update.run`) мають обмеження частоти: **3 запити за 60 секунд** для кожної пари `deviceId+clientIp`. Після спрацювання обмеження RPC повертає `UNAVAILABLE` з `retryAfterMs`.
</Note>
Безпечний/типовий потік:
- `config.schema.lookup`: переглянути одне піддерево конфігурації, обмежене шляхом, з неглибоким
вузлом схеми, відповідними метаданими підказок і короткими зведеннями безпосередніх дочірніх елементів
- `config.schema.lookup`: перевірити одне піддерево конфігурації, обмежене шляхом, із поверхневим
вузлом схеми, відповідними метаданими підказок і зведеннями для безпосередніх дочірніх елементів
- `config.get`: отримати поточний знімок + hash
- `config.patch`: бажаний шлях часткового оновлення
- `config.patch`: рекомендований шлях часткового оновлення
- `config.apply`: лише повна заміна конфігурації
- `update.run`: явне самооновлення + перезапуск
- `update.run`: явне самостійне оновлення + перезапуск
Якщо ви не замінюєте всю конфігурацію, надавайте перевагу `config.schema.lookup`,
а потім `config.patch`.
@ -566,15 +566,15 @@ RPC керуючої площини для запису (`config.apply`, `config
Параметри:
- `raw` (string) — payload JSON5 для всієї конфігурації
- `baseHash` (optional) — hash конфігурації з `config.get` (обов’язковий, якщо конфігурація вже існує)
- `sessionKey` (optional) — ключ сесії для ping пробудження після перезапуску
- `note` (optional) — примітка для restart sentinel
- `restartDelayMs` (optional) — затримка перед перезапуском (типово 2000)
- `baseHash` (необов’язковий) — hash конфігурації з `config.get` (обов’язковий, якщо конфігурація існує)
- `sessionKey` (необов’язковий) — ключ сесії для ping пробудження після перезапуску
- `note` (необов’язковий) — примітка для sentinel перезапуску
- `restartDelayMs` (необов’язковий) — затримка перед перезапуском (типово 2000)
Запити на перезапуск об’єднуються, якщо один уже очікує/виконується, і між циклами перезапуску діє 30-секундна пауза.
Запити на перезапуск об’єднуються, якщо один уже очікує/виконується, і між циклами перезапуску діє 30-секундний cooldown.
```bash
openclaw gateway call config.get --params '{}' # отримати payload.hash
openclaw gateway call config.get --params '{}' # capture payload.hash
openclaw gateway call config.apply --params '{
"raw": "{ agents: { defaults: { workspace: \"~/.openclaw/workspace\" } } }",
"baseHash": "<hash>",
@ -585,19 +585,19 @@ RPC керуючої площини для запису (`config.apply`, `config
</Accordion>
<Accordion title="config.patch (часткове оновлення)">
Зливає часткове оновлення з наявною конфігурацією (семантика JSON merge patch):
Об’єднує часткове оновлення з наявною конфігурацією (семантика JSON merge patch):
- Об’єкти зливаються рекурсивно
- Об’єкти об’єднуються рекурсивно
- `null` видаляє ключ
- Масиви замінюються
Параметри:
- `raw` (string) — JSON5 лише з ключами, які треба змінити
- `baseHash` (required) — hash конфігурації з `config.get`
- `sessionKey`, `note`, `restartDelayMs` — те саме, що й для `config.apply`
- `raw` (string) — JSON5 лише з ключами, які потрібно змінити
- `baseHash` (обов’язковий) — hash конфігурації з `config.get`
- `sessionKey`, `note`, `restartDelayMs` — такі самі, як у `config.apply`
Поведінка перезапуску така сама, як у `config.apply`: об’єднання очікуваних перезапусків і 30-секундна пауза між циклами перезапуску.
Поведінка перезапуску відповідає `config.apply`: об’єднання очікуваних перезапусків плюс 30-секундний cooldown між циклами перезапуску.
```bash
openclaw gateway call config.patch --params '{
@ -613,10 +613,10 @@ RPC керуючої площини для запису (`config.apply`, `config
OpenClaw читає env vars із батьківського процесу, а також:
- `.env` із поточного робочого каталогу (якщо є)
- `~/.openclaw/.env` (глобальний резервний варіант)
- `.env` з поточного робочого каталогу (якщо є)
- `~/.openclaw/.env` (глобальний запасний варіант)
Жоден із цих файлів не перевизначає наявні env vars. Ви також можете задавати inline env vars у конфігурації:
Жоден із цих файлів не перевизначає наявні env vars. Ви також можете встановлювати inline env vars у конфігурації:
```json5
{
@ -627,8 +627,8 @@ OpenClaw читає env vars із батьківського процесу, а
}
```
<Accordion title="Імпорт env із shell (необов’язково)">
Якщо це ввімкнено й очікувані ключі не задано, OpenClaw запускає вашу login shell і імпортує лише відсутні ключі:
<Accordion title="Імпорт env shell (необов’язково)">
Якщо це ввімкнено і очікувані ключі не встановлені, OpenClaw запускає вашу shell входу й імпортує лише відсутні ключі:
```json5
{
@ -642,7 +642,7 @@ OpenClaw читає env vars із батьківського процесу, а
</Accordion>
<Accordion title="Підстановка env var у значеннях конфігурації">
Посилайтеся на env vars у будь-якому рядковому значенні конфігурації через `${VAR_NAME}`:
Посилайтеся на env vars у будь-якому рядковому значенні конфігурації за допомогою `${VAR_NAME}`:
```json5
{
@ -653,15 +653,15 @@ OpenClaw читає env vars із батьківського процесу, а
Правила:
- Збігаються лише імена у верхньому регістрі: `[A-Z_][A-Z0-9_]*`
- Відсутні/порожні env vars викликають помилку під час завантаження
- Екрануйте як `$${VAR}` для буквального виводу
- Зіставляються лише назви у верхньому регістрі: `[A-Z_][A-Z0-9_]*`
- Відсутні/порожні змінні спричиняють помилку під час завантаження
- Екрануйте через `$${VAR}` для буквального виводу
- Працює всередині файлів `$include`
- Inline substitution: `"${BASE}/v1"``"https://api.example.com/v1"`
- Вбудована підстановка: `"${BASE}/v1"``"https://api.example.com/v1"`
</Accordion>
<Accordion title="Secret refs (env, file, exec)">
<Accordion title="Посилання на секрети (env, file, exec)">
Для полів, які підтримують об’єкти SecretRef, можна використовувати:
```json5
@ -694,15 +694,15 @@ OpenClaw читає env vars із батьківського процесу, а
}
```
Докладніше про SecretRef (зокрема `secrets.providers` для `env`/`file`/`exec`) див. у [Secrets Management](/uk/gateway/secrets).
Підтримувані шляхи облікових даних наведено в [SecretRef Credential Surface](/uk/reference/secretref-credential-surface).
Подробиці SecretRef (включно з `secrets.providers` для `env`/`file`/`exec`) наведено в [Керування секретами](/uk/gateway/secrets).
Підтримувані шляхи облікових даних перелічено в [Поверхня облікових даних SecretRef](/uk/reference/secretref-credential-surface).
</Accordion>
Див. [Environment](/uk/help/environment) для повного порядку пріоритетів і джерел.
Див. [Environment](/uk/help/environment) для повного пріоритету та джерел.
## Повний довідник
Для повного довідника за полями див. **[Configuration Reference](/uk/gateway/configuration-reference)**.
Повний довідник по кожному полю дивіться в **[Довіднику конфігурації](/uk/gateway/configuration-reference)**.
---

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +1,22 @@
---
read_when:
- Центр усунення несправностей скерував вас сюди для глибшої діагностики
- Вам потрібні стабільні розділи посібника за симптомами з точними командами
summary: Детальний посібник з усунення несправностей для gateway, каналів, автоматизації, вузлів і браузера
title: Усунення несправностей
- Центр усунення неполадок направив вас сюди для глибшої діагностики
- Вам потрібні стабільні розділи посібника з діагностики за симптомами з точними командами
summary: Детальний посібник з усунення неполадок для gateway, каналів, автоматизації, вузлів і браузера
title: Усунення неполадок
x-i18n:
generated_at: "2026-04-07T14:59:22Z"
generated_at: "2026-04-10T20:41:23Z"
model: gpt-5.4
provider: openai
source_hash: 02c9537845248db0c9d315bf581338a93215fe6fe3688ed96c7105cbb19fe6ba
source_hash: 7ef2faccba26ede307861504043a6415bc1f12dc64407771106f63ddc5b107f5
source_path: gateway/troubleshooting.md
workflow: 15
---
# Усунення несправностей gateway
# Усунення неполадок gateway
Ця сторінка — детальний посібник.
Почніть із [/help/troubleshooting](/uk/help/troubleshooting), якщо спочатку хочете пройти швидкий потік тріажу.
Ця сторінка є детальним посібником.
Почніть із [/help/troubleshooting](/uk/help/troubleshooting), якщо спочатку хочете пройти швидкий потік первинної діагностики.
## Послідовність команд
@ -33,13 +33,13 @@ openclaw channels status --probe
Очікувані ознаки справного стану:
- `openclaw gateway status` показує `Runtime: running` і `RPC probe: ok`.
- `openclaw doctor` не повідомляє про блокувальні проблеми конфігурації/сервісу.
- `openclaw doctor` не повідомляє про блокувальні проблеми конфігурації/служб.
- `openclaw channels status --probe` показує живий стан транспорту для кожного облікового запису та,
де це підтримується, результати probe/audit, наприклад `works` або `audit ok`.
де це підтримується, результати probe/audit, як-от `works` або `audit ok`.
## Для Anthropic 429 для довгого контексту потрібне додаткове використання
## Anthropic 429: для довгого контексту потрібне додаткове використання
Використовуйте це, коли журнали/помилки містять:
Використовуйте це, коли логи/помилки містять:
`HTTP 429: rate_limit_error: Extra usage is required for long context requests`.
```bash
@ -52,13 +52,13 @@ openclaw config get agents.defaults.models
- Вибрана модель Anthropic Opus/Sonnet має `params.context1m: true`.
- Поточні облікові дані Anthropic не мають права на використання довгого контексту.
- Запити збоять лише в довгих сесіях/запусках моделі, яким потрібен шлях 1M beta.
- Запити збійно завершуються лише для довгих сесій/запусків моделі, яким потрібен beta-шлях 1M.
Варіанти виправлення:
1. Вимкніть `context1m` для цієї моделі, щоб повернутися до звичайного вікна контексту.
2. Використайте облікові дані Anthropic, які мають право на запити з довгим контекстом, або перейдіть на Anthropic API key.
3. Налаштуйте резервні моделі, щоб запуски продовжувалися, коли Anthropic відхиляє запити з довгим контекстом.
2. Використайте облікові дані Anthropic, які мають право на запити з довгим контекстом, або перейдіть на ключ Anthropic API.
3. Налаштуйте резервні моделі, щоб виконання продовжувалося, коли запити Anthropic з довгим контекстом відхиляються.
Пов’язане:
@ -66,13 +66,13 @@ openclaw config get agents.defaults.models
- [/reference/token-use](/uk/reference/token-use)
- [/help/faq#why-am-i-seeing-http-429-ratelimiterror-from-anthropic](/uk/help/faq#why-am-i-seeing-http-429-ratelimiterror-from-anthropic)
## Локальний OpenAI-compatible backend проходить прямі probe, але збоять agent runs
## Локальний OpenAI-compatible backend проходить прямі probe, але збоять запуски агента
Використовуйте це, коли:
- `curl ... /v1/models` працює
- малі прямі виклики `/v1/chat/completions` працюють
- запуски моделей OpenClaw збоять лише під час звичайних ходів агента
- запуски моделі OpenClaw збоять лише під час звичайних ходів агента
```bash
curl http://127.0.0.1:1234/v1/models
@ -86,42 +86,43 @@ openclaw logs --follow
Зверніть увагу на таке:
- прямі малі виклики успішні, але запуски OpenClaw збоять лише на більших prompt
- backend повертає помилки про те, що `messages[].content` очікує рядок
- backend падає лише при більшій кількості токенів prompt або на повних prompt середовища агента
- помилки backend про те, що `messages[].content` очікує рядок
- збої backend, які з’являються лише при більшій кількості токенів у prompt або в повних
prompt середовища виконання агента
Типові ознаки:
Поширені ознаки:
- `messages[...].content: invalid type: sequence, expected a string` → backend
відхиляє структуровані частини вмісту Chat Completions. Виправлення: задайте
відхиляє структуровані частини вмісту Chat Completions. Виправлення: встановіть
`models.providers.<provider>.models[].compat.requiresStringContent: true`.
- прямі малі запити успішні, але ходи агента OpenClaw збоять із падіннями backend/моделі
(наприклад Gemma у деяких збірках `inferrs`) → транспорт OpenClaw,
імовірно, уже налаштований правильно; backend збоїть на більшій формі prompt
середовища агента.
- збої зменшуються після вимкнення інструментів, але не зникають → схеми інструментів
були частиною навантаження, але решта проблеми все ще в обмеженнях моделі/сервера
вищого рівня або в помилці backend.
- прямі малі запити успішні, але ходи агента OpenClaw збоять через збої backend/моделі
(наприклад, Gemma у деяких збірках `inferrs`) → транспорт OpenClaw
імовірно вже налаштований правильно; проблема в тому, що backend не справляється з більшою формою
prompt середовища виконання агента.
- після вимкнення tools збоїв стає менше, але вони не зникають → схеми tools були
частиною навантаження, але решта проблеми все ще пов’язана з upstream місткістю моделі/сервера
або помилкою backend.
Варіанти виправлення:
1. Задайте `compat.requiresStringContent: true` для backend Chat Completions, які приймають лише рядки.
2. Задайте `compat.supportsTools: false` для моделей/backend, які не можуть надійно обробляти
поверхню схем інструментів OpenClaw.
1. Встановіть `compat.requiresStringContent: true` для backend Chat Completions, які підтримують лише рядковий вміст.
2. Встановіть `compat.supportsTools: false` для моделей/backend, які не можуть
надійно обробляти поверхню схем tools OpenClaw.
3. За можливості зменште навантаження prompt: менший bootstrap workspace, коротша
історія сесії, легша локальна модель або backend із кращою підтримкою довгого контексту.
4. Якщо малі прямі запити й надалі проходять, а ходи OpenClaw усе ще падають
всередині backend, розглядайте це як обмеження upstream server/model і створіть
там repro з прийнятою формою payload.
4. Якщо прямі малі запити й далі проходять, а ходи агента OpenClaw усе ще збоять
всередині backend, розглядайте це як обмеження upstream сервера/моделі й створіть
там repro з формою payload, яка приймається.
Пов’язане:
- [/gateway/local-models](/uk/gateway/local-models)
- [/gateway/configuration#models](/uk/gateway/configuration#models)
- [/gateway/configuration](/uk/gateway/configuration)
- [/gateway/configuration-reference#openai-compatible-endpoints](/uk/gateway/configuration-reference#openai-compatible-endpoints)
## Немає відповідей
Якщо канали працюють, але ніхто не відповідає, перевірте маршрутизацію та політику, перш ніж щось перепідключати.
Якщо канали працюють, але ніхто не відповідає, перевірте маршрутизацію та політики перед тим, як щось перепідключати.
```bash
openclaw status
@ -133,14 +134,14 @@ openclaw logs --follow
Зверніть увагу на таке:
- Очікує pairing для відправників у DM.
- Фільтрація згадок у групах (`requireMention`, `mentionPatterns`).
- Pairing очікує на розгляд для відправників у DM.
- Обмеження згадок у групах (`requireMention`, `mentionPatterns`).
- Невідповідності allowlist каналу/групи.
Типові ознаки:
Поширені ознаки:
- `drop guild message (mention required` → повідомлення в групі ігнорується, доки не буде згадки.
- `pairing request` → відправника потрібно схвалити.
- `drop guild message (mention required` → повідомлення групи ігнорується, доки немає згадки.
- `pairing request` → відправнику потрібне схвалення.
- `blocked` / `allowlist` → відправника/канал відфільтровано політикою.
Пов’язане:
@ -149,9 +150,9 @@ openclaw logs --follow
- [/channels/pairing](/uk/channels/pairing)
- [/channels/groups](/uk/channels/groups)
## Підключення dashboard control UI
## Підключення dashboard/control UI
Коли dashboard/control UI не підключається, перевірте URL, режим auth і припущення щодо secure context.
Коли dashboard/control UI не може підключитися, перевірте URL, режим auth і припущення про безпечний контекст.
```bash
openclaw gateway status
@ -164,48 +165,47 @@ openclaw gateway status --json
Зверніть увагу на таке:
- Правильний URL probe і URL dashboard.
- Невідповідність режиму auth/token між клієнтом і gateway.
- Невідповідність режиму auth/токена між клієнтом і gateway.
- Використання HTTP там, де потрібна ідентичність пристрою.
Типові ознаки:
Поширені ознаки:
- `device identity required` → небезпечний контекст або відсутня auth пристрою.
- `origin not allowed``Origin` браузера відсутній у `gateway.controlUi.allowedOrigins`
(або ви підключаєтеся з не-loopback origin браузера без явного
(або ви підключаєтеся з browser origin не на loopback без явного
allowlist).
- `device nonce required` / `device nonce mismatch` → клієнт не завершує
flow challenge-based device auth (`connect.challenge` + `device.nonce`).
flow auth пристрою на основі challenge (`connect.challenge` + `device.nonce`).
- `device signature invalid` / `device signature expired` → клієнт підписав неправильний
payload (або використав застарілу часову мітку) для поточного handshake.
- `AUTH_TOKEN_MISMATCH` з `canRetryWithDeviceToken=true` → клієнт може виконати одну довірену повторну спробу з кешованим токеном пристрою.
- Ця повторна спроба з кешованим токеном повторно використовує набір scope, збережений разом
зі спареним токеном пристрою. Виклики з явним `deviceToken` / явними `scopes` зберігають свій
запитаний набір scope.
- Поза цим шляхом повторної спроби пріоритет auth під час підключення такий:
- Ця повторна спроба з кешованим токеном повторно використовує кешований набір scope, збережений разом із paired
токеном пристрою. Виклики з явними `deviceToken` / явними `scopes` зберігають
запитаний ними набір scope.
- Поза цим шляхом повторної спроби пріоритет auth для connect такий:
спочатку явний shared token/password, потім явний `deviceToken`, потім збережений токен пристрою,
а потім bootstrap token.
потім bootstrap token.
- На асинхронному шляху Tailscale Serve Control UI невдалі спроби для того самого
`{scope, ip}` серіалізуються до того, як обмежувач зафіксує невдачу. Тому дві некоректні
одночасні повторні спроби від одного клієнта можуть показати `retry later`
на другій спробі замість двох звичайних невідповідностей.
- `too many failed authentication attempts (retry later)` від loopback-клієнта браузерного origin
→ повторні невдачі від того самого нормалізованого `Origin` тимчасово
блокуються; інший localhost origin використовує окремий bucket.
- повторювані `unauthorized` після цієї повторної спроби → розсинхронізація shared token/device token; оновіть конфігурацію токена й за потреби повторно схваліть/переверніть токен пристрою.
`{scope, ip}` серіалізуються до того, як limiter зафіксує збій. Тому дві хибні
одночасні повторні спроби від того самого клієнта можуть призвести до `retry later`
для другої спроби замість двох звичайних невідповідностей.
- `too many failed authentication attempts (retry later)` від loopback-клієнта з browser-origin
→ повторні збої з того самого нормалізованого `Origin` тимчасово блокуються; інший localhost origin використовує окремий bucket.
- повторюване `unauthorized` після цієї повторної спроби → розсинхронізація shared token/device token; оновіть конфігурацію токена та за потреби повторно схваліть/перегенеруйте токен пристрою.
- `gateway connect failed:` → неправильний host/port/url призначення.
### Швидка карта кодів деталей auth
### Швидка таблиця кодів деталей auth
Використовуйте `error.details.code` із невдалого відповіді `connect`, щоб вибрати наступну дію:
Використовуйте `error.details.code` з невдалої відповіді `connect`, щоб вибрати наступну дію:
| Detail code | Значення | Рекомендована дія |
| ---------------------------- | --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `AUTH_TOKEN_MISSING` | Клієнт не надіслав обов’язковий shared token. | Вставте/задайте токен у клієнті й повторіть спробу. Для шляхів dashboard: `openclaw config get gateway.auth.token`, а потім вставте його в налаштуваннях Control UI. |
| `AUTH_TOKEN_MISMATCH` | Shared token не збігся з токеном auth gateway. | Якщо `canRetryWithDeviceToken=true`, дозвольте одну довірену повторну спробу. Повторні спроби з кешованим токеном повторно використовують збережені схвалені scope; виклики з явним `deviceToken` / `scopes` зберігають запитані scope. Якщо все одно не працює, виконайте [контрольний список відновлення після дрейфу токена](/cli/devices#token-drift-recovery-checklist). |
| `AUTH_DEVICE_TOKEN_MISMATCH` | Кешований токен для пристрою застарів або відкликаний. | Переверніть/повторно схваліть токен пристрою за допомогою [CLI devices](/cli/devices), а потім підключіться знову. |
| `PAIRING_REQUIRED` | Ідентичність пристрою відома, але не схвалена для цієї ролі. | Схваліть запит, що очікує: `openclaw devices list`, потім `openclaw devices approve <requestId>`. |
| Код деталей | Значення | Рекомендована дія |
| ---------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `AUTH_TOKEN_MISSING` | Клієнт не надіслав обов’язковий shared token. | Вставте/задайте токен у клієнті та повторіть спробу. Для шляхів dashboard: `openclaw config get gateway.auth.token`, а потім вставте його в налаштуваннях Control UI. |
| `AUTH_TOKEN_MISMATCH` | Shared token не збігся з токеном auth gateway. | Якщо `canRetryWithDeviceToken=true`, дозвольте одну довірену повторну спробу. Повторні спроби з кешованим токеном повторно використовують збережені схвалені scope; виклики з явними `deviceToken` / `scopes` зберігають запитані scope. Якщо й далі не вдається, виконайте [контрольний список відновлення після розсинхронізації токена](/cli/devices#token-drift-recovery-checklist). |
| `AUTH_DEVICE_TOKEN_MISMATCH` | Кешований токен для конкретного пристрою застарів або відкликаний. | Перегенеруйте/повторно схваліть токен пристрою через [CLI devices](/cli/devices), а потім перепідключіться. |
| `PAIRING_REQUIRED` | Ідентичність пристрою відома, але не схвалена для цієї ролі. | Схваліть запит, що очікує: `openclaw devices list`, потім `openclaw devices approve <requestId>`. |
Перевірка міграції device auth v2:
Перевірка міграції auth пристрою v2:
```bash
openclaw --version
@ -213,18 +213,18 @@ openclaw doctor
openclaw gateway status
```
Якщо журнали показують помилки nonce/signature, оновіть клієнт, що підключається, і переконайтеся, що він:
Якщо логи показують помилки nonce/signature, оновіть клієнт, що підключається, і перевірте, що він:
1. чекає на `connect.challenge`
2. підписує payload, прив’язаний до challenge
3. надсилає `connect.params.device.nonce` з тим самим nonce challenge
Якщо `openclaw devices rotate` / `revoke` / `remove` несподівано заборонено:
Якщо `openclaw devices rotate` / `revoke` / `remove` неочікувано заборонено:
- сесії paired-device token можуть керувати лише **власним**
пристроєм, якщо тільки виклик також не має `operator.admin`
- сесії з токеном paired-device можуть керувати лише **власним** пристроєм, якщо
виклик також не має `operator.admin`
- `openclaw devices rotate --scope ...` може запитувати лише ті operator scope,
які сесія виклику вже має
які вже має сесія виклику
Пов’язане:
@ -234,32 +234,32 @@ openclaw gateway status
- [/gateway/remote](/uk/gateway/remote)
- [/cli/devices](/cli/devices)
## Сервіс gateway не працює
## Служба gateway не працює
Використовуйте це, якщо сервіс встановлено, але процес не утримується в робочому стані.
Використовуйте це, коли службу встановлено, але процес не залишається активним.
```bash
openclaw gateway status
openclaw status
openclaw logs --follow
openclaw doctor
openclaw gateway status --deep # також сканує системні сервіси
openclaw gateway status --deep # також сканує служби на рівні системи
```
Зверніть увагу на таке:
- `Runtime: stopped` з підказками про завершення.
- Невідповідність конфігурації сервісу (`Config (cli)` проти `Config (service)`).
- `Runtime: stopped` з підказками щодо виходу.
- Невідповідність конфігурації служби (`Config (cli)` vs `Config (service)`).
- Конфлікти портів/слухачів.
- Додаткові встановлення launchd/systemd/schtasks при використанні `--deep`.
- Підказки очищення `Other gateway-like services detected (best effort)`.
- Підказки для очищення `Other gateway-like services detected (best effort)`.
Типові ознаки:
Поширені ознаки:
- `Gateway start blocked: set gateway.mode=local` або `existing config is missing gateway.mode` → локальний режим gateway не ввімкнено, або файл конфігурації було пошкоджено й він втратив `gateway.mode`. Виправлення: задайте `gateway.mode="local"` у своїй конфігурації або повторно запустіть `openclaw onboard --mode local` / `openclaw setup`, щоб відновити очікувану конфігурацію local-mode. Якщо ви запускаєте OpenClaw через Podman, типовий шлях до конфігурації — `~/.openclaw/openclaw.json`.
- `refusing to bind gateway ... without auth` → прив’язка не до loopback без дійсного шляху auth gateway (token/password або trusted-proxy, якщо налаштовано).
- `Gateway start blocked: set gateway.mode=local` або `existing config is missing gateway.mode` → локальний режим gateway не ввімкнено, або файл конфігурації було пошкоджено й у ньому втрачено `gateway.mode`. Виправлення: задайте `gateway.mode="local"` у своїй конфігурації або повторно запустіть `openclaw onboard --mode local` / `openclaw setup`, щоб знову проставити очікувану конфігурацію локального режиму. Якщо ви запускаєте OpenClaw через Podman, стандартний шлях до конфігурації — `~/.openclaw/openclaw.json`.
- `refusing to bind gateway ... without auth` → прив’язка не до loopback без коректного шляху auth gateway (token/password або trusted-proxy, якщо налаштовано).
- `another gateway instance is already listening` / `EADDRINUSE` → конфлікт порту.
- `Other gateway-like services detected (best effort)` → існують застарілі або паралельні launchd/systemd/schtasks units. У більшості конфігурацій слід тримати один gateway на машину; якщо вам справді потрібно більше одного, ізолюйте порти + config/state/workspace. Див. [/gateway#multiple-gateways-same-host](/uk/gateway#multiple-gateways-same-host).
- `Other gateway-like services detected (best effort)` → існують застарілі або паралельні модулі launchd/systemd/schtasks. У більшості конфігурацій має бути один gateway на машину; якщо вам справді потрібно більше одного, ізолюйте порти + конфігурацію/стан/workspace. Див. [/gateway#multiple-gateways-same-host](/uk/gateway#multiple-gateways-same-host).
Пов’язане:
@ -267,9 +267,9 @@ openclaw gateway status --deep # також сканує системні се
- [/gateway/configuration](/uk/gateway/configuration)
- [/gateway/doctor](/uk/gateway/doctor)
## Попередження probe gateway
## Попередження gateway probe
Використовуйте це, коли `openclaw gateway probe` до чогось дістається, але все одно виводить блок попередження.
Використовуйте це, коли `openclaw gateway probe` до чогось дістається, але все одно виводить блок попереджень.
```bash
openclaw gateway probe
@ -279,15 +279,15 @@ openclaw gateway probe --ssh user@gateway-host
Зверніть увагу на таке:
- `warnings[].code` і `primaryTargetId` у виводі JSON.
- Чи пов’язане попередження з резервним SSH, кількома gateway, відсутніми scope або нерозв’язаними auth refs.
- `warnings[].code` і `primaryTargetId` у JSON-виводі.
- Чи пов’язане попередження з резервним переходом через SSH, кількома gateway, відсутніми scope або нерозв’язаними auth refs.
Типові ознаки:
Поширені ознаки:
- `SSH tunnel failed to start; falling back to direct probes.` → налаштування SSH не вдалося, але команда все одно спробувала прямі налаштовані/loopback-призначення.
- `multiple reachable gateways detected` → відповіло більше однієї цілі. Зазвичай це означає навмисне багатошлюзове налаштування або застарілі/дубльовані слухачі.
- `Probe diagnostics are limited by gateway scopes (missing operator.read)` → підключення спрацювало, але RPC деталей обмежений scope; спарте ідентичність пристрою або використайте облікові дані з `operator.read`.
- нерозв’язане попередження SecretRef для `gateway.auth.*` / `gateway.remote.*` → auth-матеріал був недоступний у цьому шляху команди для цілі, що не пройшла перевірку.
- `SSH tunnel failed to start; falling back to direct probes.` → налаштування SSH не вдалося, але команда все одно спробувала прямі налаштовані/loopback-цілі.
- `multiple reachable gateways detected` → відповіла більше ніж одна ціль. Зазвичай це означає навмисну конфігурацію з кількома gateway або застарілі/дубльовані listeners.
- `Probe diagnostics are limited by gateway scopes (missing operator.read)` → підключення спрацювало, але детальний RPC обмежений scope; виконайте pairing ідентичності пристрою або використайте облікові дані з `operator.read`.
- нерозв’язаний текст попередження `gateway.auth.*` / `gateway.remote.*` SecretRef → auth-матеріал був недоступний у цьому шляху команди для цілі, що не пройшла перевірку.
Пов’язане:
@ -295,9 +295,9 @@ openclaw gateway probe --ssh user@gateway-host
- [/gateway#multiple-gateways-same-host](/uk/gateway#multiple-gateways-same-host)
- [/gateway/remote](/uk/gateway/remote)
## Канал підключений, але повідомлення не проходять
## Канал підключено, але повідомлення не проходять
Якщо стан каналу показує, що він підключений, але потік повідомлень мертвий, зосередьтеся на політиці, дозволах і специфічних для каналу правилах доставки.
Якщо стан каналу — connected, але потік повідомлень не працює, зосередьтеся на політиках, дозволах і правилах доставки, специфічних для каналу.
```bash
openclaw channels status --probe
@ -311,9 +311,9 @@ openclaw config get channels
- Політика DM (`pairing`, `allowlist`, `open`, `disabled`).
- Allowlist групи та вимоги до згадок.
- Відсутні дозволи/scopes API каналу.
- Відсутні дозволи/scope API каналу.
Типові ознаки:
Поширені ознаки:
- `mention required` → повідомлення ігнорується через політику згадок у групі.
- `pairing` / сліди очікування схвалення → відправника не схвалено.
@ -328,7 +328,7 @@ openclaw config get channels
## Доставка cron і heartbeat
Якщо cron або heartbeat не запустилися чи не були доставлені, спочатку перевірте стан планувальника, а потім ціль доставки.
Якщо cron або heartbeat не запустився чи не доставився, спочатку перевірте стан scheduler, а вже потім ціль доставки.
```bash
openclaw cron status
@ -340,19 +340,19 @@ openclaw logs --follow
Зверніть увагу на таке:
- Cron увімкнено і є наступне пробудження.
- Стан історії запусків завдання (`ok`, `skipped`, `error`).
- Cron увімкнений і присутній час наступного пробудження.
- Стан історії запусків job (`ok`, `skipped`, `error`).
- Причини пропуску heartbeat (`quiet-hours`, `requests-in-flight`, `alerts-disabled`, `empty-heartbeat-file`, `no-tasks-due`).
Типові ознаки:
Поширені ознаки:
- `cron: scheduler disabled; jobs will not run automatically` → cron вимкнено.
- `cron: timer tick failed` → збій тіку планувальника; перевірте помилки файлів/журналів/середовища виконання.
- `heartbeat skipped` з `reason=quiet-hours` → поза вікном активних годин.
- `cron: timer tick failed` → збій tick scheduler; перевірте помилки файлів/логів/runtime.
- `heartbeat skipped` з `reason=quiet-hours` → поза межами вікна активних годин.
- `heartbeat skipped` з `reason=empty-heartbeat-file``HEARTBEAT.md` існує, але містить лише порожні рядки / markdown-заголовки, тому OpenClaw пропускає виклик моделі.
- `heartbeat skipped` з `reason=no-tasks-due``HEARTBEAT.md` містить блок `tasks:`, але на цьому тіку жодне із завдань не має бути виконане.
- `heartbeat: unknown accountId` → недійсний id облікового запису для цілі доставки heartbeat.
- `heartbeat skipped` з `reason=dm-blocked` → ціль heartbeat визначилася як призначення стилю DM, тоді як `agents.defaults.heartbeat.directPolicy` (або перевизначення для конкретного агента) має значення `block`.
- `heartbeat skipped` з `reason=no-tasks-due``HEARTBEAT.md` містить блок `tasks:`, але на цьому tick жодне із завдань не підлягає виконанню.
- `heartbeat: unknown accountId` → недійсний account id для цілі доставки heartbeat.
- `heartbeat skipped` з `reason=dm-blocked` → ціль heartbeat була визначена як призначення у стилі DM, тоді як `agents.defaults.heartbeat.directPolicy` (або перевизначення для конкретного агента) має значення `block`.
Пов’язане:
@ -360,9 +360,9 @@ openclaw logs --follow
- [/automation/cron-jobs](/uk/automation/cron-jobs)
- [/gateway/heartbeat](/uk/gateway/heartbeat)
## Не працює paired tool вузла
## Збій paired tool вузла
Якщо вузол спарено, але інструменти не працюють, окремо перевірте foreground, дозволи та стан схвалення.
Якщо вузол paired, але tools не працюють, ізолюйте стан foreground, дозволи та схвалення.
```bash
openclaw nodes status
@ -374,16 +374,16 @@ openclaw status
Зверніть увагу на таке:
- Вузол онлайн з очікуваними можливостями.
- Вузол online з очікуваними capability.
- Надані дозволи ОС для camera/mic/location/screen.
- Стан exec approvals і allowlist.
Типові ознаки:
Поширені ознаки:
- `NODE_BACKGROUND_UNAVAILABLE` → застосунок вузла має бути на передньому плані.
- `NODE_BACKGROUND_UNAVAILABLE` → застосунок вузла має бути у foreground.
- `*_PERMISSION_REQUIRED` / `LOCATION_PERMISSION_REQUIRED` → відсутній дозвіл ОС.
- `SYSTEM_RUN_DENIED: approval required`очікується схвалення exec.
- `SYSTEM_RUN_DENIED: allowlist miss` → команду заблоковано allowlist.
- `SYSTEM_RUN_DENIED: approval required` → схвалення exec очікує.
- `SYSTEM_RUN_DENIED: allowlist miss` → команду заблоковано через allowlist.
Пов’язане:
@ -391,9 +391,9 @@ openclaw status
- [/nodes/index](/uk/nodes/index)
- [/tools/exec-approvals](/uk/tools/exec-approvals)
## Не працює browser tool
## Збій browser tool
Використовуйте це, коли дії browser tool збоять, хоча сам gateway справний.
Використовуйте це, коли дії browser tool завершуються з помилкою, хоча сам gateway справний.
```bash
openclaw browser status
@ -405,30 +405,30 @@ openclaw doctor
Зверніть увагу на таке:
- Чи задано `plugins.allow` і чи містить він `browser`.
- Чи задано `plugins.allow` і чи включає воно `browser`.
- Коректний шлях до виконуваного файла браузера.
- Досяжність профілю CDP.
- Доступність локального Chrome для профілів `existing-session` / `user`.
- Наявність локального Chrome для профілів `existing-session` / `user`.
Типові ознаки:
Поширені ознаки:
- `unknown command "browser"` або `unknown command 'browser'` → bundled plugin браузера виключено через `plugins.allow`.
- browser tool відсутній / недоступний, хоча `browser.enabled=true``plugins.allow` виключає `browser`, тому plugin ніколи не завантажився.
- `Failed to start Chrome CDP on port` → процес браузера не зміг запуститися.
- `unknown command "browser"` або `unknown command 'browser'` → bundled browser plugin виключено через `plugins.allow`.
- browser tool відсутній / недоступний, хоча `browser.enabled=true``plugins.allow` виключає `browser`, тому plugin ніколи не завантажувався.
- `Failed to start Chrome CDP on port` → процес браузера не вдалося запустити.
- `browser.executablePath not found` → налаштований шлях недійсний.
- `browser.cdpUrl must be http(s) or ws(s)` → налаштований URL CDP використовує непідтримувану схему, наприклад `file:` або `ftp:`.
- `browser.cdpUrl has invalid port` → налаштований URL CDP має некоректний або позадіапазонний порт.
- `No Chrome tabs found for profile="user"`профіль підключення Chrome MCP не має відкритих локальних вкладок Chrome.
- `Remote CDP for profile "<name>" is not reachable` → налаштований віддалений endpoint CDP недосяжний з хоста gateway.
- `Browser attachOnly is enabled ... not reachable` або `Browser attachOnly is enabled and CDP websocket ... is not reachable` → профіль лише з підключенням не має досяжної цілі, або HTTP endpoint відповів, але WebSocket CDP все одно не вдалося відкрити.
- `Playwright is not available in this gateway build; '<feature>' is unsupported.`поточна інсталяція gateway не містить повного пакета Playwright; ARIA snapshots і базові знімки сторінки все ще можуть працювати, але навігація, AI snapshots, знімки елементів за CSS-селекторами та експорт PDF залишаються недоступними.
- `fullPage is not supported for element screenshots` → запит знімка екрана поєднав `--full-page` з `--ref` або `--element`.
- `element screenshots are not supported for existing-session profiles; use ref from snapshot.` → виклики знімків екрана Chrome MCP / `existing-session` мають використовувати захоплення сторінки або `--ref` зі snapshot, а не CSS `--element`.
- `existing-session file uploads do not support element selectors; use ref/inputRef.`хуки завантаження файлів Chrome MCP потребують snapshot refs, а не CSS-селекторів.
- `existing-session file uploads currently support one file at a time.` → надсилайте одне завантаження за виклик у профілях Chrome MCP.
- `existing-session dialog handling does not support timeoutMs.`хуки діалогів у профілях Chrome MCP не підтримують перевизначення timeout.
- `response body is not supported for existing-session profiles yet.``responsebody` поки що потребує керованого браузера або профілю raw CDP.
- застарілі перевизначення viewport / dark-mode / locale / offline у профілях attach-only або remote CDP → виконайте `openclaw browser stop --browser-profile <name>`, щоб закрити активну сесію керування та звільнити стан емуляції Playwright/CDP без перезапуску всього gateway.
- `browser.cdpUrl has invalid port` → налаштований URL CDP має некоректний або неприпустимий порт.
- `No Chrome tabs found for profile="user"`у профілі приєднання Chrome MCP немає відкритих локальних вкладок Chrome.
- `Remote CDP for profile "<name>" is not reachable` → налаштована віддалена кінцева точка CDP недосяжна з хоста gateway.
- `Browser attachOnly is enabled ... not reachable` або `Browser attachOnly is enabled and CDP websocket ... is not reachable` → профіль лише для приєднання не має досяжної цілі, або HTTP endpoint відповів, але CDP WebSocket усе одно не вдалося відкрити.
- `Playwright is not available in this gateway build; '<feature>' is unsupported.`у поточному встановленні gateway відсутній повний пакет Playwright; знімки ARIA і базові знімки сторінки все ще можуть працювати, але навігація, AI snapshots, знімки елементів за CSS-селекторами та експорт PDF залишаються недоступними.
- `fullPage is not supported for element screenshots` → запит screenshot поєднав `--full-page` з `--ref` або `--element`.
- `element screenshots are not supported for existing-session profiles; use ref from snapshot.` → виклики screenshot для Chrome MCP / `existing-session` мають використовувати захоплення сторінки або snapshot `--ref`, а не CSS `--element`.
- `existing-session file uploads do not support element selectors; use ref/inputRef.`hooks завантаження файлів у Chrome MCP потребують snapshot refs, а не CSS-селекторів.
- `existing-session file uploads currently support one file at a time.`для профілів Chrome MCP надсилайте одне завантаження за виклик.
- `existing-session dialog handling does not support timeoutMs.`hooks діалогів у профілях Chrome MCP не підтримують перевизначення timeout.
- `response body is not supported for existing-session profiles yet.``responsebody` поки що потребує керованого браузера або сирого профілю CDP.
- застарілі перевизначення viewport / dark-mode / locale / offline для профілів лише для приєднання або віддалених CDP-профілів → виконайте `openclaw browser stop --browser-profile <name>`, щоб закрити активну сесію керування та скинути стан емуляції Playwright/CDP без перезапуску всього gateway.
Пов’язане:
@ -437,7 +437,7 @@ openclaw doctor
## Якщо ви оновилися і щось раптово зламалося
Більшість проблем після оновлення — це дрейф конфігурації або суворіші типові налаштування, які тепер примусово застосовуються.
Більшість проблем після оновлення — це дрейф конфігурації або суворіші стандартні значення, які тепер застосовуються.
### 1) Змінилася поведінка auth і перевизначення URL
@ -450,15 +450,15 @@ openclaw config get gateway.auth.mode
Що перевірити:
- Якщо `gateway.mode=remote`, виклики CLI можуть бути спрямовані на remote, тоді як локальний сервіс працює нормально.
- Явні виклики `--url` не використовують збережені облікові дані як резервний варіант.
- Якщо `gateway.mode=remote`, виклики CLI можуть спрямовуватися на remote, тоді як ваша локальна служба працює нормально.
- Явні виклики `--url` не переходять до збережених облікових даних.
Типові ознаки:
Поширені ознаки:
- `gateway connect failed:` → неправильна ціль URL.
- `gateway connect failed:` → неправильна URL-ціль.
- `unauthorized` → endpoint досяжний, але auth неправильна.
### 2) Обмеження bind і auth стали суворішими
### 2) Guardrails для bind і auth стали суворішими
```bash
openclaw config get gateway.bind
@ -470,13 +470,13 @@ openclaw logs --follow
Що перевірити:
- Для bind не до loopback (`lan`, `tailnet`, `custom`) потрібен дійсний шлях auth gateway: auth через shared token/password або коректно налаштоване розгортання non-loopback `trusted-proxy`.
- Bind не до loopback (`lan`, `tailnet`, `custom`) потребують коректного шляху auth gateway: shared token/password auth або правильно налаштованого розгортання `trusted-proxy` не на loopback.
- Старі ключі на кшталт `gateway.token` не замінюють `gateway.auth.token`.
Типові ознаки:
Поширені ознаки:
- `refusing to bind gateway ... without auth`прив’язка не до loopback без дійсного шляху auth gateway.
- `RPC probe: failed` while runtime is running → gateway живий, але недоступний з поточною auth/url.
- `refusing to bind gateway ... without auth`bind не до loopback без коректного шляху auth gateway.
- `RPC probe: failed` коли runtime працює → gateway живий, але недоступний із поточними auth/url.
### 3) Змінився стан pairing та ідентичності пристрою
@ -489,15 +489,15 @@ openclaw doctor
Що перевірити:
- Очікують схвалення пристрої для dashboard/nodes.
- Очікують схвалення DM pairing після змін політики або ідентичності.
- Pending-схвалення пристроїв для dashboard/nodes.
- Pending-схвалення pairing для DM після змін політики або ідентичності.
Типові ознаки:
Поширені ознаки:
- `device identity required`вимоги device auth не виконано.
- `device identity required` → auth пристрою не виконано.
- `pairing required` → відправника/пристрій потрібно схвалити.
Якщо після перевірок конфігурація сервісу й runtime усе ще не збігаються, перевстановіть метадані сервісу з того самого каталогу profile/state:
Якщо після перевірок конфігурація служби й runtime усе ще не збігаються, перевстановіть метадані служби з того самого каталогу профілю/стану:
```bash
openclaw gateway install --force

View File

@ -1,21 +1,21 @@
---
read_when:
- OpenClaw не працює, і вам потрібен найшвидший шлях до виправлення
- Ви хочете пройти процес тріажу перед зануренням у докладні інструкції
summary: Центр усунення несправностей OpenClaw зі швидкою діагностикою за симптомами
- Вам потрібен процес первинної діагностики, перш ніж переходити до детальних інструкцій
summary: Центр усунення несправностей OpenClaw за симптомами
title: Загальне усунення несправностей
x-i18n:
generated_at: "2026-04-07T14:58:59Z"
generated_at: "2026-04-10T20:41:24Z"
model: gpt-5.4
provider: openai
source_hash: 8abda90ef80234c2f91a51c5e1f2c004d4a4da12a5d5631b5927762550c6d5e3
source_hash: 16b38920dbfdc8d4a79bbb5d6fab2c67c9f218a97c36bb4695310d7db9c4614a
source_path: help/troubleshooting.md
workflow: 15
---
# Усунення несправностей
Якщо у вас є лише 2 хвилини, використайте цю сторінку як початкову точку тріажу.
Якщо у вас є лише 2 хвилини, використайте цю сторінку як початкову точку діагностики.
## Перші 60 секунд
@ -33,45 +33,47 @@ openclaw logs --follow
Хороший результат в одному рядку:
- `openclaw status` → показує налаштовані канали та відсутність явних помилок автентифікації.
- `openclaw status` → показує налаштовані канали та відсутність очевидних помилок автентифікації.
- `openclaw status --all` → повний звіт наявний і ним можна поділитися.
- `openclaw gateway probe` → очікувана ціль gateway доступна (`Reachable: yes`). `RPC: limited - missing scope: operator.read` означає погіршену діагностику, а не збій підключення.
- `openclaw gateway status``Runtime: running` і `RPC probe: ok`.
- `openclaw doctor` → немає блокувальних помилок конфігурації/сервісу.
- `openclaw channels status --probe` → доступний gateway повертає живий стан транспорту для кожного облікового запису разом із результатами probe/audit, такими як `works` або `audit ok`; якщо gateway недоступний, команда повертається до зведень лише за конфігурацією.
- `openclaw doctor` → немає блокувальних помилок конфігурації або сервісу.
- `openclaw channels status --probe` → доступний gateway повертає поточний
стан транспорту для кожного облікового запису разом із результатами probe/audit, такими як `works` або `audit ok`; якщо
gateway недоступний, команда переходить до зведень лише за конфігурацією.
- `openclaw logs --follow` → стабільна активність, без повторюваних фатальних помилок.
## 429 для довгого контексту Anthropic
## Anthropic long context 429
Якщо ви бачите:
`HTTP 429: rate_limit_error: Extra usage is required for long context requests`,
перейдіть до [/gateway/troubleshooting#anthropic-429-extra-usage-required-for-long-context](/uk/gateway/troubleshooting#anthropic-429-extra-usage-required-for-long-context).
## Локальний OpenAI-compatible backend працює напряму, але не працює в OpenClaw
## Локальний OpenAI-compatible бекенд працює напряму, але не працює в OpenClaw
Якщо ваш локальний або self-hosted backend `/v1` відповідає на малі прямі probe до
`/v1/chat/completions`, але завершується помилкою в `openclaw infer model run` або під час звичайних
Якщо ваш локальний або самостійно розміщений `/v1` бекенд відповідає на малі прямі
перевірки `/v1/chat/completions`, але завершується помилкою в `openclaw infer model run` або під час звичайних
ходів агента:
1. Якщо помилка згадує, що `messages[].content` має бути рядком, установіть
1. Якщо помилка згадує, що `messages[].content` очікує рядок, встановіть
`models.providers.<provider>.models[].compat.requiresStringContent: true`.
2. Якщо backend усе ще завершується помилкою лише під час ходів агента OpenClaw, установіть
2. Якщо бекенд усе ще не працює лише під час ходів агента OpenClaw, встановіть
`models.providers.<provider>.models[].compat.supportsTools: false` і повторіть спробу.
3. Якщо крихітні прямі виклики все ще працюють, але більші запити OpenClaw аварійно завершують роботу
backend, розглядайте решту проблеми як обмеження висхідної моделі/сервера та
продовжуйте в докладній інструкції:
3. Якщо крихітні прямі виклики все ще працюють, але більші запити OpenClaw призводять до збою
бекенда, розглядайте решту проблеми як обмеження моделі/сервера на стороні джерела
і перейдіть до детальної інструкції:
[/gateway/troubleshooting#local-openai-compatible-backend-passes-direct-probes-but-agent-runs-fail](/uk/gateway/troubleshooting#local-openai-compatible-backend-passes-direct-probes-but-agent-runs-fail)
## Не вдається встановити plugin через відсутні openclaw extensions
## Не вдається встановити плагін через відсутні openclaw extensions
Якщо встановлення завершується помилкою `package.json missing openclaw.extensions`, пакет plugin
Якщо встановлення завершується помилкою `package.json missing openclaw.extensions`, пакет плагіна
використовує стару структуру, яку OpenClaw більше не приймає.
Виправлення в пакеті plugin:
Виправлення в пакеті плагіна:
1. Додайте `openclaw.extensions` до `package.json`.
2. Спрямуйте записи на зібрані runtime-файли (зазвичай `./dist/index.js`).
3. Перевидайте plugin і знову виконайте `openclaw plugins install <package>`.
3. Повторно опублікуйте плагін і знову виконайте `openclaw plugins install <package>`.
Приклад:
@ -85,28 +87,28 @@ openclaw logs --follow
}
```
Довідка: [Архітектура plugin](/uk/plugins/architecture)
Довідка: [Архітектура плагінів](/uk/plugins/architecture)
## Дерево рішень
```mermaid
flowchart TD
A[OpenClaw is not working] --> B{What breaks first}
B --> C[No replies]
B --> D[Dashboard or Control UI will not connect]
B --> E[Gateway will not start or service not running]
B --> F[Channel connects but messages do not flow]
B --> G[Cron or heartbeat did not fire or did not deliver]
B --> H[Node is paired but camera canvas screen exec fails]
B --> I[Browser tool fails]
A[OpenClaw не працює] --> B{Що ламається першим}
B --> C[Немає відповідей]
B --> D[Dashboard або Control UI не підключається]
B --> E[Gateway не запускається або сервіс не запущено]
B --> F[Канал підключається, але повідомлення не проходять]
B --> G[Cron або heartbeat не спрацював чи не доставив]
B --> H[Node з'єднано, але інструмент camera canvas screen exec не працює]
B --> I[Не працює інструмент браузера]
C --> C1[/No replies section/]
D --> D1[/Control UI section/]
E --> E1[/Gateway section/]
F --> F1[/Channel flow section/]
G --> G1[/Automation section/]
H --> H1[/Node tools section/]
I --> I1[/Browser section/]
C --> C1[/Розділ Немає відповідей/]
D --> D1[/Розділ Control UI/]
E --> E1[/Розділ Gateway/]
F --> F1[/Розділ Потік каналу/]
G --> G1[/Розділ Автоматизація/]
H --> H1[/Розділ Інструменти node/]
I --> I1[/Розділ Браузер/]
```
<AccordionGroup>
@ -123,16 +125,16 @@ flowchart TD
- `Runtime: running`
- `RPC probe: ok`
- Ваш канал показує підключений транспорт і, де підтримується, `works` або `audit ok` у `channels status --probe`
- Відправник позначений як схвалений (або для DM політика відкрита/allowlist)
- Ваш канал показує підключений транспорт і, де це підтримується, `works` або `audit ok` у `channels status --probe`
- Відправника показано як схваленого (або політика DM є відкритою/зі списком дозволених)
Поширені сигнатури в логах:
- `drop guild message (mention required` → обмеження згадки заблокувало повідомлення в Discord.
- `pairing request` → відправника не схвалено, і він очікує схвалення pairing у DM.
- `drop guild message (mention required` → обмеження за згадкою заблокувало повідомлення в Discord.
- `pairing request` → відправник не схвалений і очікує схвалення DM pairing.
- `blocked` / `allowlist` у логах каналу → відправник, кімната або група відфільтровані.
Докладні сторінки:
Детальні сторінки:
- [/gateway/troubleshooting#no-replies](/uk/gateway/troubleshooting#no-replies)
- [/channels/troubleshooting](/uk/channels/troubleshooting)
@ -140,7 +142,7 @@ flowchart TD
</Accordion>
<Accordion title="Dashboard або Control UI не підключаються">
<Accordion title="Dashboard або Control UI не підключається">
```bash
openclaw status
openclaw gateway status
@ -151,22 +153,27 @@ flowchart TD
Хороший результат виглядає так:
- `Dashboard: http://...` показується в `openclaw gateway status`
- `Dashboard: http://...` показано в `openclaw gateway status`
- `RPC probe: ok`
- У логах немає циклу автентифікації
Поширені сигнатури в логах:
- `device identity required` → HTTP/незахищений контекст не може завершити автентифікацію пристрою.
- `origin not allowed``Origin` браузера не дозволений для цілі gateway Control UI.
- `AUTH_TOKEN_MISMATCH` із підказками повторної спроби (`canRetryWithDeviceToken=true`) → одна повторна спроба з довіреним токеном пристрою може відбутися автоматично.
- Ця повторна спроба з кешованим токеном повторно використовує кешований набір scope, збережений разом із paired токеном пристрою. Виклики з явним `deviceToken` / явними `scopes` натомість зберігають запитаний ними набір scope.
- В асинхронному шляху Tailscale Serve Control UI невдалі спроби для того самого `{scope, ip}` серіалізуються до того, як limiter зафіксує помилку, тому друга одночасна невдала повторна спроба вже може показати `retry later`.
- `too many failed authentication attempts (retry later)` з браузерного джерела localhost → повторні невдалі спроби з того самого `Origin` тимчасово блокуються; інше джерело localhost використовує окремий bucket.
- повторюване `unauthorized` після цієї повторної спроби → неправильний токен/пароль, невідповідність режиму автентифікації або застарілий paired токен пристрою.
- `gateway connect failed:` → UI спрямовано на неправильний URL/порт або gateway недоступний.
- `origin not allowed``Origin` браузера не дозволений для цілі gateway у Control UI.
- `AUTH_TOKEN_MISMATCH` із підказками повторної спроби (`canRetryWithDeviceToken=true`) → одна повторна спроба з довіреним токеном пристрою може виконуватися автоматично.
- Ця повторна спроба з кешованим токеном повторно використовує кешований набір scope, збережений разом із прив’язаним
токеном пристрою. Виклики з явним `deviceToken` / явними `scopes` натомість зберігають
свій запитаний набір scope.
- На асинхронному шляху Tailscale Serve Control UI невдалі спроби для того самого
`{scope, ip}` серіалізуються до того, як limiter фіксує збій, тож
друга одночасна невдала повторна спроба вже може показати `retry later`.
- `too many failed authentication attempts (retry later)` з браузерного origin localhost → повторні
невдалі спроби з того самого `Origin` тимчасово блокуються; інший origin localhost використовує окремий bucket.
- повторювані `unauthorized` після цієї повторної спроби → неправильний токен/пароль, невідповідність режиму автентифікації або застарілий токен прив’язаного пристрою.
- `gateway connect failed:` → UI націлений на неправильний URL/порт або gateway недоступний.
Докладні сторінки:
Детальні сторінки:
- [/gateway/troubleshooting#dashboard-control-ui-connectivity](/uk/gateway/troubleshooting#dashboard-control-ui-connectivity)
- [/web/control-ui](/web/control-ui)
@ -174,7 +181,7 @@ flowchart TD
</Accordion>
<Accordion title="Gateway не запускається або сервіс встановлено, але він не працює">
<Accordion title="Gateway не запускається або сервіс встановлено, але він не запущений">
```bash
openclaw status
openclaw gateway status
@ -191,11 +198,11 @@ flowchart TD
Поширені сигнатури в логах:
- `Gateway start blocked: set gateway.mode=local` або `existing config is missing gateway.mode` → режим gateway є remote, або у файлі конфігурації відсутня позначка локального режиму, і його слід виправити.
- `Gateway start blocked: set gateway.mode=local` або `existing config is missing gateway.mode` → режим gateway є remote, або у файлі конфігурації відсутня позначка локального режиму, і його слід відновити.
- `refusing to bind gateway ... without auth` → прив’язування не до loopback без дійсного шляху автентифікації gateway (токен/пароль або trusted-proxy, якщо налаштовано).
- `another gateway instance is already listening` або `EADDRINUSE` → порт уже зайнятий.
- `another gateway instance is already listening` або `EADDRINUSE` → порт уже зайнято.
Докладні сторінки:
Детальні сторінки:
- [/gateway/troubleshooting#gateway-service-not-running](/uk/gateway/troubleshooting#gateway-service-not-running)
- [/gateway/background-process](/uk/gateway/background-process)
@ -214,24 +221,24 @@ flowchart TD
Хороший результат виглядає так:
- Транспорт каналу підключено.
- Транспорт каналу підключений.
- Перевірки pairing/allowlist проходять.
- Згадки виявляються там, де це потрібно.
Поширені сигнатури в логах:
- `mention required` → обмеження згадки в групі заблокувало обробку.
- `pairing` / `pending` → відправника DM ще не схвалено.
- `mention required` → обмеження за згадкою в групі заблокувало обробку.
- `pairing` / `pending` → відправник DM ще не схвалений.
- `not_in_channel`, `missing_scope`, `Forbidden`, `401/403` → проблема з токеном дозволів каналу.
Докладні сторінки:
Детальні сторінки:
- [/gateway/troubleshooting#channel-connected-messages-not-flowing](/uk/gateway/troubleshooting#channel-connected-messages-not-flowing)
- [/channels/troubleshooting](/uk/channels/troubleshooting)
</Accordion>
<Accordion title="Cron або heartbeat не спрацювали чи не були доставлені">
<Accordion title="Cron або heartbeat не спрацював чи не доставив">
```bash
openclaw status
openclaw gateway status
@ -243,28 +250,29 @@ flowchart TD
Хороший результат виглядає так:
- `cron.status` показує, що cron увімкнено і є наступне пробудження.
- `cron.status` показує, що його ввімкнено, і вказує наступне пробудження.
- `cron runs` показує нещодавні записи `ok`.
- Heartbeat увімкнено і він не поза активними годинами.
- Heartbeat увімкнено, і він не поза активними годинами.
Поширені сигнатури в логах:
- `cron: scheduler disabled; jobs will not run automatically` → cron вимкнено.
- `heartbeat skipped` з `reason=quiet-hours` → поза налаштованими активними годинами.
- `heartbeat skipped` з `reason=empty-heartbeat-file``HEARTBEAT.md` існує, але містить лише порожній каркас або каркас лише із заголовками.
- `heartbeat skipped` з `reason=no-tasks-due`у `HEARTBEAT.md` активний режим завдань, але ще не настав час для жодного з інтервалів завдань.
- `heartbeat skipped` з `reason=alerts-disabled` → усю видимість heartbeat вимкнено (`showOk`, `showAlerts` і `useIndicator` усі вимкнені).
- `requests-in-flight` → основна смуга зайнята; пробудження heartbeat було відкладено. - `unknown accountId` → цільовий account heartbeat для доставки не існує.
- `cron: scheduler disabled; jobs will not run automatically` → cron вимкнено.
- `heartbeat skipped` з `reason=quiet-hours` → поза налаштованими активними годинами.
- `heartbeat skipped` з `reason=empty-heartbeat-file``HEARTBEAT.md` існує, але містить лише порожній каркас або лише заголовки.
- `heartbeat skipped` з `reason=no-tasks-due` → режим завдань `HEARTBEAT.md` активний, але жоден із інтервалів завдань ще не настав.
- `heartbeat skipped` з `reason=alerts-disabled` → усю видимість heartbeat вимкнено (`showOk`, `showAlerts` і `useIndicator` усі вимкнені).
- `requests-in-flight` → основна лінія зайнята; пробудження heartbeat було відкладено.
- `unknown accountId` → цільовий обліковий запис доставки heartbeat не існує.
Докладні сторінки:
Детальні сторінки:
- [/gateway/troubleshooting#cron-and-heartbeat-delivery](/uk/gateway/troubleshooting#cron-and-heartbeat-delivery)
- [/automation/cron-jobs#troubleshooting](/uk/automation/cron-jobs#troubleshooting)
- [/gateway/heartbeat](/uk/gateway/heartbeat)
- [/gateway/troubleshooting#cron-and-heartbeat-delivery](/uk/gateway/troubleshooting#cron-and-heartbeat-delivery)
- [/automation/cron-jobs#troubleshooting](/uk/automation/cron-jobs#troubleshooting)
- [/gateway/heartbeat](/uk/gateway/heartbeat)
</Accordion>
<Accordion title="Node paired, але інструмент не працює: camera canvas screen exec">
<Accordion title="Node з'єднано, але інструмент не працює: camera canvas screen exec">
```bash
openclaw status
openclaw gateway status
@ -275,18 +283,18 @@ flowchart TD
Хороший результат виглядає так:
- Node вказано як підключений і paired для ролі `node`.
- Для команди, яку ви викликаєте, існує capability.
- Для інструмента надано стан дозволу.
- Node вказано як підключений і прив’язаний для ролі `node`.
- Для команди, яку ви викликаєте, наявна capability.
- Для інструмента надано потрібний стан дозволів.
Поширені сигнатури в логах:
- `NODE_BACKGROUND_UNAVAILABLE` → переведіть застосунок node на передній план.
- `*_PERMISSION_REQUIRED` → дозвіл ОС було відхилено або він відсутній.
- `SYSTEM_RUN_DENIED: approval required`очікується схвалення exec.
- `SYSTEM_RUN_DENIED: allowlist miss` → команди немає в allowlist exec.
- `*_PERMISSION_REQUIRED` → дозвіл ОС було відхилено або його бракує.
- `SYSTEM_RUN_DENIED: approval required` → схвалення exec очікує підтвердження.
- `SYSTEM_RUN_DENIED: allowlist miss` → команда відсутня у списку дозволених для exec.
Докладні сторінки:
Детальні сторінки:
- [/gateway/troubleshooting#node-paired-tool-fails](/uk/gateway/troubleshooting#node-paired-tool-fails)
- [/nodes/troubleshooting](/uk/nodes/troubleshooting)
@ -294,7 +302,7 @@ flowchart TD
</Accordion>
<Accordion title="Exec раптово почав вимагати схвалення">
<Accordion title="Exec раптом почав вимагати схвалення">
```bash
openclaw config get tools.exec.host
openclaw config get tools.exec.security
@ -304,14 +312,14 @@ flowchart TD
Що змінилося:
- Якщо `tools.exec.host` не встановлено, значенням за замовчуванням є `auto`.
- `host=auto` визначається як `sandbox`, коли активний runtime sandbox, інакше як `gateway`.
- `host=auto` відповідає лише за маршрутизацію; поведінка "YOLO" без запиту визначається `security=full` разом із `ask=off` на gateway/node.
- Для `gateway` і `node` невстановлений `tools.exec.security` за замовчуванням має значення `full`.
- Невстановлений `tools.exec.ask` за замовчуванням має значення `off`.
- Результат: якщо ви бачите схвалення, якась локальна для хоста або поточної сесії політика зробила exec суворішим порівняно з поточними значеннями за замовчуванням.
- Якщо `tools.exec.host` не задано, значенням за замовчуванням є `auto`.
- `host=auto` розв’язується в `sandbox`, коли активне sandbox runtime, і в `gateway` у протилежному разі.
- `host=auto` відповідає лише за маршрутизацію; поведінка "YOLO" без запиту зумовлюється `security=full` разом із `ask=off` на gateway/node.
- У `gateway` і `node` незадане `tools.exec.security` за замовчуванням має значення `full`.
- Незадане `tools.exec.ask` за замовчуванням має значення `off`.
- Результат: якщо ви бачите схвалення, якийсь локальний для хоста або для сеансу policy посилив exec порівняно з поточними значеннями за замовчуванням.
Відновлення поточної поведінки за замовчуванням без схвалень:
Відновити поточну типову поведінку без схвалення:
```bash
openclaw config set tools.exec.host gateway
@ -322,21 +330,21 @@ flowchart TD
Безпечніші альтернативи:
- Встановіть лише `tools.exec.host=gateway`, якщо вам просто потрібна стабільна маршрутизація на хості.
- Використовуйте `security=allowlist` з `ask=on-miss`, якщо хочете exec на хості, але також хочете перевірку у разі промахів по allowlist.
- Увімкніть режим sandbox, якщо хочете, щоб `host=auto` знову визначався як `sandbox`.
- Встановіть лише `tools.exec.host=gateway`, якщо вам потрібна просто стабільна маршрутизація хоста.
- Використовуйте `security=allowlist` разом із `ask=on-miss`, якщо хочете виконання на хості, але все ще бажаєте перевірку у випадках промаху по allowlist.
- Увімкніть режим sandbox, якщо хочете, щоб `host=auto` знову розв’язувався в `sandbox`.
Поширені сигнатури в логах:
- `Approval required.` → команда очікує на `/approve ...`.
- `SYSTEM_RUN_DENIED: approval required` → очікується схвалення exec на хості node.
- `exec host=sandbox requires a sandbox runtime for this session` → неявно/явно вибрано sandbox, але режим sandbox вимкнено.
- `SYSTEM_RUN_DENIED: approval required` → очікує схвалення для node-host exec.
- `exec host=sandbox requires a sandbox runtime for this session` → неявно або явно вибрано sandbox, але режим sandbox вимкнено.
Докладні сторінки:
Детальні сторінки:
- [/tools/exec](/uk/tools/exec)
- [/tools/exec-approvals](/uk/tools/exec-approvals)
- [/gateway/security#runtime-expectation-drift](/uk/gateway/security#runtime-expectation-drift)
- [/gateway/security#what-the-audit-checks-high-level](/uk/gateway/security#what-the-audit-checks-high-level)
</Accordion>
@ -351,22 +359,22 @@ flowchart TD
Хороший результат виглядає так:
- Стан браузера показує `running: true` і вибраний браузер/профіль.
- `openclaw` запускається, або `user` бачить локальні вкладки Chrome.
- Статус браузера показує `running: true` і вибраний браузер/профіль.
- `openclaw` запускається, або `user` може бачити локальні вкладки Chrome.
Поширені сигнатури в логах:
- `unknown command "browser"` або `unknown command 'browser'``plugins.allow` установлено, але воно не містить `browser`.
- `Failed to start Chrome CDP on port` → не вдалося запустити локальний браузер Chrome CDP.
- `browser.executablePath not found`налаштований шлях до бінарного файла неправильний.
- `unknown command "browser"` або `unknown command 'browser'`задано `plugins.allow`, і воно не містить `browser`.
- `Failed to start Chrome CDP on port` → не вдалося запустити локальний Chrome CDP на порту.
- `browser.executablePath not found`указаний шлях до виконуваного файла неправильний.
- `browser.cdpUrl must be http(s) or ws(s)` → налаштований URL CDP використовує непідтримувану схему.
- `browser.cdpUrl has invalid port` → налаштований URL CDP містить неправильний або позадіапазонний порт.
- `No Chrome tabs found for profile="user"`профіль приєднання Chrome MCP не має відкритих локальних вкладок Chrome.
- `browser.cdpUrl has invalid port` → налаштований URL CDP має неправильний або неприпустимий порт.
- `No Chrome tabs found for profile="user"`у профілі приєднання Chrome MCP немає відкритих локальних вкладок Chrome.
- `Remote CDP for profile "<name>" is not reachable` → налаштована віддалена кінцева точка CDP недоступна з цього хоста.
- `Browser attachOnly is enabled ... not reachable` або `Browser attachOnly is enabled and CDP websocket ... is not reachable` → профіль attach-only не має живої цілі CDP.
- застарілі перевизначення viewport / dark-mode / locale / offline у профілях attach-only або remote CDP → виконайте `openclaw browser stop --browser-profile <name>`, щоб закрити активну керовану сесію та скинути стан емуляції без перезапуску gateway.
- застарілі перевизначення viewport / dark-mode / locale / offline у профілях attach-only або remote CDP → виконайте `openclaw browser stop --browser-profile <name>`, щоб закрити активний сеанс керування й скинути стан емуляції без перезапуску gateway.
Докладні сторінки:
Детальні сторінки:
- [/gateway/troubleshooting#browser-tool-fails](/uk/gateway/troubleshooting#browser-tool-fails)
- [/tools/browser#missing-browser-command-or-tool](/uk/tools/browser#missing-browser-command-or-tool)
@ -374,12 +382,13 @@ flowchart TD
- [/tools/browser-wsl2-windows-remote-cdp-troubleshooting](/uk/tools/browser-wsl2-windows-remote-cdp-troubleshooting)
</Accordion>
</AccordionGroup>
## Пов’язані матеріали
## Пов’язане
- [FAQ](/uk/help/faq) — поширені запитання
- [Усунення несправностей gateway](/uk/gateway/troubleshooting) — проблеми, пов’язані з gateway
- [Doctor](/uk/gateway/doctor) — автоматичні перевірки стану та виправлення
- [Усунення несправностей Gateway](/uk/gateway/troubleshooting) — проблеми, пов’язані з gateway
- [Doctor](/uk/gateway/doctor) — автоматизовані перевірки стану та виправлення
- [Усунення несправностей каналів](/uk/channels/troubleshooting) — проблеми з підключенням каналів
- [Усунення несправностей автоматизації](/uk/automation/cron-jobs#troubleshooting) — проблеми з cron і heartbeat

View File

@ -1,106 +1,104 @@
---
read_when:
- Ви створюєте новий плагін каналу повідомлень
- Ви створюєте новий плагін каналу обміну повідомленнями
- Ви хочете підключити OpenClaw до платформи обміну повідомленнями
- Вам потрібно зрозуміти поверхню адаптера ChannelPlugin
sidebarTitle: Channel Plugins
summary: Покроковий посібник зі створення плагіна каналу повідомлень для OpenClaw
summary: Покроковий посібник зі створення плагіна каналу обміну повідомленнями для OpenClaw
title: Створення плагінів каналів
x-i18n:
generated_at: "2026-04-07T20:09:23Z"
generated_at: "2026-04-10T20:41:27Z"
model: gpt-5.4
provider: openai
source_hash: d23365b6d92006b30e671f9f0afdba40a2b88c845c5d2299d71c52a52985672f
source_hash: 8a026e924f9ae8a3ddd46287674443bcfccb0247be504261522b078e1f440aef
source_path: plugins/sdk-channel-plugins.md
workflow: 15
---
# Створення плагінів каналів
Цей посібник допоможе вам створити плагін каналу, який підключає OpenClaw до
платформи обміну повідомленнями. Наприкінці у вас буде робочий канал із
безпекою DM, сполученням, потоками відповідей і вихідними повідомленнями.
Цей посібник покроково пояснює створення плагіна каналу, який підключає OpenClaw до
платформи обміну повідомленнями. Наприкінці у вас буде робочий канал із захистом DM,
сполученням, потоками відповідей та вихідними повідомленнями.
<Info>
Якщо ви раніше не створювали жодного плагіна OpenClaw, спочатку прочитайте
[Початок роботи](/uk/plugins/building-plugins) про базову структуру пакета
та налаштування маніфесту.
[Початок роботи](/uk/plugins/building-plugins), щоб ознайомитися з базовою
структурою пакета та налаштуванням маніфесту.
</Info>
## Як працюють плагіни каналів
Плагінам каналів не потрібні власні інструменти send/edit/react. OpenClaw
зберігає один спільний інструмент `message` у ядрі. Вашому плагіну належать:
Плагінам каналів не потрібні власні інструменти send/edit/react. OpenClaw зберігає
один спільний інструмент `message` у core. Ваш плагін відповідає за:
- **Конфігурація** — визначення облікового запису та майстер налаштування
- **Безпека** — політика DM і списки дозволених
- **Конфігурацію** — визначення облікового запису та майстер налаштування
- **Безпеку** — політику DM і allowlist-списки
- **Сполучення** — потік підтвердження DM
- **Граматика сесії** — як ідентифікатори розмов, специфічні для провайдера, зіставляються з базовими чатами, ідентифікаторами потоків і резервними батьківськими елементами
- **Вихідні повідомлення** — надсилання тексту, медіа й опитувань на платформу
- **Потоки** — як групуються відповіді
- **Граматику сесій** — як ідентифікатори розмов, специфічні для провайдера, відображаються на базові чати, ідентифікатори потоків і резервні батьківські значення
- **Вихідні повідомлення** — надсилання тексту, медіа та опитувань на платформу
- **Потоковість** — як організовуються потоки відповідей
Ядру належать спільний інструмент message, зв’язування промптів, зовнішня форма
ключа сесії, загальний облік `:thread:` і диспетчеризація.
Core відповідає за спільний інструмент повідомлень, підключення prompt, зовнішню форму ключа сесії,
загальне ведення обліку `:thread:` та диспетчеризацію.
Якщо ваша платформа зберігає додаткову область дії в ідентифікаторах розмов,
залишайте цей розбір у плагіні за допомогою
`messaging.resolveSessionConversation(...)`. Це канонічний хук для
зіставлення `rawId` з базовим ідентифікатором розмови, необов’язковим
ідентифікатором потоку, явним `baseConversationId` і будь-якими
`parentConversationCandidates`.
Якщо ваша платформа зберігає додаткову область видимості всередині ідентифікаторів розмов,
залишайте цей парсинг у плагіні за допомогою `messaging.resolveSessionConversation(...)`. Це канонічний хук
для зіставлення `rawId` з базовим ідентифікатором розмови, необов’язковим ідентифікатором потоку,
явним `baseConversationId` та будь-якими `parentConversationCandidates`.
Коли ви повертаєте `parentConversationCandidates`, зберігайте їхній порядок від
найвужчого батьківського елемента до найширшої/базової розмови.
Вбудовані плагіни, яким потрібен той самий розбір до запуску реєстру каналів,
також можуть експортувати файл верхнього рівня `session-key-api.ts` із
відповідним експортом `resolveSessionConversation(...)`. Ядро використовує цю
безпечну для завантаження поверхню лише тоді, коли реєстр плагінів під час
виконання ще недоступний.
Вбудовані плагіни, яким потрібен той самий парсинг до запуску реєстру каналів,
також можуть експортувати файл верхнього рівня `session-key-api.ts` з відповідним
експортом `resolveSessionConversation(...)`. Core використовує цю безпечну для bootstrap поверхню
лише тоді, коли реєстр runtime-плагінів ще недоступний.
`messaging.resolveParentConversationCandidates(...)` залишається доступним як
застарілий резервний варіант сумісності, коли плагіну потрібні лише резервні
батьківські елементи поверх загального/raw id. Якщо наявні обидва хуки, ядро
спочатку використовує
`messaging.resolveParentConversationCandidates(...)` залишається доступним як застарілий
резервний механізм сумісності, коли плагіну потрібні лише резервні батьківські значення
поверх загального/raw id. Якщо існують обидва хуки, core спочатку використовує
`resolveSessionConversation(...).parentConversationCandidates` і лише потім
повертається до `resolveParentConversationCandidates(...)`, якщо канонічний хук
їх не містить.
їх не вказує.
## Підтвердження та можливості каналів
## Підтвердження та можливості каналу
Більшості плагінів каналів не потрібен код, специфічний для підтверджень.
- Ядру належать `/approve` у тому самому чаті, спільні payload кнопок підтвердження та загальна резервна доставка.
- Надавайте перевагу одному об’єкту `approvalCapability` у плагіні каналу, коли каналу потрібна поведінка, специфічна для підтверджень.
- `ChannelPlugin.approvals` видалено. Розміщуйте факти доставки/нативного відтворення/автентифікації підтверджень у `approvalCapability`.
- `plugin.auth` — лише login/logout; ядро більше не читає з цього об’єкта хуки автентифікації підтверджень.
- `approvalCapability.authorizeActorAction` і `approvalCapability.getActionAvailabilityState`канонічний шов автентифікації підтверджень.
- Використовуйте `approvalCapability.getActionAvailabilityState` для доступності автентифікації підтверджень у тому самому чаті.
- Якщо ваш канал надає нативні підтвердження exec, використовуйте `approvalCapability.getExecInitiatingSurfaceState` для стану поверхні ініціювання/нативного клієнта, коли він відрізняється від автентифікації підтверджень у тому самому чаті. Ядро використовує цей хук, специфічний для exec, щоб розрізняти `enabled` і `disabled`, вирішувати, чи підтримує канал ініціювання нативні підтвердження exec, і включати канал до підказок щодо резервного варіанту для нативного клієнта. `createApproverRestrictedNativeApprovalCapability(...)` заповнює це для типового випадку.
- Використовуйте `outbound.shouldSuppressLocalPayloadPrompt` або `outbound.beforeDeliverPayload` для специфічної для каналу поведінки життєвого циклу payload, наприклад приховування дубльованих локальних підказок підтвердження або надсилання індикаторів набору перед доставкою.
- Використовуйте `approvalCapability.delivery` лише для маршрутизації нативних підтверджень або придушення резервної доставки.
- Використовуйте `approvalCapability.nativeRuntime` для фактів нативних підтверджень, що належать каналу. Зберігайте його лінивим у гарячих точках входу каналу за допомогою `createLazyChannelApprovalNativeRuntimeAdapter(...)`, який може імпортувати ваш runtime-модуль на вимогу, водночас дозволяючи ядру збирати життєвий цикл підтверджень.
- Використовуйте `approvalCapability.render` лише тоді, коли каналу справді потрібні власні payload підтверджень замість спільного рендерера.
- Використовуйте `approvalCapability.describeExecApprovalSetup`, коли канал хоче, щоб відповідь для вимкненого шляху пояснювала точні параметри конфігурації, потрібні для ввімкнення нативних підтверджень exec. Хук отримує `{ channel, channelLabel, accountId }`; канали з іменованими обліковими записами повинні відтворювати шляхи з областю облікового запису, як-от `channels.<channel>.accounts.<id>.execApprovals.*`, а не значення верхнього рівня за замовчуванням.
- Якщо канал може виводити стабільні DM-ідентичності, схожі на власника, з наявної конфігурації, використовуйте `createResolvedApproverActionAuthAdapter` з `openclaw/plugin-sdk/approval-runtime`, щоб обмежити `/approve` у тому самому чаті без додавання специфічної для підтверджень логіки ядра.
- Якщо каналу потрібна доставка нативних підтверджень, зосередьте код каналу на нормалізації цілі та фактах транспорту/подання. Використовуйте `createChannelExecApprovalProfile`, `createChannelNativeOriginTargetResolver`, `createChannelApproverDmTargetResolver` і `createApproverRestrictedNativeApprovalCapability` з `openclaw/plugin-sdk/approval-runtime`. Розміщуйте специфічні для каналу факти за `approvalCapability.nativeRuntime`, ідеально через `createChannelApprovalNativeRuntimeAdapter(...)` або `createLazyChannelApprovalNativeRuntimeAdapter(...)`, щоб ядро могло збирати обробник і володіти фільтрацією запитів, маршрутизацією, дедуплікацією, строком дії, підпискою gateway і сповіщеннями про маршрутизацію в інше місце. `nativeRuntime` поділено на кілька менших швів:
- `availability` — чи налаштований обліковий запис і чи слід обробляти запит
- `presentation`зіставлення спільної view model підтвердження з нативними payload у станах pending/resolved/expired або фінальними діями
- `transport` — підготовка цілей і надсилання/оновлення/видалення нативних повідомлень підтвердження
- Core відповідає за `/approve` у тому самому чаті, спільні payload-кнопок підтвердження та загальну резервну доставку.
- Віддавайте перевагу одному об’єкту `approvalCapability` у плагіні каналу, якщо каналу потрібна поведінка, специфічна для підтверджень.
- `ChannelPlugin.approvals` видалено. Розміщуйте факти доставки/нативного режиму/рендерингу/автентифікації підтверджень у `approvalCapability`.
- `plugin.auth` призначений лише для login/logout; core більше не читає хуки автентифікації підтверджень із цього об’єкта.
- `approvalCapability.authorizeActorAction` і `approvalCapability.getActionAvailabilityState`це канонічна поверхня для auth підтверджень.
- Використовуйте `approvalCapability.getActionAvailabilityState` для доступності auth підтверджень у тому самому чаті.
- Якщо ваш канал надає нативні exec-підтвердження, використовуйте `approvalCapability.getExecInitiatingSurfaceState` для стану ініціювальної поверхні/нативного клієнта, коли він відрізняється від auth підтвердження в тому самому чаті. Core використовує цей exec-специфічний хук, щоб розрізняти `enabled` і `disabled`, визначати, чи підтримує ініціювальний канал нативні exec-підтвердження, і включати канал до інструкцій резервного сценарію нативного клієнта. `createApproverRestrictedNativeApprovalCapability(...)` заповнює це для типового випадку.
- Використовуйте `outbound.shouldSuppressLocalPayloadPrompt` або `outbound.beforeDeliverPayload` для поведінки життєвого циклу payload, специфічної для каналу, наприклад приховування дубльованих локальних prompt-підтверджень або надсилання індикаторів набору тексту перед доставкою.
- Використовуйте `approvalCapability.delivery` лише для нативної маршрутизації підтверджень або придушення резервної доставки.
- Використовуйте `approvalCapability.nativeRuntime` для фактів нативних підтверджень, що належать каналу. Зберігайте його лінивим на гарячих точках входу каналу за допомогою `createLazyChannelApprovalNativeRuntimeAdapter(...)`, який може імпортувати ваш runtime-модуль на вимогу, водночас дозволяючи core зібрати життєвий цикл підтвердження.
- Використовуйте `approvalCapability.render` лише тоді, коли каналу справді потрібні власні payload підтвердження замість спільного рендерера.
- Використовуйте `approvalCapability.describeExecApprovalSetup`, коли канал хоче, щоб відповідь на вимкнений шлях пояснювала точні параметри конфігурації, потрібні для ввімкнення нативних exec-підтверджень. Хук отримує `{ channel, channelLabel, accountId }`; канали з іменованими обліковими записами мають рендерити шляхи з областю облікового запису, такі як `channels.<channel>.accounts.<id>.execApprovals.*`, замість дефолтів верхнього рівня.
- Якщо канал може вивести стабільні DM-ідентичності на кшталт власника з наявної конфігурації, використовуйте `createResolvedApproverActionAuthAdapter` з `openclaw/plugin-sdk/approval-runtime`, щоб обмежити `/approve` у тому самому чаті без додавання логіки підтверджень у core.
- Якщо каналу потрібна нативна доставка підтверджень, зосередьте код каналу на нормалізації цілі та фактах транспорту/представлення. Використовуйте `createChannelExecApprovalProfile`, `createChannelNativeOriginTargetResolver`, `createChannelApproverDmTargetResolver` і `createApproverRestrictedNativeApprovalCapability` з `openclaw/plugin-sdk/approval-runtime`. Розміщуйте факти, специфічні для каналу, за `approvalCapability.nativeRuntime`, бажано через `createChannelApprovalNativeRuntimeAdapter(...)` або `createLazyChannelApprovalNativeRuntimeAdapter(...)`, щоб core міг зібрати обробник і відповідати за фільтрацію запитів, маршрутизацію, dedupe, строки дії, підписку gateway та сповіщення про маршрутизацію в інше місце. `nativeRuntime` поділено на кілька менших поверхонь:
- `availability` — чи налаштований обліковий запис і чи потрібно обробляти запит
- `presentation`відображення спільної view model підтверджень у нативні payload у станах pending/resolved/expired або фінальні дії
- `transport` — підготовка цілей, а також надсилання/оновлення/видалення нативних повідомлень підтвердження
- `interactions` — необов’язкові хуки bind/unbind/clear-action для нативних кнопок або реакцій
- `observe` — необов’язкові хуки діагностики доставки
- Якщо каналу потрібні об’єкти, що належать runtime, наприклад клієнт, токен, застосунок Bolt або отримувач webhook, реєструйте їх через `openclaw/plugin-sdk/channel-runtime-context`. Загальний реєстр runtime-контексту дозволяє ядру завантажувати обробники, керовані можливостями, зі стану запуску каналу без додавання обгорткового glue-коду, специфічного для підтверджень.
- Звертайтеся до нижчорівневих `createChannelApprovalHandler` або `createChannelNativeApprovalRuntime` лише тоді, коли шов, керований можливостями, ще недостатньо виразний.
- Канали з нативними підтвердженнями повинні маршрутизувати через ці helper-и і `accountId`, і `approvalKind`. `accountId` зберігає політику підтверджень для кількох облікових записів у правильній області бот-облікового запису, а `approvalKind` зберігає для каналу доступну поведінку підтверджень exec або плагіна без жорстко закодованих гілок у ядрі.
- Тепер ядру також належать сповіщення про перемаршрутизацію підтверджень. Плагіни каналів не повинні надсилати власні додаткові повідомлення на кшталт "підтвердження перейшло в DM / інший канал" із `createChannelNativeApprovalRuntime`; натомість надавайте точну маршрутизацію origin + approver-DM через спільні helper-и можливостей підтверджень і дозвольте ядру агрегувати фактичні доставки перед публікацією будь-якого сповіщення назад у чат ініціювання.
- Зберігайте наскрізно тип delivered approval id. Нативні клієнти не повинні вгадувати або переписувати маршрутизацію підтверджень exec чи plugin зі стану, локального для каналу.
- Якщо каналу потрібні об’єкти, що належать runtime, наприклад клієнт, токен, застосунок Bolt або отримувач webhook, реєструйте їх через `openclaw/plugin-sdk/channel-runtime-context`. Загальний реєстр runtime-контексту дає core змогу bootstrap-ити обробники на основі можливостей зі стану запуску каналу без додавання обгорток, специфічних для підтверджень.
- Звертайтеся до нижчорівневих `createChannelApprovalHandler` або `createChannelNativeApprovalRuntime` лише тоді, коли поверхня, заснована на можливостях, ще недостатньо виразна.
- Канали з нативними підтвердженнями мають передавати через ці helper-и і `accountId`, і `approvalKind`. `accountId` зберігає політику підтверджень для кількох облікових записів у межах правильного облікового запису бота, а `approvalKind` зберігає поведінку exec чи плагіна доступною для каналу без жорстко закодованих гілок у core.
- Тепер core також відповідає за сповіщення про повторну маршрутизацію підтверджень. Плагіни каналів не повинні надсилати власні додаткові повідомлення на кшталт «підтвердження перейшло в DM / інший канал» із `createChannelNativeApprovalRuntime`; натомість надавайте точну маршрутизацію origin + approver-DM через спільні helper-и можливостей підтверджень і дозвольте core агрегувати фактичні доставки перед публікацією будь-якого сповіщення назад в ініціювальний чат.
- Зберігайте тип ідентифікатора доставленого підтвердження від початку до кінця. Нативні клієнти не повинні
вгадувати або переписувати маршрутизацію exec чи plugin підтвердження на основі локального стану каналу.
- Різні типи підтверджень можуть навмисно відкривати різні нативні поверхні.
Поточні вбудовані приклади:
- Slack зберігає доступною нативну маршрутизацію підтверджень як для exec, так і для plugin id.
- Matrix зберігає ту саму нативну маршрутизацію DM/каналу та UX реакцій для підтверджень exec і plugin, водночас дозволяючи автентифікації відрізнятися за типом підтвердження.
- `createApproverRestrictedNativeApprovalAdapter` усе ще існує як обгортка сумісності, але новий код має надавати перевагу побудовнику можливостей і експортувати `approvalCapability` у плагіні.
Поточні приклади вбудованих плагінів:
- Slack зберігає нативну маршрутизацію підтверджень доступною як для exec-, так і для plugin-id.
- Matrix зберігає ту саму нативну DM/канальну маршрутизацію та UX реакцій для exec
і plugin-підтверджень, водночас дозволяючи auth відрізнятися за типом підтвердження.
- `createApproverRestrictedNativeApprovalAdapter` усе ще існує як обгортка сумісності, але новий код має віддавати перевагу builder-у можливостей і експонувати `approvalCapability` у плагіні.
Для гарячих точок входу каналу надавайте перевагу вужчим runtime-підшляхам,
коли вам потрібна лише одна частина цієї родини:
Для гарячих точок входу каналу віддавайте перевагу вужчим runtime-підшляхам, коли вам потрібна лише
одна частина цієї сім’ї:
- `openclaw/plugin-sdk/approval-auth-runtime`
- `openclaw/plugin-sdk/approval-client-runtime`
@ -112,107 +110,98 @@ x-i18n:
- `openclaw/plugin-sdk/approval-reply-runtime`
- `openclaw/plugin-sdk/channel-runtime-context`
Так само надавайте перевагу `openclaw/plugin-sdk/setup-runtime`,
Так само віддавайте перевагу `openclaw/plugin-sdk/setup-runtime`,
`openclaw/plugin-sdk/setup-adapter-runtime`,
`openclaw/plugin-sdk/reply-runtime`,
`openclaw/plugin-sdk/reply-dispatch-runtime`,
`openclaw/plugin-sdk/reply-reference` і
`openclaw/plugin-sdk/reply-chunking`, коли вам не потрібна ширша
узагальнена поверхня.
узагальнювальна поверхня.
Окремо для setup:
Зокрема для setup:
- `openclaw/plugin-sdk/setup-runtime` охоплює безпечні для runtime helper-и setup:
безпечні для імпорту адаптери patch setup (`createPatchedAccountSetupAdapter`,
- `openclaw/plugin-sdk/setup-runtime` охоплює runtime-безпечні helper-и setup:
безпечні для імпорту patched-адаптери setup (`createPatchedAccountSetupAdapter`,
`createEnvPatchedAccountSetupAdapter`,
`createSetupInputPresenceValidator`), вивід нотаток пошуку,
`createSetupInputPresenceValidator`), вивід lookup-note,
`promptResolvedAllowFrom`, `splitSetupEntries` і делеговані
побудовники setup-proxy
- `openclaw/plugin-sdk/setup-adapter-runtime` — це вузький env-aware шов
адаптера для `createEnvPatchedAccountSetupAdapter`
- `openclaw/plugin-sdk/channel-setup` охоплює побудовники setup
з необов’язковим встановленням, а також кілька примітивів, безпечних для setup:
builder-и setup-proxy
- `openclaw/plugin-sdk/setup-adapter-runtime` — це вузька env-aware поверхня адаптера
для `createEnvPatchedAccountSetupAdapter`
- `openclaw/plugin-sdk/channel-setup` охоплює builder-и setup для необов’язкового встановлення
плюс кілька setup-безпечних примітивів:
`createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`,
Якщо ваш канал підтримує setup або auth на основі env і загальні потоки
startup/config повинні знати ці назви env ще до завантаження runtime,
оголошуйте їх у маніфесті плагіна через `channelEnvVars`. Зберігайте runtime
`envVars` каналу або локальні константи лише для текстів, орієнтованих на операторів.
Якщо ваш канал підтримує setup або auth на основі env, і загальні потоки startup/config
мають знати ці env-імена до завантаження runtime, оголосіть їх у маніфесті плагіна через
`channelEnvVars`. Зберігайте runtime `envVars` каналу або локальні константи лише для копірайту, видимого операторам.
`createOptionalChannelSetupWizard`, `DEFAULT_ACCOUNT_ID`,
`createTopLevelChannelDmPolicy`, `setSetupChannelEnabled` і
`splitSetupEntries`
- використовуйте ширший шов `openclaw/plugin-sdk/setup` лише тоді, коли вам
також потрібні важчі спільні helper-и setup/config, наприклад
- використовуйте ширшу поверхню `openclaw/plugin-sdk/setup` лише тоді, коли вам також потрібні
важчі спільні helper-и setup/config, такі як
`moveSingleAccountChannelSectionToDefaultAccount(...)`
Якщо ваш канал хоче лише оголошувати "спочатку встановіть цей плагін" на
поверхнях setup, надавайте перевагу `createOptionalChannelSetupSurface(...)`.
Згенеровані adapter/wizard працюють у безпечному зачиненому режимі щодо
записів конфігурації та фіналізації, а також повторно використовують те саме
повідомлення про необхідність встановлення у валідації, finalize і текстах
посилань на документацію.
Якщо ваш канал лише хоче показувати в поверхнях setup повідомлення «спочатку встановіть цей плагін»,
віддавайте перевагу `createOptionalChannelSetupSurface(...)`. Згенеровані
adapter/wizard закриваються з відмовою для записів конфігурації та фіналізації, і повторно використовують
те саме повідомлення про необхідність встановлення для перевірки, finalize і тексту з посиланням на документацію.
Для інших гарячих шляхів каналів надавайте перевагу вузьким helper-ам замість
ширших застарілих поверхонь:
Для інших гарячих шляхів каналу віддавайте перевагу вузьким helper-ам замість ширших застарілих
поверхонь:
- `openclaw/plugin-sdk/account-core`,
`openclaw/plugin-sdk/account-id`,
`openclaw/plugin-sdk/account-resolution` і
`openclaw/plugin-sdk/account-helpers` для конфігурації кількох
облікових записів і резервного варіанта з обліковим записом за
замовчуванням
`openclaw/plugin-sdk/account-helpers` для конфігурації кількох облікових записів та
резервного переходу до облікового запису за замовчуванням
- `openclaw/plugin-sdk/inbound-envelope` і
`openclaw/plugin-sdk/inbound-reply-dispatch` для маршруту/конверта
вхідних повідомлень і зв’язування record-and-dispatch
- `openclaw/plugin-sdk/messaging-targets` для розбору/зіставлення цілей
`openclaw/plugin-sdk/inbound-reply-dispatch` для route/envelope вхідних повідомлень та
зв’язування record-and-dispatch
- `openclaw/plugin-sdk/messaging-targets` для парсингу/зіставлення цілей
- `openclaw/plugin-sdk/outbound-media` і
`openclaw/plugin-sdk/outbound-runtime` для завантаження медіа та
делегатів identity/send для вихідних повідомлень
- `openclaw/plugin-sdk/thread-bindings-runtime` для життєвого циклу
прив’язок потоків і реєстрації адаптерів
- `openclaw/plugin-sdk/agent-media-payload` лише тоді, коли все ще
потрібне застаріле компонування полів payload агента/медіа
- `openclaw/plugin-sdk/telegram-command-config` для нормалізації
користувацьких команд Telegram, валідації дублікатів/конфліктів і стабільного
для fallback контракту конфігурації команд
`openclaw/plugin-sdk/outbound-runtime` для завантаження медіа плюс
делегатів ідентичності/надсилання вихідних повідомлень
- `openclaw/plugin-sdk/thread-bindings-runtime` для життєвого циклу прив’язок потоків
і реєстрації адаптерів
- `openclaw/plugin-sdk/agent-media-payload` лише тоді, коли все ще потрібне
застаріле компонування полів payload агента/медіа
- `openclaw/plugin-sdk/telegram-command-config` для нормалізації користувацьких команд Telegram,
перевірки дублікатів/конфліктів і стабільного резервного контракту конфігурації команд
Канали лише з auth зазвичай можуть зупинитися на шляху за замовчуванням: ядро
обробляє підтвердження, а плагін просто надає можливості outbound/auth. Канали
з нативними підтвердженнями, як-от Matrix, Slack, Telegram і користувацькі
chat-транспорти, мають використовувати спільні нативні helper-и замість
створення власного життєвого циклу підтверджень.
Канали лише з auth зазвичай можуть зупинитися на шляху за замовчуванням: core обробляє підтвердження, а плагін лише надає можливості outbound/auth. Канали з нативними підтвердженнями, такі як Matrix, Slack, Telegram і власні транспортні чати, мають використовувати спільні нативні helper-и замість створення власного життєвого циклу підтверджень.
## Політика вхідних згадок
Розділяйте обробку вхідних згадок на два шари:
Зберігайте обробку вхідних згадок розділеною на два рівні:
- збирання доказів, що належить плагіну
- спільна оцінка політики
- спільне оцінювання політики
Для спільного шару використовуйте `openclaw/plugin-sdk/channel-inbound`.
Використовуйте `openclaw/plugin-sdk/channel-inbound` для спільного рівня.
Добре підходить для локальної логіки плагіна:
- виявлення відповіді боту
- виявлення цитати бота
- виявлення reply-to-bot
- виявлення quoted-bot
- перевірки участі в потоці
- виключення службових/системних повідомлень
- специфічні для платформи нативні кеші, потрібні для підтвердження участі бота
- платформено-нативні кеші, потрібні для підтвердження участі бота
Добре підходить для спільного helper-а:
- `requireMention`
- явний результат згадки
- список дозволених неявних згадок
- allowlist неявних згадок
- обхід для команд
- фінальне рішення про пропуск
Рекомендований потік:
1. Обчисліть локальні факти згадок.
1. Обчисліть локальні факти згадки.
2. Передайте ці факти в `resolveInboundMentionDecision({ facts, policy })`.
3. Використовуйте `decision.effectiveWasMentioned`, `decision.shouldBypassMention` і `decision.shouldSkip` у своїй вхідній перевірці.
3. Використовуйте `decision.effectiveWasMentioned`, `decision.shouldBypassMention` і `decision.shouldSkip` у вашому вхідному шлюзі.
```typescript
import {
@ -252,7 +241,7 @@ if (decision.shouldSkip) return;
```
`api.runtime.channel.mentions` надає ті самі спільні helper-и згадок для
вбудованих плагінів каналів, які вже залежать від runtime injection:
вбудованих плагінів каналів, які вже залежать від ін’єкції runtime:
- `buildMentionRegexes`
- `matchesMentionPatterns`
@ -261,17 +250,17 @@ if (decision.shouldSkip) return;
- `resolveInboundMentionDecision`
Старіші helper-и `resolveMentionGating*` залишаються в
`openclaw/plugin-sdk/channel-inbound` лише як експорти сумісності. Новий код
повинен використовувати `resolveInboundMentionDecision({ facts, policy })`.
`openclaw/plugin-sdk/channel-inbound` лише як експорт сумісності. Новий код
має використовувати `resolveInboundMentionDecision({ facts, policy })`.
## Покроковий розбір
<Steps>
<a id="step-1-package-and-manifest"></a>
<Step title="Пакет і маніфест">
Створіть стандартні файли плагіна. Поле `channel` у `package.json`
робить цей пакет плагіном каналу. Повну поверхню метаданих пакета див. у
[Налаштування плагіна та конфігурація](/uk/plugins/sdk-setup#openclawchannel):
Створіть стандартні файли плагіна. Поле `channel` у `package.json`
це те, що робить цей плагін плагіном каналу. Повну поверхню метаданих пакета
див. у [Налаштування плагіна та конфігурація](/uk/plugins/sdk-setup#openclaw-channel):
<CodeGroup>
```json package.json
@ -285,7 +274,7 @@ if (decision.shouldSkip) return;
"channel": {
"id": "acme-chat",
"label": "Acme Chat",
"blurb": "Connect OpenClaw to Acme Chat."
"blurb": "Підключіть OpenClaw до Acme Chat."
}
}
}
@ -297,7 +286,7 @@ if (decision.shouldSkip) return;
"kind": "channel",
"channels": ["acme-chat"],
"name": "Acme Chat",
"description": "Acme Chat channel plugin",
"description": "Плагін каналу Acme Chat",
"configSchema": {
"type": "object",
"additionalProperties": false,
@ -320,9 +309,9 @@ if (decision.shouldSkip) return;
</Step>
<Step title="Створіть об’єкт плагіна каналу">
Інтерфейс `ChannelPlugin` має багато необов’язкових поверхонь адаптерів.
Почніть із мінімуму — `id` і `setup`і додавайте адаптери за потреби.
<Step title="Побудуйте об’єкт плагіна каналу">
Інтерфейс `ChannelPlugin` має багато необов’язкових поверхонь адаптера. Почніть із
мінімуму — `id` і `setup`і додавайте адаптери за потреби.
Створіть `src/channel.ts`:
@ -332,7 +321,7 @@ if (decision.shouldSkip) return;
createChannelPluginBase,
} from "openclaw/plugin-sdk/channel-core";
import type { OpenClawConfig } from "openclaw/plugin-sdk/channel-core";
import { acmeChatApi } from "./client.js"; // your platform API client
import { acmeChatApi } from "./client.js"; // ваш клієнт API платформи
type ResolvedAccount = {
accountId: string | null;
@ -373,7 +362,7 @@ if (decision.shouldSkip) return;
},
}),
// DM security: who can message the bot
// Безпека DM: хто може писати боту
security: {
dm: {
channelKey: "acme-chat",
@ -383,21 +372,21 @@ if (decision.shouldSkip) return;
},
},
// Pairing: approval flow for new DM contacts
// Сполучення: потік підтвердження для нових контактів у DM
pairing: {
text: {
idLabel: "Acme Chat username",
message: "Send this code to verify your identity:",
idLabel: "Ім’я користувача Acme Chat",
message: "Надішліть цей код, щоб підтвердити свою особу:",
notify: async ({ target, code }) => {
await acmeChatApi.sendDm(target, `Pairing code: ${code}`);
},
},
},
// Threading: how replies are delivered
// Потоковість: як доставляються відповіді
threading: { topLevelReplyToMode: "reply" },
// Outbound: send messages to the platform
// Outbound: надсилання повідомлень на платформу
outbound: {
attachedResults: {
sendText: async (params) => {
@ -417,19 +406,19 @@ if (decision.shouldSkip) return;
});
```
<Accordion title="Що для вас робить createChatChannelPlugin">
Замість ручної реалізації низькорівневих інтерфейсів адаптерів ви
передаєте декларативні параметри, а побудовник їх компонуватиме:
<Accordion title="Що робить для вас createChatChannelPlugin">
Замість того щоб вручну реалізовувати низькорівневі інтерфейси адаптера, ви передаєте
декларативні параметри, а builder компонує їх:
| Параметр | Що він підключає |
| --- | --- |
| `security.dm` | Визначення політики DM з областю дії за полями конфігурації |
| `pairing.text` | Потік текстового сполучення DM з обміном коду |
| `threading` | Визначення режиму reply-to (фіксований, з областю облікового запису або користувацький) |
| `security.dm` | Резолвер безпеки DM з областю дії на основі полів конфігурації |
| `pairing.text` | Потік сполучення через текстовий DM з обміном кодом |
| `threading` | Резолвер режиму відповіді (фіксований, з областю облікового запису або кастомний) |
| `outbound.attachedResults` | Функції надсилання, що повертають метадані результату (ідентифікатори повідомлень) |
Ви також можете передавати сирі об’єкти адаптерів замість декларативних
параметрів, якщо вам потрібен повний контроль.
Ви також можете передавати сирі об’єкти адаптера замість декларативних параметрів,
якщо вам потрібен повний контроль.
</Accordion>
</Step>
@ -444,20 +433,20 @@ if (decision.shouldSkip) return;
export default defineChannelPluginEntry({
id: "acme-chat",
name: "Acme Chat",
description: "Acme Chat channel plugin",
description: "Плагін каналу Acme Chat",
plugin: acmeChatPlugin,
registerCliMetadata(api) {
api.registerCli(
({ program }) => {
program
.command("acme-chat")
.description("Acme Chat management");
.description("Керування Acme Chat");
},
{
descriptors: [
{
name: "acme-chat",
description: "Acme Chat management",
description: "Керування Acme Chat",
hasSubcommands: false,
},
],
@ -470,23 +459,21 @@ if (decision.shouldSkip) return;
});
```
Розміщуйте дескриптори CLI, що належать каналу, у `registerCliMetadata(...)`,
щоб OpenClaw міг показувати їх у кореневій довідці без активації повного
runtime каналу, тоді як звичайні повні завантаження все одно підхоплюють
ті самі дескриптори для реєстрації реальних команд. Зберігайте
`registerFull(...)` для роботи лише під час runtime.
Якщо `registerFull(...)` реєструє gateway RPC methods, використовуйте
префікс, специфічний для плагіна. Простори імен адміністратора ядра
(`config.*`, `exec.approvals.*`, `wizard.*`, `update.*`) залишаються
зарезервованими й завжди зіставляються з `operator.admin`.
`defineChannelPluginEntry` автоматично обробляє поділ за режимами реєстрації. Див.
[Точки входу](/uk/plugins/sdk-entrypoints#definechannelpluginentry), щоб
переглянути всі параметри.
Розміщуйте дескриптори CLI, що належать каналу, у `registerCliMetadata(...)`, щоб OpenClaw
міг показувати їх у кореневій довідці без активації повного runtime каналу,
тоді як звичайні повні завантаження все одно підхоплюватимуть ті самі дескриптори для реєстрації
реальних команд. Залишайте `registerFull(...)` для роботи лише під час runtime.
Якщо `registerFull(...)` реєструє gateway RPC-методи, використовуйте
префікс, специфічний для плагіна. Простори імен адміністратора core (`config.*`,
`exec.approvals.*`, `wizard.*`, `update.*`) залишаються зарезервованими і завжди
резолвляться в `operator.admin`.
`defineChannelPluginEntry` автоматично обробляє поділ режимів реєстрації. Усі
параметри див. у [Точки входу](/uk/plugins/sdk-entrypoints#definechannelpluginentry).
</Step>
<Step title="Додайте запис setup">
Створіть `setup-entry.ts` для полегшеного завантаження під час onboarding:
<Step title="Додайте setup entry">
Створіть `setup-entry.ts` для легкого завантаження під час онбордингу:
```typescript setup-entry.ts
import { defineSetupPluginEntry } from "openclaw/plugin-sdk/channel-core";
@ -495,29 +482,28 @@ if (decision.shouldSkip) return;
export default defineSetupPluginEntry(acmeChatPlugin);
```
OpenClaw завантажує це замість повної точки входу, коли канал вимкнений
або не налаштований. Це дозволяє не підтягувати важкий runtime-код під час
потоків setup.
Докладніше див. у [Setup і конфігурація](/uk/plugins/sdk-setup#setup-entry).
OpenClaw завантажує цей файл замість повної точки входу, коли канал вимкнений
або не налаштований. Це дозволяє уникнути підтягування важкого runtime-коду під час потоків setup.
Докладніше див. у [Налаштування та конфігурація](/uk/plugins/sdk-setup#setup-entry).
</Step>
<Step title="Обробляйте вхідні повідомлення">
Ваш плагін має отримувати повідомлення з платформи та пересилати їх у
Ваш плагін має отримувати повідомлення з платформи та пересилати їх до
OpenClaw. Типовий шаблон — це webhook, який перевіряє запит і
диспетчеризує його через обробник вхідних повідомлень вашого каналу:
диспетчеризує його через вхідний обробник вашого каналу:
```typescript
registerFull(api) {
api.registerHttpRoute({
path: "/acme-chat/webhook",
auth: "plugin", // plugin-managed auth (verify signatures yourself)
auth: "plugin", // auth, керований плагіном (перевіряйте підписи самостійно)
handler: async (req, res) => {
const event = parseWebhookPayload(req);
// Your inbound handler dispatches the message to OpenClaw.
// The exact wiring depends on your platform SDK
// see a real example in the bundled Microsoft Teams or Google Chat plugin package.
// Ваш вхідний обробник диспетчеризує повідомлення до OpenClaw.
// Точне підключення залежить від SDK вашої платформи
// реальний приклад див. у вбудованому пакеті плагіна Microsoft Teams або Google Chat.
await handleAcmeChatInbound(api, event);
res.statusCode = 200;
@ -529,8 +515,8 @@ if (decision.shouldSkip) return;
```
<Note>
Обробка вхідних повідомлень є специфічною для каналу. Кожен плагін каналу
володіє власним вхідним конвеєром. Дивіться на вбудовані плагіни каналів
Обробка вхідних повідомлень залежить від каналу. Кожен плагін каналу відповідає
за власний вхідний pipeline. Подивіться на вбудовані плагіни каналів
(наприклад, пакет плагіна Microsoft Teams або Google Chat), щоб побачити реальні шаблони.
</Note>
@ -538,7 +524,7 @@ if (decision.shouldSkip) return;
<a id="step-6-test"></a>
<Step title="Тестування">
Пишіть колоковані тести в `src/channel.test.ts`:
Пишіть colocated тести в `src/channel.test.ts`:
```typescript src/channel.test.ts
import { describe, it, expect } from "vitest";
@ -583,49 +569,48 @@ if (decision.shouldSkip) return;
## Структура файлів
```
```text
<bundled-plugin-root>/acme-chat/
├── package.json # метадані openclaw.channel
├── openclaw.plugin.json # маніфест зі схемою конфігурації
├── openclaw.plugin.json # Маніфест зі схемою конфігурації
├── index.ts # defineChannelPluginEntry
├── setup-entry.ts # defineSetupPluginEntry
├── api.ts # публічні експорти (необов’язково)
├── runtime-api.ts # внутрішні runtime-експорти (необов’язково)
├── api.ts # Публічні експорти (необов’язково)
├── runtime-api.ts # Внутрішні runtime-експорти (необов’язково)
└── src/
├── channel.ts # ChannelPlugin через createChatChannelPlugin
├── channel.test.ts # тести
├── client.ts # клієнт API платформи
└── runtime.ts # сховище runtime (за потреби)
├── channel.test.ts # Тести
├── client.ts # Клієнт API платформи
└── runtime.ts # Runtime-сховище (за потреби)
```
## Розширені теми
<CardGroup cols={2}>
<Card title="Параметри потоків" icon="git-branch" href="/uk/plugins/sdk-entrypoints#registration-mode">
Фіксовані режими відповідей, режими з областю облікового запису або користувацькі
<Card title="Параметри потоковості" icon="git-branch" href="/uk/plugins/sdk-entrypoints#registration-mode">
Фіксовані режими відповіді, режими з областю облікового запису або кастомні режими
</Card>
<Card title="Інтеграція інструмента message" icon="puzzle" href="/uk/plugins/architecture#channel-plugins-and-the-shared-message-tool">
<Card title="Інтеграція інструмента повідомлень" icon="puzzle" href="/uk/plugins/architecture#channel-plugins-and-the-shared-message-tool">
describeMessageTool і виявлення дій
</Card>
<Card title="Визначення цілі" icon="crosshair" href="/uk/plugins/architecture#channel-target-resolution">
<Card title="Резолюція цілі" icon="crosshair" href="/uk/plugins/architecture#channel-target-resolution">
inferTargetChatType, looksLikeId, resolveTarget
</Card>
<Card title="Runtime helper-и" icon="settings" href="/uk/plugins/sdk-runtime">
<Card title="Runtime-helper-и" icon="settings" href="/uk/plugins/sdk-runtime">
TTS, STT, медіа, subagent через api.runtime
</Card>
</CardGroup>
<Note>
Деякі вбудовані helper seams усе ще існують для підтримки вбудованих плагінів і
сумісності. Вони не є рекомендованим шаблоном для нових плагінів каналів;
надавайте перевагу загальним підшляхам channel/setup/reply/runtime зі спільної
поверхні SDK, якщо тільки ви безпосередньо не підтримуєте цю родину
вбудованих плагінів.
Деякі вбудовані поверхні helper-ів усе ще існують для супроводу вбудованих плагінів і
сумісності. Це не рекомендований шаблон для нових плагінів каналів;
віддавайте перевагу загальним підшляхам channel/setup/reply/runtime зі спільної
поверхні SDK, якщо тільки ви не супроводжуєте безпосередньо цю сім’ю вбудованих плагінів.
</Note>
## Наступні кроки
- [Плагіни провайдерів](/uk/plugins/sdk-provider-plugins) — якщо ваш плагін також надає моделі
- [Огляд SDK](/uk/plugins/sdk-overview) — повний довідник з імпортів за підшляхами
- [Огляд SDK](/uk/plugins/sdk-overview) — повний довідник імпортів за підшляхами
- [Тестування SDK](/uk/plugins/sdk-testing) — утиліти тестування та контрактні тести
- [Маніфест плагіна](/uk/plugins/manifest) — повна схема маніфесту

View File

@ -1,21 +1,21 @@
---
read_when:
- Робота з реакціями в будь-якому каналі
- Розуміння того, як emoji-реакції відрізняються на різних платформах
- Розуміння того, як реакції з емодзі відрізняються на різних платформах
summary: Семантика інструмента реакцій у всіх підтримуваних каналах
title: Реакції
x-i18n:
generated_at: "2026-04-05T18:20:35Z"
generated_at: "2026-04-10T20:41:24Z"
model: gpt-5.4
provider: openai
source_hash: 9af2951eee32e73adb982dbdf39b32e4065993454e9cce2ad23b27565cab4f84
source_hash: cfac31b7f0effc89cc696e3cf34cd89503ccdbb28996723945025e4b6e159986
source_path: tools/reactions.md
workflow: 15
---
# Реакції
Агент може додавати й видаляти emoji-реакції до повідомлень за допомогою інструмента `message` з дією `react`. Поведінка реакцій залежить від каналу.
Агент може додавати й видаляти реакції з емодзі на повідомленнях за допомогою інструмента `message` з дією `react`. Поведінка реакцій залежить від каналу.
## Як це працює
@ -28,20 +28,20 @@ x-i18n:
```
- `emoji` є обов’язковим під час додавання реакції.
- Встановіть `emoji` як порожній рядок (`""`), щоб видалити реакцію(ї) бота.
- Встановіть `remove: true`, щоб видалити конкретне emoji (потрібне непорожнє `emoji`).
- Установіть `emoji` як порожній рядок (`""`), щоб видалити реакцію(ї) бота.
- Установіть `remove: true`, щоб видалити певне емодзі (потрібне непорожнє `emoji`).
## Поведінка в каналах
<AccordionGroup>
<Accordion title="Discord and Slack">
- Порожнє `emoji` видаляє всі реакції бота на повідомлення.
- `remove: true` видаляє лише вказане emoji.
- Порожнє `emoji` видаляє всі реакції бота на повідомленні.
- `remove: true` видаляє лише вказане емодзі.
</Accordion>
<Accordion title="Google Chat">
- Порожнє `emoji` видаляє реакції застосунку на повідомлення.
- `remove: true` видаляє лише вказане emoji.
- Порожнє `emoji` видаляє реакції застосунку на повідомленні.
- `remove: true` видаляє лише вказане емодзі.
</Accordion>
<Accordion title="Telegram">
@ -51,12 +51,12 @@ x-i18n:
<Accordion title="WhatsApp">
- Порожнє `emoji` видаляє реакцію бота.
- `remove: true` внутрішньо зіставляється з порожнім emoji (у виклику інструмента все одно потрібне `emoji`).
- `remove: true` внутрішньо перетворюється на порожнє emoji (у виклику інструмента `emoji` усе одно потрібне).
</Accordion>
<Accordion title="Zalo Personal (zalouser)">
- Потрібне непорожнє `emoji`.
- `remove: true` видаляє цю конкретну emoji-реакцію.
- `remove: true` видаляє реакцію з цим конкретним емодзі.
</Accordion>
<Accordion title="Feishu/Lark">
@ -71,14 +71,14 @@ x-i18n:
## Рівень реакцій
Конфігурація `reactionLevel` для кожного каналу визначає, наскільки широко агент використовує реакції. Типові значення: `off`, `ack`, `minimal` або `extensive`.
Параметр `reactionLevel` для кожного каналу визначає, наскільки широко агент використовує реакції. Зазвичай доступні значення `off`, `ack`, `minimal` або `extensive`.
- [Telegram reactionLevel](/uk/channels/telegram#reaction-notifications) — `channels.telegram.reactionLevel`
- [WhatsApp reactionLevel](/uk/channels/whatsapp#reactions) — `channels.whatsapp.reactionLevel`
- [WhatsApp reactionLevel](/uk/channels/whatsapp#reaction-level) — `channels.whatsapp.reactionLevel`
Установіть `reactionLevel` для окремих каналів, щоб налаштувати, наскільки активно агент реагує на повідомлення на кожній платформі.
Налаштуйте `reactionLevel` для окремих каналів, щоб визначити, наскільки активно агент реагує на повідомлення на кожній платформі.
## Пов’язане
- [Agent Send](/tools/agent-send) — інструмент `message`, який містить `react`
- [Канали](/uk/channels) — конфігурація для конкретних каналів
- [Agent Send](/uk/tools/agent-send) — інструмент `message`, який містить `react`
- [Channels](/uk/channels) — конфігурація для конкретних каналів