chore(i18n): refresh uk translations
This commit is contained in:
parent
5880cce409
commit
e0dd3085d7
@ -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) — налаштування часового поясу
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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) — повна схема маніфесту
|
||||
|
||||
@ -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) — конфігурація для конкретних каналів
|
||||
|
||||
Loading…
Reference in New Issue
Block a user