chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-24 19:37:19 +00:00
parent 09dcc17f10
commit 471aa2b617
2 changed files with 541 additions and 444 deletions

View File

@ -2,34 +2,34 @@
read_when:
- Вам потрібні точні семантики полів конфігурації або значення за замовчуванням
- Ви перевіряєте блоки конфігурації каналу, моделі, Gateway або інструмента
summary: Довідник з конфігурації Gateway для основних ключів OpenClaw, значень за замовчуванням і посилань на окремі довідники підсистем
title: Довідник з конфігурації
summary: Довідник конфігурації Gateway для основних ключів OpenClaw, значень за замовчуванням і посилань на окремі довідники підсистем
title: Довідник конфігурації
x-i18n:
generated_at: "2026-04-24T06:45:27Z"
generated_at: "2026-04-24T19:33:59Z"
model: gpt-5.4
provider: openai
source_hash: dc0d9feea2f2707f267d50ec83aa664ef503db8f9132762345cc80305f8bef73
source_hash: f54e51abc83dd7e72cc4220fa881f488cfb441b97710ba6852382814d4055344
source_path: gateway/configuration-reference.md
workflow: 15
---
Основний довідник з конфігурації для `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Configuration](/uk/gateway/configuration).
Основний довідник конфігурації для `~/.openclaw/openclaw.json`. Огляд, орієнтований на завдання, див. у [Configuration](/uk/gateway/configuration).
Ця сторінка охоплює основні поверхні конфігурації OpenClaw і дає посилання назовні, коли підсистема має власний докладніший довідник. Вона **не** намагається вбудувати на одній сторінці кожен каталог команд, що належить каналу/Plugin, або кожен глибокий параметр пам’яті/QMD.
Джерело істини в коді:
- `openclaw config schema` виводить актуальну JSON Schema, що використовується для валідації та інтерфейсу Control UI, з об’єднаними метаданими bundled/Plugin/channel, коли вони доступні
- `config.schema.lookup` повертає один вузол схеми з прив’язкою до шляху для інструментів деталізації
- `pnpm config:docs:check` / `pnpm config:docs:gen` перевіряють базовий хеш документації конфігурації щодо поточної поверхні схеми
- `openclaw config schema` виводить актуальну схему JSON Schema, що використовується для валідації та інтерфейсу Control UI, з об’єднаними метаданими bundled/plugin/channel, коли вони доступні
- `config.schema.lookup` повертає один вузол схеми з прив’язкою до шляху для інструментів деталізованого перегляду
- `pnpm config:docs:check` / `pnpm config:docs:gen` перевіряють хеш базового стану config-doc щодо поточної поверхні схеми
Окремі докладні довідники:
- [Довідник з конфігурації пам’яті](/uk/reference/memory-config) для `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` і конфігурації Dreaming у `plugins.entries.memory-core.config.dreaming`
- [Слеш-команди](/uk/tools/slash-commands) для поточного вбудованого + bundled каталогу команд
- [Memory configuration reference](/uk/reference/memory-config) для `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations` і конфігурації dreaming у `plugins.entries.memory-core.config.dreaming`
- [Slash Commands](/uk/tools/slash-commands) для поточного вбудованого + bundled каталогу команд
- сторінки відповідних каналів/Plugin для поверхонь команд, специфічних для каналів
Формат конфігурації — **JSON5** (дозволені коментарі й кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні значення за замовчуванням, якщо їх не вказано.
Формат конфігурації — **JSON5** (дозволені коментарі та фінальні коми). Усі поля необов’язкові — якщо їх пропущено, OpenClaw використовує безпечні значення за замовчуванням.
---
@ -37,8 +37,8 @@ x-i18n:
Ключі конфігурації для кожного каналу перенесено на окрему сторінку — див.
[Configuration — channels](/uk/gateway/config-channels) для `channels.*`,
зокрема Slack, Discord, Telegram, WhatsApp, Matrix, iMessage та інших
bundled каналів (автентифікація, керування доступом, кілька облікових записів, обмеження згадок).
зокрема для Slack, Discord, Telegram, WhatsApp, Matrix, iMessage та інших
bundled каналів (автентифікація, контроль доступу, кілька облікових записів, обмеження за згадуваннями).
## Типові значення агента, multi-agent, сесії та повідомлення
@ -47,15 +47,15 @@ bundled каналів (автентифікація, керування дос
- `agents.defaults.*` (робоча область, модель, thinking, heartbeat, пам’ять, медіа, skills, sandbox)
- `multiAgent.*` (маршрутизація multi-agent і прив’язки)
- `session.*` (життєвий цикл сесії, Compaction, очищення)
- `session.*` (життєвий цикл сесії, compaction, pruning)
- `messages.*` (доставка повідомлень, TTS, рендеринг markdown)
- `talk.*` (режим Talk)
- `talk.silenceTimeoutMs`: якщо не задано, Talk зберігає типове для платформи вікно паузи перед надсиланням транскрипту (`700 ms на macOS і Android, 900 ms на iOS`)
- `talk.silenceTimeoutMs`: якщо не задано, Talk зберігає стандартне для платформи вікно паузи перед надсиланням транскрипту (`700 ms на macOS і Android, 900 ms на iOS`)
## Інструменти та власні провайдери
## Інструменти та користувацькі провайдери
Політика інструментів, експериментальні перемикачі, конфігурація інструментів на основі провайдерів і налаштування власних
провайдерів / base-URL перенесено на окрему сторінку — див.
Політика інструментів, експериментальні перемикачі, конфігурація інструментів на основі провайдерів і налаштування користувацьких
провайдерів / base-URL перенесені на окрему сторінку — див.
[Configuration — tools and custom providers](/uk/gateway/config-tools).
## Skills
@ -83,14 +83,14 @@ bundled каналів (автентифікація, керування дос
}
```
- `allowBundled`: необов’язковий список дозволених лише для bundled skills (керовані/workspace skills не зачіпаються).
- `load.extraDirs`: додаткові спільні кореневі каталоги skills (найнижчий пріоритет).
- `install.preferBrew`: якщо `true`, віддавати перевагу інсталяторам Homebrew, коли `brew`
доступний, перш ніж переходити до інших типів інсталяторів.
- `install.nodeManager`: пріоритетний менеджер Node для специфікацій `metadata.openclaw.install`
- `allowBundled`: необов’язковий список дозволених лише для bundled skills (керовані/workspace skills це не зачіпає).
- `load.extraDirs`: додаткові спільні корені skills (найнижчий пріоритет).
- `install.preferBrew`: якщо `true`, спочатку надає перевагу інсталяторам Homebrew, коли `brew`
доступний, і лише потім переходить до інших типів інсталяторів.
- `install.nodeManager`: пріоритет інсталятора node для специфікацій `metadata.openclaw.install`
(`npm` | `pnpm` | `yarn` | `bun`).
- `entries.<skillKey>.enabled: false` вимикає skill, навіть якщо він bundled/встановлений.
- `entries.<skillKey>.apiKey`: зручне поле для skills, які оголошують основну змінну середовища (простий текстовий рядок або об’єкт SecretRef).
- `entries.<skillKey>.apiKey`: зручне поле для skills, які оголошують основну змінну середовища (рядок відкритим текстом або об’єкт SecretRef).
---
@ -119,40 +119,41 @@ bundled каналів (автентифікація, керування дос
```
- Завантажуються з `~/.openclaw/extensions`, `<workspace>/.openclaw/extensions`, а також `plugins.load.paths`.
- Виявлення підтримує нативні Plugins OpenClaw, а також сумісні пакети Codex і Claude, включно з пакетами Claude стандартного макета без manifest.
- **Зміни конфігурації потребують перезапуску Gateway.**
- `allow`: необов’язковий список дозволених (завантажуються лише перелічені Plugins). `deny` має пріоритет.
- `plugins.entries.<id>.apiKey`: зручне поле API-ключа на рівні Plugin (коли Plugin його підтримує).
- Виявлення підтримує нативні Plugins OpenClaw, а також сумісні пакунки Codex і Claude, зокрема пакунки Claude зі стандартним розташуванням без manifest.
- **Зміни конфігурації потребують перезапуску gateway.**
- `allow`: необов’язковий список дозволених (завантажуються лише вказані Plugins). `deny` має пріоритет.
- `plugins.entries.<id>.apiKey`: зручне поле API key на рівні Plugin (коли Plugin це підтримує).
- `plugins.entries.<id>.env`: мапа змінних середовища в межах Plugin.
- `plugins.entries.<id>.hooks.allowPromptInjection`: коли `false`, ядро блокує `before_prompt_build` і ігнорує поля, що змінюють prompt, із застарілого `before_agent_start`, водночас зберігаючи застарілі `modelOverride` і `providerOverride`. Застосовується до нативних хуків Plugin і підтримуваних каталогів хуків, що надаються пакетами.
- `plugins.entries.<id>.subagent.allowModelOverride`: явно довіряти цьому Plugin запитувати перевизначення `provider` і `model` для кожного запуску фонових subagent.
- `plugins.entries.<id>.subagent.allowedModels`: необов’язковий список дозволених канонічних цілей `provider/model` для довірених перевизначень subagent. Використовуйте `"*"`, лише якщо навмисно хочете дозволити будь-яку модель.
- `plugins.entries.<id>.config`: об’єкт конфігурації, визначений Plugin (валідується за схемою нативного Plugin OpenClaw, якщо вона доступна).
- `plugins.entries.<id>.hooks.allowPromptInjection`: якщо `false`, ядро блокує `before_prompt_build` та ігнорує поля, що змінюють prompt, із застарілого `before_agent_start`, водночас зберігаючи застарілі `modelOverride` і `providerOverride`. Застосовується до нативних хуків Plugin і підтримуваних каталогів хуків, що надаються пакунками.
- `plugins.entries.<id>.hooks.allowConversationAccess`: якщо `true`, довірені небандловані Plugins можуть читати необроблений вміст розмови з типізованих хуків, таких як `llm_input`, `llm_output` і `agent_end`.
- `plugins.entries.<id>.subagent.allowModelOverride`: явно довіряє цьому Plugin запитувати перевизначення `provider` і `model` для окремого запуску фонових subagent.
- `plugins.entries.<id>.subagent.allowedModels`: необов’язковий список дозволених канонічних цілей `provider/model` для довірених перевизначень subagent. Використовуйте `"*"` лише тоді, коли справді хочете дозволити будь-яку модель.
- `plugins.entries.<id>.config`: об’єкт конфігурації, визначений Plugin (валідується за нативною схемою Plugin OpenClaw, якщо вона доступна).
- `plugins.entries.firecrawl.config.webFetch`: налаштування провайдера web-fetch Firecrawl.
- `apiKey`: API-ключ Firecrawl (підтримує SecretRef). Використовує як резервне значення `plugins.entries.firecrawl.config.webSearch.apiKey`, застаріле `tools.web.fetch.firecrawl.apiKey` або змінну середовища `FIRECRAWL_API_KEY`.
- `baseUrl`: базовий URL API Firecrawl (типово: `https://api.firecrawl.dev`).
- `onlyMainContent`: витягувати лише основний вміст сторінок (типово: `true`).
- `apiKey`: API key Firecrawl (приймає SecretRef). Якщо відсутній, використовується `plugins.entries.firecrawl.config.webSearch.apiKey`, застарілий `tools.web.fetch.firecrawl.apiKey` або змінна середовища `FIRECRAWL_API_KEY`.
- `baseUrl`: базова URL-адреса API Firecrawl (типово: `https://api.firecrawl.dev`).
- `onlyMainContent`: витягувати лише основний вміст зі сторінок (типово: `true`).
- `maxAgeMs`: максимальний вік кешу в мілісекундах (типово: `172800000` / 2 дні).
- `timeoutSeconds`: тайм-аут запиту scrape у секундах (типово: `60`).
- `plugins.entries.xai.config.xSearch`: налаштування xAI X Search (вебпошук Grok).
- `enabled`: увімкнути провайдера X Search.
- `enabled`: увімкнути провайдер X Search.
- `model`: модель Grok для пошуку (наприклад, `"grok-4-1-fast"`).
- `plugins.entries.memory-core.config.dreaming`: налаштування Dreaming для пам’яті. Див. [Dreaming](/uk/concepts/dreaming) для фаз і порогів.
- `enabled`: головний перемикач Dreaming (типово `false`).
- `frequency`: розклад Cron для кожного повного циклу Dreaming (типово `"0 3 * * *"`).
- політика фаз і пороги — це деталі реалізації (не користувацькі ключі конфігурації).
- Повна конфігурація пам’яті наведена в [Довіднику з конфігурації пам’яті](/uk/reference/memory-config):
- `plugins.entries.memory-core.config.dreaming`: налаштування memory dreaming. Фази та пороги див. у [Dreaming](/uk/concepts/dreaming).
- `enabled`: головний перемикач dreaming (типово `false`).
- `frequency`: Cron-інтервал для кожного повного циклу dreaming (типово `"0 3 * * *"`).
- політика фаз і пороги є деталями реалізації (не користувацькими ключами конфігурації).
- Повна конфігурація пам’яті міститься в [Memory configuration reference](/uk/reference/memory-config):
- `agents.defaults.memorySearch.*`
- `memory.backend`
- `memory.citations`
- `memory.qmd.*`
- `plugins.entries.memory-core.config.dreaming`
- Увімкнені Plugins-пакети Claude також можуть додавати вбудовані типові значення Pi із `settings.json`; OpenClaw застосовує їх як очищені налаштування агента, а не як сирі патчі конфігурації OpenClaw.
- `plugins.slots.memory`: виберіть ідентифікатор активного Plugin пам’яті або `"none"`, щоб вимкнути Plugins пам’яті.
- `plugins.slots.contextEngine`: виберіть ідентифікатор активного Plugin рушія контексту; типове значення — `"legacy"`, якщо ви не встановите й не виберете інший рушій.
- Увімкнені Plugins-пакунки Claude також можуть додавати вбудовані типові значення Pi з `settings.json`; OpenClaw застосовує їх як санітизовані налаштування агента, а не як сирі патчі конфігурації OpenClaw.
- `plugins.slots.memory`: вибір id активного Plugin пам’яті або `"none"` для вимкнення Plugins пам’яті.
- `plugins.slots.contextEngine`: вибір id активного Plugin механізму контексту; типово `"legacy"`, доки ви не встановите й не виберете інший механізм.
- `plugins.installs`: метадані встановлення, керовані CLI та використовувані `openclaw plugins update`.
- Містить `source`, `spec`, `sourcePath`, `installPath`, `version`, `resolvedName`, `resolvedVersion`, `resolvedSpec`, `integrity`, `shasum`, `resolvedAt`, `installedAt`.
- Розглядайте `plugins.installs.*` як керований стан; віддавайте перевагу командам CLI, а не ручному редагуванню.
- Сприймайте `plugins.installs.*` як керований стан; віддавайте перевагу командам CLI замість ручного редагування.
Див. [Plugins](/uk/tools/plugin).
@ -195,29 +196,29 @@ bundled каналів (автентифікація, керування дос
```
- `evaluateEnabled: false` вимикає `act:evaluate` і `wait --fn`.
- `ssrfPolicy.dangerouslyAllowPrivateNetwork` вимкнено, якщо не задано, тож навігація браузера за замовчуванням лишається суворою.
- Установлюйте `ssrfPolicy.dangerouslyAllowPrivateNetwork: true`, лише якщо ви свідомо довіряєте навігації браузера в приватній мережі.
- У суворому режимі віддалені кінцеві точки профілів CDP (`profiles.*.cdpUrl`) підлягають такому самому блокуванню приватної мережі під час перевірок доступності/виявлення.
- `ssrfPolicy.dangerouslyAllowPrivateNetwork` вимкнено, якщо значення не задано, тож навігація браузера типово залишається суворо обмеженою.
- Встановлюйте `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` лише тоді, коли ви свідомо довіряєте браузерній навігації в приватній мережі.
- У суворому режимі віддалені кінцеві точки профілів CDP (`profiles.*.cdpUrl`) підлягають тому самому блокуванню приватної мережі під час перевірок доступності/виявлення.
- `ssrfPolicy.allowPrivateNetwork` і далі підтримується як застарілий псевдонім.
- У суворому режимі використовуйте `ssrfPolicy.hostnameAllowlist` і `ssrfPolicy.allowedHostnames` для явних винятків.
- Віддалені профілі працюють лише в режимі attach-only (start/stop/reset вимкнені).
- `profiles.*.cdpUrl` підтримує `http://`, `https://`, `ws://` і `wss://`.
Використовуйте HTTP(S), коли хочете, щоб OpenClaw виявив `/json/version`; використовуйте WS(S),
коли ваш провайдер надає прямий URL DevTools WebSocket.
- Профілі `existing-session` використовують Chrome MCP замість CDP і можуть приєднуватися на
вибраному хості або через під’єднаний вузол браузера.
- Профілі `existing-session` можуть задавати `userDataDir`, щоб націлитися на конкретний
- Віддалені профілі працюють лише в режимі attach-only (запуск/зупинка/скидання недоступні).
- `profiles.*.cdpUrl` приймає `http://`, `https://`, `ws://` і `wss://`.
Використовуйте HTTP(S), якщо хочете, щоб OpenClaw виявив `/json/version`; використовуйте WS(S),
якщо ваш провайдер надає пряму URL-адресу DevTools WebSocket.
- Профілі `existing-session` використовують Chrome MCP замість CDP і можуть підключатися
до вибраного хоста або через підключений browser node.
- Профілі `existing-session` можуть задавати `userDataDir`, щоб указати конкретний
профіль браузера на основі Chromium, наприклад Brave або Edge.
- Профілі `existing-session` зберігають поточні обмеження маршруту Chrome MCP:
дії на основі snapshot/ref замість націлювання через CSS-селектори, хуки завантаження одного файла,
без перевизначення тайм-ауту діалогів, без `wait --load networkidle`, а також без
`responsebody`, експорту PDF, перехоплення завантажень або пакетних дій.
- Для локально керованих профілів `openclaw` автоматично призначаються `cdpPort` і `cdpUrl`; явно
без перевизначення тайм-аутів діалогів, без `wait --load networkidle`, а також без
`responsebody`, експорту PDF, перехоплення завантажень чи пакетних дій.
- Для локальних керованих профілів `openclaw` `cdpPort` і `cdpUrl` призначаються автоматично; явно
задавайте `cdpUrl` лише для віддаленого CDP.
- Порядок автовиявлення: типовий браузер, якщо він на основі Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
- Порядок автовиявлення: браузер за замовчуванням, якщо він на основі Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
- Служба керування: лише loopback (порт похідний від `gateway.port`, типово `18791`).
- `extraArgs` додає додаткові прапорці запуску до локального старту Chromium (наприклад,
`--disable-gpu`, розмір вікна або прапорці налагодження).
`--disable-gpu`, розмір вікна або налагоджувальні прапорці).
---
@ -235,8 +236,8 @@ bundled каналів (автентифікація, керування дос
}
```
- `seamColor`: колір акценту для chrome нативного інтерфейсу застосунку (відтінок бульбашки режиму Talk тощо).
- `assistant`: перевизначення ідентичності Control UI. Використовує ідентичність активного агента як резервну.
- `seamColor`: акцентний колір для chrome нативного інтерфейсу застосунку (відтінок бульбашки режиму Talk тощо).
- `assistant`: перевизначення ідентичності Control UI. Якщо не задано, використовується ідентичність активного агента.
---
@ -283,12 +284,12 @@ bundled каналів (автентифікація, керування дос
// password: "your-password",
},
trustedProxies: ["10.0.0.1"],
// Необов’язково. Типове значення false.
// Optional. Default false.
allowRealIpFallback: false,
tools: {
// Додаткові HTTP-заборони для /tools/invoke
// Additional /tools/invoke HTTP denies
deny: ["browser"],
// Видалити інструменти зі стандартного списку HTTP-заборон
// Remove tools from the default HTTP deny list
allow: ["gateway"],
},
push: {
@ -308,47 +309,47 @@ bundled каналів (автентифікація, керування дос
- `mode`: `local` (запустити gateway) або `remote` (підключитися до віддаленого gateway). Gateway відмовляється запускатися, якщо не `local`.
- `port`: єдиний мультиплексований порт для WS + HTTP. Пріоритет: `--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > `18789`.
- `bind`: `auto`, `loopback` (типово), `lan` (`0.0.0.0`), `tailnet` (лише IP Tailscale) або `custom`.
- **Застарілі псевдоніми bind**: використовуйте значення режиму bind у `gateway.bind` (`auto`, `loopback`, `lan`, `tailnet`, `custom`), а не псевдоніми хоста (`0.0.0.0`, `127.0.0.1`, `localhost`, `::`, `::1`).
- **Примітка щодо Docker**: типовий bind `loopback` слухає `127.0.0.1` усередині контейнера. За мережевої конфігурації Docker bridge (`-p 18789:18789`) трафік надходить на `eth0`, тому gateway недоступний. Використовуйте `--network host` або встановіть `bind: "lan"` (або `bind: "custom"` з `customBindHost: "0.0.0.0"`), щоб слухати на всіх інтерфейсах.
- **Auth**: типово обов’язкова. Binds не на loopback вимагають автентифікації gateway. На практиці це означає спільний token/password або reverse proxy з контролем ідентичності з `gateway.auth.mode: "trusted-proxy"`. Майстер початкового налаштування типово генерує token.
- Якщо налаштовано і `gateway.auth.token`, і `gateway.auth.password` (зокрема через SecretRef), явно встановіть `gateway.auth.mode` у `token` або `password`. Запуск, а також потоки встановлення/відновлення сервісу завершуються помилкою, якщо обидва налаштовані, а mode не задано.
- `gateway.auth.mode: "none"`: явний режим без auth. Використовуйте лише для довірених локальних конфігурацій loopback; цей варіант навмисно не пропонується в підказках початкового налаштування.
- `gateway.auth.mode: "trusted-proxy"`: делегує auth reverse proxy з контролем ідентичності та довіряє заголовкам ідентичності від `gateway.trustedProxies` (див. [Trusted Proxy Auth](/uk/gateway/trusted-proxy-auth)). Цей режим очікує **не-loopback** джерело proxy; reverse proxy loopback на тому ж хості не задовольняють auth trusted-proxy.
- `gateway.auth.allowTailscale`: коли `true`, заголовки ідентичності Tailscale Serve можуть задовольняти auth для Control UI/WebSocket (перевіряється через `tailscale whois`). Кінцеві точки HTTP API **не** використовують цю auth через заголовки Tailscale; натомість вони дотримуються звичайного режиму HTTP auth gateway. Цей потік без token припускає, що хост gateway є довіреним. Типове значення — `true`, коли `tailscale.mode = "serve"`.
- `gateway.auth.rateLimit`: необов’язковий обмежувач невдалих спроб auth. Застосовується для кожної IP-адреси клієнта й для кожної області auth окремо (shared-secret і device-token відстежуються незалежно). Заблоковані спроби повертають `429` + `Retry-After`.
- На асинхронному шляху Tailscale Serve Control UI невдалі спроби для того самого `{scope, clientIp}` серіалізуються до запису про невдачу. Тому одночасні хибні спроби від того самого клієнта можуть спрацювати на обмежувач уже на другому запиті, а не пройти обидві як звичайні невідповідності.
- `gateway.auth.rateLimit.exemptLoopback` типово дорівнює `true`; установіть `false`, якщо навмисно хочете також застосовувати rate limit до трафіку localhost (для тестових конфігурацій або суворих розгортань proxy).
- Спроби WS auth з походження браузера завжди обмежуються без винятку для loopback (додатковий захист від brute force localhost з браузера).
- На loopback ці блокування з боку браузерного походження ізольовані за нормалізованим значенням `Origin`,
тож повторні невдалі спроби з одного походження localhost не блокують автоматично
інше походження.
- `tailscale.mode`: `serve` (лише tailnet, bind loopback) або `funnel` (публічний, потребує auth).
- `controlUi.allowedOrigins`: явний список дозволених browser-origin для підключень Gateway WebSocket. Обов’язковий, коли очікуються браузерні клієнти з не-loopback походжень.
- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: небезпечний режим, що вмикає fallback походження через заголовок Host для розгортань, які навмисно покладаються на політику походження заголовка Host.
- `remote.transport`: `ssh` (типово) або `direct` (ws/wss). Для `direct` `remote.url` має бути `ws://` або `wss://`.
- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: аварійний override на рівні середовища процесу клієнта,
який дозволяє незашифрований `ws://` до довірених IP-адрес приватної мережі;
типове значення й далі дозволяє незашифрований трафік лише для loopback. Еквівалента в `openclaw.json`
немає, а конфігурація приватної мережі браузера, наприклад
`browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`, не впливає на
клієнтів Gateway WebSocket.
- `gateway.remote.token` / `.password` — це поля облікових даних віддаленого клієнта. Вони самі собою не налаштовують auth gateway.
- `gateway.push.apns.relay.baseUrl`: базовий HTTPS URL для зовнішнього APNs relay, який використовують офіційні/TestFlight збірки iOS після публікації relay-реєстрацій до gateway. Цей URL має збігатися з URL relay, зібраним у збірку iOS.
- **Застарілі псевдоніми bind**: використовуйте значення режиму bind у `gateway.bind` (`auto`, `loopback`, `lan`, `tailnet`, `custom`), а не псевдоніми хостів (`0.0.0.0`, `127.0.0.1`, `localhost`, `::`, `::1`).
- **Примітка щодо Docker**: типове значення `loopback` для bind слухає `127.0.0.1` усередині контейнера. Із bridge-мережею Docker (`-p 18789:18789`) трафік надходить на `eth0`, тому gateway недоступний. Використовуйте `--network host`, або задайте `bind: "lan"` (або `bind: "custom"` з `customBindHost: "0.0.0.0"`), щоб слухати на всіх інтерфейсах.
- **Auth**: типово обов’язкова. Bind не на loopback потребують gateway auth. На практиці це означає спільний token/password або reverse proxy з контролем ідентичності з `gateway.auth.mode: "trusted-proxy"`. Майстер початкового налаштування типово генерує token.
- Якщо налаштовано і `gateway.auth.token`, і `gateway.auth.password` (зокрема через SecretRef), явно задайте `gateway.auth.mode` як `token` або `password`. Під час запуску, а також у процесах встановлення/відновлення сервісу виникає помилка, якщо налаштовані обидва значення, а mode не задано.
- `gateway.auth.mode: "none"`: явний режим без auth. Використовуйте лише для довірених локальних налаштувань local loopback; цей варіант навмисно не пропонується у запитах онбордингу.
- `gateway.auth.mode: "trusted-proxy"`: делегувати auth reverse proxy з контролем ідентичності та довіряти заголовкам ідентичності від `gateway.trustedProxies` (див. [Trusted Proxy Auth](/uk/gateway/trusted-proxy-auth)). Цей режим очікує **не-loopback** джерело proxy; локальні loopback reverse proxy на тому самому хості не задовольняють вимоги trusted-proxy auth.
- `gateway.auth.allowTailscale`: якщо `true`, заголовки ідентичності Tailscale Serve можуть задовольняти auth для Control UI/WebSocket (перевіряється через `tailscale whois`). Кінцеві точки HTTP API **не** використовують цю auth за заголовками Tailscale; вони дотримуються звичайного режиму HTTP auth gateway. Цей потік без token припускає, що хост gateway є довіреним. Типове значення — `true`, коли `tailscale.mode = "serve"`.
- `gateway.auth.rateLimit`: необов’язковий лімітер невдалих спроб auth. Застосовується для кожного IP клієнта та для кожної області auth окремо (спільний секрет і token пристрою відстежуються незалежно). Заблоковані спроби повертають `429` + `Retry-After`.
- В асинхронному шляху Tailscale Serve для Control UI невдалі спроби для того самого `{scope, clientIp}` серіалізуються перед записом про невдачу. Тому одночасні хибні спроби від одного клієнта можуть спровокувати лімітер уже на другому запиті, замість того щоб обидві пройшли як звичайні невідповідності.
- `gateway.auth.rateLimit.exemptLoopback` типово дорівнює `true`; установіть `false`, якщо свідомо хочете також обмежувати localhost-трафік (для тестових сценаріїв або суворих розгортань через proxy).
- Спроби WS auth із browser-origin завжди обмежуються без винятку для loopback (додатковий рівень захисту від браузерного brute force на localhost).
- На loopback такі блокування для browser-origin ізольовані за нормалізованим
значенням `Origin`, тож повторні невдачі з одного localhost-origin не
блокують автоматично інший origin.
- `tailscale.mode`: `serve` (лише tailnet, bind на loopback) або `funnel` (публічний доступ, потребує auth).
- `controlUi.allowedOrigins`: явний список дозволених browser-origin для підключень Gateway WebSocket. Обов’язковий, коли очікуються browser-клієнти не з loopback-origin.
- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: небезпечний режим, який вмикає fallback origin через заголовок Host для розгортань, що навмисно покладаються на політику origin на основі заголовка Host.
- `remote.transport`: `ssh` (типово) або `direct` (ws/wss). Для `direct` значення `remote.url` має бути `ws://` або `wss://`.
- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: клієнтське
аварійне перевизначення через змінну середовища процесу, яке дозволяє plaintext `ws://` до довірених IP
приватної мережі; для plaintext типовим залишається режим лише loopback. Еквівалента в `openclaw.json`
немає, а конфігурація приватної мережі браузера, така як
`browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`, не впливає на клієнтів
Gateway WebSocket.
- `gateway.remote.token` / `.password`: поля облікових даних віддаленого клієнта. Вони самі по собі не налаштовують gateway auth.
- `gateway.push.apns.relay.baseUrl`: базова HTTPS URL зовнішнього APNs relay, який використовують офіційні/TestFlight збірки iOS після публікації relay-реєстрацій у gateway. Ця URL має збігатися з URL relay, вбудованою в збірку iOS.
- `gateway.push.apns.relay.timeoutMs`: тайм-аут надсилання від gateway до relay у мілісекундах. Типове значення: `10000`.
- Реєстрації на основі relay делегуються конкретній ідентичності gateway. Пов’язаний застосунок iOS отримує `gateway.identity.get`, включає цю ідентичність у реєстрацію relay і пересилає gateway право надсилання в межах реєстрації. Інший gateway не може повторно використати цю збережену реєстрацію.
- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: тимчасові override змінних середовища для наведеної вище конфігурації relay.
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: аварійний виняток лише для розробки, який дозволяє loopback HTTP URL для relay. У production URL relay мають залишатися на HTTPS.
- Реєстрації на основі relay делегуються конкретній ідентичності gateway. Пов’язаний застосунок iOS отримує `gateway.identity.get`, включає цю ідентичність у реєстрацію relay і пересилає gateway право надсилання в межах цієї реєстрації. Інший gateway не може повторно використати цю збережену реєстрацію.
- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: тимчасові перевизначення через env для наведеної вище конфігурації relay.
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: аварійний виняток лише для розробки, щоб дозволити loopback HTTP URL relay. У production URL relay мають залишатися на HTTPS.
- `gateway.channelHealthCheckMinutes`: інтервал моніторингу стану каналу в хвилинах. Установіть `0`, щоб глобально вимкнути перезапуски health-monitor. Типове значення: `5`.
- `gateway.channelStaleEventThresholdMinutes`: поріг застарілого сокета в хвилинах. Це значення має бути більшим або рівним `gateway.channelHealthCheckMinutes`. Типове значення: `30`.
- `gateway.channelMaxRestartsPerHour`: максимальна кількість перезапусків health-monitor на канал/обліковий запис протягом ковзної години. Типове значення: `10`.
- `channels.<provider>.healthMonitor.enabled`: вимкнення перезапусків health-monitor для окремого каналу зі збереженням глобального монітора увімкненим.
- `channels.<provider>.accounts.<accountId>.healthMonitor.enabled`: перевизначення на рівні облікового запису для каналів із кількома обліковими записами. Якщо задано, має пріоритет над перевизначенням на рівні каналу.
- Локальні шляхи викликів gateway можуть використовувати `gateway.remote.*` як резервний варіант лише тоді, коли `gateway.auth.*` не задано.
- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовано через SecretRef, але не розв’язано, розв’язання завершується в закритому режимі помилки (без маскування резервним fallback до remote).
- `trustedProxies`: IP-адреси reverse proxy, які завершують TLS або вставляють заголовки forwarded-client. Перелічуйте лише proxy, які ви контролюєте. Записи loopback лишаються коректними для конфігурацій proxy/локального виявлення на тому ж хості (наприклад Tailscale Serve або локальний reverse proxy), але вони **не** роблять запити loopback придатними для `gateway.auth.mode: "trusted-proxy"`.
- `allowRealIpFallback`: коли `true`, gateway приймає `X-Real-IP`, якщо `X-Forwarded-For` відсутній. Типове значення `false` для fail-closed поведінки.
- `gateway.channelStaleEventThresholdMinutes`: поріг застарілого сокета в хвилинах. Тримайте його більшим або рівним `gateway.channelHealthCheckMinutes`. Типове значення: `30`.
- `gateway.channelMaxRestartsPerHour`: максимальна кількість перезапусків health-monitor на канал/обліковий запис у межах ковзної години. Типове значення: `10`.
- `channels.<provider>.healthMonitor.enabled`: вимкнення на рівні каналу для перезапусків health-monitor, при цьому глобальний монітор залишається увімкненим.
- `channels.<provider>.accounts.<accountId>.healthMonitor.enabled`: перевизначення на рівні облікового запису для multi-account каналів. Якщо задано, воно має пріоритет над перевизначенням рівня каналу.
- Локальні шляхи виклику gateway можуть використовувати `gateway.remote.*` як fallback лише тоді, коли `gateway.auth.*` не задано.
- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовано через SecretRef і значення не вдалося розв’язати, розв’язання завершується fail-closed (без маскування через fallback на remote).
- `trustedProxies`: IP reverse proxy, які завершують TLS або додають заголовки пересланого клієнта. Вказуйте лише proxy, які ви контролюєте. Записи loopback і далі допустимі для налаштувань проксі на тому самому хості/локального виявлення (наприклад, Tailscale Serve або локальний reverse proxy), але вони **не** роблять loopback-запити придатними для `gateway.auth.mode: "trusted-proxy"`.
- `allowRealIpFallback`: якщо `true`, gateway приймає `X-Real-IP`, коли `X-Forwarded-For` відсутній. Типово `false` для поведінки fail-closed.
- `gateway.tools.deny`: додаткові назви інструментів, заблоковані для HTTP `POST /tools/invoke` (розширює типовий список заборон).
- `gateway.tools.allow`: прибирає назви інструментів із типового списку HTTP-заборон.
- `gateway.tools.allow`: прибирає назви інструментів із типового списку заборон для HTTP.
</Accordion>
@ -356,14 +357,14 @@ bundled каналів (автентифікація, керування дос
- Chat Completions: типово вимкнено. Увімкніть через `gateway.http.endpoints.chatCompletions.enabled: true`.
- Responses API: `gateway.http.endpoints.responses.enabled`.
- Посилене захист URL-входів для Responses:
- Посилене захист URL-вводу Responses:
- `gateway.http.endpoints.responses.maxUrlParts`
- `gateway.http.endpoints.responses.files.urlAllowlist`
- `gateway.http.endpoints.responses.images.urlAllowlist`
Порожні списки allowlist вважаються незаданими; використовуйте `gateway.http.endpoints.responses.files.allowUrl=false`
Порожні allowlist трактуються як незадані; використовуйте `gateway.http.endpoints.responses.files.allowUrl=false`
і/або `gateway.http.endpoints.responses.images.allowUrl=false`, щоб вимкнути отримання URL.
- Необов’язковий заголовок посиленого захисту відповіді:
- `gateway.http.securityHeaders.strictTransportSecurity` (задавайте лише для контрольованих вами HTTPS-походжень; див. [Trusted Proxy Auth](/uk/gateway/trusted-proxy-auth#tls-termination-and-hsts))
- `gateway.http.securityHeaders.strictTransportSecurity` (задавайте лише для HTTPS-origin, які ви контролюєте; див. [Trusted Proxy Auth](/uk/gateway/trusted-proxy-auth#tls-termination-and-hsts))
### Ізоляція кількох екземплярів
@ -395,11 +396,11 @@ openclaw gateway --port 19001
}
```
- `enabled`: вмикає завершення TLS на слухачі gateway (HTTPS/WSS) (типове значення: `false`).
- `autoGenerate`: автоматично генерує локальну самопідписану пару cert/key, якщо явні файли не налаштовано; лише для локального/dev використання.
- `certPath`: шлях файлової системи до файла сертифіката TLS.
- `keyPath`: шлях файлової системи до файла приватного ключа TLS; обмежуйте доступ через дозволи.
- `caPath`: необов’язковий шлях до пакета CA для перевірки клієнта або власних ланцюжків довіри.
- `enabled`: вмикає завершення TLS на прослуховувачі gateway (HTTPS/WSS) (типово: `false`).
- `autoGenerate`: автоматично генерує локальну самопідписану пару cert/key, якщо явні файли не налаштовані; лише для локального/dev використання.
- `certPath`: шлях файлової системи до файла TLS certificate.
- `keyPath`: шлях файлової системи до файла приватного TLS key; обмежуйте доступ через дозволи.
- `caPath`: необов’язковий шлях до пакета CA для перевірки клієнтів або користувацьких ланцюжків довіри.
### `gateway.reload`
@ -417,11 +418,11 @@ openclaw gateway --port 19001
- `mode`: керує тим, як зміни конфігурації застосовуються під час виконання.
- `"off"`: ігнорувати зміни наживо; зміни потребують явного перезапуску.
- `"restart"`: завжди перезапускати процес gateway після зміни конфігурації.
- `"restart"`: завжди перезапускати процес gateway при зміні конфігурації.
- `"hot"`: застосовувати зміни в процесі без перезапуску.
- `"hybrid"` (типово): спочатку пробувати hot reload; якщо потрібно — переходити до перезапуску.
- `debounceMs`: вікно debounce в мс перед застосуванням змін конфігурації (невід’ємне ціле число).
- `deferralTimeoutMs`: максимальний час очікування в мс для операцій у процесі перед примусовим перезапуском (типове значення: `300000` = 5 хвилин).
- `"hybrid"` (типово): спочатку спробувати hot reload; якщо потрібно, перейти до перезапуску.
- `debounceMs`: вікно debounce у мс перед застосуванням змін конфігурації (невід’ємне ціле число).
- `deferralTimeoutMs`: максимальний час у мс очікування завершення операцій у процесі перед примусовим перезапуском (типово: `300000` = 5 хвилин).
---
@ -459,7 +460,7 @@ openclaw gateway --port 19001
```
Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
Токени hooks у query string відхиляються.
Токени hooks у рядку запиту відхиляються.
Примітки щодо валідації та безпеки:
@ -467,38 +468,38 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
- `hooks.token` має **відрізнятися** від `gateway.auth.token`; повторне використання токена Gateway відхиляється.
- `hooks.path` не може бути `/`; використовуйте окремий підшлях, наприклад `/hooks`.
- Якщо `hooks.allowRequestSessionKey=true`, обмежте `hooks.allowedSessionKeyPrefixes` (наприклад `["hook:"]`).
- Якщо mapping або preset використовує шаблонний `sessionKey`, задайте `hooks.allowedSessionKeyPrefixes` і `hooks.allowRequestSessionKey=true`. Статичні ключі mapping не потребують цього дозволу.
- Якщо mapping або preset використовує шаблонний `sessionKey`, задайте `hooks.allowedSessionKeyPrefixes` і `hooks.allowRequestSessionKey=true`. Статичні ключі mapping такого opt-in не потребують.
**Кінцеві точки:**
- `POST /hooks/wake``{ text, mode?: "now"|"next-heartbeat" }`
- `POST /hooks/agent``{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }`
- `sessionKey` із тіла запиту приймається лише коли `hooks.allowRequestSessionKey=true` (типове значення: `false`).
- `POST /hooks/<name>`визначається через `hooks.mappings`
- Значення `sessionKey` у mapping, згенеровані шаблоном, розглядаються як зовнішньо надані й також вимагають `hooks.allowRequestSessionKey=true`.
- `sessionKey` із тіла запиту приймається лише коли `hooks.allowRequestSessionKey=true` (типово: `false`).
- `POST /hooks/<name>`розв’язується через `hooks.mappings`
- Значення `sessionKey` у mapping, зрендерені через шаблон, вважаються зовнішньо заданими і також вимагають `hooks.allowRequestSessionKey=true`.
<Accordion title="Докладно про mappings">
- `match.path` зіставляється з підшляхом після `/hooks` (наприклад `/hooks/gmail``gmail`).
- `match.source` зіставляється з полем у payload для узагальнених шляхів.
- Шаблони на кшталт `{{messages[0].subject}}` читають дані з payload.
- `match.path` зіставляється з підшляхом після `/hooks` (наприклад, `/hooks/gmail``gmail`).
- `match.source` зіставляється з полем payload для загальних шляхів.
- Шаблони на кшталт `{{messages[0].subject}}` читають значення з payload.
- `transform` може вказувати на модуль JS/TS, що повертає дію hook.
- `transform.module` має бути відносним шляхом і залишатися в межах `hooks.transformsDir` (абсолютні шляхи й traversal відхиляються).
- `agentId` маршрутизує до конкретного агента; невідомі ID повертаються до типового.
- `allowedAgentIds`: обмежує явну маршрутизацію (`*` або не задано = дозволити все, `[]` = заборонити все).
- `defaultSessionKey`: необов’язковий фіксований ключ сесії для запусків агента hook без явного `sessionKey`.
- `allowRequestSessionKey`: дозволити викликачам `/hooks/agent` і ключам сесії mapping, керованим шаблоном, задавати `sessionKey` (типове значення: `false`).
- `transform.module` має бути відносним шляхом і залишатися в межах `hooks.transformsDir` (абсолютні шляхи та traversal відхиляються).
- `agentId` спрямовує на конкретного агента; невідомі ID повертаються до типового.
- `allowedAgentIds`: обмежує явну маршрутизацію (`*` або відсутнє значення = дозволити всі, `[]` = заборонити всі).
- `defaultSessionKey`: необов’язковий фіксований ключ сесії для запусків hook-агента без явного `sessionKey`.
- `allowRequestSessionKey`: дозволяє викликачам `/hooks/agent` і session key mapping на основі шаблонів задавати `sessionKey` (типово: `false`).
- `allowedSessionKeyPrefixes`: необов’язковий список дозволених префіксів для явних значень `sessionKey` (запит + mapping), наприклад `["hook:"]`. Стає обов’язковим, коли будь-який mapping або preset використовує шаблонний `sessionKey`.
- `deliver: true` надсилає фінальну відповідь до каналу; `channel` типово дорівнює `last`.
- `model` перевизначає LLM для цього запуску hook (має бути дозволено, якщо задано каталог моделей).
- `deliver: true` надсилає фінальну відповідь у канал; типове значення `channel` `last`.
- `model` перевизначає LLM для цього запуску hook (має бути дозволена, якщо задано каталог моделей).
</Accordion>
### Інтеграція Gmail
- Вбудований preset Gmail використовує `sessionKey: "hook:gmail:{{messages[0].id}}"`.
- Якщо ви зберігаєте таку маршрутизацію для кожного повідомлення, установіть `hooks.allowRequestSessionKey: true` і обмежте `hooks.allowedSessionKeyPrefixes`, щоб вони відповідали простору імен Gmail, наприклад `["hook:", "hook:gmail:"]`.
- Якщо вам потрібне `hooks.allowRequestSessionKey: false`, перевизначте preset статичним `sessionKey` замість шаблонного типового.
- Якщо ви зберігаєте таку маршрутизацію для кожного повідомлення, задайте `hooks.allowRequestSessionKey: true` і обмежте `hooks.allowedSessionKeyPrefixes` так, щоб вони відповідали простору імен Gmail, наприклад `["hook:", "hook:gmail:"]`.
- Якщо вам потрібне `hooks.allowRequestSessionKey: false`, перевизначте preset статичним `sessionKey` замість шаблонного типового значення.
```json5
{
@ -521,7 +522,7 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
}
```
- Gateway автоматично запускає `gog gmail watch serve` під час завантаження, якщо це налаштовано. Установіть `OPENCLAW_SKIP_GMAIL_WATCHER=1`, щоб вимкнути.
- Gateway автоматично запускає `gog gmail watch serve` під час старту, якщо це налаштовано. Установіть `OPENCLAW_SKIP_GMAIL_WATCHER=1`, щоб вимкнути.
- Не запускайте окремий `gog gmail watch serve` паралельно з Gateway.
---
@ -538,18 +539,18 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
}
```
- Обслуговує HTML/CSS/JS і A2UI, які може редагувати агент, через HTTP на порту Gateway:
- Обслуговує HTML/CSS/JS і A2UI, які агент може редагувати, через HTTP на порту Gateway:
- `http://<gateway-host>:<gateway.port>/__openclaw__/canvas/`
- `http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/`
- Лише локально: зберігайте `gateway.bind: "loopback"` (типово).
- Binds не на loopback: маршрути canvas вимагають auth Gateway (token/password/trusted-proxy), як і інші HTTP-поверхні Gateway.
- Node WebViews зазвичай не надсилають заголовки auth; після сполучення й підключення node Gateway оголошує URL можливостей у межах node для доступу до canvas/A2UI.
- URL можливостей прив’язані до активної WS-сесії node і швидко спливають. Fallback на основі IP не використовується.
- Впроваджує клієнт live reload у відданий HTML.
- Лише локально: залишайте `gateway.bind: "loopback"` (типово).
- Bind не на loopback: маршрути canvas вимагають auth Gateway (token/password/trusted-proxy), так само як і інші HTTP-поверхні Gateway.
- Node WebView зазвичай не надсилають заголовки auth; після сполучення та підключення node Gateway оголошує URL-адреси можливостей у межах node для доступу до canvas/A2UI.
- URL-адреси можливостей прив’язані до активної WS-сесії node і швидко спливають. Fallback на основі IP не використовується.
- Вбудовує клієнт live-reload у HTML, що віддається.
- Автоматично створює стартовий `index.html`, якщо каталог порожній.
- Також обслуговує A2UI за адресою `/__openclaw__/a2ui/`.
- Також віддає A2UI за адресою `/__openclaw__/a2ui/`.
- Зміни потребують перезапуску gateway.
- Вимикайте live reload для великих каталогів або в разі помилок `EMFILE`.
- Вимкніть live reload для великих каталогів або при помилках `EMFILE`.
---
@ -567,9 +568,9 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
}
```
- `minimal` (типово): не включає `cliPath` + `sshPort` до записів TXT.
- `minimal` (типово): не включає `cliPath` + `sshPort` у записи TXT.
- `full`: включає `cliPath` + `sshPort`.
- Ім’я хоста типово `openclaw`. Перевизначається через `OPENCLAW_MDNS_HOSTNAME`.
- Ім’я хоста типово `openclaw`. Для перевизначення використовуйте `OPENCLAW_MDNS_HOSTNAME`.
### Wide-area (DNS-SD)
@ -581,7 +582,7 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
}
```
Записує зону unicast DNS-SD у `~/.openclaw/dns/`. Для виявлення між мережами поєднуйте з DNS-сервером (рекомендовано CoreDNS) + Tailscale split DNS.
Записує зону unicast DNS-SD у `~/.openclaw/dns/`. Для виявлення між мережами поєднуйте з DNS-сервером (рекомендовано CoreDNS) + split DNS у Tailscale.
Налаштування: `openclaw dns setup --apply`.
@ -606,7 +607,7 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
}
```
- Вбудовані змінні середовища застосовуються лише якщо в середовищі процесу відсутній цей ключ.
- Вбудовані змінні середовища застосовуються лише тоді, коли в середовищі процесу відсутній ключ.
- Файли `.env`: `.env` у CWD + `~/.openclaw/.env` (жоден із них не перевизначає наявні змінні).
- `shellEnv`: імпортує відсутні очікувані ключі з профілю вашої login shell.
- Повний порядок пріоритету див. у [Environment](/uk/help/environment).
@ -624,8 +625,8 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
```
- Зіставляються лише назви у верхньому регістрі: `[A-Z_][A-Z0-9_]*`.
- Відсутні/порожні змінні спричиняють помилку під час завантаження конфігурації.
- Екрануйте через `$${VAR}`, щоб отримати літеральний `${VAR}`.
- Відсутні/порожні змінні викликають помилку під час завантаження конфігурації.
- Екрануйте через `$${VAR}`, щоб отримати буквальний `${VAR}`.
- Працює з `$include`.
---
@ -636,7 +637,7 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
### `SecretRef`
Використовуйте одну форму об’єкта:
Використовуйте одну таку форму об’єкта:
```json5
{ source: "env" | "file" | "exec", provider: "default", id: "..." }
@ -646,15 +647,15 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
- шаблон `provider`: `^[a-z][a-z0-9_-]{0,63}$`
- шаблон `id` для `source: "env"`: `^[A-Z][A-Z0-9_]{0,127}$`
- `id` для `source: "file"`: абсолютний JSON pointer (наприклад `"/providers/openai/apiKey"`)
- `source: "file"` `id`: абсолютний JSON pointer (наприклад `"/providers/openai/apiKey"`)
- шаблон `id` для `source: "exec"`: `^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$`
- `id` для `source: "exec"` не повинен містити slash-delimited сегменти шляху `.` або `..` (наприклад `a/../b` відхиляється)
- `id` для `source: "exec"` не повинні містити сегменти шляху `.` або `..`, розділені `/` (наприклад, `a/../b` відхиляється)
### Підтримувана поверхня облікових даних
- Канонічна матриця: [Поверхня облікових даних SecretRef](/uk/reference/secretref-credential-surface)
- Канонічна матриця: [SecretRef Credential Surface](/uk/reference/secretref-credential-surface)
- `secrets apply` націлюється на підтримувані шляхи облікових даних у `openclaw.json`.
- Посилання в `auth-profiles.json` включені до розв’язання під час виконання та покриття аудиту.
- Посилання в `auth-profiles.json` входять до runtime-розв’язання та покриття аудиту.
### Конфігурація провайдерів секретів
@ -686,14 +687,14 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
Примітки:
- Провайдер `file` підтримує `mode: "json"` і `mode: "singleValue"` (у режимі singleValue `id` має дорівнювати `"value"`).
- Шляхи провайдера file і exec завершуються помилкою в закритому режимі, якщо перевірка Windows ACL недоступна. Установлюйте `allowInsecurePath: true` лише для довірених шляхів, які не можна перевірити.
- Провайдер `exec` вимагає абсолютний шлях `command` і використовує payload протоколу через stdin/stdout.
- Типово шляхи command, що є symlink, відхиляються. Установіть `allowSymlinkCommand: true`, щоб дозволити шляхи symlink із перевіркою розв’язаного цільового шляху.
- Якщо налаштовано `trustedDirs`, перевірка trusted-dir застосовується до розв’язаного цільового шляху.
- Середовище дочірнього процесу `exec` типово мінімальне; передавайте потрібні змінні явно через `passEnv`.
- Посилання на секрети розв’язуються під час активації у snapshot в пам’яті, після чого шляхи запитів читають лише цей snapshot.
- Під час активації застосовується фільтрація активної поверхні: нерозв’язані посилання на увімкнених поверхнях спричиняють помилку запуску/reload, тоді як неактивні поверхні пропускаються з діагностикою.
- Провайдер `file` підтримує `mode: "json"` і `mode: "singleValue"` (у режимі singleValue значення `id` має бути `"value"`).
- Шляхи провайдерів file і exec переходять у fail closed, коли перевірка Windows ACL недоступна. Установлюйте `allowInsecurePath: true` лише для довірених шляхів, які неможливо перевірити.
- Провайдер `exec` вимагає абсолютний шлях у `command` і використовує корисні навантаження протоколу через stdin/stdout.
- Типово шляхи команд-симлінків відхиляються. Установіть `allowSymlinkCommand: true`, щоб дозволити шляхи-симлінки, водночас перевіряючи розв’язаний цільовий шлях.
- Якщо налаштовано `trustedDirs`, перевірка довірених каталогів застосовується до розв’язаного цільового шляху.
- Дочірнє середовище `exec` типово мінімальне; передавайте потрібні змінні явно через `passEnv`.
- Посилання на секрети розв’язуються під час активації в snapshot у пам’яті, а потім шляхи запитів читають лише цей snapshot.
- Під час активації застосовується фільтрація активної поверхні: нерозв’язані посилання на увімкнених поверхнях призводять до помилки запуску/перезавантаження, тоді як неактивні поверхні пропускаються з діагностикою.
---
@ -717,11 +718,11 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
- Профілі для кожного агента зберігаються в `<agentDir>/auth-profiles.json`.
- `auth-profiles.json` підтримує посилання на рівні значень (`keyRef` для `api_key`, `tokenRef` для `token`) для статичних режимів облікових даних.
- Профілі в режимі OAuth (`auth.profiles.<id>.mode = "oauth"`) не підтримують облікові дані профілю auth на основі SecretRef.
- Статичні облікові дані під час виконання беруться з розв’язаних snapshot у пам’яті; застарілі статичні записи `auth.json` очищаються під час виявлення.
- Профілі режиму OAuth (`auth.profiles.<id>.mode = "oauth"`) не підтримують облікові дані профілю auth на основі SecretRef.
- Статичні runtime-облікові дані надходять із розв’язаних snapshot у пам’яті; застарілі статичні записи `auth.json` очищаються при виявленні.
- Застарілий імпорт OAuth виконується з `~/.openclaw/credentials/oauth.json`.
- Див. [OAuth](/uk/concepts/oauth).
- Поведінка secrets під час виконання та інструменти `audit/configure/apply`: [Керування секретами](/uk/gateway/secrets).
- Runtime-поведінка секретів і інструменти `audit/configure/apply`: [Secrets Management](/uk/gateway/secrets).
### `auth.cooldowns`
@ -743,25 +744,25 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
}
```
- `billingBackoffHours`: базова затримка повтору в годинах, коли профіль завершується помилкою через справжні
billing-помилки/недостатній кредит (типове значення: `5`). Явний текст про billing
- `billingBackoffHours`: базовий backoff у годинах, коли профіль завершується помилкою через справжні
billing/insufficient-credit помилки (типово: `5`). Явний текст про billing
усе ще може потрапити сюди навіть для відповідей `401`/`403`, але
текстові зіставлення, специфічні для провайдера, залишаються обмеженими тим провайдером,
якому вони належать (наприклад OpenRouter
`Key limit exceeded`). Повторювані HTTP `402` повідомлення про usage-window або
ліміти витрат organization/workspace натомість залишаються в шляху `rate_limit`.
- `billingBackoffHoursByProvider`: необов’язкові перевизначення годин затримки billing для окремих провайдерів.
- `billingMaxHours`: верхня межа в годинах для експоненційного зростання затримки billing (типове значення: `24`).
- `authPermanentBackoffMinutes`: базова затримка повтору в хвилинах для збоїв `auth_permanent` із високою впевненістю (типове значення: `10`).
- `authPermanentMaxMinutes`: верхня межа в хвилинах для зростання затримки `auth_permanent` (типове значення: `60`).
- `failureWindowHours`: ковзне вікно в годинах, що використовується для лічильників затримки повтору (типове значення: `24`).
- `overloadedProfileRotations`: максимальна кількість ротацій auth-профілів того самого провайдера для помилок перевантаження перед переходом до fallback моделі (типове значення: `1`). Сюди потрапляють форми зайнятості провайдера, як-от `ModelNotReadyException`.
- `overloadedBackoffMs`: фіксована затримка перед повторною спробою ротації перевантаженого провайдера/профілю (типове значення: `0`).
- `rateLimitedProfileRotations`: максимальна кількість ротацій auth-профілів того самого провайдера для помилок rate limit перед переходом до fallback моделі (типове значення: `1`). До цього кошика rate limit входить текст у форматі провайдера, як-от `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` і `resource exhausted`.
зіставлювачі тексту, специфічні для провайдера, залишаються обмеженими тим
провайдером, якому вони належать (наприклад, OpenRouter
`Key limit exceeded`). Повторювані HTTP `402` повідомлення usage-window або
organization/workspace spend-limit натомість залишаються в шляху `rate_limit`.
- `billingBackoffHoursByProvider`: необов’язкові перевизначення годин billing backoff для кожного провайдера.
- `billingMaxHours`: верхня межа в годинах для експоненційного зростання billing backoff (типово: `24`).
- `authPermanentBackoffMinutes`: базовий backoff у хвилинах для збоїв `auth_permanent` з високою впевненістю (типово: `10`).
- `authPermanentMaxMinutes`: верхня межа в хвилинах для зростання backoff `auth_permanent` (типово: `60`).
- `failureWindowHours`: ковзне вікно в годинах, що використовується для лічильників backoff (типово: `24`).
- `overloadedProfileRotations`: максимальна кількість ротацій auth-профілю в межах того самого провайдера для помилок перевантаження перед переходом до fallback моделі (типово: `1`). Сюди потрапляють форми provider-busy, такі як `ModelNotReadyException`.
- `overloadedBackoffMs`: фіксована затримка перед повторною спробою ротації перевантаженого провайдера/профілю (типово: `0`).
- `rateLimitedProfileRotations`: максимальна кількість ротацій auth-профілю в межах того самого провайдера для помилок rate-limit перед переходом до fallback моделі (типово: `1`). До цього сегмента rate-limit входить текст у стилі провайдера, такий як `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` і `resource exhausted`.
---
## Журналювання
## Логування
```json5
{
@ -777,9 +778,9 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
```
- Типовий файл журналу: `/tmp/openclaw/openclaw-YYYY-MM-DD.log`.
- Установіть `logging.file` для стабільного шляху.
- `consoleLevel` підвищується до `debug` із `--verbose`.
- `maxFileBytes`: максимальний розмір файла журналу в байтах, після якого запис припиняється (додатне ціле число; типове значення: `524288000` = 500 MB). Для production-розгортань використовуйте зовнішню ротацію журналів.
- Задайте `logging.file` для стабільного шляху.
- `consoleLevel` підвищується до `debug` з `--verbose`.
- `maxFileBytes`: максимальний розмір файла журналу в байтах, після якого запис припиняється (додатне ціле число; типово: `524288000` = 500 MB). Для production-розгортань використовуйте зовнішню ротацію журналів.
---
@ -816,19 +817,19 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
}
```
- `enabled`: головний перемикач для виводу інструментації (типове значення: `true`).
- `flags`: масив рядків прапорців, що вмикають цільовий вивід у журнал (підтримує шаблони з підстановками, як-от `"telegram.*"` або `"*"`).
- `stuckSessionWarnMs`: пороговий вік у мс для виведення попереджень про завислу сесію, поки сесія залишається в стані обробки.
- `otel.enabled`: вмикає конвеєр експорту OpenTelemetry (типове значення: `false`).
- `enabled`: головний перемикач для виводу інструментування (типово: `true`).
- `flags`: масив рядків-прапорців, що вмикають цільовий вивід журналу (підтримує шаблони з підстановками, як-от `"telegram.*"` або `"*"`).
- `stuckSessionWarnMs`: поріг віку в мс для виводу попереджень про завислу сесію, поки сесія залишається в стані обробки.
- `otel.enabled`: вмикає конвеєр експорту OpenTelemetry (типово: `false`).
- `otel.endpoint`: URL колектора для експорту OTel.
- `otel.protocol`: `"http/protobuf"` (типово) або `"grpc"`.
- `otel.headers`: додаткові заголовки метаданих HTTP/gRPC, що надсилаються із запитами експорту OTel.
- `otel.headers`: додаткові заголовки метаданих HTTP/gRPC, які надсилаються із запитами експорту OTel.
- `otel.serviceName`: назва сервісу для атрибутів ресурсу.
- `otel.traces` / `otel.metrics` / `otel.logs`: увімкнути експорт trace, metrics або logs.
- `otel.sampleRate`: частота семплювання trace `0``1`.
- `otel.flushIntervalMs`: інтервал періодичного скидання телеметрії в мс.
- `cacheTrace.enabled`: журналювати знімки cache trace для вбудованих запусків (типове значення: `false`).
- `cacheTrace.filePath`: шлях виводу для JSONL cache trace (типове значення: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`).
- `otel.sampleRate`: частота вибірки trace `0``1`.
- `otel.flushIntervalMs`: інтервал періодичного скидання telemetry у мс.
- `cacheTrace.enabled`: журналювати snapshot cache trace для вбудованих запусків (типово: `false`).
- `cacheTrace.filePath`: шлях виводу для cache trace JSONL (типово: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`).
- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: керують тим, що включається у вивід cache trace (усі типово: `true`).
---
@ -851,12 +852,12 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
}
```
- `channel`: канал релізів для встановлень npm/git — `"stable"`, `"beta"` або `"dev"`.
- `checkOnStart`: перевіряти оновлення npm під час запуску gateway (типове значення: `true`).
- `auto.enabled`: увімкнути фонове автооновлення для встановлень пакетів (типове значення: `false`).
- `auto.stableDelayHours`: мінімальна затримка в годинах перед автозастосуванням для каналу stable (типове значення: `6`; максимум: `168`).
- `auto.stableJitterHours`: додаткове вікно розподілу розгортання для каналу stable в годинах (типове значення: `12`; максимум: `168`).
- `auto.betaCheckIntervalHours`: як часто виконуються перевірки каналу beta, у годинах (типове значення: `1`; максимум: `24`).
- `channel`: канал випусків для встановлень npm/git — `"stable"`, `"beta"` або `"dev"`.
- `checkOnStart`: перевіряти оновлення npm під час запуску gateway (типово: `true`).
- `auto.enabled`: увімкнути фонове автооновлення для встановлень пакунків (типово: `false`).
- `auto.stableDelayHours`: мінімальна затримка в годинах перед автоматичним застосуванням stable-каналу (типово: `6`; максимум: `168`).
- `auto.stableJitterHours`: додаткове вікно розподілу розгортання stable-каналу в годинах (типово: `12`; максимум: `168`).
- `auto.betaCheckIntervalHours`: як часто виконуються перевірки beta-каналу в годинах (типово: `1`; максимум: `24`).
---
@ -889,22 +890,22 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
}
```
- `enabled`: глобальний feature gate ACP (типове значення: `false`).
- `dispatch.enabled`: незалежний gate для dispatch ходів сесії ACP (типове значення: `true`). Установіть `false`, щоб команди ACP залишалися доступними, але виконання блокувалося.
- `backend`: ідентифікатор типового runtime backend ACP (має відповідати зареєстрованому runtime Plugin ACP).
- `defaultAgent`: fallback ідентифікатор цільового агента ACP, коли породження не задають явну ціль.
- `allowedAgents`: список дозволених ідентифікаторів агентів для runtime-сесій ACP; порожній означає відсутність додаткових обмежень.
- `maxConcurrentSessions`: максимальна кількість одночасно активних сесій ACP.
- `stream.coalesceIdleMs`: вікно скидання простою в мс для потокового тексту.
- `stream.maxChunkChars`: максимальний розмір фрагмента перед розділенням проєкції потокового блока.
- `stream.repeatSuppression`: пригнічувати повторювані рядки статусу/інструментів для кожного ходу (типове значення: `true`).
- `stream.deliveryMode`: `"live"` передає потік поступово; `"final_only"` буферизує до термінальних подій ходу.
- `stream.hiddenBoundarySeparator`: роздільник перед видимим текстом після прихованих подій інструментів (типове значення: `"paragraph"`).
- `stream.maxOutputChars`: максимальна кількість символів виводу помічника, проєктованих на хід ACP.
- `stream.maxSessionUpdateChars`: максимальна кількість символів для проєктованих рядків статусу/оновлень ACP.
- `stream.tagVisibility`: запис із назв тегів до логічних перевизначень видимості для потокових подій.
- `runtime.ttlMinutes`: idle TTL у хвилинах для працівників сесій ACP до можливого очищення.
- `runtime.installCommand`: необов’язкова команда встановлення, яку слід виконати під час початкового налаштування runtime-середовища ACP.
- `enabled`: глобальний feature gate для ACP (типово: `false`).
- `dispatch.enabled`: окремий gate для диспетчеризації ходів ACP-сесії (типово: `true`). Установіть `false`, щоб команди ACP залишалися доступними, але виконання блокувалося.
- `backend`: id типового runtime backend ACP (має відповідати зареєстрованому runtime Plugin ACP).
- `defaultAgent`: id цільового агента ACP за замовчуванням, коли spawn не задає явної цілі.
- `allowedAgents`: список дозволених id агентів для runtime-сесій ACP; порожнє значення означає відсутність додаткового обмеження.
- `maxConcurrentSessions`: максимальна кількість одночасно активних ACP-сесій.
- `stream.coalesceIdleMs`: вікно idle flush у мс для потокового тексту.
- `stream.maxChunkChars`: максимальний розмір фрагмента перед розбиттям проєкції потокового блока.
- `stream.repeatSuppression`: пригнічувати повторювані рядки статусу/інструмента за хід (типово: `true`).
- `stream.deliveryMode`: `"live"` передає поступово; `"final_only"` буферизує до термінальних подій ходу.
- `stream.hiddenBoundarySeparator`: роздільник перед видимим текстом після прихованих подій інструмента (типово: `"paragraph"`).
- `stream.maxOutputChars`: максимальна кількість символів виводу асистента, що проєктується за хід ACP.
- `stream.maxSessionUpdateChars`: максимальна кількість символів для проєктованих рядків статусу/оновлення ACP.
- `stream.tagVisibility`: запис відповідності назв тегів логічним перевизначенням видимості для потокових подій.
- `runtime.ttlMinutes`: idle TTL у хвилинах для воркерів ACP-сесій до моменту, коли вони можуть бути очищені.
- `runtime.installCommand`: необов’язкова команда встановлення, яку слід виконати під час bootstrap середовища runtime ACP.
---
@ -921,16 +922,16 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
```
- `cli.banner.taglineMode` керує стилем слогана банера:
- `"random"` (типово): ротаційні кумедні/сезонні слогани.
- `"random"` (типово): змінні кумедні/сезонні слогани.
- `"default"`: фіксований нейтральний слоган (`All your chats, one OpenClaw.`).
- `"off"`: без тексту слогана (назва/версія банера все одно показуються).
- Щоб приховати весь банер (а не лише слогани), установіть змінну середовища `OPENCLAW_HIDE_BANNER=1`.
- Щоб приховати весь банер (а не лише слогани), задайте змінну середовища `OPENCLAW_HIDE_BANNER=1`.
---
## Wizard
Метадані, які записують керовані CLI потоки налаштування (`onboard`, `configure`, `doctor`):
Метадані, які записуються керованими потоками налаштування CLI (`onboard`, `configure`, `doctor`):
```json5
{
@ -948,13 +949,13 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
## Ідентичність
Див. поля ідентичності `agents.list` у розділі [Типові значення агента](/uk/gateway/config-agents#agent-defaults).
Див. поля ідентичності `agents.list` у розділі [Agent defaults](/uk/gateway/config-agents#agent-defaults).
---
## Bridge (застарілий, вилучений)
Поточні збірки більше не містять TCP bridge. Nodes підключаються через Gateway WebSocket. Ключі `bridge.*` більше не входять до схеми конфігурації (валідація завершується помилкою, доки їх не буде видалено; `openclaw doctor --fix` може прибрати невідомі ключі).
Поточні збірки більше не містять TCP bridge. Nodes підключаються через Gateway WebSocket. Ключі `bridge.*` більше не входять до схеми конфігурації (валідація завершиться помилкою, доки їх не буде вилучено; `openclaw doctor --fix` може прибрати невідомі ключі).
<Accordion title="Застаріла конфігурація bridge (історична довідка)">
@ -994,11 +995,11 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
}
```
- `sessionRetention`: як довго зберігати завершені ізольовані сесії запуску Cron перед очищенням із `sessions.json`. Також керує очищенням архівованих видалених транскриптів Cron. Типове значення: `24h`; установіть `false`, щоб вимкнути.
- `runLog.maxBytes`: максимальний розмір файла журналу на один запуск (`cron/runs/<jobId>.jsonl`) перед очищенням. Типове значення: `2_000_000` байтів.
- `runLog.keepLines`: кількість найновіших рядків, що зберігаються під час очищення журналу запуску. Типове значення: `2000`.
- `webhookToken`: bearer token, що використовується для доставлення POST до Cron Webhook (`delivery.mode = "webhook"`); якщо не задано, заголовок auth не надсилається.
- `webhook`: застарілий резервний URL Webhook (http/https), який використовується лише для збережених завдань, що все ще мають `notify: true`.
- `sessionRetention`: як довго зберігати завершені ізольовані сесії виконання Cron перед очищенням із `sessions.json`. Також керує очищенням архівованих видалених транскриптів Cron. Типове значення: `24h`; установіть `false`, щоб вимкнути.
- `runLog.maxBytes`: максимальний розмір файла журналу одного запуску (`cron/runs/<jobId>.jsonl`) до очищення. Типове значення: `2_000_000` байтів.
- `runLog.keepLines`: кількість найновіших рядків, що зберігаються, коли запускається очищення журналу виконання. Типове значення: `2000`.
- `webhookToken`: bearer token, що використовується для доставки POST до webhook у Cron (`delivery.mode = "webhook"`); якщо не задано, заголовок auth не надсилається.
- `webhook`: застаріла резервна URL webhook (http/https), яка використовується лише для збережених завдань, що все ще мають `notify: true`.
### `cron.retry`
@ -1014,11 +1015,11 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
}
```
- `maxAttempts`: максимальна кількість повторних спроб для одноразових завдань у разі тимчасових помилок (типове значення: `3`; діапазон: `0``10`).
- `backoffMs`: масив затримок повтору в мс для кожної повторної спроби (типове значення: `[30000, 60000, 300000]`; 110 записів).
- `retryOn`: типи помилок, що запускають повторні спроби — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Не вказуйте, щоб повторювати для всіх тимчасових типів.
- `maxAttempts`: максимальна кількість повторних спроб для одноразових завдань при тимчасових помилках (типово: `3`; діапазон: `0``10`).
- `backoffMs`: масив затримок backoff у мс для кожної повторної спроби (типово: `[30000, 60000, 300000]`; 110 записів).
- `retryOn`: типи помилок, які запускають повторні спроби — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Не задавайте, щоб повторювати всі тимчасові типи.
Застосовується лише до одноразових завдань Cron. Для періодичних завдань використовується окрема обробка збоїв.
Застосовується лише до одноразових завдань Cron. Для повторюваних завдань використовується окрема обробка збоїв.
### `cron.failureAlert`
@ -1036,11 +1037,11 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
}
```
- `enabled`: увімкнути сповіщення про збої для завдань Cron (типове значення: `false`).
- `after`: кількість послідовних збоїв перед спрацюванням сповіщення (додатне ціле число, мінімум: `1`).
- `enabled`: увімкнути сповіщення про збої для завдань Cron (типово: `false`).
- `after`: кількість послідовних збоїв перед спрацюванням сповіщення (додатне ціле число, мін.: `1`).
- `cooldownMs`: мінімальна кількість мілісекунд між повторними сповіщеннями для того самого завдання (невід’ємне ціле число).
- `mode`: режим доставлення`"announce"` надсилає через повідомлення каналу; `"webhook"` надсилає POST на налаштований Webhook.
- `accountId`: необов’язковий ідентифікатор облікового запису або каналу для обмеження доставлення сповіщень.
- `mode`: режим доставки`"announce"` надсилає через повідомлення каналу; `"webhook"` виконує POST на налаштований webhook.
- `accountId`: необов’язковий id облікового запису або каналу для обмеження доставки сповіщення.
### `cron.failureDestination`
@ -1057,31 +1058,31 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
}
```
- Типова ціль для сповіщень про збої Cron для всіх завдань.
- `mode`: `"announce"` або `"webhook"`; типове значення — `"announce"`, коли доступно достатньо цільових даних.
- `channel`: перевизначення каналу для доставлення announce. `"last"` повторно використовує останній відомий канал доставлення.
- `to`: явна ціль announce або URL Webhook. Обов’язкове для режиму webhook.
- `accountId`: необов’язкове перевизначення облікового запису для доставлення.
- Типове місце призначення для сповіщень про збої Cron для всіх завдань.
- `mode`: `"announce"` або `"webhook"`; типово `"announce"`, коли є достатньо даних цілі.
- `channel`: перевизначення каналу для доставки announce. `"last"` повторно використовує останній відомий канал доставки.
- `to`: явна ціль announce або URL webhook. Обов’язкове для режиму webhook.
- `accountId`: необов’язкове перевизначення облікового запису для доставки.
- `delivery.failureDestination` на рівні завдання перевизначає це глобальне типове значення.
- Коли не задано ні глобальну, ні окрему ціль збою для завдання, завдання, які вже доставляють через `announce`, у разі збою використовують як fallback цю основну ціль announce.
- `delivery.failureDestination` підтримується лише для завдань `sessionTarget="isolated"`, якщо тільки основне значення `delivery.mode` завдання не дорівнює `"webhook"`.
- Коли не задано ні глобального, ні рівня завдання місця призначення для збоїв, завдання, які вже доставляють через `announce`, у разі збою повертаються до цієї основної цілі announce.
- `delivery.failureDestination` підтримується лише для завдань із `sessionTarget="isolated"`, якщо тільки основний `delivery.mode` завдання не дорівнює `"webhook"`.
Див. [Cron Jobs](/uk/automation/cron-jobs). Ізольовані виконання Cron відстежуються як [фонові завдання](/uk/automation/tasks).
Див. [Cron Jobs](/uk/automation/cron-jobs). Ізольовані виконання Cron відстежуються як [background tasks](/uk/automation/tasks).
---
## Змінні шаблону моделі медіа
Заповнювачі шаблону, що розгортаються в `tools.media.models[].args`:
Заповнювачі шаблонів, що розгортаються в `tools.media.models[].args`:
| Variable | Description |
| ------------------ | ------------------------------------------------- |
| `{{Body}}` | Повне тіло вхідного повідомлення |
| `{{RawBody}}` | Необроблене тіло (без обгорток історії/відправника) |
| `{{BodyStripped}}` | Тіло без згадок у групі |
| `{{Body}}` | Повний текст вхідного повідомлення |
| `{{RawBody}}` | Необроблений текст (без обгорток історії/відправника) |
| `{{BodyStripped}}` | Текст без згадувань групи |
| `{{From}}` | Ідентифікатор відправника |
| `{{To}}` | Ідентифікатор призначення |
| `{{MessageSid}}` | Ідентифікатор повідомлення каналу |
| `{{MessageSid}}` | id повідомлення каналу |
| `{{SessionId}}` | UUID поточної сесії |
| `{{IsNewSession}}` | `"true"`, коли створено нову сесію |
| `{{MediaUrl}}` | Псевдо-URL вхідного медіа |
@ -1089,11 +1090,11 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
| `{{MediaType}}` | Тип медіа (image/audio/document/…) |
| `{{Transcript}}` | Транскрипт аудіо |
| `{{Prompt}}` | Розв’язаний prompt медіа для записів CLI |
| `{{MaxChars}}` | Розв’язана максимальна кількість символів виводу для записів CLI |
| `{{MaxChars}}` | Розв’язаний максимум символів виводу для записів CLI |
| `{{ChatType}}` | `"direct"` або `"group"` |
| `{{GroupSubject}}` | Тема групи (best effort) |
| `{{GroupMembers}}` | Попередній список учасників групи (best effort) |
| `{{SenderName}}` | Видиме ім’я відправника (best effort) |
| `{{SenderName}}` | Відображуване ім’я відправника (best effort) |
| `{{SenderE164}}` | Номер телефону відправника (best effort) |
| `{{Provider}}` | Підказка провайдера (whatsapp, telegram, discord тощо) |
@ -1101,7 +1102,7 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
## Include конфігурації (`$include`)
Розділяйте конфігурацію на кілька файлів:
Розбивайте конфігурацію на кілька файлів:
```json5
// ~/.openclaw/openclaw.json
@ -1117,13 +1118,13 @@ Auth: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
**Поведінка злиття:**
- Один файл: замінює об’єкт-контейнер.
- Масив файлів: глибоко зливається в заданому порядку (пізніші перевизначають попередні).
- Масив файлів: глибоко зливається за порядком (пізніші перевизначають ранніші).
- Сусідні ключі: зливаються після include (перевизначають включені значення).
- Вкладені include: до 10 рівнів глибини.
- Шляхи: розв’язуються відносно файла, який включає, але мають залишатися в межах каталогу конфігурації верхнього рівня (`dirname` для `openclaw.json`). Абсолютні форми/`../` дозволені лише тоді, коли після розв’язання вони все одно залишаються в межах цієї межі.
- Записи, виконувані OpenClaw і які змінюють лише один розділ верхнього рівня, підкріплений include одного файла, записуються безпосередньо в цей включений файл. Наприклад, `plugins install` оновлює `plugins: { $include: "./plugins.json5" }` у `plugins.json5` і залишає `openclaw.json` недоторканим.
- Кореневі include, масиви include та include із сусідніми перевизначеннями є лише для читання для записів, виконуваних OpenClaw; такі записи завершуються помилкою в закритому режимі замість сплощення конфігурації.
- Помилки: зрозумілі повідомлення для відсутніх файлів, помилок розбору й циклічних include.
- Шляхи: розв’язуються відносно файла, що включає, але мають залишатися в межах каталогу конфігурації верхнього рівня (`dirname` для `openclaw.json`). Абсолютні форми/форми з `../` дозволені лише тоді, коли після розв’язання вони все одно лишаються в межах цього каталогу.
- Записи, керовані OpenClaw, які змінюють лише один розділ верхнього рівня, підкріплений include одного файла, записуються назад у цей включений файл. Наприклад, `plugins install` оновлює `plugins: { $include: "./plugins.json5" }` у `plugins.json5` і залишає `openclaw.json` без змін.
- Кореневі include, масиви include та include із перевизначеннями сусідніх ключів доступні лише для читання для записів, керованих OpenClaw; такі записи завершуються fail-closed замість сплощення конфігурації.
- Помилки: чіткі повідомлення для відсутніх файлів, помилок парсингу та циклічних include.
---
@ -1132,4 +1133,4 @@ _Повязане: [Configuration](/uk/gateway/configuration) · [Configurati
## Пов’язане
- [Configuration](/uk/gateway/configuration)
- [Приклади конфігурації](/uk/gateway/configuration-examples)
- [Configuration examples](/uk/gateway/configuration-examples)

View File

@ -1,40 +1,34 @@
---
read_when:
- Ви хочете, щоб агент OpenClaw приєднався до виклику Google Meet
- Ви налаштовуєте Chrome, Chrome Node або Twilio як транспорт для Google Meet
summary: 'Plugin Google Meet: приєднання до явних URL Meet через Chrome або Twilio з типовими параметрами голосу в реальному часі'
- Ви хочете, щоб агент OpenClaw приєднався до дзвінка Google Meet
- Ви налаштовуєте Chrome, вузол Chrome або Twilio як транспорт для Google Meet
summary: 'Plugin Google Meet: приєднання до явних URL-адрес Meet через Chrome або Twilio з типовими налаштуваннями голосу в реальному часі'
title: Plugin Google Meet
x-i18n:
generated_at: "2026-04-24T18:11:41Z"
generated_at: "2026-04-24T19:34:00Z"
model: gpt-5.4
provider: openai
source_hash: 5870ce256924c9a5df455ee8f3c74d75dc24413314dc745eaf24282b58fb2036
source_hash: 75602b454c3a27a5d7155390e15525d170290846758d9d1ea3b19336d7aa10a9
source_path: plugins/google-meet.md
workflow: 15
---
Підтримка учасників Google Meet для OpenClaw — цей Plugin навмисно зроблено явним:
Підтримка учасників Google Meet для OpenClaw — цей Plugin навмисно є явним за дизайном:
- Він приєднується лише до явного URL `https://meet.google.com/...`.
- `realtime` voice — типовий режим.
- Voice у реальному часі може повертатися до повного агента OpenClaw, коли потрібні глибші
міркування або інструменти.
- Агенти вибирають поведінку приєднання через `mode`: використовуйте `realtime` для живого
прослуховування/відповідей голосом, або `transcribe`, щоб приєднатися/керувати браузером без
мосту голосу в реальному часі.
- Автентифікація починається як особистий Google OAuth або вже виконаний вхід у профіль Chrome.
- Він приєднується лише за явною URL-адресою `https://meet.google.com/...`.
- Голосовий режим `realtime` є типовим режимом.
- Голосовий режим реального часу може повертатися до повного агента OpenClaw, коли потрібні глибші міркування або інструменти.
- Агенти вибирають поведінку приєднання за допомогою `mode`: використовуйте `realtime` для живого прослуховування/зворотного мовлення або `transcribe`, щоб приєднатися/керувати браузером без голосового мосту реального часу.
- Автентифікація починається як персональний Google OAuth або вже виконаний вхід у профіль Chrome.
- Автоматичного оголошення згоди немає.
- Типовий аудіобекенд Chrome — `BlackHole 2ch`.
- Chrome може працювати локально або на сполученому хості Node.
- Twilio приймає номер для дозвону та необов’язковий PIN або послідовність DTMF.
- Команда CLI — `googlemeet`; `meet` зарезервовано для ширших
сценаріїв телеконференцій агента.
- Chrome може працювати локально або на підключеному вузлі.
- Twilio приймає номер для дозвону та необов’язкову PIN-код або послідовність DTMF.
- Команда CLI — `googlemeet`; `meet` зарезервовано для ширших сценаріїв агентських телеконференцій.
## Швидкий старт
Встановіть локальні аудіозалежності та налаштуйте бекенд-провайдера voice у реальному часі.
Типово використовується OpenAI; Google Gemini Live також працює з
`realtime.provider: "google"`:
Установіть локальні аудіозалежності та налаштуйте бекенд-провайдера голосу реального часу. OpenAI використовується за замовчуванням; Google Gemini Live також працює з `realtime.provider: "google"`:
```bash
brew install blackhole-2ch sox
@ -43,14 +37,13 @@ export OPENAI_API_KEY=sk-...
export GEMINI_API_KEY=...
```
`blackhole-2ch` встановлює віртуальний аудіопристрій `BlackHole 2ch`. Інсталятор
Homebrew вимагає перезавантаження, перш ніж macOS покаже цей пристрій:
`blackhole-2ch` установлює віртуальний аудіопристрій `BlackHole 2ch`. Інсталятор Homebrew потребує перезавантаження, перш ніж macOS зробить пристрій доступним:
```bash
sudo reboot
```
Після перезавантаження перевірте обидва компоненти:
Після перезавантаження перевірте обидві частини:
```bash
system_profiler SPAudioDataType | grep -i BlackHole
@ -78,6 +71,9 @@ command -v rec play
openclaw googlemeet setup
```
Вивід налаштування призначений для читання агентом. Він повідомляє про профіль Chrome, аудіоміст, закріплення вузла, відкладений вступ у realtime і, якщо налаштовано делегування Twilio, чи готові Plugin `voice-call` і облікові дані Twilio.
Будь-яку перевірку `ok: false` слід вважати блокувальним фактором перед тим, як просити агента приєднатися.
Приєднайтеся до зустрічі:
```bash
@ -95,38 +91,27 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij
}
```
Для приєднання лише для спостереження/керування браузером установіть `"mode": "transcribe"`. Це
не запускає двобічний міст моделі в реальному часі, тож він не говоритиме назад у
зустріч.
Для приєднання лише для спостереження/керування браузером установіть `"mode": "transcribe"`. Це не запускає двонапрямний міст моделі реального часу, тому він не буде відповідати голосом у зустрічі.
Chrome приєднується як профіль Chrome з виконаним входом. У Meet виберіть `BlackHole 2ch` для
шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого двобічного аудіо використовуйте
окремі віртуальні пристрої або граф у стилі Loopback; одного пристрою BlackHole
достатньо для першого smoke test, але він може давати луну.
Chrome приєднується як профіль Chrome, у якому виконано вхід. У Meet виберіть `BlackHole 2ch` для шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого двонапрямного аудіо використовуйте окремі віртуальні пристрої або граф на кшталт Loopback; одного пристрою BlackHole достатньо для першого smoke-тесту, але може виникати луна.
### Локальний Gateway + Parallels Chrome
Вам **не** потрібен повний OpenClaw Gateway або ключ API моделі всередині macOS VM
лише для того, щоб VM володіла Chrome. Запустіть Gateway і агента локально, а потім запустіть
хост Node у VM. Один раз увімкніть вбудований Plugin на VM, щоб Node
рекламував команду Chrome:
Вам **не** потрібен повний OpenClaw Gateway або ключ API моделі всередині macOS VM лише для того, щоб Chrome працював у VM. Запустіть Gateway і агента локально, а потім запустіть хост вузла у VM. Один раз увімкніть вбудований Plugin у VM, щоб вузол оголошував команду Chrome:
Що де працює:
- Хост Gateway: OpenClaw Gateway, робочий простір агента, ключі моделі/API, realtime-
провайдер і конфігурація Plugin Google Meet.
- macOS VM у Parallels: CLI/хост Node OpenClaw, Google Chrome, SoX, BlackHole 2ch,
і профіль Chrome з виконаним входом у Google.
- Не потрібно у VM: сервіс Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування
провайдера моделі.
- Хост Gateway: OpenClaw Gateway, робочий простір агента, ключі моделі/API, провайдер realtime і конфігурація Plugin Google Meet.
- macOS VM у Parallels: CLI/хост вузла OpenClaw, Google Chrome, SoX, BlackHole 2ch і профіль Chrome з виконаним входом у Google.
- Не потрібно у VM: служба Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування провайдера моделі.
Встановіть залежності у VM:
Установіть залежності у VM:
```bash
brew install blackhole-2ch sox
```
Перезавантажте VM після встановлення BlackHole, щоб macOS показала `BlackHole 2ch`:
Після встановлення BlackHole перезавантажте VM, щоб macOS зробила `BlackHole 2ch` доступним:
```bash
sudo reboot
@ -139,27 +124,26 @@ system_profiler SPAudioDataType | grep -i BlackHole
command -v rec play
```
Встановіть або оновіть OpenClaw у VM, потім увімкніть там вбудований Plugin:
Установіть або оновіть OpenClaw у VM, а потім увімкніть там вбудований Plugin:
```bash
openclaw plugins enable google-meet
```
Запустіть хост Node у VM:
Запустіть хост вузла у VM:
```bash
openclaw node run --host <gateway-host> --port 18789 --display-name parallels-macos
```
Якщо `<gateway-host>` — це IP LAN і ви не використовуєте TLS, Node відмовляється від
простого WebSocket, якщо ви явно не дозволите цю довірену приватну мережу:
Якщо `<gateway-host>` — це IP-адреса локальної мережі й ви не використовуєте TLS, вузол відхилить відкритий WebSocket, якщо ви явно не дозволите це для цієї довіреної приватної мережі:
```bash
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macos
```
Використовуйте ту саму змінну середовища під час встановлення Node як LaunchAgent:
Використовуйте ту саму змінну середовища, коли встановлюєте вузол як LaunchAgent:
```bash
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
@ -167,25 +151,22 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node restart
```
`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` — це змінна середовища процесу, а не
налаштування `openclaw.json`. `openclaw node install` зберігає її в середовищі LaunchAgent,
коли вона присутня в команді встановлення.
`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` — це змінна середовища процесу, а не параметр `openclaw.json`. `openclaw node install` зберігає її в середовищі LaunchAgent, якщо вона присутня в команді встановлення.
Схваліть Node з хоста Gateway:
Підтвердьте вузол із хоста Gateway:
```bash
openclaw devices list
openclaw devices approve <requestId>
```
Підтвердьте, що Gateway бачить Node і що він рекламує і `googlemeet.chrome`,
і можливість браузера/`browser.proxy`:
Підтвердьте, що Gateway бачить вузол і що він оголошує і `googlemeet.chrome`, і можливість браузера/`browser.proxy`:
```bash
openclaw nodes status
```
Спрямуйте Meet через цей Node на хості Gateway:
Спрямуйте Meet через цей вузол на хості Gateway:
```json5
{
@ -215,7 +196,7 @@ openclaw nodes status
}
```
Тепер приєднуйтесь як звичайно з хоста Gateway:
Тепер приєднуйтеся як зазвичай із хоста Gateway:
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij
@ -223,82 +204,96 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij
або попросіть агента використати інструмент `google_meet` з `transport: "chrome-node"`.
Для smoke test однією командою, який створює або повторно використовує сесію, промовляє відому
фразу та виводить стан сесії:
Для smoke-тесту однією командою, який створює або повторно використовує сеанс, промовляє відому фразу та виводить стан сеансу:
```bash
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij
```
Якщо профіль браузера не має виконаного входу, Meet очікує допуску хоста, або
Chrome потребує дозволу на мікрофон/камеру, результат join/test-speech повідомляє
`manualActionRequired: true` з `manualActionReason` і
`manualActionMessage`. Агенти повинні припинити повторні спроби приєднання, повідомити
оператору це повідомлення і повторити спробу лише після завершення ручної дії в браузері.
Якщо профіль браузера не авторизований, Meet очікує допуску від організатора або Chrome потребує дозволу на мікрофон/камеру, результат join/test-speech повідомить `manualActionRequired: true` разом із `manualActionReason` і `manualActionMessage`. Агенти повинні припинити повторні спроби приєднання, повідомити оператору це повідомлення й повторити спробу лише після завершення ручної дії в браузері.
Якщо `chromeNode.node` пропущено, OpenClaw автоматично вибирає лише тоді, коли рівно один
підключений Node рекламує і `googlemeet.chrome`, і керування браузером. Якщо
підключено кілька придатних Node, установіть `chromeNode.node` у значення id Node,
display name або віддаленого IP.
Якщо `chromeNode.node` не вказано, OpenClaw автоматично вибирає вузол лише тоді, коли рівно один підключений вузол оголошує і `googlemeet.chrome`, і керування браузером. Якщо підключено кілька придатних вузлів, задайте `chromeNode.node` як id вузла, відображуване ім’я або віддалену IP-адресу.
Поширені перевірки збоїв:
- `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM,
схваліть сполучення і переконайтеся, що у VM було виконано `openclaw plugins enable google-meet` і
`openclaw plugins enable browser`. Також підтвердьте, що
хост Gateway дозволяє обидві команди Node через
`gateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"]`.
- `BlackHole 2ch audio device not found on the node`: установіть `blackhole-2ch`
у VM і перезавантажте VM.
- Chrome відкривається, але не може приєднатися: увійдіть у профіль браузера всередині VM, або
залиште `chrome.guestName` установленим для гостьового входу. Гостьове auto-join використовує
автоматизацію браузера OpenClaw через browser proxy Node; переконайтеся, що конфігурація
браузера Node вказує на потрібний профіль, наприклад
`browser.defaultProfile: "user"` або профіль наявної сесії з іменем.
- Дублі вкладок Meet: залишайте `chrome.reuseExistingTab: true` увімкненим. OpenClaw
активує наявну вкладку для того самого URL Meet перед відкриттям нової.
- Немає аудіо: у Meet спрямовуйте мікрофон і динамік через шлях віртуального аудіопристрою,
який використовує OpenClaw; використовуйте окремі віртуальні пристрої або маршрутизацію в стилі Loopback
для чистого двобічного аудіо.
- `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM, підтвердьте сполучення й переконайтеся, що у VM було виконано `openclaw plugins enable google-meet` і `openclaw plugins enable browser`. Також підтвердьте, що хост Gateway дозволяє обидві команди вузла через `gateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"]`.
- `BlackHole 2ch audio device not found on the node`: установіть `blackhole-2ch` у VM і перезавантажте VM.
- Chrome відкривається, але не може приєднатися: увійдіть у профіль браузера всередині VM або залиште `chrome.guestName` установленим для гостьового входу. Автоматичне гостьове приєднання використовує автоматизацію браузера OpenClaw через проксі браузера вузла; переконайтеся, що конфігурація браузера вузла вказує на потрібний профіль, наприклад `browser.defaultProfile: "user"` або іменований профіль існуючого сеансу.
- Дубльовані вкладки Meet: залиште `chrome.reuseExistingTab: true` увімкненим. OpenClaw активує наявну вкладку для тієї самої URL-адреси Meet перед відкриттям нової.
- Немає аудіо: у Meet спрямовуйте мікрофон/динамік через шлях віртуального аудіопристрою, який використовує OpenClaw; використовуйте окремі віртуальні пристрої або маршрутизацію на кшталт Loopback для чистого двонапрямного аудіо.
## Примітки щодо встановлення
Типовий шлях Chrome realtime використовує два зовнішні інструменти:
Типовий режим realtime для Chrome використовує два зовнішні інструменти:
- `sox`: утиліта командного рядка для аудіо. Plugin використовує її команди `rec` і `play`
для типового аудіомосту 8 kHz G.711 mu-law.
- `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій
`BlackHole 2ch`, через який Chrome/Meet можуть маршрутизувати звук.
- `sox`: утиліта командного рядка для роботи з аудіо. Plugin використовує її команди `rec` і `play` для типового аудіомосту 8 кГц G.711 mu-law.
- `blackhole-2ch`: віртуальний аудіодрайвер для macOS. Він створює аудіопристрій `BlackHole 2ch`, через який Chrome/Meet можуть маршрутизувати звук.
OpenClaw не постачає і не розповсюджує жоден із цих пакетів. У документації користувачам
пропонується встановлювати їх як залежності хоста через Homebrew. SoX ліцензовано як
`LGPL-2.0-only AND GPL-2.0-only`; BlackHole — GPL-3.0. Якщо ви збираєте
інсталятор або appliance, який містить BlackHole разом з OpenClaw, перегляньте
умови ліцензування BlackHole у першоджерелі або отримайте окрему ліцензію від Existential Audio.
OpenClaw не постачає й не розповсюджує жоден із цих пакетів. У документації користувачам пропонується встановлювати їх як залежності хоста через Homebrew. SoX ліцензується як `LGPL-2.0-only AND GPL-2.0-only`; BlackHole — за GPL-3.0. Якщо ви збираєте інсталятор або appliance, що постачає BlackHole разом з OpenClaw, перегляньте умови ліцензування BlackHole в апстрімі або отримайте окрему ліцензію від Existential Audio.
## Транспорти
### Chrome
Транспорт Chrome відкриває URL Meet у Google Chrome і приєднується як профіль
Chrome з виконаним входом. На macOS Plugin перевіряє наявність `BlackHole 2ch` перед запуском.
Якщо налаштовано, він також виконує команду перевірки стану аудіомосту та команду запуску
перед відкриттям Chrome. Використовуйте `chrome`, коли Chrome/аудіо працюють на хості Gateway;
використовуйте `chrome-node`, коли Chrome/аудіо працюють на сполученому Node, наприклад у macOS VM Parallels.
Транспорт Chrome відкриває URL-адресу Meet у Google Chrome і приєднується як профіль Chrome, у якому виконано вхід. На macOS Plugin перед запуском перевіряє наявність `BlackHole 2ch`. Якщо налаштовано, він також запускає команду перевірки працездатності аудіомосту та команду запуску перед відкриттям Chrome. Використовуйте `chrome`, коли Chrome/аудіо працюють на хості Gateway; використовуйте `chrome-node`, коли Chrome/аудіо працюють на підключеному вузлі, наприклад у macOS VM Parallels.
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome
openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome-node
```
Спрямуйте аудіо мікрофона й динаміка Chrome через локальний аудіоміст OpenClaw.
Якщо `BlackHole 2ch` не встановлено, приєднання завершується помилкою налаштування
замість тихого приєднання без аудіошляху.
Спрямуйте аудіо мікрофона й динаміка Chrome через локальний аудіоміст OpenClaw. Якщо `BlackHole 2ch` не встановлено, приєднання завершиться помилкою налаштування, а не непомітним приєднанням без аудіошляху.
### Twilio
Транспорт Twilio — це строгий план дозвону, делегований Plugin Voice Call. Він
не аналізує сторінки Meet у пошуках телефонних номерів.
Транспорт Twilio — це суворий план дозвону, делегований Plugin Voice Call. Він не аналізує сторінки Meet для пошуку телефонних номерів.
Використовуйте це, коли участь через Chrome недоступна або якщо вам потрібен резервний варіант дозвону телефоном. Google Meet має показувати номер для телефонного дозвону та PIN для зустрічі; OpenClaw не виявляє їх зі сторінки Meet.
Увімкніть Plugin Voice Call на хості Gateway, а не на вузлі Chrome:
```json5
{
plugins: {
allow: ["google-meet", "voice-call"],
entries: {
"google-meet": {
enabled: true,
config: {
defaultTransport: "chrome-node",
// or set "twilio" if Twilio should be the default
},
},
"voice-call": {
enabled: true,
config: {
provider: "twilio",
},
},
},
},
}
```
Надайте облікові дані Twilio через середовище або конфігурацію. Середовище дозволяє не зберігати секрети в `openclaw.json`:
```bash
export TWILIO_ACCOUNT_SID=AC...
export TWILIO_AUTH_TOKEN=...
export TWILIO_FROM_NUMBER=+15550001234
```
Після ввімкнення `voice-call` перезапустіть або перезавантажте Gateway; зміни конфігурації Plugin не з’являються в уже запущеному процесі Gateway, доки його не буде перезавантажено.
Потім перевірте:
```bash
openclaw config validate
openclaw plugins list | grep -E 'google-meet|voice-call'
openclaw googlemeet setup
```
Коли делегування Twilio налаштовано, `googlemeet setup` містить успішні перевірки `twilio-voice-call-plugin` і `twilio-voice-call-credentials`.
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
@ -307,7 +302,7 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
--pin 123456
```
Використовуйте `--dtmf-sequence`, коли зустріч потребує нестандартної послідовності:
Використовуйте `--dtmf-sequence`, якщо зустріч потребує спеціальної послідовності:
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
@ -316,20 +311,17 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
--dtmf-sequence ww123456#
```
## OAuth і preflight
## OAuth і попередня перевірка
Доступ до Google Meet Media API спочатку використовує особистий клієнт OAuth. Налаштуйте
`oauth.clientId` і, за бажанням, `oauth.clientSecret`, потім виконайте:
Доступ до Google Meet Media API спочатку використовує персональний OAuth-клієнт. Налаштуйте `oauth.clientId` і, за потреби, `oauth.clientSecret`, а потім виконайте:
```bash
openclaw googlemeet auth login --json
```
Команда виводить блок конфігурації `oauth` із refresh token. Вона використовує PKCE,
localhost callback на `http://localhost:8085/oauth2callback` і ручний
процес copy/paste з `--manual`.
Команда виводить блок конфігурації `oauth` із токеном оновлення. Вона використовує PKCE, зворотний виклик localhost на `http://localhost:8085/oauth2callback` і ручний потік копіювання/вставлення з `--manual`.
Ці змінні середовища приймаються як запасні варіанти:
Ці змінні середовища приймаються як резервні варіанти:
- `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID`
- `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` або `GOOGLE_MEET_CLIENT_SECRET`
@ -340,27 +332,23 @@ localhost callback на `http://localhost:8085/oauth2callback` і ручний
- `OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING` або `GOOGLE_MEET_DEFAULT_MEETING`
- `OPENCLAW_GOOGLE_MEET_PREVIEW_ACK` або `GOOGLE_MEET_PREVIEW_ACK`
Розв’яжіть URL Meet, код або `spaces/{id}` через `spaces.get`:
Розв’яжіть URL-адресу Meet, код або `spaces/{id}` через `spaces.get`:
```bash
openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij
```
Перед роботою з медіа виконайте preflight:
Запустіть попередню перевірку перед роботою з медіа:
```bash
openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij
```
Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш
Cloud project, OAuth principal і учасники зустрічі включені до програми Google
Workspace Developer Preview Program для Meet media APIs.
Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud project, OAuth-принципал і учасники зустрічі зареєстровані в Google Workspace Developer Preview Program для Meet media APIs.
## Конфігурація
Загальному шляху Chrome realtime потрібні лише увімкнений Plugin, BlackHole, SoX
і ключ бекенд-провайдера voice у реальному часі. Типово використовується OpenAI; установіть
`realtime.provider: "google"`, щоб використовувати Google Gemini Live:
Поширений шлях realtime для Chrome потребує лише ввімкненого Plugin, BlackHole, SoX і ключа бекенд-провайдера голосу реального часу. OpenAI використовується за замовчуванням; установіть `realtime.provider: "google"`, щоб використовувати Google Gemini Live:
```bash
brew install blackhole-2ch sox
@ -388,26 +376,18 @@ export GEMINI_API_KEY=...
- `defaultTransport: "chrome"`
- `defaultMode: "realtime"`
- `chromeNode.node`: необов’язковий id/ім’я/IP Node для `chrome-node`
- `chromeNode.node`: необов’язковий id/ім’я/IP вузла для `chrome-node`
- `chrome.audioBackend: "blackhole-2ch"`
- `chrome.guestName: "OpenClaw Agent"`: ім’я, яке використовується на екрані
гостьового входу Meet без виконаного входу
- `chrome.autoJoin: true`: заповнення імені гостя та натискання Join Now з
найкращим зусиллям через автоматизацію браузера OpenClaw на `chrome-node`
- `chrome.reuseExistingTab: true`: активувати наявну вкладку Meet замість
відкривання дублікатів
- `chrome.waitForInCallMs: 20000`: чекати, поки вкладка Meet повідомить про
перебування в дзвінку, перш ніж запускати вступ для realtime
- `chrome.audioInputCommand`: команда SoX `rec`, яка записує аудіо 8 kHz G.711 mu-law
у stdout
- `chrome.audioOutputCommand`: команда SoX `play`, яка читає аудіо 8 kHz G.711 mu-law
зі stdin
- `chrome.guestName: "OpenClaw Agent"`: ім’я, що використовується на гостьовому екрані Meet без входу
- `chrome.autoJoin: true`: найкраща можлива спроба заповнити гостьове ім’я і натиснути Join Now через автоматизацію браузера OpenClaw у `chrome-node`
- `chrome.reuseExistingTab: true`: активувати наявну вкладку Meet замість відкриття дублікатів
- `chrome.waitForInCallMs: 20000`: чекати, поки вкладка Meet повідомить про перебування в дзвінку, перш ніж буде запущено вступ у realtime
- `chrome.audioInputCommand`: команда SoX `rec`, що записує аудіо 8 кГц G.711 mu-law у stdout
- `chrome.audioOutputCommand`: команда SoX `play`, що читає аудіо 8 кГц G.711 mu-law зі stdin
- `realtime.provider: "openai"`
- `realtime.toolPolicy: "safe-read-only"`
- `realtime.instructions`: короткі усні відповіді, з
`openclaw_agent_consult` для глибших відповідей
- `realtime.introMessage`: коротка усна перевірка готовності, коли підключається
міст realtime; установіть `""`, щоб приєднуватися беззвучно
- `realtime.instructions`: короткі усні відповіді, з `openclaw_agent_consult` для глибших відповідей
- `realtime.introMessage`: коротка усна перевірка готовності, коли підключається міст realtime; установіть `""`, щоб приєднатися беззвучно
Необов’язкові перевизначення:
@ -453,6 +433,8 @@ export GEMINI_API_KEY=...
}
```
`voiceCall.enabled` за замовчуванням має значення `true`; з транспортом Twilio він делегує фактичний PSTN-дзвінок і DTMF Plugin Voice Call. Якщо `voice-call` не ввімкнено, Google Meet усе ще може перевіряти та записувати план дозвону, але не може здійснювати дзвінок Twilio.
## Інструмент
Агенти можуть використовувати інструмент `google_meet`:
@ -466,26 +448,17 @@ export GEMINI_API_KEY=...
}
```
Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. Використовуйте
`transport: "chrome-node"`, коли Chrome працює на сполученому Node, наприклад у Parallels
VM. В обох випадках realtime-модель і `openclaw_agent_consult` працюють на
хості Gateway, тож облікові дані моделі залишаються там.
Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. Використовуйте `transport: "chrome-node"`, коли Chrome працює на підключеному вузлі, наприклад у VM Parallels. В обох випадках модель realtime і `openclaw_agent_consult` працюють на хості Gateway, тож облікові дані моделі залишаються там.
Використовуйте `action: "status"`, щоб перелічити активні сесії або перевірити ID сесії. Використовуйте
`action: "speak"` із `sessionId` і `message`, щоб змусити realtime-агента
говорити негайно. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сесію,
запустити відому фразу і повернути стан `inCall`, якщо хост Chrome може його повідомити. Використовуйте
`action: "leave"`, щоб позначити сесію завершеною.
Використовуйте `action: "status"`, щоб перелічити активні сеанси або перевірити ID сеансу. Використовуйте `action: "speak"` із `sessionId` і `message`, щоб змусити агента realtime говорити негайно. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сеанс, запустити відому фразу й повернути стан `inCall`, коли хост Chrome може його повідомити. Використовуйте `action: "leave"`, щоб позначити сеанс як завершений.
`status` містить стан Chrome, коли він доступний:
`status` включає стан Chrome, коли він доступний:
- `inCall`: Chrome, імовірно, перебуває всередині виклику Meet
- `micMuted`: стан мікрофона Meet з найкращим зусиллям
- `manualActionRequired` / `manualActionReason` / `manualActionMessage`: профіль
браузера потребує ручного входу, допуску хоста Meet, дозволів або відновлення
керування браузером, перш ніж запрацює мовлення
- `providerConnected` / `realtimeReady`: стан мосту голосу в реальному часі
- `lastInputAt` / `lastOutputAt`: останнє аудіо, отримане мостом або надіслане ним
- `inCall`: схоже, що Chrome перебуває всередині дзвінка Meet
- `micMuted`: найкраща можлива оцінка стану мікрофона Meet
- `manualActionRequired` / `manualActionReason` / `manualActionMessage`: профіль браузера потребує ручного входу, допуску від організатора Meet, дозволів або відновлення керування браузером, перш ніж мовлення зможе працювати
- `providerConnected` / `realtimeReady`: стан голосового мосту realtime
- `lastInputAt` / `lastOutputAt`: коли востаннє аудіо надходило до мосту або надсилалося з нього
```json
{
@ -495,36 +468,27 @@ VM. В обох випадках realtime-модель і `openclaw_agent_consul
}
```
## Консультація агента в реальному часі
## Консультація агента realtime
Режим Chrome realtime оптимізовано для живого голосового циклу. Провайдер голосу в реальному часі
чує аудіо зустрічі і говорить через налаштований аудіоміст.
Коли realtime-моделі потрібні глибші міркування, актуальна інформація або звичайні
інструменти OpenClaw, вона може викликати `openclaw_agent_consult`.
Режим realtime для Chrome оптимізовано для живого голосового циклу. Провайдер голосу реального часу чує аудіо зустрічі й говорить через налаштований аудіоміст. Коли моделі realtime потрібні глибші міркування, поточна інформація або звичайні інструменти OpenClaw, вона може викликати `openclaw_agent_consult`.
Інструмент consult у фоновому режимі запускає звичайного агента OpenClaw з контекстом
недавнього транскрипту зустрічі та повертає стислу усну відповідь до сесії
voice у реальному часі. Потім voice-модель може проговорити цю відповідь назад у зустріч.
Інструмент consult запускає звичайного агента OpenClaw у фоновому режимі з контекстом нещодавньої стенограми зустрічі й повертає стислу усну відповідь до голосового сеансу realtime. Потім голосова модель може озвучити цю відповідь назад у зустрічі.
`realtime.toolPolicy` керує запуском consult:
- `safe-read-only`: показує інструмент consult і обмежує звичайного агента
інструментами `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і
`memory_get`.
- `owner`: показує інструмент consult і дозволяє звичайному агенту використовувати
звичайну політику інструментів агента.
- `none`: не показує інструмент consult realtime-voice-моделі.
- `safe-read-only`: показувати інструмент consult і обмежувати звичайного агента інструментами `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і `memory_get`.
- `owner`: показувати інструмент consult і дозволяти звичайному агенту використовувати звичайну політику інструментів агента.
- `none`: не показувати інструмент consult голосовій моделі realtime.
Ключ сесії consult обмежений кожною окремою сесією Meet, тож наступні виклики consult
можуть повторно використовувати попередній контекст consult під час тієї самої зустрічі.
Ключ сеансу consult має область видимості в межах кожного сеансу Meet, тому наступні виклики consult можуть повторно використовувати попередній контекст consult під час тієї самої зустрічі.
Щоб примусово виконати усну перевірку готовності після того, як Chrome повністю приєднався до виклику:
Щоб примусово виконати усну перевірку готовності після того, як Chrome повністю приєднався до дзвінка:
```bash
openclaw googlemeet speak meet_... "Say exactly: I'm here and listening."
```
Для повного smoke test із приєднанням і мовленням:
Для повного smoke-тесту приєднання і мовлення:
```bash
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \
@ -532,31 +496,163 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \
--message "Say exactly: I'm here and listening."
```
## Контрольний список live-тесту
Використовуйте цю послідовність перед передаванням зустрічі агенту без нагляду:
```bash
openclaw googlemeet setup
openclaw nodes status
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \
--transport chrome-node \
--message "Say exactly: Google Meet speech test complete."
```
Очікуваний стан для Chrome-node:
- `googlemeet setup` повністю зелений.
- `nodes status` показує, що вибраний вузол підключено.
- Вибраний вузол оголошує і `googlemeet.chrome`, і `browser.proxy`.
- Вкладка Meet приєднується до дзвінка, а `test-speech` повертає стан Chrome з `inCall: true`.
Для smoke-тесту Twilio використовуйте зустріч, яка показує дані телефонного дозвону:
```bash
openclaw googlemeet setup
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
--transport twilio \
--dial-in-number +15551234567 \
--pin 123456
```
Очікуваний стан для Twilio:
- `googlemeet setup` включає зелені перевірки `twilio-voice-call-plugin` і `twilio-voice-call-credentials`.
- `voicecall` доступний у CLI після перезавантаження Gateway.
- Повернутий сеанс має `transport: "twilio"` і `twilio.voiceCallId`.
- `googlemeet leave <sessionId>` завершує делегований голосовий дзвінок.
## Усунення несправностей
### Агент не бачить інструмент Google Meet
Підтвердьте, що Plugin увімкнено в конфігурації Gateway, і перезавантажте Gateway:
```bash
openclaw plugins list | grep google-meet
openclaw googlemeet setup
```
Якщо ви щойно редагували `plugins.entries.google-meet`, перезапустіть або перезавантажте Gateway. Запущений агент бачить лише інструменти Plugin, зареєстровані поточним процесом Gateway.
### Немає підключеного вузла з підтримкою Google Meet
На хості вузла виконайте:
```bash
openclaw plugins enable google-meet
openclaw plugins enable browser
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macos
```
На хості Gateway підтвердьте вузол і перевірте команди:
```bash
openclaw devices list
openclaw devices approve <requestId>
openclaw nodes status
```
Вузол має бути підключений і містити `googlemeet.chrome` та `browser.proxy`.
Конфігурація Gateway має дозволяти ці команди вузла:
```json5
{
gateway: {
nodes: {
allowCommands: ["browser.proxy", "googlemeet.chrome"],
},
},
}
```
### Браузер відкривається, але агент не може приєднатися
Запустіть `googlemeet test-speech` і перевірте повернутий стан Chrome. Якщо він повідомляє `manualActionRequired: true`, покажіть `manualActionMessage` оператору й припиніть повторні спроби, доки дію в браузері не буде завершено.
Поширені ручні дії:
- Увійти в профіль Chrome.
- Допустити гостя з облікового запису організатора Meet.
- Надати Chrome дозволи на мікрофон/камеру.
- Закрити або виправити зависле діалогове вікно дозволів Meet.
### Агент приєднується, але не говорить
Перевірте шлях realtime:
```bash
openclaw googlemeet setup
openclaw googlemeet status
```
Використовуйте `mode: "realtime"` для прослуховування/зворотного мовлення. `mode: "transcribe"` навмисно не запускає двонапрямний голосовий міст realtime.
Також перевірте:
- На хості Gateway доступний ключ провайдера realtime, наприклад `OPENAI_API_KEY` або `GEMINI_API_KEY`.
- `BlackHole 2ch` видимий на хості Chrome.
- `rec` і `play` існують на хості Chrome.
- Мікрофон і динамік Meet спрямовано через віртуальний аудіошлях, який використовує OpenClaw.
### Перевірки налаштування Twilio завершуються з помилкою
`twilio-voice-call-plugin` завершується з помилкою, коли `voice-call` не дозволено або не ввімкнено. Додайте його до `plugins.allow`, увімкніть `plugins.entries.voice-call` і перезавантажте Gateway.
`twilio-voice-call-credentials` завершується з помилкою, коли у бекенда Twilio немає SID облікового запису, токена автентифікації або номера абонента. Установіть їх на хості Gateway:
```bash
export TWILIO_ACCOUNT_SID=AC...
export TWILIO_AUTH_TOKEN=...
export TWILIO_FROM_NUMBER=+15550001234
```
Потім перезапустіть або перезавантажте Gateway і виконайте:
```bash
openclaw googlemeet setup
```
### Дзвінок Twilio починається, але ніколи не входить у зустріч
Підтвердьте, що подія Meet показує дані телефонного дозвону. Передайте точний номер дозвону та PIN або спеціальну послідовність DTMF:
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
--transport twilio \
--dial-in-number +15551234567 \
--dtmf-sequence ww123456#
```
Використовуйте початковий `w` або коми в `--dtmf-sequence`, якщо провайдеру потрібна пауза перед введенням PIN.
## Примітки
Офіційний media API Google Meet орієнтований на отримання, тож для мовлення у виклик Meet
усе ще потрібен шлях учасника. Цей Plugin зберігає цю межу видимою:
Chrome обробляє участь через браузер і локальну маршрутизацію аудіо; Twilio обробляє
участь через телефонний дозвін.
Офіційний media API Google Meet орієнтований на приймання, тому мовлення в дзвінок Meet усе ще потребує шляху участі. Цей Plugin зберігає цю межу видимою: Chrome відповідає за участь через браузер і локальну маршрутизацію аудіо; Twilio відповідає за участь через телефонний дозвін.
Режиму Chrome realtime потрібне одне з такого:
Режим realtime для Chrome потребує одного з варіантів:
- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw володіє
мостом realtime-моделі та передає аудіо 8 kHz G.711 mu-law між цими
командами та вибраним провайдером voice у реальному часі.
- `chrome.audioBridgeCommand`: зовнішня команда моста володіє всім локальним
аудіошляхом і повинна завершитися після запуску або перевірки свого демона.
- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw керує мостом моделі realtime і передає аудіо 8 кГц G.711 mu-law між цими командами та вибраним провайдером голосу реального часу.
- `chrome.audioBridgeCommand`: зовнішня команда мосту керує всім локальним аудіошляхом і має завершитися після запуску або перевірки свого демона.
Для чистого двобічного аудіо маршрутизуйте вихід Meet і мікрофон Meet через окремі
віртуальні пристрої або граф віртуальних пристроїв у стилі Loopback. Один спільний
пристрій BlackHole може повертати інших учасників луною назад у виклик.
Для чистого двонапрямного аудіо маршрутизуйте вихід Meet і мікрофон Meet через окремі віртуальні пристрої або граф віртуального пристрою на кшталт Loopback. Один спільний пристрій BlackHole може повертати голоси інших учасників назад у дзвінок.
`googlemeet speak` запускає активний мост realtime-аудіо для сесії Chrome.
`googlemeet leave` зупиняє цей міст. Для сесій Twilio, делегованих через Plugin Voice Call,
`leave` також кладе слухавку базового голосового виклику.
`googlemeet speak` запускає активний аудіоміст realtime для сеансу Chrome.
`googlemeet leave` зупиняє цей міст. Для сеансів Twilio, делегованих через Plugin Voice Call, `leave` також завершує базовий голосовий дзвінок.
## Пов’язане
## Пов’язані матеріали
- [Plugin Voice Call](/uk/plugins/voice-call)
- [Режим розмови](/uk/nodes/talk)
- [Створення Plugins](/uk/plugins/building-plugins)
- [Plugin Voice call](/uk/plugins/voice-call)
- [Режим talk](/uk/nodes/talk)
- [Створення Plugin](/uk/plugins/building-plugins)