chore(i18n): refresh uk translations
This commit is contained in:
parent
09dcc17f10
commit
471aa2b617
@ -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]`; 1–10 записів).
|
||||
- `retryOn`: типи помилок, що запускають повторні спроби — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Не вказуйте, щоб повторювати для всіх тимчасових типів.
|
||||
- `maxAttempts`: максимальна кількість повторних спроб для одноразових завдань при тимчасових помилках (типово: `3`; діапазон: `0`–`10`).
|
||||
- `backoffMs`: масив затримок backoff у мс для кожної повторної спроби (типово: `[30000, 60000, 300000]`; 1–10 записів).
|
||||
- `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)
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user