chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-25 04:09:40 +00:00
parent c1743004c8
commit 3fc7bdebd0
9 changed files with 1207 additions and 982 deletions

View File

@ -1,25 +1,25 @@
---
read_when:
- Працюєте з функціями Telegram або Webhook
summary: Статус підтримки бота Telegram, можливості та конфігурація
- Робота над функціями Telegram або Webhookами
summary: Статус підтримки Telegram bot, можливості та конфігурація
title: Telegram
x-i18n:
generated_at: "2026-04-25T02:39:37Z"
generated_at: "2026-04-25T04:07:30Z"
model: gpt-5.4
provider: openai
source_hash: 1554ce51636dece5b44a17a03d3703c621a5f419d27c8f4e5a14fde304bec712
source_hash: 41d835e7b50a3a38fed62f252b1810475204beca4a4dd0f2b42ddaa3507deeab
source_path: channels/telegram.md
workflow: 15
---
Готовий для продакшену для DM і груп бота через grammY. Довге опитування — режим за замовчуванням; режим Webhook — необов’язковий.
Готово до використання в продакшені для DM бота та груп через grammY. За замовчуванням використовується режим long polling; режим Webhook є необов’язковим.
<CardGroup cols={3}>
<Card title="Сполучення" icon="link" href="/uk/channels/pairing">
Політика DM за замовчуванням для Telegram — сполучення.
<Card title="Підключення" icon="link" href="/uk/channels/pairing">
Типова політика DM для Telegram — підключення.
</Card>
<Card title="Усунення проблем каналу" icon="wrench" href="/uk/channels/troubleshooting">
Міжканальна діагностика та сценарії усунення проблем.
<Card title="Усунення проблем із каналами" icon="wrench" href="/uk/channels/troubleshooting">
Міжканальна діагностика та сценарії відновлення.
</Card>
<Card title="Конфігурація Gateway" icon="settings" href="/uk/gateway/configuration">
Повні шаблони та приклади конфігурації каналу.
@ -32,7 +32,7 @@ x-i18n:
<Step title="Створіть токен бота в BotFather">
Відкрийте Telegram і почніть чат із **@BotFather** (переконайтеся, що хендл точно `@BotFather`).
Виконайте `/newbot`, дотримуйтеся підказок і збережіть токен.
Запустіть `/newbot`, дотримуйтесь підказок і збережіть токен.
</Step>
@ -51,7 +51,7 @@ x-i18n:
}
```
Резерв через env: `TELEGRAM_BOT_TOKEN=...` (лише для облікового запису за замовчуванням).
Резервний варіант через env: `TELEGRAM_BOT_TOKEN=...` (лише для облікового запису за замовчуванням).
Telegram **не** використовує `openclaw channels login telegram`; налаштуйте токен у config/env, а потім запустіть gateway.
</Step>
@ -64,35 +64,35 @@ openclaw pairing list telegram
openclaw pairing approve telegram <CODE>
```
Коди сполучення діють 1 годину.
Коди підключення дійсні 1 годину.
</Step>
<Step title="Додайте бота до групи">
Додайте бота до вашої групи, а потім налаштуйте `channels.telegram.groups` і `groupPolicy` відповідно до вашої моделі доступу.
Додайте бота до своєї групи, а потім налаштуйте `channels.telegram.groups` і `groupPolicy` відповідно до своєї моделі доступу.
</Step>
</Steps>
<Note>
Порядок визначення токена залежить від облікового запису. На практиці значення з config мають пріоритет над резервом із env, а `TELEGRAM_BOT_TOKEN` застосовується лише до облікового запису за замовчуванням.
Порядок визначення токена враховує обліковий запис. На практиці значення з config мають пріоритет над резервним значенням з env, а `TELEGRAM_BOT_TOKEN` застосовується лише до облікового запису за замовчуванням.
</Note>
## Налаштування на боці Telegram
<AccordionGroup>
<Accordion title="Режим конфіденційності та видимість у групах">
За замовчуванням Telegram-боти працюють у **Privacy Mode**, який обмежує, які повідомлення групи вони отримують.
За замовчуванням Telegram-боти працюють у **Privacy Mode**, який обмежує, які повідомлення з груп вони отримують.
Якщо бот має бачити всі повідомлення групи, зробіть одне з такого:
Якщо бот має бачити всі повідомлення групи, виконайте одну з дій:
- вимкніть режим конфіденційності через `/setprivacy`, або
- зробіть бота адміністратором групи.
Після перемикання режиму конфіденційності видаліть бота й додайте його знову в кожну групу, щоб Telegram застосував зміну.
Після перемикання режиму конфіденційності видаліть бота з кожної групи й додайте його знову, щоб Telegram застосував зміну.
</Accordion>
<Accordion title="Права групи">
<Accordion title="Дозволи групи">
Статус адміністратора керується в налаштуваннях групи Telegram.
Боти-адміністратори отримують усі повідомлення групи, що корисно для постійно активної поведінки в групі.
@ -101,8 +101,8 @@ openclaw pairing approve telegram <CODE>
<Accordion title="Корисні перемикачі BotFather">
- `/setjoingroups`, щоб дозволити/заборонити додавання до груп
- `/setprivacy` для керування видимістю в групах
- `/setjoingroups` — дозволити або заборонити додавання до груп
- `/setprivacy` — поведінка видимості в групах
</Accordion>
</AccordionGroup>
@ -119,60 +119,60 @@ openclaw pairing approve telegram <CODE>
- `disabled`
`channels.telegram.allowFrom` приймає числові ID користувачів Telegram. Префікси `telegram:` / `tg:` приймаються та нормалізуються.
`dmPolicy: "allowlist"` з порожнім `allowFrom` блокує всі DM і відхиляється перевіркою config.
Під час налаштування запитуються лише числові ID користувачів.
Якщо ви оновилися і ваш config містить записи allowlist у вигляді `@username`, виконайте `openclaw doctor --fix`, щоб розв’язати їх (best-effort; потрібен токен бота Telegram).
Якщо ви раніше покладалися на файли allowlist зі сховища сполучення, `openclaw doctor --fix` може відновити записи до `channels.telegram.allowFrom` у потоках allowlist (наприклад, коли `dmPolicy: "allowlist"` ще не має явних ID).
`dmPolicy: "allowlist"` із порожнім `allowFrom` блокує всі DM і відхиляється під час валідації конфігурації.
Налаштування запитує лише числові ID користувачів.
Якщо ви оновилися і ваш config містить записи allowlist у форматі `@username`, запустіть `openclaw doctor --fix`, щоб розв’язати їх (best-effort; потрібен токен Telegram-бота).
Якщо ви раніше покладалися на файли allowlist зі сховища підключень, `openclaw doctor --fix` може відновити записи в `channels.telegram.allowFrom` для сценаріїв allowlist (наприклад, коли `dmPolicy: "allowlist"` ще не має явних ID).
Для ботів з одним власником віддавайте перевагу `dmPolicy: "allowlist"` із явними числовими ID у `allowFrom`, щоб політика доступу залишалася стійкою в config (замість залежності від попередніх схвалень сполучення).
Для ботів з одним власником надавайте перевагу `dmPolicy: "allowlist"` з явними числовими ID у `allowFrom`, щоб політика доступу надійно зберігалася в config (замість залежності від попередніх схвалень підключення).
Поширена плутанина: схвалення сполучення DM не означає, що «цей відправник авторизований усюди».
Сполучення надає доступ лише до DM. Авторизація відправника в групах, як і раніше, надходить лише з явних allowlist у config.
Якщо ви хочете, щоб «я авторизувався один раз, і працювали і DM, і команди в групі», додайте свій числовий ID користувача Telegram до `channels.telegram.allowFrom`.
Поширена плутанина: схвалення підключення DM не означає, що «цей відправник авторизований всюди».
Підключення надає доступ лише до DM. Авторизація відправника в групах усе ще походить із явних allowlist у config.
Якщо ви хочете, щоб «я був авторизований один раз, і працювали і DM, і команди в групах», додайте свій числовий ID користувача Telegram у `channels.telegram.allowFrom`.
### Як знайти свій ID користувача Telegram
Безпечніший спосіб (без стороннього бота):
1. Надішліть DM вашому боту.
2. Виконайте `openclaw logs --follow`.
1. Надішліть DM своєму боту.
2. Запустіть `openclaw logs --follow`.
3. Прочитайте `from.id`.
Офіційний метод через Bot API:
Офіційний спосіб через Bot API:
```bash
curl "https://api.telegram.org/bot<bot_token>/getUpdates"
```
Сторонній метод (менш приватний): `@userinfobot` або `@getidsbot`.
Сторонній спосіб (менш приватний): `@userinfobot` або `@getidsbot`.
</Tab>
<Tab title="Політика груп і allowlist">
Разом застосовуються два механізми керування:
Разом застосовуються два механізми:
1. **Які групи дозволені** (`channels.telegram.groups`)
- немає config `groups`:
- з `groupPolicy: "open"`: будь-яка група може пройти перевірки ID групи
- з `groupPolicy: "allowlist"` (за замовчуванням): групи блокуються, доки ви не додасте записи до `groups` (або `"*"`)
- `groups` налаштовано: працює як allowlist (явні ID або `"*"`)
- із `groupPolicy: "open"`: будь-яка група може пройти перевірки ID групи
- із `groupPolicy: "allowlist"` (за замовчуванням): групи блокуються, доки ви не додасте записи до `groups` (або `"*"`)
- `groups` налаштовано: діє як allowlist (явні ID або `"*"`)
2. **Які відправники дозволені в групах** (`channels.telegram.groupPolicy`)
- `open`
- `allowlist` (за замовчуванням)
- `disabled`
`groupAllowFrom` використовується для фільтрації відправників у групах. Якщо не задано, Telegram використовує `allowFrom` як резерв.
Записи `groupAllowFrom` мають бути числовими ID користувачів Telegram (префікси `telegram:` / `tg:` нормалізуються).
Не додавайте ID чатів груп або супергруп Telegram до `groupAllowFrom`. Від’ємні ID чатів належать до `channels.telegram.groups`.
`groupAllowFrom` використовується для фільтрації відправників у групах. Якщо не встановлено, Telegram повертається до `allowFrom`.
Елементи `groupAllowFrom` мають бути числовими ID користувачів Telegram (`telegram:` / `tg:` префікси нормалізуються).
Не вказуйте ID груп чи супергруп Telegram у `groupAllowFrom`. Від’ємні ID чатів мають бути в `channels.telegram.groups`.
Нечислові записи ігноруються для авторизації відправників.
Межа безпеки (`2026.2.25+`): авторизація відправника в групі **не** успадковує схвалення зі сховища сполучення для DM.
Сполучення залишається лише для DM. Для груп задайте `groupAllowFrom` або `allowFrom` для конкретної групи/теми.
Якщо `groupAllowFrom` не задано, Telegram використовує config `allowFrom`, а не сховище сполучення.
Практичний шаблон для ботів з одним власником: задайте свій ID користувача в `channels.telegram.allowFrom`, залиште `groupAllowFrom` незаданим і дозвольте цільові групи в `channels.telegram.groups`.
Примітка про runtime: якщо `channels.telegram` повністю відсутній, runtime за замовчуванням використовує fail-closed `groupPolicy="allowlist"`, якщо тільки `channels.defaults.groupPolicy` не задано явно.
Межа безпеки (`2026.2.25+`): авторизація відправників у групах **не** успадковує схвалення зі сховища підключень DM.
Підключення залишається лише для DM. Для груп налаштуйте `groupAllowFrom` або `allowFrom` на рівні групи/теми.
Якщо `groupAllowFrom` не встановлено, Telegram повертається до config `allowFrom`, а не до сховища підключень.
Практичний шаблон для ботів з одним власником: вкажіть свій ID користувача в `channels.telegram.allowFrom`, не встановлюйте `groupAllowFrom` і дозвольте потрібні групи в `channels.telegram.groups`.
Примітка щодо runtime: якщо `channels.telegram` повністю відсутній, runtime за замовчуванням використовує fail-closed `groupPolicy="allowlist"`, якщо лише `channels.defaults.groupPolicy` не встановлено явно.
Приклад: дозволити будь-якому учаснику в одній конкретній групі:
Приклад: дозволити будь-якого учасника в одній конкретній групі:
```json5
{
@ -189,7 +189,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
}
```
Приклад: дозволити лише конкретним користувачам в одній конкретній групі:
Приклад: дозволити лише конкретних користувачів в одній конкретній групі:
```json5
{
@ -209,24 +209,24 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
<Warning>
Поширена помилка: `groupAllowFrom` — це не allowlist груп Telegram.
- Додавайте від’ємні ID груп або супергруп Telegram, як-от `-1001234567890`, до `channels.telegram.groups`.
- Додавайте ID користувачів Telegram, як-от `8734062810`, до `groupAllowFrom`, коли хочете обмежити, хто саме всередині дозволеної групи може викликати бота.
- Використовуйте `groupAllowFrom: ["*"]` лише коли хочете, щоб будь-який учасник дозволеної групи міг звертатися до бота.
- Вказуйте від’ємні ID груп або супергруп Telegram, наприклад `-1001234567890`, у `channels.telegram.groups`.
- Вказуйте ID користувачів Telegram, наприклад `8734062810`, у `groupAllowFrom`, коли хочете обмежити, хто саме в межах дозволеної групи може викликати бота.
- Використовуйте `groupAllowFrom: ["*"]` лише тоді, коли хочете, щоб будь-який учасник дозволеної групи міг звертатися до бота.
</Warning>
</Tab>
<Tab title="Поведінка згадування">
Відповіді в групах за замовчуванням потребують згадування.
<Tab title="Поведінка згадок">
За замовчуванням відповіді в групах потребують згадки.
Згадування може надходити через:
Згадка може надходити з:
- нативне згадування `@botusername`, або
- шаблони згадування в:
- нативної згадки `@botusername`, або
- шаблонів згадки в:
- `agents.list[].groupChat.mentionPatterns`
- `messages.groupChat.mentionPatterns`
Перемикачі команд рівня сесії:
Перемикачі команд на рівні сесії:
- `/activation always`
- `/activation mention`
@ -249,9 +249,9 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Як отримати ID групового чату:
- перешліть повідомлення з групи до `@userinfobot` / `@getidsbot`
- перешліть повідомлення з групи в `@userinfobot` / `@getidsbot`
- або прочитайте `chat.id` з `openclaw logs --follow`
- або перевірте Bot API `getUpdates`
- або перевірте `getUpdates` у Bot API
</Tab>
</Tabs>
@ -259,18 +259,18 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
## Поведінка runtime
- Telegram належить процесу gateway.
- Маршрутизація детермінована: вхідні відповіді з Telegram повертаються в Telegram (модель не вибирає канали).
- Вхідні повідомлення нормалізуються до спільної оболонки каналу з метаданими відповіді та заповнювачами медіа.
- Маршрутизація є детермінованою: вхідні відповіді з Telegram повертаються в Telegram (модель не вибирає канали).
- Вхідні повідомлення нормалізуються до спільного конверта каналу з метаданими відповіді та заповнювачами медіа.
- Групові сесії ізольовані за ID групи. Теми форуму додають `:topic:<threadId>`, щоб теми залишалися ізольованими.
- DM-повідомлення можуть містити `message_thread_id`; OpenClaw маршрутизує їх із thread-aware ключами сесії та зберігає ID потоку для відповідей.
- Довге опитування використовує grammY runner із послідовністю на рівні чату/потоку. Загальна конкурентність sink runner використовує `agents.defaults.maxConcurrent`.
- Перезапуски watchdog для long polling спрацьовують за замовчуванням після 120 секунд без завершеної життєздатності `getUpdates`. Збільшуйте `channels.telegram.pollingStallThresholdMs` лише якщо у вашому розгортанні все ще трапляються хибні перезапуски через зависання опитування під час тривалої роботи. Значення задається в мілісекундах і допускається в межах від `30000` до `600000`; підтримуються перевизначення для окремих облікових записів.
- DM-повідомлення можуть містити `message_thread_id`; OpenClaw маршрутизує їх за thread-aware ключами сесій і зберігає ID потоку для відповідей.
- Long polling використовує grammY runner із послідовністю по чатах/потоках. Загальна конкурентність sink у runner використовує `agents.defaults.maxConcurrent`.
- Перезапуски watchdog для long polling спрацьовують за замовчуванням після 120 секунд без завершеної перевірки живучості `getUpdates`. Збільшуйте `channels.telegram.pollingStallThresholdMs` лише якщо у вашому розгортанні все ще трапляються хибні перезапуски через зависання polling під час тривалої роботи. Значення задається в мілісекундах і допускається в межах від `30000` до `600000`; підтримуються перевизначення для окремих облікових записів.
- Telegram Bot API не підтримує підтвердження прочитання (`sendReadReceipts` не застосовується).
## Довідник функцій
## Довідник можливостей
<AccordionGroup>
<Accordion title="Попередній перегляд живого потоку (редагування повідомлень)">
<Accordion title="Попередній перегляд live stream (редагування повідомлень)">
OpenClaw може транслювати часткові відповіді в реальному часі:
- прямі чати: повідомлення попереднього перегляду + `editMessageText`
@ -278,55 +278,74 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Вимога:
- `channels.telegram.streaming` — це `off | partial | block | progress` (за замовчуванням: `partial`)
- `progress` у Telegram відповідає `partial` (сумісність із міжканальним найменуванням)
- `streaming.preview.toolProgress` керує тим, чи перевикористовують оновлення інструментів/прогресу те саме відредаговане повідомлення попереднього перегляду (за замовчуванням: `false`). Установлюйте `true` лише коли потрібні видимі оновлення прогресу в Telegram.
- застарілі значення `channels.telegram.streamMode` і булеві значення `streaming` автоматично зіставляються
- `channels.telegram.streaming` має значення `off | partial | block | progress` (за замовчуванням: `partial`)
- `progress` у Telegram відповідає `partial` (для сумісності з міжканальним найменуванням)
- `streaming.preview.toolProgress` керує тим, чи оновлення інструментів/прогресу повторно використовують те саме відредаговане повідомлення попереднього перегляду (за замовчуванням: `true`, коли активний preview streaming)
- застарілі `channels.telegram.streamMode` і булеві значення `streaming` автоматично зіставляються
Оновлення попереднього перегляду прогресу інструментів — це короткі рядки на кшталт «Working...», які показуються під час роботи інструментів, наприклад виконання команд, читання файлів, оновлень планування або зведень патчів. Telegram залишає їх увімкненими за замовчуванням, щоб відповідати випущеній поведінці OpenClaw починаючи з `v2026.4.22` і новіших версій. Щоб зберегти відредагований попередній перегляд для тексту відповіді, але приховати рядки прогресу інструментів, задайте:
```json
{
"channels": {
"telegram": {
"streaming": {
"mode": "partial",
"preview": {
"toolProgress": false
}
}
}
}
}
```
Використовуйте `streaming.mode: "off"` лише тоді, коли хочете повністю вимкнути редагування попереднього перегляду в Telegram. Використовуйте `streaming.preview.toolProgress: false`, коли хочете вимкнути лише рядки стану прогресу інструментів.
Для відповідей лише з текстом:
- DM: OpenClaw зберігає те саме повідомлення попереднього перегляду й виконує фінальне редагування на місці (без другого повідомлення)
- група/тема: OpenClaw зберігає те саме повідомлення попереднього перегляду й виконує фінальне редагування на місці (без другого повідомлення)
- DM: OpenClaw зберігає те саме повідомлення попереднього перегляду та виконує фінальне редагування на місці (без другого повідомлення)
- група/тема: OpenClaw зберігає те саме повідомлення попереднього перегляду та виконує фінальне редагування на місці (без другого повідомлення)
Для складних відповідей (наприклад, медіаповідомлень) OpenClaw повертається до звичайної фінальної доставки, а потім очищає повідомлення попереднього перегляду.
Для складних відповідей (наприклад, із медіаконтентом) OpenClaw повертається до звичайної фінальної доставки, а потім очищає повідомлення попереднього перегляду.
Потоковий попередній перегляд відокремлений від block streaming. Коли для Telegram явно ввімкнено block streaming, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійного потокового виведення.
Preview streaming відокремлений від block streaming. Коли для Telegram явно ввімкнено block streaming, OpenClaw пропускає preview stream, щоб уникнути подвійного стримінгу.
Якщо нативний транспорт чернеток недоступний/відхилений, OpenClaw автоматично використовує резервний варіант `sendMessage` + `editMessageText`.
Якщо нативний транспорт чернеток недоступний або відхиляється, OpenClaw автоматично повертається до `sendMessage` + `editMessageText`.
Потік reasoning лише для Telegram:
Потік міркувань лише для Telegram:
- `/reasoning stream` надсилає reasoning до живого попереднього перегляду під час генерації
- фінальна відповідь надсилається без тексту reasoning
- `/reasoning stream` надсилає міркування в live preview під час генерації
- фінальна відповідь надсилається без тексту міркувань
</Accordion>
<Accordion title="Форматування та резервний HTML">
Для вихідного тексту використовується Telegram `parse_mode: "HTML"`.
<Accordion title="Форматування та резервний варіант HTML">
Вихідний текст використовує Telegram `parse_mode: "HTML"`.
- Текст у стилі Markdown рендериться в безпечний для Telegram HTML.
- Сирий HTML моделі екранується, щоб зменшити кількість помилок розбору Telegram.
- Сирий HTML моделі екранується, щоб зменшити кількість збоїв парсингу в Telegram.
- Якщо Telegram відхиляє розібраний HTML, OpenClaw повторює спробу як звичайний текст.
Попередній перегляд посилань увімкнено за замовчуванням; його можна вимкнути через `channels.telegram.linkPreview: false`.
Попередній перегляд посилань увімкнено за замовчуванням, його можна вимкнути за допомогою `channels.telegram.linkPreview: false`.
</Accordion>
<Accordion title="Нативні команди та користувацькі команди">
Реєстрація меню команд Telegram виконується під час запуску через `setMyCommands`.
Реєстрація меню команд Telegram обробляється під час запуску через `setMyCommands`.
Типові значення нативних команд:
- `commands.native: "auto"` вмикає нативні команди для Telegram
Додайте користувацькі записи до меню команд:
Додайте власні записи до меню команд:
```json5
{
channels: {
telegram: {
customCommands: [
{ command: "backup", description: "Git-резервна копія" },
{ command: "backup", description: "Git backup" },
{ command: "generate", description: "Створити зображення" },
],
},
@ -336,40 +355,40 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Правила:
- назви нормалізуються (видалення початкового `/`, нижній регістр)
- назви нормалізуються (забирається початковий `/`, переводяться в нижній регістр)
- допустимий шаблон: `a-z`, `0-9`, `_`, довжина `1..32`
- користувацькі команди не можуть перевизначати нативні команди
- конфлікти/дублікати пропускаються й записуються в журнал
- власні команди не можуть перевизначати нативні команди
- конфлікти/дублікати пропускаються і логуються
Примітки:
- користувацькі команди — це лише записи меню; вони не реалізують поведінку автоматично
- команди plugin/Skills усе одно можуть працювати при ручному введенні, навіть якщо вони не показані в меню Telegram
- власні команди — це лише записи меню; вони не реалізують поведінку автоматично
- команди Plugin/Skills усе одно можуть працювати при ручному введенні, навіть якщо не показані в меню Telegram
Якщо нативні команди вимкнено, вбудовані команди видаляються. Користувацькі команди/plugin-команди все ще можуть реєструватися, якщо це налаштовано.
Якщо нативні команди вимкнено, вбудовані команди видаляються. Власні команди/команди Plugin усе ще можуть реєструватися, якщо це налаштовано.
Поширені збої налаштування:
- `setMyCommands failed` з `BOT_COMMANDS_TOO_MUCH` означає, що меню Telegram усе ще переповнене після скорочення; зменште кількість команд plugin/Skills/користувацьких команд або вимкніть `channels.telegram.commands.native`.
- `setMyCommands failed` з помилками network/fetch зазвичай означає, що вихідний DNS/HTTPS до `api.telegram.org` заблоковано.
- `setMyCommands failed` з `BOT_COMMANDS_TOO_MUCH` означає, що меню Telegram усе ще переповнене після скорочення; зменште кількість команд Plugin/Skills/власних команд або вимкніть `channels.telegram.commands.native`.
- `setMyCommands failed` з помилками network/fetch зазвичай означає, що вихідні DNS/HTTPS-з’єднання до `api.telegram.org` заблоковані.
### Команди сполучення пристрою (plugin `device-pair`)
### Команди підключення пристрою (`device-pair` Plugin)
Коли plugin `device-pair` встановлено:
Коли встановлено Plugin `device-pair`:
1. `/pair` генерує код налаштування
2. вставте код у застосунку iOS
3. `/pair pending` показує список запитів, що очікують на розгляд (включно з роллю/scopes)
2. вставте код у застосунок iOS
3. `/pair pending` показує список запитів, що очікують на розгляд (включно з роллю/областями доступу)
4. схваліть запит:
- `/pair approve <requestId>` для явного схвалення
- `/pair approve`, коли є лише один запит, що очікує на розгляд
- `/pair approve latest` для найновішого
Код налаштування містить короткоживучий bootstrap-токен. Вбудована передача bootstrap зберігає токен primary Node на рівні `scopes: []`; будь-який переданий токен оператора залишається обмеженим `operator.approvals`, `operator.read`, `operator.talk.secrets` і `operator.write`. Перевірки bootstrap-scopes мають префікс ролі, тож цей allowlist оператора задовольняє лише запити оператора; для ролей, відмінних від оператора, усе ще потрібні scopes під префіксом їхньої власної ролі.
Код налаштування містить короткостроковий bootstrap-токен. Вбудована передача bootstrap зберігає токен основного Node на `scopes: []`; будь-який переданий токен оператора залишається обмеженим `operator.approvals`, `operator.read`, `operator.talk.secrets` і `operator.write`. Перевірки bootstrap-областей доступу мають префікс ролі, тому цей allowlist оператора задовольняє лише запити оператора; ролям, які не є оператором, усе ще потрібні області доступу під власним префіксом ролі.
Якщо пристрій повторює спробу зі зміненими даними автентифікації (наприклад, role/scopes/public key), попередній запит, що очікує на розгляд, замінюється, а новий запит використовує інший `requestId`. Перед схваленням знову виконайте `/pair pending`.
Якщо пристрій повторює спробу зі зміненими даними автентифікації (наприклад, роль/області доступу/публічний ключ), попередній запит, що очікує на розгляд, замінюється, а новий запит використовує інший `requestId`. Перед схваленням знову виконайте `/pair pending`.
Докладніше: [Сполучення](/uk/channels/pairing#pair-via-telegram-recommended-for-ios).
Докладніше: [Підключення](/uk/channels/pairing#pair-via-telegram-recommended-for-ios).
</Accordion>
@ -439,7 +458,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
</Accordion>
<Accordion title="Дії повідомлень Telegram для агентів і автоматизації">
<Accordion title="Дії повідомлень Telegram для агентів та автоматизації">
Дії інструментів Telegram включають:
- `sendMessage` (`to`, `content`, необов’язкові `mediaUrl`, `replyToMessageId`, `messageThreadId`)
@ -458,16 +477,16 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `channels.telegram.actions.sticker` (за замовчуванням: вимкнено)
Примітка: `edit` і `topic-create` наразі ввімкнені за замовчуванням і не мають окремих перемикачів `channels.telegram.actions.*`.
Надсилання під час runtime використовують активний знімок config/secrets (startup/reload), тому шляхи дій не виконують ad-hoc повторне визначення `SecretRef` для кожного надсилання.
Надсилання під час runtime використовує активний знімок config/secrets (startup/reload), тому шляхи дій не виконують ad-hoc повторне визначення `SecretRef` для кожного надсилання.
Семантика видалення реакцій: [/tools/reactions](/uk/tools/reactions)
</Accordion>
<Accordion title="Теги потоків відповідей">
Telegram підтримує явні теги потоків відповідей у згенерованому виводі:
<Accordion title="Теги гілок відповідей">
Telegram підтримує явні теги гілок відповідей у згенерованому виводі:
- `[[reply_to_current]]` відповідає на повідомлення, що ініціювало дію
- `[[reply_to_current]]` відповідає на повідомлення, яке спричинило виклик
- `[[reply_to:<id>]]` відповідає на конкретний ID повідомлення Telegram
`channels.telegram.replyToMode` керує обробкою:
@ -476,27 +495,27 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `first`
- `all`
Примітка: `off` вимикає неявне групування відповідей у потік. Явні теги `[[reply_to_*]]` усе одно враховуються.
Примітка: `off` вимикає неявні гілки відповідей. Явні теги `[[reply_to_*]]` усе одно враховуються.
</Accordion>
<Accordion title="Теми форуму та поведінка потоків">
Форумні супергрупи:
Супергрупи форуму:
- ключі сесій тем додають `:topic:<threadId>`
- відповіді та індикатор набору тексту націлюються на потік теми
- шлях config теми:
- відповіді та індикатор набору тексту спрямовуються в потік теми
- шлях конфігурації теми:
`channels.telegram.groups.<chatId>.topics.<threadId>`
Спеціальний випадок загальної теми (`threadId=1`):
Особливий випадок для загальної теми (`threadId=1`):
- надсилання повідомлень пропускає `message_thread_id` (Telegram відхиляє `sendMessage(...thread_id=1)`)
- дії індикатора набору тексту все одно включають `message_thread_id`
- дії набору тексту все одно включають `message_thread_id`
Успадкування тем: записи тем успадковують налаштування групи, якщо не перевизначено (`requireMention`, `allowFrom`, `skills`, `systemPrompt`, `enabled`, `groupPolicy`).
`agentId` стосується лише теми й не успадковується від значень групи за замовчуванням.
Успадкування тем: записи тем успадковують налаштування групи, якщо не перевизначені (`requireMention`, `allowFrom`, `skills`, `systemPrompt`, `enabled`, `groupPolicy`).
`agentId` доступний лише для тем і не успадковується від типових значень групи.
**Маршрутизація агентів для окремих тем**: Кожна тема може маршрутизуватися до іншого агента через `agentId` у config теми. Це надає кожній темі власний ізольований workspace, пам’ять і сесію. Приклад:
**Маршрутизація агентів для окремих тем**: Кожна тема може маршрутизуватися до іншого агента через `agentId` у конфігурації теми. Це надає кожній темі власний ізольований робочий простір, пам’ять і сесію. Приклад:
```json5
{
@ -507,7 +526,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
topics: {
"1": { agentId: "main" }, // Загальна тема → агент main
"3": { agentId: "zu" }, // Тема розробки → агент zu
"5": { agentId: "coder" } // Рев’ю коду → агент coder
"5": { agentId: "coder" } // Код-рев’ю → агент coder
}
}
}
@ -518,11 +537,11 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Тоді кожна тема має власний ключ сесії: `agent:zu:telegram:group:-1001234567890:topic:3`
**Постійне прив’язування тем ACP**: Теми форуму можуть закріплювати сесії harness ACP через типізовані прив’язки ACP верхнього рівня (`bindings[]` з `type: "acp"` і `match.channel: "telegram"`, `peer.kind: "group"` та ідентифікатором теми на кшталт `-1001234567890:topic:42`). Наразі це обмежено темами форумів у групах/супергрупах. Див. [ACP Agents](/uk/tools/acp-agents).
**Постійна прив’язка тем ACP**: Теми форуму можуть закріплювати сесії ACP harness через типізовані прив’язки ACP верхнього рівня (`bindings[]` з `type: "acp"` і `match.channel: "telegram"`, `peer.kind: "group"` та ID з темою, наприклад `-1001234567890:topic:42`). Наразі це стосується лише тем форуму в групах/супергрупах. Див. [Агенти ACP](/uk/tools/acp-agents).
**Прив’язаний до потоку запуск ACP із чату**: `/acp spawn <agent> --thread here|auto` прив’язує поточну тему до нової сесії ACP; подальші повідомлення маршрутизуються туди безпосередньо. OpenClaw закріплює підтвердження запуску в межах теми. Потрібно `channels.telegram.threadBindings.spawnAcpSessions=true`.
Контекст шаблону надає `MessageThreadId` і `IsForum`. DM-чати з `message_thread_id` зберігають маршрутизацію DM, але використовують thread-aware ключі сесії.
Контекст шаблону надає `MessageThreadId` і `IsForum`. DM-чати з `message_thread_id` зберігають DM-маршрутизацію, але використовують thread-aware ключі сесій.
</Accordion>
@ -532,7 +551,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Telegram розрізняє голосові повідомлення та аудіофайли.
- за замовчуванням: поведінка аудіофайлу
- тег `[[audio_as_voice]]` у відповіді агента, щоб примусово надсилати як голосове повідомлення
- тег `[[audio_as_voice]]` у відповіді агента примусово надсилає як голосове повідомлення
Приклад дії повідомлення:
@ -548,7 +567,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
### Відеоповідомлення
Telegram розрізняє відеофайли та відеозаписки.
Telegram розрізняє відеофайли та video notes.
Приклад дії повідомлення:
@ -562,15 +581,15 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
}
```
Відеозаписки не підтримують підписи; наданий текст повідомлення надсилається окремо.
Video notes не підтримують підписи; наданий текст повідомлення надсилається окремо.
### Стікери
Обробка вхідних стікерів:
- статичний WEBP: завантажується та обробляється (заповнювач `<media:sticker>`)
- анімований TGS: пропускається
- відео WEBM: пропускається
- статичні WEBP: завантажуються та обробляються (заповнювач `<media:sticker>`)
- анімовані TGS: пропускаються
- відео WEBM: пропускаються
Поля контексту стікера:
@ -584,9 +603,9 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `~/.openclaw/telegram/sticker-cache.json`
Стікери описуються один раз (коли це можливо) і кешуються, щоб зменшити кількість повторних викликів vision.
Стікери описуються один раз (коли це можливо) і кешуються, щоб зменшити повторні виклики vision.
Увімкніть дії зі стікерами:
Увімкнення дій зі стікерами:
```json5
{
@ -617,7 +636,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
{
action: "sticker-search",
channel: "telegram",
query: "cat waving",
query: "кіт махає лапою",
limit: 5,
}
```
@ -625,9 +644,9 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
</Accordion>
<Accordion title="Сповіщення про реакції">
Реакції Telegram надходять як оновлення `message_reaction` (окремо від корисних навантажень повідомлень).
Реакції Telegram надходять як оновлення `message_reaction` (окремо від payload повідомлень).
Коли ввімкнено, OpenClaw ставить у чергу системні події на кшталт:
Коли це ввімкнено, OpenClaw ставить у чергу системні події на кшталт:
- `Telegram reaction added: 👍 by Alice (@alice) on msg 42`
@ -639,41 +658,41 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Примітки:
- `own` означає лише реакції користувачів на повідомлення, надіслані ботом (best-effort через кеш надісланих повідомлень).
- Події реакцій усе одно дотримуються контролю доступу Telegram (`dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`); неавторизовані відправники відкидаються.
- Події реакцій усе одно поважають засоби контролю доступу Telegram (`dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`); від неавторизованих відправників вони відкидаються.
- Telegram не надає ID потоку в оновленнях реакцій.
- нефорумні групи маршрутизуються до сесії групового чату
- форумні групи маршрутизуються до сесії загальної теми групи (`:topic:1`), а не до точного початкового топіка
- форумні групи маршрутизуються до сесії загальної теми групи (`:topic:1`), а не до точної теми походження
`allowed_updates` для polling/webhook автоматично включають `message_reaction`.
`allowed_updates` для polling/Webhook автоматично включає `message_reaction`.
</Accordion>
<Accordion title="Реакції-підтвердження">
`ackReaction` надсилає emoji-підтвердження, поки OpenClaw обробляє вхідне повідомлення.
<Accordion title="Реакції підтвердження">
`ackReaction` надсилає емодзі-підтвердження, поки OpenClaw обробляє вхідне повідомлення.
Порядок визначення:
- `channels.telegram.accounts.<accountId>.ackReaction`
- `channels.telegram.ackReaction`
- `messages.ackReaction`
- резервний emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀")
- резервне значення емодзі ідентичності агента (`agents.list[].identity.emoji`, інакше "👀")
Примітки:
- Telegram очікує emoji Unicode (наприклад, "👀").
- Telegram очікує Unicode-емодзі (наприклад "👀").
- Використовуйте `""`, щоб вимкнути реакцію для каналу або облікового запису.
</Accordion>
<Accordion title="Запис config із подій і команд Telegram">
Запис config каналу ввімкнено за замовчуванням (`configWrites !== false`).
<Accordion title="Запис конфігурації з подій і команд Telegram">
Записи конфігурації каналу ввімкнені за замовчуванням (`configWrites !== false`).
Записи, ініційовані Telegram, включають:
- події міграції груп (`migrate_to_chat_id`) для оновлення `channels.telegram.groups`
- `/config set` і `/config unset` (потрібне ввімкнення команд)
Вимкнути:
Вимкнення:
```json5
{
@ -687,35 +706,35 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
</Accordion>
<Accordion title="Довге опитування vs Webhook">
За замовчуванням використовується довге опитування. Для режиму Webhook задайте `channels.telegram.webhookUrl` і `channels.telegram.webhookSecret`; необов’язкові `webhookPath`, `webhookHost`, `webhookPort` (за замовчуванням `/telegram-webhook`, `127.0.0.1`, `8787`).
<Accordion title="Long polling проти Webhook">
За замовчуванням використовується long polling. Для режиму Webhook задайте `channels.telegram.webhookUrl` і `channels.telegram.webhookSecret`; необов’язково: `webhookPath`, `webhookHost`, `webhookPort` (типові значення: `/telegram-webhook`, `127.0.0.1`, `8787`).
Локальний слухач прив’язується до `127.0.0.1:8787`. Для публічного входу або поставте reverse proxy перед локальним портом, або свідомо задайте `webhookHost: "0.0.0.0"`.
Локальний слухач прив’язується до `127.0.0.1:8787`. Для публічного вхідного трафіку або поставте reverse proxy перед локальним портом, або свідомо задайте `webhookHost: "0.0.0.0"`.
</Accordion>
<Accordion title="Ліміти, повторні спроби та цілі CLI">
- стандартне значення `channels.telegram.textChunkLimit` — 4000.
- Значення `channels.telegram.textChunkLimit` за замовчуванням — 4000.
- `channels.telegram.chunkMode="newline"` віддає перевагу межам абзаців (порожнім рядкам) перед поділом за довжиною.
- `channels.telegram.mediaMaxMb` (за замовчуванням 100) обмежує максимальний розмір вхідних і вихідних медіафайлів Telegram.
- `channels.telegram.timeoutSeconds` перевизначає таймаут клієнта Telegram API (якщо не задано, застосовується значення grammY за замовчуванням).
- `channels.telegram.pollingStallThresholdMs` за замовчуванням дорівнює `120000`; налаштовуйте в межах `30000``600000` лише для хибнопозитивних перезапусків через зависання polling.
- історія контексту групи використовує `channels.telegram.historyLimit` або `messages.groupChat.historyLimit` (за замовчуванням 50); `0` вимикає.
- додатковий контекст reply/quote/forward наразі передається як отримано.
- allowlist Telegram насамперед обмежують, хто може запускати агента, а не є повною межею редагування додаткового контексту.
- елементи керування історією DM:
- `channels.telegram.mediaMaxMb` (за замовчуванням 100) обмежує розмір вхідних і вихідних медіафайлів Telegram.
- `channels.telegram.timeoutSeconds` перевизначає тайм-аут клієнта Telegram API (якщо не встановлено, застосовується значення grammY за замовчуванням).
- Значення `channels.telegram.pollingStallThresholdMs` за замовчуванням `120000`; налаштовуйте в межах від `30000` до `600000` лише для хибнопозитивних перезапусків через зависання polling.
- Історія контексту групи використовує `channels.telegram.historyLimit` або `messages.groupChat.historyLimit` (за замовчуванням 50); `0` вимикає цю функцію.
- Додатковий контекст відповіді/цитати/пересилання наразі передається як отримано.
- Allowlist у Telegram насамперед визначають, хто може запускати агента, а не є повною межею редагування додаткового контексту.
- Керування історією DM:
- `channels.telegram.dmHistoryLimit`
- `channels.telegram.dms["<user_id>"].historyLimit`
- config `channels.telegram.retry` застосовується до допоміжних функцій надсилання Telegram (CLI/tools/actions) для відновлюваних помилок вихідного API.
- Конфігурація `channels.telegram.retry` застосовується до допоміжних засобів надсилання Telegram (CLI/tools/actions) для відновлюваних вихідних помилок API.
Ціль надсилання CLI може бути числовим chat ID або username:
Ціль надсилання в CLI може бути числовим chat ID або username:
```bash
openclaw message send --channel telegram --target 123456789 --message "hi"
openclaw message send --channel telegram --target @name --message "hi"
```
Telegram-опитування використовують `openclaw message poll` і підтримують теми форуму:
Опитування Telegram використовують `openclaw message poll` і підтримують теми форуму:
```bash
openclaw message poll --channel telegram --target 123456789 \
@ -734,46 +753,46 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
Надсилання в Telegram також підтримує:
- `--presentation` з блоками `buttons` для вбудованих клавіатур, коли це дозволяє `channels.telegram.capabilities.inlineButtons`
- `--pin` або `--delivery '{"pin":true}'` для запиту закріпленої доставки, якщо бот може закріплювати повідомлення в цьому чаті
- `--force-document`, щоб надсилати вихідні зображення та GIF як документи замість стислих фото або анімованих медіазавантажень
- `--presentation` з блоками `buttons` для вбудованих клавіатур, якщо це дозволяє `channels.telegram.capabilities.inlineButtons`
- `--pin` або `--delivery '{"pin":true}'` для запиту закріпленої доставки, якщо бот має право закріплювати в цьому чаті
- `--force-document`, щоб надсилати вихідні зображення та GIF як документи замість стислих фото або завантажень анімованих медіа
Керування діями:
- `channels.telegram.actions.sendMessage=false` вимикає вихідні повідомлення Telegram, включно з опитуваннями
- `channels.telegram.actions.poll=false` вимикає створення опитувань Telegram, залишаючи звичайне надсилання ввімкненим
- `channels.telegram.actions.poll=false` вимикає створення опитувань Telegram, залишаючи звичайне надсилання увімкненим
</Accordion>
<Accordion title="Схвалення exec у Telegram">
Telegram підтримує схвалення exec у DM користувачів, що схвалюють, і за бажанням може публікувати запити у вихідному чаті або темі. Користувачі, що схвалюють, мають бути вказані як числові ID користувачів Telegram.
<Accordion title="Підтвердження exec у Telegram">
Telegram підтримує підтвердження exec у DM затверджувачів і за потреби може публікувати запити у вихідному чаті або темі. Затверджувачі мають бути вказані як числові ID користувачів Telegram.
Шлях config:
Шлях конфігурації:
- `channels.telegram.execApprovals.enabled` (автоматично вмикається, коли можна визначити принаймні одного користувача, що схвалює)
- `channels.telegram.execApprovals.approvers` (використовує як резерв числові ID власників із `allowFrom` / `defaultTo`)
- `channels.telegram.execApprovals.enabled` (автоматично вмикається, коли можна визначити принаймні одного затверджувача)
- `channels.telegram.execApprovals.approvers` (використовує числові ID власника з `allowFrom` / `defaultTo`, якщо не встановлено явно)
- `channels.telegram.execApprovals.target`: `dm` (за замовчуванням) | `channel` | `both`
- `agentFilter`, `sessionFilter`
Доставка в канал показує текст команди в чаті; вмикайте `channel` або `both` лише в довірених групах/темах. Коли запит потрапляє в тему форуму, OpenClaw зберігає тему для запиту схвалення та подальших повідомлень. За замовчуванням строк дії схвалень exec закінчується через 30 хвилин.
Доставка в канал показує текст команди в чаті; вмикайте `channel` або `both` лише в довірених групах/темах. Коли запит потрапляє в тему форуму, OpenClaw зберігає тему для запиту на підтвердження та подальшого обміну. За замовчуванням підтвердження exec спливають через 30 хвилин.
Вбудовані кнопки схвалення також вимагають, щоб `channels.telegram.capabilities.inlineButtons` дозволяв цільову поверхню (`dm`, `group` або `all`). ID схвалень із префіксом `plugin:` визначаються через схвалення plugin; інші спочатку визначаються через схвалення exec.
Вбудовані кнопки підтвердження також вимагають, щоб `channels.telegram.capabilities.inlineButtons` дозволяв цільову поверхню (`dm`, `group` або `all`). ID підтверджень із префіксом `plugin:` визначаються через підтвердження Plugin; решта спочатку визначаються через підтвердження exec.
Див. [Схвалення exec](/uk/tools/exec-approvals).
Див. [Підтвердження exec](/uk/tools/exec-approvals).
</Accordion>
</AccordionGroup>
## Керування відповідями про помилки
Коли агент стикається з помилкою доставки або провайдера, Telegram може або відповісти текстом помилки, або приховати його. Цю поведінку контролюють два ключі config:
Коли агент стикається з помилкою доставки або провайдера, Telegram може або відповісти текстом помилки, або придушити таку відповідь. Цю поведінку контролюють два ключі конфігурації:
| Ключ | Значення | За замовчуванням | Опис |
| ----------------------------------- | ----------------- | ---------------- | ---------------------------------------------------------------------------------------------- |
| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | `reply` надсилає дружнє повідомлення про помилку в чат. `silent` повністю приховує відповіді з помилками. |
| `channels.telegram.errorCooldownMs` | number (ms) | `60000` | Мінімальний час між відповідями з помилками в той самий чат. Запобігає спаму помилок під час збоїв. |
| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | `reply` надсилає в чат дружнє повідомлення про помилку. `silent` повністю придушує такі відповіді. |
| `channels.telegram.errorCooldownMs` | number (ms) | `60000` | Мінімальний час між відповідями про помилки в одному й тому самому чаті. Запобігає спаму помилок під час збоїв. |
Підтримуються перевизначення для окремих облікових записів, груп і тем (таке саме успадкування, як і для інших ключів config Telegram).
Підтримуються перевизначення для окремих облікових записів, груп і тем (така сама схема успадкування, як і для інших ключів конфігурації Telegram).
```json5
{
@ -783,7 +802,7 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
errorCooldownMs: 120000,
groups: {
"-1001234567890": {
errorPolicy: "silent", // приховати помилки в цій групі
errorPolicy: "silent", // придушити помилки в цій групі
},
},
},
@ -794,41 +813,41 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
## Усунення проблем
<AccordionGroup>
<Accordion title="Бот не відповідає на повідомлення в групі без згадування">
<Accordion title="Бот не відповідає на повідомлення в групі без згадки">
- Якщо `requireMention=false`, режим конфіденційності Telegram має дозволяти повну видимість.
- BotFather: `/setprivacy` -> Disable
- потім видаліть бота й додайте його знову до групи
- `openclaw channels status` попереджає, коли config очікує повідомлення в групі без згадування.
- `openclaw channels status --probe` може перевіряти явні числові ID груп; wildcard `"*"` не можна перевірити на членство.
- потім видаліть бота з групи й додайте його знову
- `openclaw channels status` попереджає, коли конфігурація очікує повідомлення групи без згадки.
- `openclaw channels status --probe` може перевіряти явні числові ID груп; wildcard `"*"` не можна перевірити на членство через probe.
- швидкий тест сесії: `/activation always`.
</Accordion>
<Accordion title="Бот узагалі не бачить повідомлення групи">
<Accordion title="Бот взагалі не бачить повідомлення групи">
- коли існує `channels.telegram.groups`, група має бути вказана в списку (або має бути `"*"`)
- перевірте, чи є бот учасником групи
- перевірте, що бот є учасником групи
- перегляньте логи: `openclaw logs --follow` для причин пропуску
</Accordion>
<Accordion title="Команди працюють частково або взагалі не працюють">
- авторизуйте свою ідентичність відправника (сполучення та/або числовий `allowFrom`)
- авторизація команд усе одно застосовується, навіть коли політика групи `open`
- `setMyCommands failed` з `BOT_COMMANDS_TOO_MUCH` означає, що нативне меню має забагато записів; зменште кількість команд plugin/skill/користувацьких команд або вимкніть нативні меню
- авторизуйте свою ідентичність відправника (підключення та/або числовий `allowFrom`)
- авторизація команд усе одно застосовується, навіть коли політика групи має значення `open`
- `setMyCommands failed` з `BOT_COMMANDS_TOO_MUCH` означає, що нативне меню має занадто багато записів; зменште кількість команд Plugin/Skills/власних команд або вимкніть нативні меню
- `setMyCommands failed` з помилками network/fetch зазвичай вказує на проблеми з доступністю DNS/HTTPS до `api.telegram.org`
</Accordion>
<Accordion title="Нестабільність polling або мережі">
- Node 22+ + користувацький fetch/proxy може спричиняти негайне скасування, якщо типи AbortSignal не збігаються.
- Деякі хости спершу визначають `api.telegram.org` в IPv6; несправний вихід через IPv6 може спричиняти періодичні збої Telegram API.
- Якщо в логах є `TypeError: fetch failed` або `Network request for 'getUpdates' failed!`, OpenClaw тепер повторює їх як відновлювані мережеві помилки.
- Якщо в логах є `Polling stall detected`, OpenClaw перезапускає polling і перебудовує транспорт Telegram після 120 секунд без завершеної життєздатності long-poll за замовчуванням.
- Збільшуйте `channels.telegram.pollingStallThresholdMs` лише коли довготривалі виклики `getUpdates` є справними, але ваш хост усе ще повідомляє про хибні перезапуски через зависання polling. Постійні зависання зазвичай вказують на проблеми proxy, DNS, IPv6 або TLS-виходу між хостом і `api.telegram.org`.
- Node 22+ разом із custom fetch/proxy може спричиняти негайне переривання, якщо типи AbortSignal не збігаються.
- На деяких хостах `api.telegram.org` спочатку визначається в IPv6; несправний вихідний IPv6 може спричиняти періодичні збої Telegram API.
- Якщо в логах є `TypeError: fetch failed` або `Network request for 'getUpdates' failed!`, OpenClaw тепер повторює такі спроби як відновлювані мережеві помилки.
- Якщо в логах є `Polling stall detected`, OpenClaw перезапускає polling і перебудовує транспорт Telegram після 120 секунд без завершеної перевірки живучості long-polling за замовчуванням.
- Збільшуйте `channels.telegram.pollingStallThresholdMs` лише коли довгі виклики `getUpdates` працюють коректно, але ваш хост усе ще повідомляє про хибнопозитивні перезапуски через зависання polling. Постійні зависання зазвичай вказують на проблеми з proxy, DNS, IPv6 або TLS-виходом між хостом і `api.telegram.org`.
- На VPS-хостах із нестабільним прямим виходом/TLS спрямовуйте виклики Telegram API через `channels.telegram.proxy`:
```yaml
@ -837,8 +856,8 @@ channels:
proxy: socks5://<user>:<password>@proxy-host:1080
```
- Node 22+ за замовчуванням використовує `autoSelectFamily=true` (крім WSL2) і `dnsResultOrder=ipv4first`.
- Якщо ваш хост — WSL2 або явно краще працює лише з IPv4, примусово задайте вибір сімейства:
- У Node 22+ за замовчуванням використовується `autoSelectFamily=true` (крім WSL2) і `dnsResultOrder=ipv4first`.
- Якщо ваш хост — це WSL2 або явно краще працює лише з IPv4-поведінкою, примусово задайте вибір сімейства:
```yaml
channels:
@ -847,11 +866,11 @@ channels:
autoSelectFamily: false
```
- Відповіді з діапазону еталонного тестування RFC 2544 (`198.18.0.0/15`) уже дозволені
за замовчуванням для завантаження медіа Telegram. Якщо довірений fake-IP або
- Відповіді з діапазону RFC 2544 benchmark (`198.18.0.0/15`) уже дозволені
за замовчуванням для завантажень медіафайлів Telegram. Якщо довірений fake-IP або
transparent proxy переписує `api.telegram.org` на якусь іншу
приватну/внутрішню/спеціальну адресу під час завантаження медіа, ви можете
увімкнути обхід лише для Telegram:
приватну/внутрішню/special-use адресу під час завантаження медіа, ви можете
явно ввімкнути обхід лише для Telegram:
```yaml
channels:
@ -860,21 +879,20 @@ channels:
dangerouslyAllowPrivateNetwork: true
```
- Той самий opt-in доступний для окремого облікового запису в
- Те саме явне ввімкнення доступне для окремого облікового запису в
`channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork`.
- Якщо ваш proxy визначає медіахости Telegram у `198.18.x.x`, спершу залиште
небезпечний прапорець вимкненим. Медійні хости Telegram уже за замовчуванням дозволяють
діапазон еталонного тестування RFC 2544.
- Якщо ваш proxy визначає медіахости Telegram як `198.18.x.x`, спочатку залиште
небезпечний прапорець вимкненим. Медіафайли Telegram уже за замовчуванням дозволяють
діапазон RFC 2544 benchmark.
<Warning>
`channels.telegram.network.dangerouslyAllowPrivateNetwork` послаблює захист Telegram
media SSRF. Використовуйте це лише для довірених операторських середовищ proxy,
таких як маршрутизація fake-IP у Clash, Mihomo або Surge, коли вони
синтезують приватні або спеціальні адреси поза діапазоном еталонного тестування
RFC 2544. Для звичайного публічного доступу до Telegram через інтернет залишайте це вимкненим.
media SSRF. Використовуйте це лише в довірених середовищах proxy, якими керує оператор,
наприклад Clash, Mihomo або Surge fake-IP routing, коли вони
синтезують приватні або special-use відповіді поза діапазоном RFC 2544 benchmark. Для звичайного публічного доступу до Telegram через інтернет залишайте цей параметр вимкненим.
</Warning>
- Перевизначення через середовище (тимчасові):
- Перевизначення через змінні середовища (тимчасово):
- `OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1`
- `OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1`
- `OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first`
@ -888,51 +906,51 @@ dig +short api.telegram.org AAAA
</Accordion>
</AccordionGroup>
Додаткова допомога: [Усунення проблем каналу](/uk/channels/troubleshooting).
Додаткова допомога: [Усунення проблем із каналами](/uk/channels/troubleshooting).
## Довідник конфігурації
Основне посилання: [Довідник конфігурації - Telegram](/uk/gateway/config-channels#telegram).
Основний довідник: [Довідник конфігурації - Telegram](/uk/gateway/config-channels#telegram).
<Accordion title="Ключові поля Telegram">
<Accordion title="Ключові поля Telegram із високою інформативністю">
- startup/auth: `enabled`, `botToken`, `tokenFile`, `accounts.*` (`tokenFile` має вказувати на звичайний файл; symlink відхиляються)
- керування доступом: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`, `groups.*.topics.*`, верхньорівневий `bindings[]` (`type: "acp"`)
- схвалення exec: `execApprovals`, `accounts.*.execApprovals`
- команди/меню: `commands.native`, `commands.nativeSkills`, `customCommands`
- запуск/автентифікація: `enabled`, `botToken`, `tokenFile`, `accounts.*` (`tokenFile` має вказувати на звичайний файл; символічні посилання відхиляються)
- контроль доступу: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`, `groups.*.topics.*`, `bindings[]` верхнього рівня (`type: "acp"`)
- підтвердження exec: `execApprovals`, `accounts.*.execApprovals`
- команда/меню: `commands.native`, `commands.nativeSkills`, `customCommands`
- потоки/відповіді: `replyToMode`
- streaming: `streaming` (попередній перегляд), `streaming.preview.toolProgress`, `blockStreaming`
- стримінг: `streaming` (preview), `streaming.preview.toolProgress`, `blockStreaming`
- форматування/доставка: `textChunkLimit`, `chunkMode`, `linkPreview`, `responsePrefix`
- media/network: `mediaMaxMb`, `timeoutSeconds`, `pollingStallThresholdMs`, `retry`, `network.autoSelectFamily`, `network.dangerouslyAllowPrivateNetwork`, `proxy`
- webhook: `webhookUrl`, `webhookSecret`, `webhookPath`, `webhookHost`
- медіа/мережа: `mediaMaxMb`, `timeoutSeconds`, `pollingStallThresholdMs`, `retry`, `network.autoSelectFamily`, `network.dangerouslyAllowPrivateNetwork`, `proxy`
- Webhook: `webhookUrl`, `webhookSecret`, `webhookPath`, `webhookHost`
- дії/можливості: `capabilities.inlineButtons`, `actions.sendMessage|editMessage|deleteMessage|reactions|sticker`
- реакції: `reactionNotifications`, `reactionLevel`
- помилки: `errorPolicy`, `errorCooldownMs`
- запис/історія: `configWrites`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
- записи/історія: `configWrites`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
</Accordion>
<Note>
Пріоритет кількох облікових записів: коли налаштовано два або більше ID облікових записів, задайте `channels.telegram.defaultAccount` (або включіть `channels.telegram.accounts.default`), щоб явним чином визначити маршрутизацію за замовчуванням. Інакше OpenClaw використовує перший нормалізований ID облікового запису, і `openclaw doctor` видає попередження. Іменовані облікові записи успадковують `channels.telegram.allowFrom` / `groupAllowFrom`, але не значення `accounts.default.*`.
Пріоритет для кількох облікових записів: коли налаштовано два або більше ID облікових записів, задайте `channels.telegram.defaultAccount` (або включіть `channels.telegram.accounts.default`), щоб явно визначити маршрутизацію за замовчуванням. Інакше OpenClaw повертається до першого нормалізованого ID облікового запису, а `openclaw doctor` показує попередження. Іменовані облікові записи успадковують `channels.telegram.allowFrom` / `groupAllowFrom`, але не значення `accounts.default.*`.
</Note>
## Пов’язане
<CardGroup cols={2}>
<Card title="Сполучення" icon="link" href="/uk/channels/pairing">
Сполучіть користувача Telegram з gateway.
<Card title="Підключення" icon="link" href="/uk/channels/pairing">
Підключіть користувача Telegram до gateway.
</Card>
<Card title="Групи" icon="users" href="/uk/channels/groups">
Поведінка allowlist для груп і тем.
</Card>
<Card title="Маршрутизація каналу" icon="route" href="/uk/channels/channel-routing">
<Card title="Маршрутизація каналів" icon="route" href="/uk/channels/channel-routing">
Маршрутизуйте вхідні повідомлення до агентів.
</Card>
<Card title="Безпека" icon="shield" href="/uk/gateway/security">
Модель загроз і посилення захисту.
Модель загроз і зміцнення захисту.
</Card>
<Card title="Маршрутизація кількох агентів" icon="sitemap" href="/uk/concepts/multi-agent">
Відобразіть групи й теми на агентів.
Зіставляйте групи й теми з агентами.
</Card>
<Card title="Усунення проблем" icon="wrench" href="/uk/channels/troubleshooting">
Міжканальна діагностика.

View File

@ -1,84 +1,87 @@
---
read_when:
- Вам потрібен довідник із налаштування моделей для кожного постачальника окремо
- Вам потрібні приклади конфігурацій або команд онбордингу CLI для постачальників моделей
summary: Огляд постачальника моделей із прикладами конфігурацій + потоками CLI
- Вам потрібні приклади конфігурацій або команди онбордингу CLI для постачальників моделей
summary: Огляд постачальників моделей із прикладами конфігурацій + потоками CLI
title: Постачальники моделей
x-i18n:
generated_at: "2026-04-25T03:44:17Z"
generated_at: "2026-04-25T04:07:28Z"
model: gpt-5.4
provider: openai
source_hash: 654eb02f8e1909308f9260db7970785fb7218d61b27857323d4abef15983f0bb
source_hash: 298eb377306ba5f02eab440775ce9171fab682ab9ede7c4443a994e594cf2b94
source_path: concepts/model-providers.md
workflow: 15
---
Ця сторінка охоплює **постачальників LLM/моделей** (а не канали чату на кшталт WhatsApp/Telegram).
Правила вибору моделі дивіться в [/concepts/models](/uk/concepts/models).
Ця сторінка описує **постачальників LLM/моделей** (а не канали чату, як-от WhatsApp/Telegram).
Щоб дізнатися про правила вибору моделей, див. [/concepts/models](/uk/concepts/models).
## Швидкі правила
- Посилання на моделі використовують формат `provider/model` (приклад: `opencode/claude-opus-4-6`).
- `agents.defaults.models` працює як список дозволених значень, якщо його задано.
- Допоміжні команди CLI: `openclaw onboard`, `openclaw models list`, `openclaw models set <provider/model>`.
- `models.providers.*.models[].contextWindow` — це нативні метадані моделі; `contextTokens` — це фактичне обмеження під час виконання.
- Правила резервного перемикання, перевірки після cooldown і збереження session override дивіться в [Model failover](/uk/concepts/model-failover).
- Маршрути сімейства OpenAI залежать від префікса: `openai/<model>` використовує прямого постачальника з API-ключем OpenAI у Pi, `openai-codex/<model>` використовує Codex OAuth у Pi, а `openai/<model>` разом із `agents.defaults.embeddedHarness.runtime: "codex"` використовує нативний harness app-server Codex. Дивіться [OpenAI](/uk/providers/openai) і [Codex harness](/uk/plugins/codex-harness). Якщо поділ між постачальником і runtime викликає плутанину, спочатку прочитайте [Agent runtimes](/uk/concepts/agent-runtimes).
- Автоматичне вмикання Plugin дотримується тієї самої межі: `openai-codex/<model>` належить Plugin OpenAI, тоді як Plugin Codex вмикається через `embeddedHarness.runtime: "codex"` або застарілі посилання `codex/<model>`.
- Runtime CLI використовують той самий поділ: вибирайте канонічні посилання на моделі, наприклад `anthropic/claude-*`, `google/gemini-*` або `openai/gpt-*`, а потім задавайте `agents.defaults.embeddedHarness.runtime` як `claude-cli`, `google-gemini-cli` або `codex-cli`, якщо хочете локальний бекенд CLI. Застарілі посилання `claude-cli/*`, `google-gemini-cli/*` і `codex-cli/*` мігрують назад до канонічних посилань постачальників, а runtime записується окремо.
- GPT-5.5 наразі доступна через маршрути підписки/OAuth: `openai-codex/gpt-5.5` у Pi або `openai/gpt-5.5` із harness app-server Codex. Прямий маршрут API-ключа для `openai/gpt-5.5` підтримуватиметься, щойно OpenAI увімкне GPT-5.5 у публічному API; до того часу для налаштувань `OPENAI_API_KEY` використовуйте моделі з доступом через API, наприклад `openai/gpt-5.4`.
- `models.providers.*.models[].contextWindow` — це нативні метадані моделі; `contextTokens` — це фактичне обмеження середовища виконання.
- Правила резервного перемикання, перевірки охолодження та збереження перевизначень сеансу: [Model failover](/uk/concepts/model-failover).
- Маршрути сімейства OpenAI залежать від префікса: `openai/<model>` використовує прямого постачальника API-ключа OpenAI у PI, `openai-codex/<model>` використовує OAuth Codex у PI, а `openai/<model>` разом із `agents.defaults.embeddedHarness.runtime: "codex"` використовує нативний harness app-server Codex. Див. [OpenAI](/uk/providers/openai) і [Codex harness](/uk/plugins/codex-harness). Якщо розділення постачальник/середовище виконання викликає плутанину, спочатку прочитайте [Agent runtimes](/uk/concepts/agent-runtimes).
- Автоматичне ввімкнення Plugin дотримується тієї самої межі: `openai-codex/<model>` належить Plugin OpenAI, тоді як Plugin Codex вмикається через `embeddedHarness.runtime: "codex"` або застарілі посилання `codex/<model>`.
- Середовища виконання CLI використовують те саме розділення: вибирайте канонічні посилання на моделі, як-от `anthropic/claude-*`, `google/gemini-*` або `openai/gpt-*`, а потім установлюйте `agents.defaults.embeddedHarness.runtime` у `claude-cli`, `google-gemini-cli` або `codex-cli`, якщо вам потрібен локальний бекенд CLI. Застарілі посилання `claude-cli/*`, `google-gemini-cli/*` і `codex-cli/*` мігрують назад до канонічних посилань постачальників, а середовище виконання записується окремо.
- GPT-5.5 наразі доступна через маршрути підписки/OAuth: `openai-codex/gpt-5.5` у PI або `openai/gpt-5.5` із harness app-server Codex. Прямий маршрут API-ключа для `openai/gpt-5.5` підтримується, щойно OpenAI увімкне GPT-5.5 у публічному API; до того часу для конфігурацій `OPENAI_API_KEY` використовуйте моделі з підтримкою API, наприклад `openai/gpt-5.4`.
## Поведінка постачальників, що належить Plugin
## Поведінка постачальників, якою володіє Plugin
Більшість логіки, специфічної для постачальника, живе в Plugin постачальників (`registerProvider(...)`), тоді як OpenClaw підтримує загальний цикл inference. Plugin відповідають за онбординг, каталоги моделей, зіставлення auth env var, нормалізацію транспорту/конфігурації, очищення схем інструментів, класифікацію failover, оновлення OAuth, звітність про використання, профілі thinking/reasoning та інше.
Більшість специфічної для постачальника логіки живе в Plugin постачальників (`registerProvider(...)`), тоді як OpenClaw зберігає загальний цикл інференсу. Plugins відповідають за онбординг, каталоги моделей, зіставлення auth із env vars, нормалізацію транспорту/конфігурації, очищення схем інструментів, класифікацію резервного перемикання, оновлення OAuth, звітність про використання, профілі thinking/reasoning тощо.
Повний список хуків SDK постачальників і приклади вбудованих Plugin наведено в [Provider plugins](/uk/plugins/sdk-provider-plugins). Постачальник, якому потрібен повністю кастомний executor запитів, використовує окрему, глибшу поверхню розширення.
Повний список хуків SDK постачальників і прикладів вбудованих Plugin наведено в [Provider plugins](/uk/plugins/sdk-provider-plugins). Постачальник, якому потрібен повністю власний виконавець запитів, використовує окрему, глибшу поверхню розширення.
<Note>
`capabilities` runtime постачальника — це спільні метадані runner (сімейство постачальника, особливості transcript/tooling, підказки для transport/cache). Це не те саме, що [public capability model](/uk/plugins/architecture#public-capability-model), яка описує, що реєструє Plugin (текстовий inference, мовлення тощо).
`capabilities` середовища виконання постачальника — це спільні метадані раннера (сімейство постачальника, особливості transcript/tooling, підказки для transport/cache). Це не те саме, що [public capability model](/uk/plugins/architecture#public-capability-model), яка описує, що реєструє Plugin (текстовий інференс, мовлення тощо).
</Note>
## Ротація API-ключів
- Підтримує загальну ротацію ключів постачальника для вибраних постачальників.
- Підтримує загальну ротацію ключів постачальників для вибраних постачальників.
- Налаштуйте кілька ключів через:
- `OPENCLAW_LIVE_<PROVIDER>_KEY` (єдиний live override, найвищий пріоритет)
- `<PROVIDER>_API_KEYS` (список, розділений комами або крапками з комою)
- `OPENCLAW_LIVE_<PROVIDER>_KEY` (одне live-перевизначення, найвищий пріоритет)
- `<PROVIDER>_API_KEYS` (список через кому або крапку з комою)
- `<PROVIDER>_API_KEY` (основний ключ)
- `<PROVIDER>_API_KEY_*` (нумерований список, наприклад `<PROVIDER>_API_KEY_1`)
- Для постачальників Google як fallback також використовується `GOOGLE_API_KEY`.
- Порядок вибору ключів зберігає пріоритет і прибирає дублікати значень.
- Запити повторюються з наступним ключем лише у відповідь на rate limit
- Для постачальників Google як резервний варіант також включається `GOOGLE_API_KEY`.
- Порядок вибору ключів зберігає пріоритет і усуває дублікати значень.
- Запити повторюються з наступним ключем лише у відповідь на обмеження швидкості
(наприклад `429`, `rate_limit`, `quota`, `resource exhausted`, `Too many
concurrent requests`, `ThrottlingException`, `concurrency limit reached`,
`workers_ai ... quota limit exceeded` або періодичні повідомлення про ліміти використання).
- Помилки, не пов’язані з rate limit, одразу завершуються невдачею; ротація ключів не виконується.
- Якщо всі доступні ключі завершуються невдачею, повертається остання помилка з фінальної спроби.
`workers_ai ... quota limit exceeded` або періодичні повідомлення про ліміт використання).
- Помилки, не пов’язані з обмеженням швидкості, одразу завершуються з помилкою; ротація ключів не виконується.
- Якщо всі кандидатні ключі зазнають невдачі, повертається фінальна помилка з останньої спроби.
## Вбудовані постачальники (каталог pi-ai)
OpenClaw постачається з каталогом piai. Ці постачальники **не**
потребують конфігурації `models.providers`; достатньо налаштувати auth і вибрати модель.
OpenClaw постачається з каталогом piai. Для цих постачальників **не потрібна**
конфігурація `models.providers`; достатньо налаштувати auth і вибрати модель.
### OpenAI
- Постачальник: `openai`
- Auth: `OPENAI_API_KEY`
- Необов’язкова ротація: `OPENAI_API_KEYS`, `OPENAI_API_KEY_1`, `OPENAI_API_KEY_2`, а також `OPENCLAW_LIVE_OPENAI_KEY` (єдиний override)
- Необов’язкова ротація: `OPENAI_API_KEYS`, `OPENAI_API_KEY_1`, `OPENAI_API_KEY_2`, а також `OPENCLAW_LIVE_OPENAI_KEY` (одне перевизначення)
- Приклади моделей: `openai/gpt-5.4`, `openai/gpt-5.4-mini`
- Пряма підтримка GPT-5.5 через API тут уже підготовлена на майбутнє, щойно OpenAI відкриє GPT-5.5 в API
- Перш ніж використовувати `openai/gpt-5.5` без runtime app-server Codex, перевірте доступність прямого API через `openclaw models list --provider openai`
- Пряма підтримка API для GPT-5.5 тут підготовлена на майбутнє, щойно OpenAI відкриє GPT-5.5 в API
- Перевірте доступність прямого API через `openclaw models list --provider openai`
перед використанням `openai/gpt-5.5` без середовища виконання app-server Codex
- CLI: `openclaw onboard --auth-choice openai-api-key`
- Транспорт за замовчуванням — `auto` (спочатку WebSocket, потім fallback на SSE)
- Override для окремої моделі через `agents.defaults.models["openai/<model>"].params.transport` (`"sse"`, `"websocket"` або `"auto"`)
- Warm-up WebSocket для OpenAI Responses за замовчуванням увімкнений через `params.openaiWsWarmup` (`true`/`false`)
- Типовий transport — `auto` (спочатку WebSocket, резервно SSE)
- Перевизначення для окремої моделі через `agents.defaults.models["openai/<model>"].params.transport` (`"sse"`, `"websocket"` або `"auto"`)
- Розігрів WebSocket OpenAI Responses типово ввімкнено через `params.openaiWsWarmup` (`true`/`false`)
- Пріоритетну обробку OpenAI можна ввімкнути через `agents.defaults.models["openai/<model>"].params.serviceTier`
- `/fast` і `params.fastMode` напряму зіставляють запити `openai/*` Responses з `service_tier=priority` на `api.openai.com`
- `/fast` і `params.fastMode` зіставляють прямі запити `openai/*` Responses з `service_tier=priority` на `api.openai.com`
- Використовуйте `params.serviceTier`, якщо вам потрібен явний tier замість спільного перемикача `/fast`
- Приховані заголовки атрибуції OpenClaw (`originator`, `version`,
`User-Agent`) застосовуються лише до нативного трафіку OpenAI на `api.openai.com`, а не до загальних OpenAI-сумісних proxy
- Нативні маршрути OpenAI також зберігають Responses `store`, підказки кешу prompt і сумісне з OpenAI reasoning формування payload; proxy-маршрути цього не роблять
- `openai/gpt-5.3-codex-spark` навмисно приховано в OpenClaw, оскільки live-запити OpenAI API його відхиляють, а поточний каталог Codex його не містить
`User-Agent`) застосовуються лише до нативного трафіку OpenAI на `api.openai.com`, а не
до загальних OpenAI-сумісних proxy
- Нативні маршрути OpenAI також зберігають `store` Responses, підказки кешу prompt і
формування payload для сумісності з OpenAI reasoning; proxy-маршрути цього не роблять
- `openai/gpt-5.3-codex-spark` навмисно приглушено в OpenClaw, оскільки live-запити OpenAI API його відхиляють, а поточний каталог Codex його не показує
```json5
{
@ -90,12 +93,12 @@ OpenClaw постачається з каталогом piai. Ці поста
- Постачальник: `anthropic`
- Auth: `ANTHROPIC_API_KEY`
- Необов’язкова ротація: `ANTHROPIC_API_KEYS`, `ANTHROPIC_API_KEY_1`, `ANTHROPIC_API_KEY_2`, а також `OPENCLAW_LIVE_ANTHROPIC_KEY` (єдиний override)
- Необов’язкова ротація: `ANTHROPIC_API_KEYS`, `ANTHROPIC_API_KEY_1`, `ANTHROPIC_API_KEY_2`, а також `OPENCLAW_LIVE_ANTHROPIC_KEY` (одне перевизначення)
- Приклад моделі: `anthropic/claude-opus-4-6`
- CLI: `openclaw onboard --auth-choice apiKey`
- Прямі публічні запити Anthropic підтримують спільний перемикач `/fast` і `params.fastMode`, зокрема для трафіку з auth через API-ключ і OAuth, надісланого до `api.anthropic.com`; OpenClaw зіставляє це з Anthropic `service_tier` (`auto` проти `standard_only`)
- Примітка щодо Anthropic: співробітники Anthropic повідомили нам, що використання Claude CLI у стилі OpenClaw знову дозволене, тому OpenClaw вважає повторне використання Claude CLI і використання `claude -p` санкціонованими для цієї інтеграції, якщо Anthropic не опублікує нову політику.
- Setup-token Anthropic залишається доступним як підтримуваний шлях токена OpenClaw, але тепер OpenClaw надає перевагу повторному використанню Claude CLI і `claude -p`, якщо вони доступні.
- Прямі публічні запити Anthropic підтримують спільний перемикач `/fast` і `params.fastMode`, включно з трафіком із автентифікацією через API-ключ і OAuth, надісланим до `api.anthropic.com`; OpenClaw зіставляє це з Anthropic `service_tier` (`auto` проти `standard_only`)
- Примітка щодо Anthropic: співробітники Anthropic повідомили нам, що використання Claude CLI у стилі OpenClaw знову дозволено, тому OpenClaw вважає повторне використання Claude CLI та використання `claude -p` санкціонованими для цієї інтеграції, якщо Anthropic не опублікує нову політику.
- setup-token Anthropic залишається доступним як підтримуваний шлях токена OpenClaw, але тепер OpenClaw надає перевагу повторному використанню Claude CLI та `claude -p`, коли це можливо.
```json5
{
@ -107,22 +110,24 @@ OpenClaw постачається з каталогом piai. Ці поста
- Постачальник: `openai-codex`
- Auth: OAuth (ChatGPT)
- Посилання на модель у Pi: `openai-codex/gpt-5.5`
- Посилання для нативного harness app-server Codex: `openai/gpt-5.5` з `agents.defaults.embeddedHarness.runtime: "codex"`
- Документація для нативного harness app-server Codex: [Codex harness](/uk/plugins/codex-harness)
- Посилання на модель PI: `openai-codex/gpt-5.5`
- Посилання на нативний harness app-server Codex: `openai/gpt-5.5` з `agents.defaults.embeddedHarness.runtime: "codex"`
- Документація нативного harness app-server Codex: [Codex harness](/uk/plugins/codex-harness)
- Застарілі посилання на моделі: `codex/gpt-*`
- Межа Plugin: `openai-codex/*` завантажує Plugin OpenAI; нативний Plugin app-server Codex вибирається лише runtime Codex harness або застарілими посиланнями `codex/*`.
- Межа Plugin: `openai-codex/*` завантажує Plugin OpenAI; нативний
Plugin app-server Codex вибирається лише через середовище виконання Codex harness або застарілі
посилання `codex/*`.
- CLI: `openclaw onboard --auth-choice openai-codex` або `openclaw models auth login --provider openai-codex`
- Транспорт за замовчуванням — `auto` (спочатку WebSocket, потім fallback на SSE)
- Override для окремої моделі Pi через `agents.defaults.models["openai-codex/<model>"].params.transport` (`"sse"`, `"websocket"` або `"auto"`)
- `params.serviceTier` також передається у нативних запитах Codex Responses (`chatgpt.com/backend-api`)
- Типовий transport — `auto` (спочатку WebSocket, резервно SSE)
- Перевизначення для окремої моделі PI через `agents.defaults.models["openai-codex/<model>"].params.transport` (`"sse"`, `"websocket"` або `"auto"`)
- `params.serviceTier` також передається в нативних запитах Codex Responses (`chatgpt.com/backend-api`)
- Приховані заголовки атрибуції OpenClaw (`originator`, `version`,
`User-Agent`) додаються лише до нативного трафіку Codex на
`chatgpt.com/backend-api`, а не до загальних OpenAI-сумісних proxy
- Використовує той самий перемикач `/fast` і конфігурацію `params.fastMode`, що й прямий `openai/*`; OpenClaw зіставляє це з `service_tier=priority`
- `openai-codex/gpt-5.5` зберігає нативний `contextWindow = 1000000` і runtime `contextTokens = 272000` за замовчуванням; override runtime-обмеження задається через `models.providers.openai-codex.models[].contextTokens`
- Примітка щодо політики: OpenAI Codex OAuth явно підтримується для зовнішніх інструментів/процесів на кшталт OpenClaw.
- Поточний доступ до GPT-5.5 використовує цей маршрут OAuth/підписки, доки OpenAI не увімкне GPT-5.5 у публічному API.
- Має той самий спільний перемикач `/fast` і конфігурацію `params.fastMode`, що й прямий `openai/*`; OpenClaw зіставляє це з `service_tier=priority`
- `openai-codex/gpt-5.5` зберігає нативний `contextWindow = 1000000` і типовий runtime `contextTokens = 272000`; перевизначайте runtime-обмеження через `models.providers.openai-codex.models[].contextTokens`
- Примітка щодо політики: OpenAI Codex OAuth явно підтримується для зовнішніх інструментів/робочих процесів, як-от OpenClaw.
- Поточний доступ до GPT-5.5 використовує цей маршрут OAuth/підписки, доки OpenAI не ввімкне GPT-5.5 у публічному API.
```json5
{
@ -142,18 +147,18 @@ OpenClaw постачається з каталогом piai. Ці поста
}
```
### Інші хостовані варіанти в стилі підписки
### Інші розміщені варіанти у стилі підписки
- [Qwen Cloud](/uk/providers/qwen): поверхня постачальника Qwen Cloud, а також зіставлення endpoint для Alibaba DashScope і Coding Plan
- [MiniMax](/uk/providers/minimax): доступ до MiniMax Coding Plan через OAuth або API-ключ
- [GLM Models](/uk/providers/glm): endpoint Z.AI Coding Plan або загальні API endpoint
- [Qwen Cloud](/uk/providers/qwen): поверхня постачальника Qwen Cloud, а також зіставлення кінцевих точок Alibaba DashScope і Coding Plan
- [MiniMax](/uk/providers/minimax): доступ через OAuth або API key MiniMax Coding Plan
- [GLM Models](/uk/providers/glm): кінцеві точки Z.AI Coding Plan або загального API
### OpenCode
- Auth: `OPENCODE_API_KEY` (або `OPENCODE_ZEN_API_KEY`)
- Постачальник runtime Zen: `opencode`
- Постачальник runtime Go: `opencode-go`
- Приклади моделей: `opencode/claude-opus-4-6`, `opencode-go/kimi-k2.5`
- Приклади моделей: `opencode/claude-opus-4-6`, `opencode-go/kimi-k2.6`
- CLI: `openclaw onboard --auth-choice opencode-zen` або `openclaw onboard --auth-choice opencode-go`
```json5
@ -162,34 +167,37 @@ OpenClaw постачається з каталогом piai. Ці поста
}
```
### Google Gemini (API-ключ)
### Google Gemini (API key)
- Постачальник: `google`
- Auth: `GEMINI_API_KEY`
- Необов’язкова ротація: `GEMINI_API_KEYS`, `GEMINI_API_KEY_1`, `GEMINI_API_KEY_2`, fallback `GOOGLE_API_KEY`, а також `OPENCLAW_LIVE_GEMINI_KEY` (єдиний override)
- Необов’язкова ротація: `GEMINI_API_KEYS`, `GEMINI_API_KEY_1`, `GEMINI_API_KEY_2`, резервний `GOOGLE_API_KEY` і `OPENCLAW_LIVE_GEMINI_KEY` (одне перевизначення)
- Приклади моделей: `google/gemini-3.1-pro-preview`, `google/gemini-3-flash-preview`
- Сумісність: застарілу конфігурацію OpenClaw з `google/gemini-3.1-flash-preview` нормалізовано до `google/gemini-3-flash-preview`
- Сумісність: застарілу конфігурацію OpenClaw із `google/gemini-3.1-flash-preview` нормалізовано до `google/gemini-3-flash-preview`
- CLI: `openclaw onboard --auth-choice gemini-api-key`
- Thinking: `/think adaptive` використовує Google dynamic thinking. Gemini 3/3.1 не мають фіксованого `thinkingLevel`; Gemini 2.5 надсилає `thinkingBudget: -1`.
- Thinking: `/think adaptive` використовує динамічне thinking Google. Gemini 3/3.1 не мають фіксованого
`thinkingLevel`; Gemini 2.5 надсилає `thinkingBudget: -1`.
- Прямі запуски Gemini також приймають `agents.defaults.models["google/<model>"].params.cachedContent`
(або застарілий `cached_content`) для передавання нативного
дескриптора `cachedContents/...`; cache hit Gemini відображаються як OpenClaw `cacheRead`
(або застарілий `cached_content`) для передавання нативного для постачальника
дескриптора `cachedContents/...`; потрапляння в кеш Gemini відображаються як OpenClaw `cacheRead`
### Google Vertex і Gemini CLI
- Постачальники: `google-vertex`, `google-gemini-cli`
- Auth: Vertex використовує gcloud ADC; Gemini CLI використовує власний потік OAuth
- Застереження: OAuth Gemini CLI в OpenClaw є неофіційною інтеграцією. Деякі користувачі повідомляли про обмеження акаунтів Google після використання сторонніх клієнтів. Ознайомтеся з умовами Google і використовуйте не критично важливий акаунт, якщо вирішите продовжити.
- Auth: Vertex використовує gcloud ADC; Gemini CLI власний потік OAuth
- Застереження: OAuth Gemini CLI в OpenClaw є неофіційною інтеграцією. Деякі користувачі повідомляли про обмеження облікових записів Google після використання сторонніх клієнтів. Ознайомтеся з умовами Google і використовуйте некритичний обліковий запис, якщо вирішите продовжити.
- OAuth Gemini CLI постачається як частина вбудованого Plugin `google`.
- Спочатку встановіть Gemini CLI:
- `brew install gemini-cli`
- або `npm install -g @google/gemini-cli`
- Увімкнення: `openclaw plugins enable google`
- Вхід: `openclaw models auth login --provider google-gemini-cli --set-default`
- Модель за замовчуванням: `google-gemini-cli/gemini-3-flash-preview`
- Примітка: вам **не потрібно** вставляти client id або secret у `openclaw.json`. Потік входу CLI зберігає токени в профілях auth на хості gateway.
- Якщо після входу запити завершуються невдачею, задайте `GOOGLE_CLOUD_PROJECT` або `GOOGLE_CLOUD_PROJECT_ID` на хості gateway.
- JSON-відповіді Gemini CLI розбираються з `response`; показники використання беруться з `stats`, а `stats.cached` нормалізується в OpenClaw `cacheRead`.
- Типова модель: `google-gemini-cli/gemini-3-flash-preview`
- Примітка: **не потрібно** вставляти client id або secret у `openclaw.json`. Потік входу CLI зберігає
токени в профілях auth на хості gateway.
- Якщо після входу запити не працюють, установіть `GOOGLE_CLOUD_PROJECT` або `GOOGLE_CLOUD_PROJECT_ID` на хості gateway.
- Відповіді Gemini CLI у форматі JSON аналізуються з `response`; використання резервно береться з
`stats`, а `stats.cached` нормалізується до OpenClaw `cacheRead`.
### Z.AI (GLM)
@ -198,7 +206,7 @@ OpenClaw постачається з каталогом piai. Ці поста
- Приклад моделі: `zai/glm-5.1`
- CLI: `openclaw onboard --auth-choice zai-api-key`
- Псевдоніми: `z.ai/*` і `z-ai/*` нормалізуються до `zai/*`
- `zai-api-key` автоматично визначає відповідний endpoint Z.AI; `zai-coding-global`, `zai-coding-cn`, `zai-global` і `zai-cn` примусово задають конкретну поверхню
- `zai-api-key` автоматично визначає відповідну кінцеву точку Z.AI; `zai-coding-global`, `zai-coding-cn`, `zai-global` і `zai-cn` примусово вибирають конкретну поверхню
### Vercel AI Gateway
@ -214,13 +222,14 @@ OpenClaw постачається з каталогом piai. Ці поста
- Auth: `KILOCODE_API_KEY`
- Приклад моделі: `kilocode/kilo/auto`
- CLI: `openclaw onboard --auth-choice kilocode-api-key`
- Base URL: `https://api.kilo.ai/api/gateway/`
- Статичний fallback-каталог постачається з `kilocode/kilo/auto`; live-виявлення через
`https://api.kilo.ai/api/gateway/models` може додатково розширити runtime-каталог.
- Точна upstream-маршрутизація за `kilocode/kilo/auto` належить Kilo Gateway,
- Базовий URL: `https://api.kilo.ai/api/gateway/`
- Статичний резервний каталог постачається з `kilocode/kilo/auto`; live-виявлення через
`https://api.kilo.ai/api/gateway/models` може додатково розширити
каталог runtime.
- Точна маршрутизація вгору за течією для `kilocode/kilo/auto` належить Kilo Gateway,
а не жорстко закодована в OpenClaw.
Деталі налаштування дивіться в [/providers/kilocode](/uk/providers/kilocode).
Деталі налаштування див. у [/providers/kilocode](/uk/providers/kilocode).
### Інші вбудовані Plugin постачальників
@ -232,9 +241,9 @@ OpenClaw постачається з каталогом piai. Ці поста
| DeepSeek | `deepseek` | `DEEPSEEK_API_KEY` | `deepseek/deepseek-v4-flash` |
| GitHub Copilot | `github-copilot` | `COPILOT_GITHUB_TOKEN` / `GH_TOKEN` / `GITHUB_TOKEN` | — |
| Groq | `groq` | `GROQ_API_KEY` | — |
| Hugging Face Inference | `huggingface` | `HUGGINGFACE_HUB_TOKEN` або `HF_TOKEN` | `huggingface/deepseek-ai/DeepSeek-R1` |
| Hugging Face Inference | `huggingface` | `HUGGINGFACE_HUB_TOKEN` or `HF_TOKEN` | `huggingface/deepseek-ai/DeepSeek-R1` |
| Kilo Gateway | `kilocode` | `KILOCODE_API_KEY` | `kilocode/kilo/auto` |
| Kimi Coding | `kimi` | `KIMI_API_KEY` або `KIMICODE_API_KEY` | `kimi/kimi-code` |
| Kimi Coding | `kimi` | `KIMI_API_KEY` or `KIMICODE_API_KEY` | `kimi/kimi-code` |
| MiniMax | `minimax` / `minimax-portal` | `MINIMAX_API_KEY` / `MINIMAX_OAUTH_TOKEN` | `minimax/MiniMax-M2.7` |
| Mistral | `mistral` | `MISTRAL_API_KEY` | `mistral/mistral-large-latest` |
| Moonshot | `moonshot` | `MOONSHOT_API_KEY` | `moonshot/kimi-k2.6` |
@ -252,26 +261,26 @@ OpenClaw постачається з каталогом piai. Ці поста
Варто знати такі особливості:
- **OpenRouter** застосовує свої заголовки атрибуції app і маркери Anthropic `cache_control` лише на перевірених маршрутах `openrouter.ai`. Як proxy-подібний OpenAI-сумісний шлях, він пропускає формування, притаманне лише нативному OpenAI (`serviceTier`, Responses `store`, підказки кешу prompt, сумісність reasoning OpenAI). Посилання, що працюють через Gemini, зберігають лише санітизацію thought signature для proxy-Gemini.
- **Kilo Gateway** для посилань, що працюють через Gemini, дотримується того самого шляху санітизації proxy-Gemini; `kilocode/kilo/auto` та інші посилання, де proxy reasoning не підтримується, пропускають ін’єкцію proxy reasoning.
- **MiniMax** онбординг через API-ключ записує явні визначення чат-моделей лише для тексту M2.7; розуміння зображень залишається на медіа-постачальнику `MiniMax-VL-01`, який належить Plugin.
- **xAI** використовує шлях xAI Responses. `/fast` або `params.fastMode: true` переписує `grok-3`, `grok-3-mini`, `grok-4` і `grok-4-0709` на їхні варіанти `*-fast`. `tool_stream` увімкнено за замовчуванням; вимкнення через `agents.defaults.models["xai/<model>"].params.tool_stream=false`.
- **Cerebras** моделі GLM використовують `zai-glm-4.7` / `zai-glm-4.6`; Base URL, сумісний з OpenAI: `https://api.cerebras.ai/v1`.
- **OpenRouter** застосовує свої заголовки атрибуції застосунку та маркери Anthropic `cache_control` лише на перевірених маршрутах `openrouter.ai`. Як proxy-подібний OpenAI-сумісний шлях, він пропускає формування, притаманне лише нативному OpenAI (`serviceTier`, `store` у Responses, підказки кешу prompt, сумісність reasoning OpenAI). Посилання з бекендом Gemini зберігають лише очищення сигнатур thought для proxy-Gemini.
- **Kilo Gateway** для посилань із бекендом Gemini дотримується того самого шляху очищення proxy-Gemini; `kilocode/kilo/auto` та інші посилання, що не підтримують proxy-reasoning, пропускають ін’єкцію proxy reasoning.
- **MiniMax** під час онбордингу через API key записує явні визначення текстових чат-моделей лише для M2.7; розуміння зображень залишається на медіа-постачальнику `MiniMax-VL-01`, яким володіє Plugin.
- **xAI** використовує шлях xAI Responses. `/fast` або `params.fastMode: true` переписує `grok-3`, `grok-3-mini`, `grok-4` і `grok-4-0709` на їхні варіанти `*-fast`. `tool_stream` типово ввімкнено; вимикайте через `agents.defaults.models["xai/<model>"].params.tool_stream=false`.
- **Cerebras** моделі GLM використовують `zai-glm-4.7` / `zai-glm-4.6`; OpenAI-сумісний базовий URL — `https://api.cerebras.ai/v1`.
## Постачальники через `models.providers` (custom/Base URL)
## Постачальники через `models.providers` (custom/base URL)
Використовуйте `models.providers` (або `models.json`), щоб додавати **custom** постачальників або
OpenAI/Anthropicсумісні proxy.
Використовуйте `models.providers` (або `models.json`), щоб додати **власних** постачальників або
OpenAI/Anthropic-сумісні proxy.
Багато вбудованих Plugin постачальників нижче вже публікують каталог за замовчуванням.
Явні записи `models.providers.<id>` потрібні лише тоді, коли ви хочете перевизначити
Base URL, заголовки або список моделей за замовчуванням.
Багато вбудованих нижче Plugin постачальників уже публікують типовий каталог.
Використовуйте явні записи `models.providers.<id>` лише тоді, коли потрібно перевизначити
типовий base URL, заголовки або список моделей.
### Moonshot AI (Kimi)
Moonshot постачається як вбудований Plugin постачальника. Використовуйте вбудованого постачальника
за замовчуванням і додавайте явний запис `models.providers.moonshot` лише тоді, коли
потрібно перевизначити Base URL або метадані моделі:
Moonshot постачається як вбудований Plugin постачальника. Типово використовуйте
вбудованого постачальника й додавайте явний запис `models.providers.moonshot` лише тоді, коли
потрібно перевизначити base URL або метадані моделі:
- Постачальник: `moonshot`
- Auth: `MOONSHOT_API_KEY`
@ -311,7 +320,7 @@ Moonshot постачається як вбудований Plugin постач
### Kimi Coding
Kimi Coding використовує Anthropic-сумісний endpoint Moonshot AI:
Kimi Coding використовує Anthropic-сумісну кінцеву точку Moonshot AI:
- Постачальник: `kimi`
- Auth: `KIMI_API_KEY`
@ -345,10 +354,10 @@ Volcano Engine (火山引擎) надає доступ до Doubao та інши
}
```
Онбординг за замовчуванням використовує coding-поверхню, але загальний каталог `volcengine/*`
Під час онбордингу типовою є coding-поверхня, але загальний каталог `volcengine/*`
реєструється одночасно.
У засобах вибору моделі для онбордингу/налаштування вибір auth Volcengine віддає перевагу рядкам
У засобах вибору моделі для онбордингу/налаштування варіант auth для Volcengine надає перевагу рядкам
`volcengine/*` і `volcengine-plan/*`. Якщо ці моделі ще не завантажені,
OpenClaw повертається до нефільтрованого каталогу замість показу порожнього
засобу вибору в межах постачальника.
@ -361,7 +370,7 @@ OpenClaw повертається до нефільтрованого катал
- `volcengine/glm-4-7-251222` (GLM 4.7)
- `volcengine/deepseek-v3-2-251201` (DeepSeek V3.2 128K)
Моделі для coding (`volcengine-plan`):
Coding-моделі (`volcengine-plan`):
- `volcengine-plan/ark-code-latest`
- `volcengine-plan/doubao-seed-code`
@ -386,10 +395,10 @@ BytePlus ARK надає міжнародним користувачам дост
}
```
Онбординг за замовчуванням використовує coding-поверхню, але загальний каталог `byteplus/*`
Під час онбордингу типовою є coding-поверхня, але загальний каталог `byteplus/*`
реєструється одночасно.
У засобах вибору моделі для онбордингу/налаштування вибір auth BytePlus віддає перевагу рядкам
У засобах вибору моделі для онбордингу/налаштування варіант auth для BytePlus надає перевагу рядкам
`byteplus/*` і `byteplus-plan/*`. Якщо ці моделі ще не завантажені,
OpenClaw повертається до нефільтрованого каталогу замість показу порожнього
засобу вибору в межах постачальника.
@ -400,7 +409,7 @@ OpenClaw повертається до нефільтрованого катал
- `byteplus/kimi-k2-5-260127` (Kimi K2.5)
- `byteplus/glm-4-7-251222` (GLM 4.7)
Моделі для coding (`byteplus-plan`):
Coding-моделі (`byteplus-plan`):
- `byteplus-plan/ark-code-latest`
- `byteplus-plan/doubao-seed-code`
@ -438,26 +447,26 @@ Synthetic надає Anthropic-сумісні моделі через поста
### MiniMax
MiniMax налаштовується через `models.providers`, оскільки використовує custom endpoint:
MiniMax налаштовується через `models.providers`, оскільки використовує власні кінцеві точки:
- MiniMax OAuth (Global): `--auth-choice minimax-global-oauth`
- MiniMax OAuth (глобальний): `--auth-choice minimax-global-oauth`
- MiniMax OAuth (CN): `--auth-choice minimax-cn-oauth`
- API-ключ MiniMax (Global): `--auth-choice minimax-global-api`
- API-ключ MiniMax (CN): `--auth-choice minimax-cn-api`
- MiniMax API key (глобальний): `--auth-choice minimax-global-api`
- MiniMax API key (CN): `--auth-choice minimax-cn-api`
- Auth: `MINIMAX_API_KEY` для `minimax`; `MINIMAX_OAUTH_TOKEN` або
`MINIMAX_API_KEY` для `minimax-portal`
Деталі налаштування, варіанти моделей і фрагменти конфігурації дивіться в [/providers/minimax](/uk/providers/minimax).
Деталі налаштування, варіанти моделей і фрагменти конфігурації див. у [/providers/minimax](/uk/providers/minimax).
На Anthropic-сумісному streaming-шляху MiniMax OpenClaw за замовчуванням вимикає thinking,
якщо ви явно його не задасте, а `/fast on` переписує
На Anthropic-сумісному шляху потокової передачі MiniMax OpenClaw вимикає thinking
типово, якщо ви явно його не задасте, а `/fast on` переписує
`MiniMax-M2.7` на `MiniMax-M2.7-highspeed`.
Розподіл можливостей, що належить Plugin:
Розділення можливостей, яким володіє Plugin:
- Типовий текстовий/chat-сценарій залишається на `minimax/MiniMax-M2.7`
- Типові значення для text/chat залишаються на `minimax/MiniMax-M2.7`
- Генерація зображень — це `minimax/image-01` або `minimax-portal/image-01`
- Розуміння зображень — це `MiniMax-VL-01`, який належить Plugin, на обох шляхах auth MiniMax
- Розуміння зображень — це `MiniMax-VL-01`, яким на обох шляхах auth MiniMax володіє Plugin
- Вебпошук залишається на id постачальника `minimax`
### LM Studio
@ -466,9 +475,9 @@ LM Studio постачається як вбудований Plugin постач
- Постачальник: `lmstudio`
- Auth: `LM_API_TOKEN`
- Base URL inference за замовчуванням: `http://localhost:1234/v1`
- Типовий базовий URL інференсу: `http://localhost:1234/v1`
Потім задайте модель (замініть на один з id, які повертає `http://localhost:1234/api/v1/models`):
Потім задайте модель (замініть на один з id, повернених `http://localhost:1234/api/v1/models`):
```json5
{
@ -479,12 +488,12 @@ LM Studio постачається як вбудований Plugin постач
```
OpenClaw використовує нативні `LM Studio` `/api/v1/models` і `/api/v1/models/load`
для виявлення й auto-load, а `/v1/chat/completions` — для inference за замовчуванням.
Налаштування й усунення несправностей дивіться в [/providers/lmstudio](/uk/providers/lmstudio).
для виявлення й автозавантаження, а типово для інференсу — `/v1/chat/completions`.
Деталі налаштування й усунення несправностей див. у [/providers/lmstudio](/uk/providers/lmstudio).
### Ollama
Ollama постачається як вбудований Plugin постачальника і використовує нативний API Ollama:
Ollama постачається як вбудований Plugin постачальника та використовує нативний API Ollama:
- Постачальник: `ollama`
- Auth: не потрібен (локальний сервер)
@ -492,7 +501,7 @@ Ollama постачається як вбудований Plugin постача
- Встановлення: [https://ollama.com/download](https://ollama.com/download)
```bash
# Install Ollama, then pull a model:
# Встановіть Ollama, потім завантажте модель:
ollama pull llama3.3
```
@ -504,27 +513,27 @@ ollama pull llama3.3
}
```
Ollama виявляється локально за адресою `http://127.0.0.1:11434`, коли ви вмикаєте її через
Ollama виявляється локально за адресою `http://127.0.0.1:11434`, коли ви вмикаєте це через
`OLLAMA_API_KEY`, а вбудований Plugin постачальника додає Ollama безпосередньо до
`openclaw onboard` і засобу вибору моделі. Докладніше про онбординг, хмарний/локальний режим
і custom-конфігурацію дивіться в [/providers/ollama](/uk/providers/ollama).
`openclaw onboard` і засобу вибору моделі. Див. [/providers/ollama](/uk/providers/ollama)
щодо онбордингу, хмарного/локального режиму та власної конфігурації.
### vLLM
vLLM постачається як вбудований Plugin постачальника для локальних/self-hosted OpenAI-сумісних
vLLM постачається як вбудований Plugin постачальника для локальних/самостійно розміщених OpenAI-сумісних
серверів:
- Постачальник: `vllm`
- Auth: необов’язковий (залежить від вашого сервера)
- Base URL за замовчуванням: `http://127.0.0.1:8000/v1`
- Типовий базовий URL: `http://127.0.0.1:8000/v1`
Щоб локально ввімкнути auto-discovery (підійде будь-яке значення, якщо ваш сервер не вимагає auth):
Щоб локально ввімкнути автоматичне виявлення (підійде будь-яке значення, якщо ваш сервер не вимагає auth):
```bash
export VLLM_API_KEY="vllm-local"
```
Потім задайте модель (замініть на один з id, які повертає `/v1/models`):
Потім задайте модель (замініть на один з id, повернених `/v1/models`):
```json5
{
@ -534,25 +543,25 @@ export VLLM_API_KEY="vllm-local"
}
```
Подробиці дивіться в [/providers/vllm](/uk/providers/vllm).
Деталі див. у [/providers/vllm](/uk/providers/vllm).
### SGLang
SGLang постачається як вбудований Plugin постачальника для швидких self-hosted
SGLang постачається як вбудований Plugin постачальника для швидких самостійно розміщених
OpenAI-сумісних серверів:
- Постачальник: `sglang`
- Auth: необов’язковий (залежить від вашого сервера)
- Base URL за замовчуванням: `http://127.0.0.1:30000/v1`
- Типовий базовий URL: `http://127.0.0.1:30000/v1`
Щоб локально ввімкнути auto-discovery (підійде будь-яке значення, якщо ваш сервер не
Щоб локально ввімкнути автоматичне виявлення (підійде будь-яке значення, якщо ваш сервер не
вимагає auth):
```bash
export SGLANG_API_KEY="sglang-local"
```
Потім задайте модель (замініть на один з id, які повертає `/v1/models`):
Потім задайте модель (замініть на один з id, повернених `/v1/models`):
```json5
{
@ -562,7 +571,7 @@ export SGLANG_API_KEY="sglang-local"
}
```
Подробиці дивіться в [/providers/sglang](/uk/providers/sglang).
Деталі див. у [/providers/sglang](/uk/providers/sglang).
### Локальні proxy (LM Studio, vLLM, LiteLLM тощо)
@ -573,7 +582,7 @@ export SGLANG_API_KEY="sglang-local"
agents: {
defaults: {
model: { primary: "lmstudio/my-local-model" },
models: { "lmstudio/my-local-model": { alias: "Local" } },
models: { "lmstudio/my-local-model": { alias: "Локальна" } },
},
},
models: {
@ -585,7 +594,7 @@ export SGLANG_API_KEY="sglang-local"
models: [
{
id: "my-local-model",
name: "Local Model",
name: "Локальна модель",
reasoning: false,
input: ["text"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
@ -601,21 +610,24 @@ export SGLANG_API_KEY="sglang-local"
Примітки:
- Для custom-постачальників `reasoning`, `input`, `cost`, `contextWindow` і `maxTokens` є необов’язковими.
Якщо їх не задано, OpenClaw використовує такі значення за замовчуванням:
- Для власних постачальників `reasoning`, `input`, `cost`, `contextWindow` і `maxTokens` є необов’язковими.
Якщо їх не задано, OpenClaw типово використовує:
- `reasoning: false`
- `input: ["text"]`
- `cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }`
- `contextWindow: 200000`
- `maxTokens: 8192`
- Рекомендовано: задавайте явні значення, що відповідають обмеженням вашої proxy/моделі.
- Для `api: "openai-completions"` на ненативних endpoint (будь-який непорожній `baseUrl`, чий хост не є `api.openai.com`) OpenClaw примусово встановлює `compat.supportsDeveloperRole: false`, щоб уникнути помилок постачальника 400 через непідтримувані ролі `developer`.
- Proxy-подібні OpenAI-сумісні маршрути також пропускають формування запитів, притаманне лише нативному OpenAI: без `service_tier`, без Responses `store`, без Completions `store`, без підказок кешу prompt, без формування payload для сумісності reasoning OpenAI і без прихованих заголовків атрибуції OpenClaw.
- Для OpenAI-сумісних Completions proxy, яким потрібні поля, специфічні для постачальника,
- Рекомендовано: задавайте явні значення, які відповідають обмеженням вашого proxy/моделі.
- Для `api: "openai-completions"` на ненативних кінцевих точках (будь-який непорожній `baseUrl`, чий host не є `api.openai.com`) OpenClaw примусово встановлює `compat.supportsDeveloperRole: false`, щоб уникнути помилок постачальника 400 для непідтримуваних ролей `developer`.
- Proxy-подібні OpenAI-сумісні маршрути також пропускають формування запиту, притаманне лише нативному OpenAI:
без `service_tier`, без `store` у Responses, без `store` у Completions, без
підказок кешу prompt, без формування payload для сумісності з OpenAI reasoning і без прихованих
заголовків атрибуції OpenClaw.
- Для OpenAI-сумісних proxy Completions, яким потрібні поля, специфічні для постачальника,
задайте `agents.defaults.models["provider/model"].params.extra_body` (або
`extraBody`), щоб об’єднати додатковий JSON у вихідне тіло запиту.
- Якщо `baseUrl` порожній або не заданий, OpenClaw зберігає стандартну поведінку OpenAI (яка зводиться до `api.openai.com`).
- Для безпеки явне `compat.supportsDeveloperRole: true` однаково перевизначається на ненативних endpoint `openai-completions`.
- Якщо `baseUrl` порожній/не вказаний, OpenClaw зберігає типову поведінку OpenAI (яка вказує на `api.openai.com`).
- Для безпеки явне `compat.supportsDeveloperRole: true` все одно перевизначається на ненативних кінцевих точках `openai-completions`.
## Приклади CLI
@ -625,11 +637,11 @@ openclaw models set opencode/claude-opus-4-6
openclaw models list
```
Дивіться також: [/gateway/configuration](/uk/gateway/configuration), де наведено повні приклади конфігурації.
Див. також: [/gateway/configuration](/uk/gateway/configuration) для повних прикладів конфігурації.
## Пов’язане
- [Models](/uk/concepts/models) — конфігурація моделей і псевдоніми
- [Model Failover](/uk/concepts/model-failover) — ланцюжки fallback і поведінка повторних спроб
- [Configuration Reference](/uk/gateway/config-agents#agent-defaults) — ключі конфігурації моделі
- [Providers](/uk/providers) — окремі інструкції з налаштування для кожного постачальника
- [Model Failover](/uk/concepts/model-failover) — ланцюжки резервного перемикання та поведінка повторних спроб
- [Configuration Reference](/uk/gateway/config-agents#agent-defaults) — ключі конфігурації моделей
- [Providers](/uk/providers) — посібники з налаштування для кожного постачальника

View File

@ -1,31 +1,31 @@
---
read_when:
- Пояснення того, як працює потокове передавання або фрагментація в каналах
- Зміна поведінки блокового потокового передавання або фрагментації каналу
- Налагодження дубльованих/передчасних блокових відповідей або потокового передавання попереднього перегляду каналу
summary: Поведінка потокового передавання + фрагментації (блокові відповіді, потокове передавання попереднього перегляду каналу, зіставлення режимів)
title: Потокове передавання та фрагментація
- Пояснення того, як streaming або chunking працює в каналах
- Зміна поведінки block streaming або channel chunking
- Налагодження дубльованих/передчасних блокових відповідей або preview streaming каналу
summary: Поведінка streaming + chunking (блокові відповіді, preview streaming каналу, зіставлення режимів)
title: Streaming і chunking
x-i18n:
generated_at: "2026-04-25T02:39:36Z"
generated_at: "2026-04-25T04:07:29Z"
model: gpt-5.4
provider: openai
source_hash: 304583beac6f052573e10a633f835db2527d4e83de19dc4a38207fb8c52ee973
source_hash: 29faf5c6f39f4a9ebf149b94f5945bd1454b4d4112f557f5cb20b4f1c7f72346
source_path: concepts/streaming.md
workflow: 15
---
# Потокове передавання + фрагментація
# Streaming + chunking
OpenClaw має два окремі шари потокового передавання:
OpenClaw має два окремі рівні streaming:
- **Блокове потокове передавання (канали):** надсилає завершені **блоки**, коли асистент їх пише. Це звичайні повідомлення каналу (не дельти токенів).
- **Потокове передавання попереднього перегляду (Telegram/Discord/Slack):** оновлює тимчасове **повідомлення попереднього перегляду** під час генерації.
- **Блоковий streaming (канали):** надсилає завершені **блоки**, поки асистент пише. Це звичайні повідомлення каналу (не token deltas).
- **Preview streaming (Telegram/Discord/Slack):** оновлює тимчасове **preview message** під час генерації.
Справжнього потокового передавання дельт токенів до повідомлень каналу наразі **немає**. Потокове передавання попереднього перегляду є повідомлення-орієнтованим (надсилання + редагування/додавання).
Справжнього streaming у вигляді token deltas до повідомлень каналу сьогодні **немає**. Preview streaming базується на повідомленнях (надсилання + редагування/додавання).
## Блокове потокове передавання (повідомлення каналу)
## Блоковий streaming (повідомлення каналу)
Блокове потокове передавання надсилає вивід асистента великими фрагментами в міру його появи.
Блоковий streaming надсилає вихід асистента великими частинами, щойно вони стають доступними.
```
Model output
@ -37,93 +37,92 @@ Model output
└─ channel send (block replies)
```
Умовні позначення:
Легенда:
- `text_delta/events`: події потоку моделі (можуть бути рідкісними для моделей без потокового передавання).
- `chunker`: `EmbeddedBlockChunker`, що застосовує мінімальні/максимальні межі + пріоритет розриву.
- `text_delta/events`: події потоку моделі (можуть бути рідкісними для моделей без streaming).
- `chunker`: `EmbeddedBlockChunker`, який застосовує мінімальні/максимальні межі + пріоритет розриву.
- `channel send`: фактичні вихідні повідомлення (блокові відповіді).
**Керування:**
- `agents.defaults.blockStreamingDefault`: `"on"`/`"off"` (типово вимкнено).
- Перевизначення каналу: `*.blockStreaming` (і варіанти для окремих акаунтів), щоб примусово встановити `"on"`/`"off"` для кожного каналу.
- Перевизначення для каналів: `*.blockStreaming` (і варіанти для окремих акаунтів), щоб примусово встановити `"on"`/`"off"` для кожного каналу.
- `agents.defaults.blockStreamingBreak`: `"text_end"` або `"message_end"`.
- `agents.defaults.blockStreamingChunk`: `{ minChars, maxChars, breakPreference? }`.
- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (об’єднує потокові блоки перед надсиланням).
- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (об’єднання streamed-блоків перед надсиланням).
- Жорстке обмеження каналу: `*.textChunkLimit` (наприклад, `channels.whatsapp.textChunkLimit`).
- Режим фрагментації каналу: `*.chunkMode` (`length` типово, `newline` розбиває за порожніми рядками (межі абзаців) перед розбиттям за довжиною).
- М’яке обмеження Discord: `channels.discord.maxLinesPerMessage` (типово 17) розбиває високі відповіді, щоб уникнути обрізання в інтерфейсі.
- Режим chunking каналу: `*.chunkMode` (`length` — типово, `newline` розбиває за порожніми рядками (межі абзаців) перед розбиттям за довжиною).
- М’яке обмеження Discord: `channels.discord.maxLinesPerMessage` (типово 17) розбиває довгі відповіді, щоб уникнути обрізання в UI.
**Семантика меж:**
- `text_end`: передає блоки потоком щойно `chunker` їх видає; скидає на кожному `text_end`.
- `message_end`: чекає завершення повідомлення асистента, а потім скидає буферизований вивід.
- `text_end`: stream-блоки надсилаються, щойно їх видає chunker; flush виконується на кожному `text_end`.
- `message_end`: чекати завершення повідомлення асистента, а потім виконати flush буферизованого виводу.
`message_end` усе одно використовує `chunker`, якщо буферизований текст перевищує `maxChars`, тому наприкінці він може видати кілька фрагментів.
`message_end` усе одно використовує chunker, якщо буферизований текст перевищує `maxChars`, тому наприкінці може бути надіслано кілька chunk.
## Алгоритм фрагментації (нижня/верхня межі)
## Алгоритм chunking (нижня/верхня межі)
Фрагментація блоків реалізована в `EmbeddedBlockChunker`:
Блоковий chunking реалізовано в `EmbeddedBlockChunker`:
- **Нижня межа:** не видавати, доки буфер < `minChars` (якщо немає примусового скидання).
- **Нижня межа:** не надсилати, доки буфер не досягне `minChars` (якщо не примусово).
- **Верхня межа:** намагатися розривати до `maxChars`; якщо примусово, розривати на `maxChars`.
- **Пріоритет розриву:** `paragraph``newline``sentence``whitespace` → жорсткий розрив.
- **Кодові блоки:** ніколи не розривати всередині блоків; при примусовому розриві на `maxChars` закривати + знову відкривати блок, щоб Markdown залишався валідним.
- **Code fences:** ніколи не розривати всередині fence; якщо примусовий розрив на `maxChars`, fence закривається й відкривається знову, щоб Markdown залишався валідним.
`maxChars` обмежується значенням `textChunkLimit` каналу, тому ви не можете перевищити ліміти конкретного каналу.
`maxChars` обмежується значенням `textChunkLimit` каналу, тому перевищити ліміти конкретного каналу не можна.
## Об’єднання (злиття потокових блоків)
## Coalescing (об’єднання streamed-блоків)
Коли блокове потокове передавання ввімкнене, OpenClaw може **об’єднувати послідовні блокові фрагменти**
перед їх надсиланням. Це зменшує «спам із однорядкових повідомлень», але при цьому
зберігає поступову появу відповіді.
Коли блоковий streaming увімкнено, OpenClaw може **об’єднувати послідовні block chunks**
перед їх надсиланням. Це зменшує “спам з однорядкових повідомлень”, водночас
зберігаючи поступовий вивід.
- Об’єднання чекає на **паузи бездіяльності** (`idleMs`) перед скиданням.
- Буфери обмежуються `maxChars` і будуть скинуті, якщо перевищать його.
- `minChars` не дає надсилати надто малі фрагменти, доки не накопичиться достатньо тексту
(фінальний скид завжди надсилає залишок тексту).
- Розділювач виводиться з `blockStreamingChunk.breakPreference`
- Coalescing очікує **періодів бездіяльності** (`idleMs`) перед flush.
- Буфери обмежуються `maxChars` і будуть відправлені, якщо перевищать його.
- `minChars` не дає надсилати дрібні фрагменти, доки не накопичиться достатньо тексту
(остаточний flush завжди надсилає весь залишок тексту).
- Joiner визначається з `blockStreamingChunk.breakPreference`
(`paragraph` → `\n\n`, `newline``\n`, `sentence` → пробіл).
- Перевизначення каналу доступні через `*.blockStreamingCoalesce` (включно з конфігураціями для окремих акаунтів).
- Типове значення `minChars` для об’єднання підвищується до 1500 для Signal/Slack/Discord, якщо не перевизначене.
- Для каналів доступні перевизначення через `*.blockStreamingCoalesce` (включно з конфігураціями для окремих акаунтів).
- Типове значення coalesce `minChars` підвищується до 1500 для Signal/Slack/Discord, якщо не перевизначено.
## Людиноподібний темп між блоками
## Людиноподібна затримка між блоками
Коли блокове потокове передавання ввімкнене, ви можете додати **випадкову паузу** між
Коли блоковий streaming увімкнено, можна додати **випадкову паузу** між
блоковими відповідями (після першого блоку). Це робить відповіді з кількох бульбашок
природнішими.
- Конфігурація: `agents.defaults.humanDelay` (перевизначення для окремого агента через `agents.list[].humanDelay`).
- Режими: `off` (типово), `natural` (8002500ms), `custom` (`minMs`/`maxMs`).
- Застосовується лише до **блокових відповідей**, а не до фінальних відповідей чи зведень інструментів.
- Застосовується лише до **блокових відповідей**, не до фінальних відповідей або зведень інструментів.
## «Передавати фрагменти потоком чи все одразу»
## "Надсилати chunk-и чи все одразу"
Це відповідає такому:
- **Передавати фрагменти потоком:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (видавати в процесі). Для каналів, окрім Telegram, також потрібно `*.blockStreaming: true`.
- **Передавати все наприкінці:** `blockStreamingBreak: "message_end"` (скинути один раз, можливо кількома фрагментами, якщо відповідь дуже довга).
- **Без блокового потокового передавання:** `blockStreamingDefault: "off"` (лише фінальна відповідь).
- **Надсилати chunk-и:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (надсилати в процесі). Для каналів, окрім Telegram, також потрібен `*.blockStreaming: true`.
- **Надсилати все наприкінці:** `blockStreamingBreak: "message_end"` (один flush, можливо кількома chunk-ами, якщо відповідь дуже довга).
- **Без блокового streaming:** `blockStreamingDefault: "off"` (лише фінальна відповідь).
**Примітка щодо каналів:** Блокове потокове передавання **вимкнене, якщо тільки**
`*.blockStreaming` не встановлено явно в `true`. Канали можуть передавати живий попередній перегляд потоком
**Примітка про канали:** Блоковий streaming **вимкнено, доки**
`*.blockStreaming` явно не встановлено в `true`. Канали можуть мати live preview
(`channels.<channel>.streaming`) без блокових відповідей.
Нагадування про розташування конфігурації: типові значення `blockStreaming*` розміщені в
`agents.defaults`, а не в кореневому конфігу.
Нагадування про розташування конфігурації: значення за замовчуванням `blockStreaming*` розміщені в `agents.defaults`, а не в корені конфігурації.
## Режими потокового передавання попереднього перегляду
## Режими preview streaming
Канонічний ключ: `channels.<channel>.streaming`
Режими:
- `off`: вимкнути потокове передавання попереднього перегляду.
- `partial`: один попередній перегляд, який замінюється найсвіжішим текстом.
- `block`: попередній перегляд оновлюється фрагментованими/додаваними кроками.
- `progress`: попередній перегляд прогресу/стану під час генерації, фінальна відповідь після завершення.
- `off`: вимкнути preview streaming.
- `partial`: один preview, який замінюється актуальним текстом.
- `block`: preview оновлюється chunk-ами/додаванням частинами.
- `progress`: preview прогресу/статусу під час генерації, фінальна відповідь після завершення.
### Зіставлення каналів
### Зіставлення для каналів
| Канал | `off` | `partial` | `block` | `progress` |
| ---------- | ----- | --------- | ------- | ----------------- |
@ -134,62 +133,80 @@ Model output
Лише для Slack:
- `channels.slack.streaming.nativeTransport` перемикає нативні API-виклики потокового передавання Slack, коли `channels.slack.streaming.mode="partial"` (типово: `true`).
- Нативне потокове передавання Slack і статус потоку асистента Slack потребують цільового потоку відповідей; у DM верхнього рівня такий попередній перегляд у стилі потоку не відображається.
- `channels.slack.streaming.nativeTransport` перемикає виклики нативного Slack streaming API, коли `channels.slack.streaming.mode="partial"` (типово: `true`).
- Нативний Slack streaming і статуси Slack assistant thread потребують цільового reply thread; DM верхнього рівня не показують такий preview у стилі thread.
Міграція застарілих ключів:
Міграція legacy ключів:
- Telegram: `streamMode` і булеве `streaming` автоматично мігрують у enum `streaming`.
- Discord: `streamMode` і булеве `streaming` автоматично мігрують у enum `streaming`.
- Slack: `streamMode` автоматично мігрує в `streaming.mode`; булеве `streaming` автоматично мігрує в `streaming.mode` плюс `streaming.nativeTransport`; застаріле `nativeStreaming` автоматично мігрує в `streaming.nativeTransport`.
- Slack: `streamMode` автоматично мігрує в `streaming.mode`; булеве `streaming` автоматично мігрує в `streaming.mode` плюс `streaming.nativeTransport`; legacy `nativeStreaming` автоматично мігрує в `streaming.nativeTransport`.
### Поведінка під час виконання
Telegram:
- Використовує оновлення попереднього перегляду через `sendMessage` + `editMessageText` у DM і в групах/темах.
- Потокове передавання попереднього перегляду пропускається, якщо для Telegram явно ввімкнене блокове потокове передавання (щоб уникнути подвійного потокового передавання).
- `/reasoning stream` може записувати міркування в попередній перегляд.
- Використовує оновлення preview через `sendMessage` + `editMessageText` у DM і групах/темах.
- Preview streaming пропускається, коли для Telegram явно увімкнено блоковий streaming (щоб уникнути подвійного streaming).
- `/reasoning stream` може виводити reasoning у preview.
Discord:
- Використовує повідомлення попереднього перегляду з надсиланням + редагуванням.
- Режим `block` використовує фрагментацію чернетки (`draftChunk`).
- Потокове передавання попереднього перегляду пропускається, якщо для Discord явно ввімкнене блокове потокове передавання.
- Фінальні корисні навантаження медіа, помилок і явних відповідей скасовують відкладені попередні перегляди без скидання нової чернетки, а потім використовують звичайну доставку.
- Використовує preview-повідомлення через send + edit.
- Режим `block` використовує чернетковий chunking (`draftChunk`).
- Preview streaming пропускається, коли для Discord явно увімкнено блоковий streaming.
- Фінальні payload-и з медіа, помилками та явними відповідями скасовують очікувані preview без надсилання нового draft, а потім використовують звичайну доставку.
Slack:
- `partial` може використовувати нативне потокове передавання Slack (`chat.startStream`/`append`/`stop`), якщо воно доступне.
- `block` використовує попередні перегляди чернеток у стилі додавання.
- `progress` використовує текст попереднього перегляду стану, а потім фінальну відповідь.
- Нативне потокове передавання і потокове передавання попереднього перегляду чернетки пригнічують блокові відповіді для цього ходу, тож відповідь Slack передається потоком лише одним шляхом доставки.
- Фінальні корисні навантаження медіа/помилок і фінали `progress` не створюють одноразові повідомлення-чернетки; лише текстові/блокові фінали, які можуть відредагувати попередній перегляд, скидають відкладений текст чернетки.
- `partial` може використовувати нативний Slack streaming (`chat.startStream`/`append`/`stop`), коли він доступний.
- `block` використовує draft preview у стилі append.
- `progress` використовує preview тексту статусу, а потім фінальну відповідь.
- Нативний і draft preview streaming пригнічують блокові відповіді для цього ходу, тому відповідь Slack надсилається лише одним шляхом доставки.
- Фінальні payload-и з медіа/помилками та фінали progress не створюють тимчасових draft-повідомлень; лише текстові/блокові фінали, які можуть редагувати preview, виконують flush відкладеного draft text.
Mattermost:
- Передає міркування, активність інструментів і частковий текст відповіді в один чернетковий пост попереднього перегляду, який фіналізується на місці, коли фінальну відповідь безпечно надсилати.
- Повертається до надсилання нового фінального поста, якщо пост попереднього перегляду було видалено або він інакше недоступний під час фіналізації.
- Фінальні корисні навантаження медіа/помилок скасовують відкладені оновлення попереднього перегляду перед звичайною доставкою, замість скидання тимчасового поста попереднього перегляду.
- Stream-ить thinking, активність інструментів і частковий текст відповіді в єдиний draft preview post, який фіналізується на місці, коли фінальну відповідь безпечно надсилати.
- Повертається до надсилання нового фінального post, якщо preview post було видалено або він недоступний на момент фіналізації.
- Фінальні payload-и з медіа/помилками скасовують відкладені preview-оновлення перед звичайною доставкою, замість flush тимчасового preview post.
Matrix:
- Попередні перегляди чернеток фіналізуються на місці, коли фінальний текст може повторно використати подію попереднього перегляду.
- Фінали лише з медіа, з помилками та з невідповідністю цілі відповіді скасовують відкладені оновлення попереднього перегляду перед звичайною доставкою; уже видимий застарілий попередній перегляд редагується.
- Draft preview фіналізується на місці, коли фінальний текст може повторно використати подію preview.
- Фінали лише з медіа, з помилками та з невідповідністю цілі відповіді скасовують відкладені preview-оновлення перед звичайною доставкою; уже видимий застарілий preview редагується через redaction.
### Оновлення попереднього перегляду прогресу інструментів
### Оновлення preview з прогресом інструментів
Потокове передавання попереднього перегляду також може включати оновлення **прогресу інструментів** — короткі рядки стану на кшталт "пошук у вебі", "читання файлу" або "виклик інструмента", — які з’являються в тому самому повідомленні попереднього перегляду під час роботи інструментів, ще до фінальної відповіді. Це зберігає візуальну активність багатокрокових ходів інструментів замість тиші між першим попереднім переглядом міркувань і фінальною відповіддю.
Preview streaming також може включати оновлення **tool-progress** — короткі рядки статусу на кшталт "searching the web", "reading file" або "calling tool", які з’являються в тому самому preview message під час роботи інструментів, ще до фінальної відповіді. Це візуально оживляє багатокрокові ходи з інструментами, щоб вони не виглядали беззвучними між першим preview thinking і фінальною відповіддю.
Підтримувані поверхні:
- **Discord** і **Slack** типово передають прогрес інструментів потоком у редагування живого попереднього перегляду.
- **Telegram** передає прогрес інструментів потоком у редагування живого попереднього перегляду лише коли явно ввімкнено `streaming.preview.toolProgress`.
- **Mattermost** уже згортає активність інструментів у свій єдиний чернетковий пост попереднього перегляду (див. вище).
- Редагування прогресу інструментів слідують активному режиму потокового передавання попереднього перегляду; вони пропускаються, коли потокове передавання попереднього перегляду має значення `off` або коли блокове потокове передавання вже взяло повідомлення на себе.
- **Discord**, **Slack** і **Telegram** типово stream-ять tool-progress у live preview edit, коли preview streaming активний.
- Telegram постачається з увімкненими оновленнями preview tool-progress починаючи з `v2026.4.22`; збереження цього стану підтримує вже випущену поведінку.
- **Mattermost** уже включає активність інструментів у свій єдиний draft preview post (див. вище).
- Редагування tool-progress дотримуються активного режиму preview streaming; вони пропускаються, коли preview streaming має значення `off` або коли керування повідомленням уже перейняв блоковий streaming.
- Щоб зберегти preview streaming, але приховати рядки tool-progress, установіть `streaming.preview.toolProgress` у `false` для цього каналу. Щоб повністю вимкнути preview edits, установіть `streaming.mode` у `off`.
Приклад:
```json
{
"channels": {
"telegram": {
"streaming": {
"mode": "partial",
"preview": {
"toolProgress": false
}
}
}
}
}
```
## Пов’язане
- [Messages](/uk/concepts/messages) — життєвий цикл повідомлень і доставка
- [Messages](/uk/concepts/messages) — життєвий цикл і доставка повідомлень
- [Retry](/uk/concepts/retry) — поведінка повторних спроб у разі збою доставки
- [Channels](/uk/channels) — підтримка потокового передавання для кожного каналу
- [Channels](/uk/channels) — підтримка streaming для окремих каналів

View File

@ -2,35 +2,35 @@
read_when:
- Ви хочете, щоб агент OpenClaw приєднався до виклику Google Meet
- Ви хочете, щоб агент OpenClaw створив новий виклик Google Meet
- Ви налаштовуєте Chrome, вузол Chrome або Twilio як транспорт для Google Meet
summary: 'Plugin Google Meet: приєднання до явних URL-адрес Meet через Chrome або Twilio з типовими параметрами голосу в реальному часі'
title: Plugin Google Meet
- Ви налаштовуєте Chrome, вузол Chrome або Twilio як транспорт Google Meet
summary: 'Плагін Google Meet: приєднання до явних URL-адрес Meet через Chrome або Twilio зі стандартними параметрами голосу в реальному часі'
title: Плагін Google Meet
x-i18n:
generated_at: "2026-04-25T03:16:22Z"
generated_at: "2026-04-25T04:07:32Z"
model: gpt-5.4
provider: openai
source_hash: 44f185428fb096ef42aa0ccb0058784d02f0f097fcd253abdbf9897f5f9b527d
source_hash: 57162f6a4de4ccbbfd6ec61c91e33c1aed1c9c523e30415ccf6c54dca1563aac
source_path: plugins/google-meet.md
workflow: 15
---
Підтримка учасників Google Meet для OpenClaw — Plugin навмисно є явним за своєю логікою:
Підтримка учасника Google Meet для OpenClaw — Plugin є навмисно явним за дизайном:
- Він приєднується лише за явною URL-адресою `https://meet.google.com/...`.
- Він може створити новий простір Meet через API Google Meet, а потім приєднатися за поверненою URL-адресою.
- Голосовий режим `realtime` є типовим режимом.
- Голосовий режим реального часу може повертатися до повноцінного агента OpenClaw, коли потрібні глибше міркування або інструменти.
- Агенти вибирають поведінку приєднання за допомогою `mode`: використовуйте `realtime` для живого прослуховування/зворотного голосового зв’язку або `transcribe`, щоб приєднатися/керувати браузером без мосту голосу реального часу.
- Він приєднується лише за явним URL `https://meet.google.com/...`.
- Він може створити новий простір Meet через API Google Meet, а потім приєднатися до повернутого URL.
- Голос `realtime` є режимом за замовчуванням.
- Голос у режимі реального часу може повертатися до повного агента OpenClaw, коли потрібні глибші міркування або інструменти.
- Агенти вибирають поведінку приєднання за допомогою `mode`: використовуйте `realtime` для живого прослуховування/відповіді голосом або `transcribe`, щоб приєднатися/керувати браузером без мосту голосу в реальному часі.
- Автентифікація починається як персональний Google OAuth або вже виконаний вхід у профіль Chrome.
- Автоматичного оголошення про згоду немає.
- Типовий аудіобекенд Chrome — `BlackHole 2ch`.
- Автоматичного оголошення згоди немає.
- Стандартний аудіобекенд Chrome — `BlackHole 2ch`.
- Chrome може працювати локально або на підключеному вузлі.
- Twilio приймає номер для дозвону та необов’язковий PIN або послідовність DTMF.
- Команда CLI — `googlemeet`; `meet` зарезервовано для ширших сценаріїв агентських телеконференцій.
- Twilio приймає номер для дозвону плюс необов’язковий PIN-код або послідовність DTMF.
- Команда CLI — `googlemeet`; `meet` зарезервовано для ширших робочих процесів агентської телеконференції.
## Швидкий початок
## Швидкий старт
Установіть локальні аудіозалежності та налаштуйте постачальника голосу реального часу для бекенда. OpenAI використовується типово; Google Gemini Live також працює з `realtime.provider: "google"`:
Установіть локальні аудіозалежності та налаштуйте постачальника голосу в реальному часі для бекенда. OpenAI використовується за замовчуванням; Google Gemini Live також працює з `realtime.provider: "google"`:
```bash
brew install blackhole-2ch sox
@ -39,13 +39,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
@ -73,7 +73,8 @@ command -v rec play
openclaw googlemeet setup
```
Вивід налаштування призначений для читання агентом. У ньому повідомляється про профіль Chrome, аудіоміст, прив’язку до вузла, відкладений вступ `realtime`, а також, коли налаштовано делегування Twilio, чи готові Plugin `voice-call` і облікові дані Twilio. Будь-яку перевірку з `ok: false` слід вважати блокером, перш ніж просити агента приєднатися. Для сценаріїв або машиночитаного виводу використовуйте `openclaw googlemeet setup --json`.
Вивід налаштування призначений для читання агентом. У ньому повідомляється про профіль Chrome, аудіоміст, прив’язку до вузла, відкладений вступ у `realtime` і, коли налаштовано делегування Twilio, чи готові Plugin `voice-call` і облікові дані Twilio. Будь-яку перевірку з `ok: false` слід вважати блокером перед тим, як просити агента приєднатися.
Використовуйте `openclaw googlemeet setup --json` для скриптів або машинозчитуваного виводу.
Приєднайтеся до зустрічі:
@ -106,14 +107,14 @@ openclaw googlemeet create --no-join
`googlemeet create` має два шляхи:
- Створення через API: використовується, коли налаштовано облікові дані Google Meet OAuth. Це найбільш детермінований шлях, і він не залежить від стану інтерфейсу браузера.
- Резервний варіант через браузер: використовується, коли облікові дані OAuth відсутні. OpenClaw використовує закріплений вузол Chrome, відкриває `https://meet.google.com/new`, чекає, поки Google перенаправить на справжню URL-адресу з кодом зустрічі, а потім повертає цю URL-адресу. Для цього шляху потрібно, щоб у профілі OpenClaw Chrome на вузлі вже було виконано вхід у Google.
- Створення через API: використовується, коли налаштовано облікові дані Google Meet OAuth. Це найбільш детермінований шлях, який не залежить від стану інтерфейсу браузера.
- Резервний варіант через браузер: використовується, коли облікові дані OAuth відсутні. OpenClaw використовує закріплений вузол Chrome, відкриває `https://meet.google.com/new`, чекає, поки Google перенаправить на реальний URL із кодом зустрічі, а потім повертає цей URL. Цей шлях вимагає, щоб у профілі Chrome OpenClaw на вузлі вже було виконано вхід у Google.
Автоматизація браузера обробляє власний початковий запит Meet на доступ до мікрофона; цей запит не вважається помилкою входу в Google.
Потоки приєднання та створення також намагаються повторно використати наявну вкладку Meet перед відкриттям нової. Під час зіставлення ігноруються нешкідливі рядки запиту URL, як-от `authuser`, тому повторна спроба агента має перевести фокус на вже відкриту зустріч, а не створити другу вкладку Chrome.
Потоки приєднання і створення також намагаються повторно використати наявну вкладку Meet перед відкриттям нової. Під час зіставлення ігноруються нешкідливі рядки параметрів URL, такі як `authuser`, тому повторна спроба агента має сфокусувати вже відкриту зустріч, а не створювати другу вкладку Chrome.
Вивід команди/інструмента містить поле `source` (`api` або `browser`), щоб агенти могли пояснити, який шлях було використано. `create` типово приєднується до нової зустрічі та повертає `joined: true` разом із сеансом приєднання. Щоб лише створити URL, використовуйте `create --no-join` у CLI або передайте `"join": false` до інструмента.
Вивід команди/інструмента містить поле `source` (`api` або `browser`), щоб агенти могли пояснити, який шлях було використано. `create` за замовчуванням приєднується до нової зустрічі та повертає `joined: true` разом із сеансом приєднання. Щоб лише створити URL, використовуйте `create --no-join` у CLI або передайте `"join": false` в інструмент.
Або скажіть агенту: "Створи Google Meet, приєднайся до нього з голосом у режимі realtime і надішли мені посилання." Агент має викликати `google_meet` з `action: "create"`, а потім поділитися поверненим `meetingUri`.
Або скажіть агенту: «Створи Google Meet, приєднайся до нього з голосом у режимі реального часу та надішли мені посилання». Агент має викликати `google_meet` з `action: "create"`, а потім поділитися повернутим `meetingUri`.
```json
{
@ -123,20 +124,20 @@ openclaw googlemeet create --no-join
}
```
Для приєднання лише для спостереження/керування браузером установіть `"mode": "transcribe"`. Це не запускає дуплексний міст моделі реального часу, тому він не говоритиме назад у зустріч.
Для приєднання лише зі спостереженням/керуванням браузером установіть `"mode": "transcribe"`. Це не запускає дуплексний міст моделі в реальному часі, тому він не відповідатиме голосом у зустрічі.
Під час сеансів `realtime` статус `google_meet` включає стан браузера та аудіомоста, зокрема `inCall`, `manualActionRequired`, `providerConnected`, `realtimeReady`, `audioInputActive`, `audioOutputActive`, часові позначки останнього входу/виходу, лічильники байтів і стан закриття моста. Якщо з’являється безпечний запит сторінки Meet, автоматизація браузера обробляє його, коли це можливо. Запити на вхід, допуск від хоста та дозволи браузера/ОС повідомляються як ручна дія з причиною та повідомленням, яке агент має передати.
Під час сеансів у режимі реального часу статус `google_meet` містить інформацію про стан браузера й аудіомоста, як-от `inCall`, `manualActionRequired`, `providerConnected`, `realtimeReady`, `audioInputActive`, `audioOutputActive`, часові мітки останнього входу/виходу, лічильники байтів і стан закриття моста. Якщо з’являється безпечний запит сторінки Meet, автоматизація браузера обробляє його, коли може. Запити на вхід, допуск від хоста та дозволи браузера/ОС повідомляються як ручна дія з причиною та повідомленням для передавання агентом.
Chrome приєднується як профіль Chrome, у якому виконано вхід. У Meet виберіть `BlackHole 2ch` для шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого дуплексного аудіо використовуйте окремі віртуальні пристрої або граф на кшталт Loopback; одного пристрою BlackHole достатньо для першого smoke-тесту, але може виникати луна.
Chrome приєднується як профіль Chrome, у якому виконано вхід. У Meet виберіть `BlackHole 2ch` для шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого дуплексного аудіо використовуйте окремі віртуальні пристрої або граф у стилі Loopback; одного пристрою BlackHole достатньо для першого димового тесту, але може виникати відлуння.
### Локальний Gateway + Parallels Chrome
Вам **не** потрібен повний OpenClaw Gateway або ключ API моделі всередині macOS VM лише для того, щоб VM володіла Chrome. Запустіть Gateway і агента локально, а потім запустіть вузол у VM. Один раз увімкніть у VM вбудований Plugin, щоб вузол рекламував команду Chrome:
Вам **не** потрібен повний Gateway OpenClaw або ключ API моделі всередині macOS VM лише для того, щоб VM володіла Chrome. Запускайте Gateway й агента локально, а потім запустіть вузол у VM. Увімкніть вбудований Plugin у VM один раз, щоб вузол рекламував команду Chrome:
Що запускається де:
Що де працює:
- Хост Gateway: OpenClaw Gateway, робочий простір агента, ключі моделі/API, постачальник `realtime` і конфігурація Plugin Google Meet.
- macOS VM у Parallels: OpenClaw CLI/вузол, Google Chrome, SoX, BlackHole 2ch і профіль Chrome, у якому виконано вхід у Google.
- macOS VM у Parallels: CLI OpenClaw/вузол, Google Chrome, SoX, BlackHole 2ch і профіль Chrome з виконаним входом у Google.
- Не потрібні у VM: служба Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування постачальника моделі.
Установіть залежності у VM:
@ -145,7 +146,7 @@ Chrome приєднується як профіль Chrome, у якому вик
brew install blackhole-2ch sox
```
Перезавантажте VM після встановлення BlackHole, щоб macOS зробила `BlackHole 2ch` доступним:
Перезавантажте VM після встановлення BlackHole, щоб macOS показала `BlackHole 2ch`:
```bash
sudo reboot
@ -170,7 +171,7 @@ openclaw plugins enable google-meet
openclaw node run --host <gateway-host> --port 18789 --display-name parallels-macos
```
Якщо `<gateway-host>` — це IP-адреса в LAN і ви не використовуєте TLS, вузол відхиляє відкритий WebSocket, якщо ви явно не дозволите це для довіреної приватної мережі:
Якщо `<gateway-host>` — це LAN IP і ви не використовуєте TLS, вузол відхиляє незашифрований WebSocket, якщо ви явно не дозволите це для цієї довіреної приватної мережі:
```bash
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
@ -187,14 +188,14 @@ openclaw node restart
`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` — це змінна середовища процесу, а не параметр `openclaw.json`. `openclaw node install` зберігає її в середовищі LaunchAgent, коли вона присутня в команді встановлення.
Підтвердьте вузол із хоста Gateway:
Схваліть вузол із хоста Gateway:
```bash
openclaw devices list
openclaw devices approve <requestId>
```
Підтвердьте, що Gateway бачить вузол і що він рекламує і `googlemeet.chrome`, і можливість браузера/`browser.proxy`:
Підтвердьте, що Gateway бачить вузол і що він рекламує як `googlemeet.chrome`, так і можливість браузера/`browser.proxy`:
```bash
openclaw nodes status
@ -230,59 +231,72 @@ openclaw nodes status
}
```
Тепер приєднуйтеся як зазвичай із хоста Gateway:
Тепер приєднуйтеся звичайним способом із хоста Gateway:
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij
```
або попросіть агента використати інструмент `google_meet` з `transport: "chrome-node"`.
або попросіть агента використати інструмент `google_meet` із `transport: "chrome-node"`.
Для smoke-тесту однією командою, який створює або повторно використовує сеанс, промовляє відому фразу та виводить стан сеансу:
Для димового тесту однією командою, який створює або повторно використовує сеанс, промовляє відому фразу та виводить стан сеансу:
```bash
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij
```
Під час приєднання автоматизація браузера OpenClaw заповнює ім’я гостя, натискає Join/Ask to join і приймає початковий вибір Meet "Use microphone", коли з’являється цей запит. Під час створення зустрічі лише через браузер вона також може пройти далі через той самий запит без мікрофона, якщо Meet не показує кнопку використання мікрофона. Якщо в профілі браузера не виконано вхід, Meet очікує допуску від хоста, Chrome потребує дозволу на мікрофон/камеру або Meet завис на запиті, який автоматизація не змогла обробити, результат join/test-speech повідомляє `manualActionRequired: true` з `manualActionReason` і `manualActionMessage`. Агенти мають припинити повторні спроби приєднання, передати саме це повідомлення разом із поточними `browserUrl`/`browserTitle` і повторити спробу лише після завершення ручної дії в браузері.
Під час приєднання автоматизація браузера OpenClaw заповнює ім’я гостя, натискає Join/Ask to join і приймає початковий вибір Meet «Use microphone», коли з’являється цей запит. Під час створення зустрічі лише через браузер вона також може пройти повз той самий запит без мікрофона, якщо Meet не показує кнопку використання мікрофона.
Якщо у профілі браузера не виконано вхід, Meet очікує допуску від хоста, Chrome потребує дозволу на мікрофон/камеру або Meet завис на запиті, який автоматизація не змогла обробити, результат join/test-speech повідомляє
`manualActionRequired: true` з `manualActionReason` і
`manualActionMessage`. Агенти мають припинити повторні спроби приєднання, передати саме це повідомлення разом із поточними `browserUrl`/`browserTitle` і повторювати спробу лише після завершення ручної дії в браузері.
Якщо `chromeNode.node` пропущено, OpenClaw автоматично вибирає вузол лише тоді, коли підключено рівно один вузол, який рекламує і `googlemeet.chrome`, і керування браузером. Якщо підключено кілька придатних вузлів, установіть `chromeNode.node` на id вузла, відображуване ім’я або віддалену IP-адресу.
Якщо `chromeNode.node` пропущено, OpenClaw автоматично вибирає вузол лише тоді, коли рівно один підключений вузол рекламує і `googlemeet.chrome`, і керування браузером. Якщо підключено кілька придатних вузлів, установіть `chromeNode.node` на ідентифікатор вузла, відображуване ім’я або віддалену IP-адресу.
Поширені перевірки збоїв:
- `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"]`.
- `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 перед відкриттям нової, а створення зустрічі в браузері повторно використовує вкладку `https://meet.google.com/new`, що вже виконується, або вкладку запиту облікового запису Google перед відкриттям ще однієї.
- Немає аудіо: у Meet спрямуйте мікрофон/динамік через шлях віртуального аудіопристрою, який використовує OpenClaw; для чистого дуплексного аудіо використовуйте окремі віртуальні пристрої або маршрутизацію на кшталт Loopback.
- Chrome відкривається, але не може приєднатися: виконайте вхід у профіль браузера всередині VM або залиште встановленим `chrome.guestName` для гостьового приєднання. Автоматичне гостьове приєднання використовує автоматизацію браузера OpenClaw через проксі браузера вузла; переконайтеся, що конфігурація браузера вузла вказує на потрібний профіль, наприклад
`browser.defaultProfile: "user"` або іменований профіль наявного сеансу.
- Дубльовані вкладки Meet: залиште увімкненим `chrome.reuseExistingTab: true`. OpenClaw активує наявну вкладку для того самого URL Meet перед відкриттям нової, а створення зустрічі в браузері повторно використовує вкладку `https://meet.google.com/new`, що вже в процесі, або вкладку запиту облікового запису Google перед відкриттям ще однієї.
- Немає аудіо: у Meet спрямуйте мікрофон/динамік через шлях віртуального аудіопристрою, який використовує OpenClaw; для чистого дуплексного аудіо використовуйте окремі віртуальні пристрої або маршрутизацію в стилі Loopback.
## Примітки щодо встановлення
Типовий режим realtime у Chrome використовує два зовнішні інструменти:
Стандартний режим `realtime` для Chrome використовує два зовнішні інструменти:
- `sox`: утиліта командного рядка для аудіо. Plugin використовує її команди `rec` і `play` для типового аудіомоста 8 кГц G.711 mu-law.
- `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій `BlackHole 2ch`, через який Chrome/Meet можуть маршрутизувати звук.
- `sox`: утиліта командного рядка для аудіо. Plugin використовує її команди `rec` і `play` для стандартного аудіомоста G.711 mu-law на 8 кГц.
- `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/аудіо працюють на підключеному вузлі, наприклад у 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.
Використовуйте його, коли участь через Chrome недоступна або коли вам потрібен
резервний варіант із телефонним дозвоном. Google Meet має показувати номер для
телефонного дозвону та PIN для зустрічі; OpenClaw не визначає їх зі сторінки Meet.
Увімкніть Plugin Voice Call на хості Gateway, а не на вузлі Chrome:
@ -309,7 +323,8 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome
}
```
Надайте облікові дані Twilio через середовище або конфігурацію. Середовище дозволяє не зберігати секрети в `openclaw.json`:
Надайте облікові дані Twilio через середовище або конфігурацію. Середовище
дозволяє не зберігати секрети в `openclaw.json`:
```bash
export TWILIO_ACCOUNT_SID=AC...
@ -317,7 +332,8 @@ export TWILIO_AUTH_TOKEN=...
export TWILIO_FROM_NUMBER=+15550001234
```
Перезапустіть або перезавантажте Gateway після ввімкнення `voice-call`; зміни конфігурації Plugin не з’являються в уже запущеному процесі Gateway, доки його не буде перезавантажено.
Перезапустіть або перезавантажте Gateway після ввімкнення `voice-call`; зміни
конфігурації Plugin не з’являються в уже запущеному процесі Gateway, доки він не перезавантажиться.
Потім перевірте:
@ -327,7 +343,8 @@ openclaw plugins list | grep -E 'google-meet|voice-call'
openclaw googlemeet setup
```
Коли делегування Twilio підключено, `googlemeet setup` містить успішні перевірки `twilio-voice-call-plugin` і `twilio-voice-call-credentials`.
Коли делегування Twilio налаштовано, `googlemeet setup` включає успішні
перевірки `twilio-voice-call-plugin` і `twilio-voice-call-credentials`.
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
@ -336,7 +353,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 \
@ -347,21 +364,30 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
## OAuth і попередня перевірка
OAuth не є обов’язковим для створення посилання Meet, оскільки `googlemeet create` може використовувати резервний варіант через автоматизацію браузера. Налаштуйте OAuth, якщо вам потрібні офіційне створення через API, визначення простору або перевірки попереднього запуску Meet Media API.
OAuth є необов’язковим для створення посилання Meet, оскільки `googlemeet create` може
використовувати резервний варіант через автоматизацію браузера. Налаштуйте OAuth, якщо вам потрібні офіційне створення через API,
визначення простору або перевірки перед запуском Meet Media API.
Доступ до Google Meet API спочатку використовує персональний клієнт OAuth. Налаштуйте `oauth.clientId` і, за бажанням, `oauth.clientSecret`, а потім виконайте:
Доступ до Google Meet API спочатку використовує персональний клієнт OAuth. Налаштуйте
`oauth.clientId` і, за потреби, `oauth.clientSecret`, а потім виконайте:
```bash
openclaw googlemeet auth login --json
```
Команда виводить блок конфігурації `oauth` з токеном оновлення. Вона використовує PKCE, локальний callback за адресою `http://localhost:8085/oauth2callback` і ручний потік копіювання/вставлення з `--manual`.
Команда виводить блок конфігурації `oauth` із refresh token. Вона використовує PKCE,
локальний callback на `http://localhost:8085/oauth2callback` і ручний
потік копіювання/вставлення з `--manual`.
Згода OAuth включає створення просторів Meet, доступ на читання простору Meet і доступ на читання медіаданих конференцій Meet. Якщо ви проходили автентифікацію до появи підтримки створення зустрічей, повторно виконайте `openclaw googlemeet auth login --json`, щоб токен оновлення мав область дії `meetings.space.created`.
Згода OAuth включає створення простору Meet, доступ на читання простору Meet і доступ
на читання медіаданих конференції Meet. Якщо ви виконували автентифікацію до того, як з’явилася
підтримка створення зустрічей, повторно виконайте `openclaw googlemeet auth login --json`, щоб refresh token мав область дії `meetings.space.created`.
Для резервного варіанта через браузер облікові дані OAuth не потрібні. У цьому режимі автентифікація Google походить із профілю Chrome, у якому виконано вхід, на вибраному вузлі, а не з конфігурації OpenClaw.
Для резервного варіанту через браузер облікові дані OAuth не потрібні. У цьому режимі Google
автентифікація береться зі профілю Chrome із виконаним входом на вибраному вузлі, а не з
конфігурації OpenClaw.
Як резервні варіанти приймаються такі змінні середовища:
Ці змінні середовища приймаються як резервні:
- `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID`
- `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` або `GOOGLE_MEET_CLIENT_SECRET`
@ -372,7 +398,7 @@ openclaw googlemeet auth login --json
- `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
@ -390,9 +416,13 @@ openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet create
```
Команда виводить новий `meeting uri`, джерело та сеанс приєднання. За наявності облікових даних OAuth вона використовує офіційний Google Meet API. Без облікових даних OAuth вона використовує профіль браузера, у якому виконано вхід, на закріпленому вузлі Chrome як резервний варіант. Агенти можуть використовувати інструмент `google_meet` з `action: "create"`, щоб створити та приєднатися за один крок. Для створення лише URL передайте `"join": false`.
Команда виводить новий `meeting uri`, джерело та сеанс приєднання. За наявності
облікових даних OAuth вона використовує офіційний Google Meet API. Без облікових даних OAuth вона
використовує профіль браузера із виконаним входом на закріпленому вузлі Chrome як резервний варіант. Агенти можуть
використовувати інструмент `google_meet` з `action: "create"`, щоб створити й приєднатися за один
крок. Щоб лише створити URL, передайте `"join": false`.
Приклад JSON-виводу для резервного варіанта через браузер:
Приклад виводу JSON для резервного варіанта через браузер:
```json
{
@ -412,7 +442,31 @@ openclaw googlemeet create
}
```
Приклад JSON-виводу для створення через API:
Якщо резервний варіант через браузер натрапляє на вхід у Google або блокування дозволів Meet до того,
як може створити URL, метод Gateway повертає відповідь із помилкою, а
інструмент `google_meet` повертає структуровані деталі замість простого рядка:
```json
{
"source": "browser",
"error": "google-login-required: Увійдіть у Google в профілі браузера OpenClaw, а потім повторіть створення зустрічі.",
"manualActionRequired": true,
"manualActionReason": "google-login-required",
"manualActionMessage": "Увійдіть у Google в профілі браузера OpenClaw, а потім повторіть створення зустрічі.",
"browser": {
"nodeId": "ba0f4e4bc...",
"targetId": "tab-1",
"browserUrl": "https://accounts.google.com/signin",
"browserTitle": "Sign in - Google Accounts"
}
}
```
Коли агент бачить `manualActionRequired: true`, він має передати
`manualActionMessage` разом із контекстом вузла/вкладки браузера та припинити відкривати нові
вкладки Meet, доки оператор не завершить крок у браузері.
Приклад виводу JSON для створення через API:
```json
{
@ -433,13 +487,21 @@ openclaw googlemeet create
}
```
Створення Meet типово також приєднує до нього. Транспорт Chrome або Chrome-node усе одно потребує профілю Google Chrome, у якому виконано вхід, щоб приєднатися через браузер. Якщо в профілі не виконано вхід, OpenClaw повідомляє `manualActionRequired: true` або помилку резервного варіанта браузера й просить оператора завершити вхід у Google перед повторною спробою.
Створення Meet за замовчуванням також приєднує до нього. Транспорт Chrome або Chrome-node однаково
потребує профілю Google Chrome із виконаним входом, щоб приєднатися через браузер. Якщо
у профілі виконано вихід, OpenClaw повідомляє `manualActionRequired: true` або
помилку резервного варіанта браузера та просить оператора завершити вхід у Google перед
повторною спробою.
Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud project, OAuth principal і учасники зустрічі зареєстровані в Google Workspace Developer Preview Program для медіа-API Meet.
Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud
project, принципал OAuth і учасники зустрічі зареєстровані в Google
Workspace Developer Preview Program для Meet media APIs.
## Конфігурація
Поширеному шляху realtime через Chrome потрібні лише ввімкнений Plugin, BlackHole, SoX і ключ постачальника голосу реального часу для бекенда. 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
@ -463,22 +525,30 @@ export GEMINI_API_KEY=...
}
```
Типові значення:
Значення за замовчуванням:
- `defaultTransport: "chrome"`
- `defaultMode: "realtime"`
- `chromeNode.node`: необов’язковий id/ім’я/IP вузла для `chrome-node`
- `chromeNode.node`: необов’язковий ідентифікатор/ім’я/IP вузла для `chrome-node`
- `chrome.audioBackend: "blackhole-2ch"`
- `chrome.guestName: "OpenClaw Agent"`: ім’я, яке використовується на екрані гостя Meet, коли вхід не виконано
- `chrome.autoJoin: true`: best-effort заповнення імені гостя та натискання 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
- `chrome.guestName: "OpenClaw Agent"`: ім’я, яке використовується на екрані гостя Meet
без входу
- `chrome.autoJoin: true`: заповнення імені гостя та натискання Join Now у режимі best-effort
через автоматизацію браузера OpenClaw на `chrome-node`
- `chrome.reuseExistingTab: true`: активувати наявну вкладку Meet замість
відкриття дублікатів
- `chrome.waitForInCallMs: 20000`: очікувати, поки вкладка Meet повідомить про перебування у виклику,
перш ніж буде запущено вступ у `realtime`
- `chrome.audioInputCommand`: команда SoX `rec`, яка записує аудіо G.711 mu-law 8 кГц
у stdout
- `chrome.audioOutputCommand`: команда SoX `play`, яка читає аудіо G.711 mu-law 8 кГц
із 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`
підключається; установіть `""`, щоб приєднуватися беззвучно
Необов’язкові перевизначення:
@ -524,7 +594,10 @@ export GEMINI_API_KEY=...
}
```
`voiceCall.enabled` типово має значення `true`; із транспортом Twilio він делегує фактичний PSTN-виклик і DTMF Plugin Voice Call. Якщо `voice-call` не ввімкнено, Google Meet все одно може перевірити та зафіксувати план дозвону, але не може виконати виклик Twilio.
`voiceCall.enabled` за замовчуванням має значення `true`; з транспортом Twilio він делегує
фактичний PSTN-виклик і DTMF Plugin Voice Call. Якщо `voice-call` не
увімкнено, Google Meet усе ще може перевіряти та записувати план набору, але не може
здійснити виклик Twilio.
## Інструмент
@ -539,17 +612,26 @@ export GEMINI_API_KEY=...
}
```
Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. Використовуйте `transport: "chrome-node"`, коли Chrome працює на підключеному вузлі, наприклад у VM Parallels. В обох випадках модель realtime і `openclaw_agent_consult` працюють на хості Gateway, тому облікові дані моделі залишаються там.
Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. Використовуйте
`transport: "chrome-node"`, коли Chrome працює на підключеному вузлі, наприклад у Parallels
VM. В обох випадках модель `realtime` і `openclaw_agent_consult` працюють на
хості Gateway, тож облікові дані моделі залишаються там.
Використовуйте `action: "status"`, щоб перелічити активні сеанси або перевірити id сеансу. Використовуйте `action: "speak"` із `sessionId` і `message`, щоб змусити агента realtime негайно заговорити. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сеанс, відтворити відому фразу та повернути стан `inCall`, якщо хост Chrome може його повідомити. Використовуйте `action: "leave"`, щоб позначити сеанс як завершений.
Використовуйте `action: "status"`, щоб перелічити активні сеанси або переглянути ідентифікатор сеансу. Використовуйте
`action: "speak"` із `sessionId` і `message`, щоб агент `realtime`
негайно заговорив. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сеанс,
запустити відому фразу та повернути стан `inCall`, коли хост Chrome може про це повідомити. Використовуйте
`action: "leave"`, щоб позначити сеанс як завершений.
`status` містить стан Chrome, якщо він доступний:
`status` включає стан Chrome, коли він доступний:
- `inCall`: схоже, що Chrome перебуває всередині виклику Meet
- `micMuted`: best-effort стан мікрофона Meet
- `manualActionRequired` / `manualActionReason` / `manualActionMessage`: профілю браузера потрібен ручний вхід, допуск від хоста Meet, дозволи або відновлення керування браузером, перш ніж запрацює мовлення
- `providerConnected` / `realtimeReady`: стан голосового моста realtime
- `lastInputAt` / `lastOutputAt`: коли востаннє аудіо надходило до моста або надсилалося з нього
- `inCall`: Chrome, схоже, перебуває всередині виклику Meet
- `micMuted`: стан мікрофона Meet у режимі best-effort
- `manualActionRequired` / `manualActionReason` / `manualActionMessage`: профілю
браузера потрібен ручний вхід, допуск від хоста Meet, дозволи або відновлення
керування браузером, перш ніж запрацює мовлення
- `providerConnected` / `realtimeReady`: стан мосту голосу `realtime`
- `lastInputAt` / `lastOutputAt`: час останнього аудіо, отриманого мостом або надісланого до нього
```json
{
@ -559,27 +641,36 @@ export GEMINI_API_KEY=...
}
```
## Консультація з агентом realtime
## Консультація агента в режимі реального часу
Режим realtime для Chrome оптимізований для живого голосового циклу. Постачальник голосу реального часу чує аудіо зустрічі й говорить через налаштований аудіоміст. Коли моделі realtime потрібні глибші міркування, поточна інформація або звичайні інструменти OpenClaw, вона може викликати `openclaw_agent_consult`.
Режим `realtime` для Chrome оптимізовано для живого голосового циклу. Постачальник голосу
в реальному часі чує аудіо зустрічі та говорить через налаштований аудіоміст.
Коли моделі `realtime` потрібні глибші міркування, актуальна інформація або звичайні
інструменти OpenClaw, вона може викликати `openclaw_agent_consult`.
Інструмент consult запускає звичайного агента OpenClaw у фоновому режимі з контекстом недавньої розшифровки зустрічі й повертає стислу усну відповідь у голосовий сеанс realtime. Потім голосова модель може озвучити цю відповідь назад у зустріч. Він використовує той самий спільний інструмент консультації realtime, що й Voice Call.
Інструмент консультації запускає звичайного агента OpenClaw за лаштунками з контекстом
недавньої транскрипції зустрічі та повертає стислу усну відповідь до голосового сеансу `realtime`. Потім голосова модель може озвучити цю відповідь назад у зустріч.
Він використовує той самий спільний інструмент консультації в реальному часі, що й Voice Call.
`realtime.toolPolicy` керує запуском consult:
`realtime.toolPolicy` керує запуском консультації:
- `safe-read-only`: відкривати інструмент consult і обмежувати звичайного агента інструментами `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і `memory_get`.
- `owner`: відкривати інструмент consult і дозволяти звичайному агенту використовувати звичайну політику інструментів агента.
- `none`: не відкривати інструмент consult для голосової моделі realtime.
- `safe-read-only`: показати інструмент консультації та обмежити звичайного агента
до `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і
`memory_get`.
- `owner`: показати інструмент консультації та дозволити звичайному агенту використовувати
стандартну політику інструментів агента.
- `none`: не показувати інструмент консультації моделі голосу `realtime`.
Ключ сеансу consult має область дії на рівні сеансу Meet, тому подальші виклики consult можуть повторно використовувати попередній контекст consult під час тієї самої зустрічі.
Ключ сеансу консультації обмежується окремим сеансом Meet, тому наступні виклики консультації
можуть повторно використовувати попередній контекст консультації під час тієї самої зустрічі.
Щоб примусово виконати усну перевірку готовності після того, як Chrome повністю приєднається до виклику:
Щоб примусово виконати усну перевірку готовності після того, як Chrome повністю приєднався до виклику:
```bash
openclaw googlemeet speak meet_... "Say exactly: I'm here and listening."
```
Для повного smoke-тесту приєднання та мовлення:
Для повного димового тесту приєднання й мовлення:
```bash
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \
@ -587,9 +678,9 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \
--message "Say exactly: I'm here and listening."
```
## Контрольний список live-тесту
## Контрольний список живого тестування
Використовуйте цю послідовність, перш ніж передати зустріч агенту без нагляду:
Використовуйте цю послідовність перед передаванням зустрічі агенту без нагляду:
```bash
openclaw googlemeet setup
@ -602,12 +693,15 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \
Очікуваний стан Chrome-node:
- `googlemeet setup` повністю зелений.
- `googlemeet setup` містить `chrome-node-connected`, коли Chrome-node є типовим транспортом або вузол закріплено.
- `googlemeet setup` включає `chrome-node-connected`, коли Chrome-node є
стандартним транспортом або коли вузол закріплено.
- `nodes status` показує, що вибраний вузол підключено.
- Вибраний вузол рекламує і `googlemeet.chrome`, і `browser.proxy`.
- Вкладка Meet приєднується до виклику, а `test-speech` повертає стан Chrome з `inCall: true`.
- Вкладка Meet приєднується до виклику, а `test-speech` повертає стан Chrome з
`inCall: true`.
Для віддаленого хоста Chrome, такого як macOS VM у Parallels, це найкоротша безпечна перевірка після оновлення Gateway або VM:
Для віддаленого хоста Chrome, наприклад macOS VM у Parallels, це найкоротша
безпечна перевірка після оновлення Gateway або VM:
```bash
openclaw googlemeet setup
@ -618,9 +712,11 @@ openclaw nodes invoke \
--params '{"action":"setup"}'
```
Це доводить, що Plugin Gateway завантажено, вузол VM підключено з поточним токеном, а аудіоміст Meet доступний ще до того, як агент відкриє справжню вкладку зустрічі.
Це доводить, що Plugin Gateway завантажено, вузол VM підключено з
поточним токеном, а аудіоміст Meet доступний до того, як агент відкриє
справжню вкладку зустрічі.
Для smoke-тесту Twilio використовуйте зустріч, яка надає дані для телефонного дозвону:
Для димового тесту Twilio використовуйте зустріч, яка показує дані для телефонного дозвону:
```bash
openclaw googlemeet setup
@ -632,12 +728,13 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
Очікуваний стан Twilio:
- `googlemeet setup` містить зелені перевірки `twilio-voice-call-plugin` і `twilio-voice-call-credentials`.
- `googlemeet setup` включає зелені перевірки `twilio-voice-call-plugin` і
`twilio-voice-call-credentials`.
- `voicecall` доступний у CLI після перезавантаження Gateway.
- Повернений сеанс має `transport: "twilio"` і `twilio.voiceCallId`.
- Повернутий сеанс має `transport: "twilio"` і `twilio.voiceCallId`.
- `googlemeet leave <sessionId>` завершує делегований голосовий виклик.
## Усунення несправностей
## Усунення неполадок
### Агент не бачить інструмент Google Meet
@ -648,7 +745,8 @@ openclaw plugins list | grep google-meet
openclaw googlemeet setup
```
Якщо ви щойно змінили `plugins.entries.google-meet`, перезапустіть або перезавантажте Gateway. Запущений агент бачить лише ті інструменти Plugin, які зареєстровані поточним процесом Gateway.
Якщо ви щойно змінили `plugins.entries.google-meet`, перезапустіть або перезавантажте Gateway.
Запущений агент бачить лише інструменти Plugin, зареєстровані поточним процесом Gateway.
### Немає підключеного вузла з підтримкою Google Meet
@ -661,7 +759,7 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macos
```
На хості Gateway підтвердьте вузол і перевірте команди:
На хості Gateway схваліть вузол і перевірте команди:
```bash
openclaw devices list
@ -669,7 +767,7 @@ openclaw devices approve <requestId>
openclaw nodes status
```
Вузол має бути підключений і містити `googlemeet.chrome` та `browser.proxy`.
Вузол має бути підключений і містити `googlemeet.chrome` плюс `browser.proxy`.
Конфігурація Gateway має дозволяти ці команди вузла:
```json5
@ -682,7 +780,9 @@ openclaw nodes status
}
```
Якщо `googlemeet setup` не проходить перевірку `chrome-node-connected` або в журналі Gateway повідомляється про `gateway token mismatch`, перевстановіть або перезапустіть вузол із поточним токеном Gateway. Для Gateway у LAN це зазвичай означає:
Якщо `googlemeet setup` не проходить перевірку `chrome-node-connected` або журнал Gateway повідомляє
`gateway token mismatch`, повторно встановіть або перезапустіть вузол із поточним токеном Gateway.
Для Gateway у LAN це зазвичай означає:
```bash
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
@ -693,7 +793,7 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
--force
```
Потім перезавантажте службу вузла і знову виконайте:
Потім перезавантажте службу вузла й повторно виконайте:
```bash
openclaw googlemeet setup
@ -702,62 +802,102 @@ openclaw nodes status --connected
### Браузер відкривається, але агент не може приєднатися
Запустіть `googlemeet test-speech` і перевірте повернений стан Chrome. Якщо там указано `manualActionRequired: true`, покажіть оператору `manualActionMessage` і припиніть повторні спроби, доки дію в браузері не буде завершено.
Запустіть `googlemeet test-speech` і перевірте повернутий стан Chrome. Якщо він
повідомляє `manualActionRequired: true`, покажіть оператору `manualActionMessage`
і припиніть повторні спроби, доки дію в браузері не буде завершено.
Поширені ручні дії:
- Виконати вхід у профіль Chrome.
- Увійти в профіль Chrome.
- Допустити гостя з облікового запису хоста Meet.
- Надати Chrome дозволи на мікрофон/камеру, коли з’являється нативний запит дозволів Chrome.
- Надати Chrome дозволи на мікрофон/камеру, коли з’являється власний запит
дозволу Chrome.
- Закрити або виправити зависле діалогове вікно дозволів Meet.
Не повідомляйте "вхід не виконано" лише тому, що Meet показує "Do you want people to hear you in the meeting?". Це проміжний екран вибору аудіо в Meet; OpenClaw натискає **Use microphone** через автоматизацію браузера, коли це можливо, і продовжує чекати на справжній стан зустрічі. Для резервного варіанта створення лише через браузер OpenClaw може натиснути **Continue without microphone**, оскільки для створення URL аудіошлях realtime не потрібен.
Не повідомляйте «не виконано вхід» лише тому, що Meet показує «Do you want people to
hear you in the meeting?». Це проміжний екран вибору аудіо в Meet; OpenClaw
натискає **Use microphone** через автоматизацію браузера, коли це можливо, і продовжує
очікувати на реальний стан зустрічі. Для резервного варіанта браузера лише зі створенням OpenClaw
може натиснути **Continue without microphone**, оскільки створення URL не потребує
аудіошляху `realtime`.
### Не вдається створити зустріч
`googlemeet create` спочатку використовує кінцеву точку Google Meet API `spaces.create`, коли налаштовано облікові дані OAuth. Без облікових даних OAuth він переходить до резервного варіанта через браузер закріпленого вузла Chrome. Підтвердьте таке:
`googlemeet create` спочатку використовує ендпоінт Google Meet API `spaces.create`,
коли налаштовано облікові дані OAuth. Без облікових даних OAuth він переходить до
резервного варіанта через браузер закріпленого вузла Chrome. Підтвердьте:
- Для створення через API: налаштовано `oauth.clientId` і `oauth.refreshToken`, або присутні відповідні змінні середовища `OPENCLAW_GOOGLE_MEET_*`.
- Для створення через API: токен оновлення було створено після додавання підтримки створення. У старих токенах може бракувати області дії `meetings.space.created`; повторно виконайте `openclaw googlemeet auth login --json` і оновіть конфігурацію Plugin.
- Для резервного варіанта через браузер: `defaultTransport: "chrome-node"` і `chromeNode.node` вказують на підключений вузол із `browser.proxy` і `googlemeet.chrome`.
- Для резервного варіанта через браузер: у профілі OpenClaw Chrome на цьому вузлі виконано вхід у Google, і він може відкрити `https://meet.google.com/new`.
- Для резервного варіанта через браузер: повторні спроби повторно використовують наявну вкладку `https://meet.google.com/new` або вкладку запиту облікового запису Google перед відкриттям нової вкладки. Якщо агент перевищив час очікування, повторіть виклик інструмента, а не відкривайте вручну ще одну вкладку Meet.
- Для резервного варіанта через браузер: якщо Meet показує "Do you want people to hear you in the meeting?", залиште вкладку відкритою. OpenClaw має натиснути **Use microphone** або, для резервного варіанта лише створення, **Continue without microphone** через автоматизацію браузера і продовжити очікування згенерованої URL-адреси Meet. Якщо це неможливо, у помилці має згадуватися `meet-audio-choice-required`, а не `google-login-required`.
- Для створення через API: налаштовано `oauth.clientId` і `oauth.refreshToken`,
або присутні відповідні змінні середовища `OPENCLAW_GOOGLE_MEET_*`.
- Для створення через API: refresh token було створено після додавання
підтримки створення. У старіших токенах може бракувати області дії `meetings.space.created`; повторно виконайте
`openclaw googlemeet auth login --json` і оновіть конфігурацію Plugin.
- Для резервного варіанта через браузер: `defaultTransport: "chrome-node"` і
`chromeNode.node` вказують на підключений вузол із `browser.proxy` і
`googlemeet.chrome`.
- Для резервного варіанта через браузер: у профілі Chrome OpenClaw на цьому вузлі виконано вхід
у Google, і він може відкрити `https://meet.google.com/new`.
- Для резервного варіанта через браузер: повторні спроби повторно використовують наявну вкладку `https://meet.google.com/new`
або вкладку запиту облікового запису Google перед відкриттям нової вкладки. Якщо в агента стався тайм-аут,
повторіть виклик інструмента, а не відкривайте вручну ще одну вкладку Meet.
- Для резервного варіанта через браузер: якщо інструмент повертає `manualActionRequired: true`, використовуйте
повернуті `browser.nodeId`, `browser.targetId`, `browserUrl` і
`manualActionMessage`, щоб спрямувати оператора. Не повторюйте спроби в циклі, доки цю
дію не буде завершено.
- Для резервного варіанта через браузер: якщо Meet показує «Do you want people to hear you in the
meeting?», залиште вкладку відкритою. OpenClaw має натиснути **Use microphone** або, для
резервного варіанта лише зі створенням, **Continue without microphone** через автоматизацію
браузера й продовжити очікувати на згенерований URL Meet. Якщо це неможливо, у
помилці має згадуватися `meet-audio-choice-required`, а не `google-login-required`.
### Агент приєднується, але не говорить
Перевірте шлях realtime:
Перевірте шлях `realtime`:
```bash
openclaw googlemeet setup
openclaw googlemeet doctor
```
Використовуйте `mode: "realtime"` для прослуховування/зворотного мовлення. `mode: "transcribe"` навмисно не запускає дуплексний голосовий міст realtime.
Використовуйте `mode: "realtime"` для прослуховування/відповіді голосом. `mode: "transcribe"` навмисно
не запускає дуплексний голосовий міст `realtime`.
Також перевірте:
- На хості Gateway доступний ключ постачальника realtime, наприклад `OPENAI_API_KEY` або `GEMINI_API_KEY`.
- `BlackHole 2ch` видимий на хості Chrome.
- На хості Gateway доступний ключ постачальника `realtime`, наприклад
`OPENAI_API_KEY` або `GEMINI_API_KEY`.
- `BlackHole 2ch` видно на хості Chrome.
- `rec` і `play` існують на хості Chrome.
- Мікрофон і динамік Meet спрямовано через шлях віртуального аудіо, який використовує OpenClaw.
- Мікрофон і динамік Meet спрямовано через шлях віртуального аудіо, який використовує
OpenClaw.
`googlemeet doctor [session-id]` виводить сеанс, вузол, стан перебування у виклику, причину ручної дії, підключення постачальника realtime, `realtimeReady`, активність аудіовходу/аудіовиходу, часові позначки останнього аудіо, лічильники байтів і URL браузера. Використовуйте `googlemeet status [session-id]`, коли вам потрібен сирий JSON.
`googlemeet doctor [session-id]` виводить сеанс, вузол, стан перебування у виклику,
причину ручної дії, підключення постачальника `realtime`, `realtimeReady`, активність
аудіовходу/виходу, часові мітки останнього аудіо, лічильники байтів і URL браузера.
Використовуйте `googlemeet status [session-id]`, коли вам потрібен сирий JSON.
Якщо в агента перевищився час очікування і ви бачите, що вкладка Meet уже відкрита, перевірте цю вкладку, не відкриваючи нову:
Якщо в агента стався тайм-аут і ви бачите вже відкриту вкладку Meet, перевірте цю вкладку
без відкриття ще однієї:
```bash
openclaw googlemeet recover-tab
openclaw googlemeet recover-tab https://meet.google.com/abc-defg-hij
```
Еквівалентна дія інструмента — `recover_current_tab`. Вона переводить фокус на наявну вкладку Meet на налаштованому вузлі Chrome і перевіряє її. Вона не відкриває нову вкладку і не створює новий сеанс; вона повідомляє про поточний блокер, наприклад вхід, допуск, дозволи або стан вибору аудіо. Команда CLI звертається до налаштованого Gateway, тому Gateway має бути запущений, а вузол Chrome — підключений.
Еквівалентна дія інструмента — `recover_current_tab`. Вона фокусує та перевіряє
наявну вкладку Meet на налаштованому вузлі Chrome. Вона не відкриває нову вкладку і не
створює новий сеанс; вона повідомляє про поточний блокер, наприклад вхід, допуск,
дозволи або стан вибору аудіо. Команда CLI звертається до налаштованого
Gateway, тому Gateway має працювати, а вузол Chrome має бути підключений.
### Не проходять перевірки налаштування Twilio
`twilio-voice-call-plugin` не проходить перевірку, коли `voice-call` не дозволено або не ввімкнено. Додайте його до `plugins.allow`, увімкніть `plugins.entries.voice-call` і перезавантажте Gateway.
`twilio-voice-call-plugin` не проходить, коли `voice-call` не дозволено або не ввімкнено.
Додайте його до `plugins.allow`, увімкніть `plugins.entries.voice-call` і перезавантажте
Gateway.
`twilio-voice-call-credentials` не проходить перевірку, коли в бекенді Twilio відсутні account SID, auth token або номер абонента. Установіть їх на хості Gateway:
`twilio-voice-call-credentials` не проходить, коли в бекенді Twilio відсутні account
SID, auth token або номер абонента. Установіть їх на хості Gateway:
```bash
export TWILIO_ACCOUNT_SID=AC...
@ -773,13 +913,14 @@ openclaw voicecall setup
openclaw voicecall smoke
```
`voicecall smoke` типово перевіряє лише готовність. Щоб виконати dry-run для конкретного номера:
`voicecall smoke` за замовчуванням перевіряє лише готовність. Щоб виконати dry-run для конкретного номера:
```bash
openclaw voicecall smoke --to "+15555550123"
```
Додавайте `--yes` лише тоді, коли ви свідомо хочете виконати реальний вихідний сповіщувальний виклик:
Додавайте `--yes` лише тоді, коли ви свідомо хочете здійснити реальний вихідний
виклик-сповіщення:
```bash
openclaw voicecall smoke --to "+15555550123" --yes
@ -787,7 +928,8 @@ openclaw voicecall smoke --to "+15555550123" --yes
### Виклик Twilio починається, але ніколи не входить у зустріч
Підтвердьте, що подія Meet надає дані для телефонного дозвону. Передайте точний номер дозвону та PIN або спеціальну послідовність DTMF:
Підтвердьте, що подія Meet показує дані телефонного дозвону. Передайте точний номер
для дозвону та PIN або спеціальну послідовність DTMF:
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
@ -796,23 +938,34 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
--dtmf-sequence ww123456#
```
Використовуйте початкові `w` або коми в `--dtmf-sequence`, якщо постачальнику потрібна пауза перед введенням PIN.
Використовуйте початковий `w` або коми в `--dtmf-sequence`, якщо постачальнику потрібна пауза
перед введенням PIN.
## Примітки
Офіційний медіа-API Google Meet орієнтований на приймання, тому для мовлення у виклику Meet усе одно потрібен шлях через учасника. Цей Plugin зберігає цю межу видимою: Chrome відповідає за участь через браузер і локальну маршрутизацію аудіо; Twilio відповідає за участь через телефонний дозвін.
Офіційний медіа-API Google Meet орієнтований на приймання, тому мовлення у виклику Meet
все одно потребує шляху участі. Цей Plugin залишає цю межу видимою:
Chrome обробляє участь через браузер і локальну маршрутизацію аудіо; Twilio обробляє
участь через телефонний дозвін.
Режиму realtime для Chrome потрібне одне з такого:
Режим `realtime` для Chrome потребує одного з варіантів:
- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw керує мостом моделі realtime і передає аудіо 8 кГц G.711 mu-law між цими командами та вибраним постачальником голосу realtime.
- `chrome.audioBridgeCommand`: зовнішня команда моста повністю керує локальним аудіошляхом і має завершитися після запуску або перевірки свого демона.
- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw керує
мостом моделі `realtime` і передає аудіо G.711 mu-law 8 кГц між цими
командами та вибраним постачальником голосу `realtime`.
- `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)
- [Plugin Voice Call](/uk/plugins/voice-call)
- [Режим Talk](/uk/nodes/talk)
- [Створення Plugin](/uk/plugins/building-plugins)

View File

@ -1,21 +1,21 @@
---
read_when:
- Ви хочете здійснити вихідний голосовий виклик з OpenClaw
- Ви хочете здійснити вихідний голосовий дзвінок з OpenClaw
- Ви налаштовуєте або розробляєте плагін voice-call
summary: 'Плагін Voice Call: вихідні та вхідні виклики через Twilio/Telnyx/Plivo (установлення плагіна + конфігурація + CLI)'
title: Плагін Voice Call
summary: 'Плагін Voice Call: вихідні + вхідні дзвінки через Twilio/Telnyx/Plivo (встановлення плагіна + конфігурація + CLI)'
title: Плагін Voice call
x-i18n:
generated_at: "2026-04-25T02:41:18Z"
generated_at: "2026-04-25T04:07:32Z"
model: gpt-5.4
provider: openai
source_hash: 2a498c1b34e8aa19a2a966560c95bf4593bbf844a6163831e933f33199ad848d
source_hash: d4615dd2c4e8431ebdff7d79a5323951fec7a9e14947260ef741adeef0907002
source_path: plugins/voice-call.md
workflow: 15
---
# Voice Call (плагін)
Голосові виклики для OpenClaw через плагін. Підтримує вихідні сповіщення та
Голосові дзвінки для OpenClaw через плагін. Підтримує вихідні сповіщення та
багатоходові розмови з політиками вхідних викликів.
Поточні провайдери:
@ -25,23 +25,23 @@ x-i18n:
- `plivo` (Voice API + XML transfer + GetInput speech)
- `mock` (розробка/без мережі)
Коротка ментальна модель:
Швидка ментальна модель:
- Установіть плагін
- Встановіть плагін
- Перезапустіть Gateway
- Налаштуйте в `plugins.entries.voice-call.config`
- Використовуйте `openclaw voicecall ...` або tool `voice_call`
- Використовуйте `openclaw voicecall ...` або інструмент `voice_call`
## Де це працює (локально чи віддалено)
Плагін Voice Call працює **всередині процесу Gateway**.
Якщо ви використовуєте віддалений Gateway, установіть і налаштуйте плагін на
Якщо ви використовуєте віддалений Gateway, встановіть/налаштуйте плагін на
**машині, де працює Gateway**, а потім перезапустіть Gateway, щоб завантажити його.
## Установлення
## Встановлення
### Варіант A: установлення з npm (рекомендовано)
### Варіант A: встановити з npm (рекомендовано)
```bash
openclaw plugins install @openclaw/voice-call
@ -49,7 +49,7 @@ openclaw plugins install @openclaw/voice-call
Після цього перезапустіть Gateway.
### Варіант B: установлення з локальної папки (розробка, без копіювання)
### Варіант B: встановити з локальної папки (розробка, без копіювання)
```bash
PLUGIN_SRC=./path/to/local/voice-call-plugin
@ -61,7 +61,7 @@ cd "$PLUGIN_SRC" && pnpm install
## Конфігурація
Установіть конфігурацію в `plugins.entries.voice-call.config`:
Задайте конфігурацію в `plugins.entries.voice-call.config`:
```json5
{
@ -83,7 +83,7 @@ cd "$PLUGIN_SRC" && pnpm install
apiKey: "...",
connectionId: "...",
// Публічний ключ webhook Telnyx з Telnyx Mission Control Portal
// (рядок Base64; також можна встановити через TELNYX_PUBLIC_KEY).
// (рядок Base64; також можна задати через TELNYX_PUBLIC_KEY).
publicKey: "...",
},
@ -104,7 +104,7 @@ cd "$PLUGIN_SRC" && pnpm install
trustedProxyIPs: ["100.64.0.1"],
},
// Публічна доступність (виберіть один варіант)
// Публічний доступ (оберіть один)
// publicUrl: "https://example.ngrok.app/voice/webhook",
// tunnel: { provider: "ngrok" },
// tailscale: { mode: "funnel", path: "/voice/webhook" }
@ -115,11 +115,11 @@ cd "$PLUGIN_SRC" && pnpm install
streaming: {
enabled: true,
provider: "openai", // необов’язково; перший зареєстрований провайдер транскрипції в реальному часі, якщо не задано
provider: "openai", // необов’язково; якщо не задано, використовується перший зареєстрований провайдер транскрипції в реальному часі
streamPath: "/voice/stream",
providers: {
openai: {
apiKey: "sk-...", // необов’язково, якщо встановлено OPENAI_API_KEY
apiKey: "sk-...", // необов’язково, якщо задано OPENAI_API_KEY
model: "gpt-4o-transcribe",
silenceDurationMs: 800,
vadThreshold: 0.5,
@ -133,7 +133,7 @@ cd "$PLUGIN_SRC" && pnpm install
realtime: {
enabled: false,
provider: "google", // необов’язково; перший зареєстрований провайдер голосу в реальному часі, якщо не задано
provider: "google", // необов’язково; якщо не задано, використовується перший зареєстрований голосовий провайдер реального часу
toolPolicy: "safe-read-only",
providers: {
google: {
@ -155,20 +155,20 @@ cd "$PLUGIN_SRC" && pnpm install
openclaw voicecall setup
```
Типовий вивід зручний для читання в журналах чату та сеансах термінала. Він перевіряє,
чи ввімкнено плагін, чи наявні провайдер і облікові дані, чи налаштовано
публічну доступність webhook, і чи активний лише один аудіорежим. Використовуйте
`openclaw voicecall setup --json` для скриптів.
Типовий вивід зручно читати в журналах чату та сесіях термінала. Він перевіряє,
чи увімкнено плагін, чи присутні провайдер і облікові дані, чи налаштовано
публічний доступ до webhook, і чи активний лише один аудіорежим. Для скриптів
використовуйте `openclaw voicecall setup --json`.
Для передбачуваного smoke-тесту виконайте:
Для простого smoke-тесту без сюрпризів виконайте:
```bash
openclaw voicecall smoke
openclaw voicecall smoke --to "+15555550123"
```
Друга команда все ще є dry run. Додайте `--yes`, щоб здійснити короткий
вихідний виклик-сповіщення:
Друга команда все ще є сухим запуском. Додайте `--yes`, щоб здійснити короткий
вихідний дзвінок у режимі notify:
```bash
openclaw voicecall smoke --to "+15555550123" --yes
@ -176,61 +176,62 @@ openclaw voicecall smoke --to "+15555550123" --yes
Примітки:
- Twilio/Telnyx вимагають **публічно доступний** URL webhook.
- Plivo вимагає **публічно доступний** URL webhook.
- Twilio/Telnyx вимагають **публічно доступної** URL-адреси webhook.
- Plivo вимагає **публічно доступної** URL-адреси webhook.
- `mock` — це локальний провайдер для розробки (без мережевих викликів).
- Якщо старі конфігурації все ще використовують `provider: "log"`, `twilio.from` або застарілі ключі OpenAI `streaming.*`, виконайте `openclaw doctor --fix`, щоб переписати їх.
- Telnyx вимагає `telnyx.publicKey` (або `TELNYX_PUBLIC_KEY`), якщо тільки `skipSignatureVerification` не дорівнює true.
- `skipSignatureVerification` призначено лише для локального тестування.
- Якщо ви використовуєте безкоштовний тариф ngrok, установіть `publicUrl` точно на URL ngrok; перевірка підпису завжди примусово виконується.
- `tunnel.allowNgrokFreeTierLoopbackBypass: true` дозволяє webhook Twilio з недійсними підписами **лише** коли `tunnel.provider="ngrok"` і `serve.bind` — це loopback (локальний агент ngrok). Використовуйте лише для локальної розробки.
- URL безкоштовного тарифу ngrok можуть змінюватися або додавати проміжну поведінку; якщо `publicUrl` зіб’ється, підписи Twilio не пройдуть перевірку. Для production віддавайте перевагу стабільному домену або Tailscale funnel.
- `realtime.enabled` запускає повноцінні голос-у-голос розмови; не вмикайте його разом із `streaming.enabled`.
- Типові параметри безпеки streaming:
- `streaming.preStartTimeoutMs` закриває сокети, які ніколи не надсилають дійсний кадр `start`.
- `streaming.maxPendingConnections` обмежує загальну кількість неавтентифікованих сокетів до старту.
- `streaming.maxPendingConnectionsPerIp` обмежує неавтентифіковані сокети до старту для кожної вихідної IP-адреси.
- `streaming.maxConnections` обмежує загальну кількість відкритих сокетів медіапотоку (очікування + активні).
- Runtime fallback поки що все ще приймає ці старі ключі voice-call, але шлях переписування — це `openclaw doctor --fix`, а shim сумісності є тимчасовим.
- Якщо у старих конфігураціях досі використовується `provider: "log"`, `twilio.from` або застарілі ключі OpenAI в `streaming.*`, виконайте `openclaw doctor --fix`, щоб переписати їх.
- Telnyx вимагає `telnyx.publicKey` (або `TELNYX_PUBLIC_KEY`), якщо тільки `skipSignatureVerification` не має значення true.
- `skipSignatureVerification` призначений лише для локального тестування.
- Якщо ви використовуєте безкоштовний тариф ngrok, задайте `publicUrl` як точну URL-адресу ngrok; перевірка підпису завжди примусово увімкнена.
- `tunnel.allowNgrokFreeTierLoopbackBypass: true` дозволяє webhook Twilio з невалідними підписами **лише** коли `tunnel.provider="ngrok"` і `serve.bind` є loopback (локальний агент ngrok). Використовуйте лише для локальної розробки.
- URL-адреси ngrok на безкоштовному тарифі можуть змінюватися або додавати проміжну сторінку; якщо `publicUrl` зміниться, підписи Twilio не проходитимуть перевірку. Для production краще використовувати стабільний домен або Tailscale funnel.
- `realtime.enabled` запускає повноцінні голосові розмови voice-to-voice; не вмикайте його разом із `streaming.enabled`.
- Типові налаштування безпеки для streaming:
- `streaming.preStartTimeoutMs` закриває сокети, які так і не надсилають валідний кадр `start`.
- `streaming.maxPendingConnections` обмежує загальну кількість неавтентифікованих сокетів до початку.
- `streaming.maxPendingConnectionsPerIp` обмежує кількість неавтентифікованих сокетів до початку для кожної вихідної IP-адреси.
- `streaming.maxConnections` обмежує загальну кількість відкритих сокетів медіапотоку (очікувані + активні).
- Резервний шлях під час виконання поки що все ще приймає ці старі ключі voice-call, але шлях переписування — це `openclaw doctor --fix`, а шар сумісності є тимчасовим.
## Голосові розмови в реальному часі
`realtime` вибирає повнодуплексного провайдера голосу в реальному часі для живого аудіо виклику.
`realtime` вибирає повнодуплексний голосовий провайдер реального часу для живого аудіо дзвінка.
Він відокремлений від `streaming`, який лише пересилає аудіо до
провайдерів транскрипції в реальному часі.
Поточна поведінка runtime:
Поточна поведінка під час виконання:
- `realtime.enabled` підтримується для Twilio Media Streams.
- `realtime.enabled` не можна поєднувати з `streaming.enabled`.
- `realtime.provider` є необов’язковим. Якщо не задано, Voice Call використовує першого
зареєстрованого провайдера голосу в реальному часі.
- Вбудовані провайдери голосу в реальному часі включають Google Gemini Live (`google`) і
- `realtime.provider` є необов’язковим. Якщо не задано, Voice Call використовує перший
зареєстрований голосовий провайдер реального часу.
- Вбудовані голосові провайдери реального часу включають Google Gemini Live (`google`) і
OpenAI (`openai`), які реєструються їхніми плагінами провайдерів.
- Сирий конфіг, яким володіє провайдер, міститься в `realtime.providers.<providerId>`.
- Voice Call типово відкриває спільний tool реального часу `openclaw_agent_consult`.
Модель реального часу може викликати його, коли абонент просить про глибше
міркування, поточну інформацію або звичайні tools OpenClaw.
- Необроблена конфігурація, що належить провайдеру, знаходиться в `realtime.providers.<providerId>`.
- Voice Call типово надає спільний інструмент реального часу `openclaw_agent_consult`.
Модель реального часу може викликати його, коли абонент просить глибше
міркування, актуальну інформацію або звичайні інструменти OpenClaw.
- `realtime.toolPolicy` керує запуском consult:
- `safe-read-only`: відкривати tool consult і обмежувати звичайного агента
до `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і
- `safe-read-only`: надає інструмент consult і обмежує звичайного агента
інструментами `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і
`memory_get`.
- `owner`: відкривати tool consult і дозволяти звичайному агенту використовувати
звичайну політику tools агента.
- `none`: не відкривати tool consult. Користувацькі `realtime.tools` усе ще
- `owner`: надає інструмент consult і дозволяє звичайному агенту використовувати
звичайну політику інструментів агента.
- `none`: не надавати інструмент consult. Користувацькі `realtime.tools` все одно
передаються провайдеру реального часу.
- Ключі сеансу consult повторно використовують наявний голосовий сеанс, коли це можливо, а потім
переходять до номера телефону абонента/одержувача, щоб повторні виклики consult зберігали
контекст під час виклику.
- Якщо `realtime.provider` вказує на незареєстрованого провайдера або якщо взагалі не зареєстровано жодного провайдера голосу в реальному часі, Voice Call записує попередження в журнал і пропускає
медіа реального часу замість того, щоб зламати весь плагін.
- Ключі сесії consult повторно використовують наявну голосову сесію, коли це можливо, а потім
резервно використовують номер телефону абонента/одержувача, щоб подальші виклики consult зберігали
контекст під час дзвінка.
- Якщо `realtime.provider` вказує на незареєстрованого провайдера або якщо взагалі не зареєстровано жодного
голосового провайдера реального часу, Voice Call записує попередження в журнал і пропускає
медіа реального часу замість того, щоб ламати весь плагін.
Типові параметри реального часу Google Gemini Live:
Типові параметри Google Gemini Live realtime:
- API-ключ: `realtime.providers.google.apiKey`, `GEMINI_API_KEY` або
`GOOGLE_GENERATIVE_AI_API_KEY`
- модель: `gemini-2.5-flash-native-audio-preview-12-2025`
- голос: `Kore`
- model: `gemini-2.5-flash-native-audio-preview-12-2025`
- voice: `Kore`
Приклад:
@ -246,7 +247,7 @@ openclaw voicecall smoke --to "+15555550123" --yes
realtime: {
enabled: true,
provider: "google",
instructions: "Говори коротко. Викликай openclaw_agent_consult перед використанням складніших tools.",
instructions: "Говори коротко. Викликай openclaw_agent_consult перед використанням складніших інструментів.",
toolPolicy: "safe-read-only",
providers: {
google: {
@ -263,7 +264,7 @@ openclaw voicecall smoke --to "+15555550123" --yes
}
```
Замість цього використайте OpenAI:
Використати OpenAI натомість:
```json5
{
@ -287,33 +288,33 @@ openclaw voicecall smoke --to "+15555550123" --yes
}
```
Див. [провайдер Google](/uk/providers/google) і [провайдер OpenAI](/uk/providers/openai)
для параметрів голосу в реальному часі, специфічних для провайдера.
Див. [Google provider](/uk/providers/google) і [OpenAI provider](/uk/providers/openai)
для параметрів голосу реального часу, специфічних для провайдера.
## Потокова транскрипція
## Транскрипція streaming
`streaming` вибирає провайдера транскрипції в реальному часі для живого аудіо виклику.
`streaming` вибирає провайдера транскрипції в реальному часі для живого аудіо дзвінка.
Поточна поведінка runtime:
Поточна поведінка під час виконання:
- `streaming.provider` є необов’язковим. Якщо не задано, Voice Call використовує першого
зареєстрованого провайдера транскрипції в реальному часі.
- `streaming.provider` є необов’язковим. Якщо не задано, Voice Call використовує перший
зареєстрований провайдер транскрипції в реальному часі.
- Вбудовані провайдери транскрипції в реальному часі включають Deepgram (`deepgram`),
ElevenLabs (`elevenlabs`), Mistral (`mistral`), OpenAI (`openai`) та xAI
ElevenLabs (`elevenlabs`), Mistral (`mistral`), OpenAI (`openai`) і xAI
(`xai`), які реєструються їхніми плагінами провайдерів.
- Сирий конфіг, яким володіє провайдер, міститься в `streaming.providers.<providerId>`.
- Якщо `streaming.provider` вказує на незареєстрованого провайдера або якщо взагалі не зареєстровано жодного
провайдера транскрипції в реальному часі, Voice Call записує попередження в журнал і
пропускає потокову передачу медіа замість того, щоб зламати весь плагін.
- Необроблена конфігурація, що належить провайдеру, знаходиться в `streaming.providers.<providerId>`.
- Якщо `streaming.provider` вказує на незареєстрованого провайдера або якщо жодного провайдера
транскрипції в реальному часі взагалі не зареєстровано, Voice Call записує попередження в журнал і
пропускає потокову передачу медіа замість того, щоб ламати весь плагін.
Типові параметри потокової транскрипції OpenAI:
Типові параметри транскрипції OpenAI streaming:
- API-ключ: `streaming.providers.openai.apiKey` або `OPENAI_API_KEY`
- модель: `gpt-4o-transcribe`
- model: `gpt-4o-transcribe`
- `silenceDurationMs`: `800`
- `vadThreshold`: `0.5`
Типові параметри потокової транскрипції xAI:
Типові параметри транскрипції xAI streaming:
- API-ключ: `streaming.providers.xai.apiKey` або `XAI_API_KEY`
- endpoint: `wss://api.x.ai/v1/stt`
@ -336,7 +337,7 @@ openclaw voicecall smoke --to "+15555550123" --yes
streamPath: "/voice/stream",
providers: {
openai: {
apiKey: "sk-...", // необов’язково, якщо встановлено OPENAI_API_KEY
apiKey: "sk-...", // необов’язково, якщо задано OPENAI_API_KEY
model: "gpt-4o-transcribe",
silenceDurationMs: 800,
vadThreshold: 0.5,
@ -350,7 +351,7 @@ openclaw voicecall smoke --to "+15555550123" --yes
}
```
Замість цього використайте xAI:
Використати xAI натомість:
```json5
{
@ -364,7 +365,7 @@ openclaw voicecall smoke --to "+15555550123" --yes
streamPath: "/voice/stream",
providers: {
xai: {
apiKey: "${XAI_API_KEY}", // необов’язково, якщо встановлено XAI_API_KEY
apiKey: "${XAI_API_KEY}", // необов’язково, якщо задано XAI_API_KEY
endpointingMs: 800,
language: "en",
},
@ -385,17 +386,18 @@ openclaw voicecall smoke --to "+15555550123" --yes
- `streaming.silenceDurationMs``streaming.providers.openai.silenceDurationMs`
- `streaming.vadThreshold``streaming.providers.openai.vadThreshold`
## Очищувач застарілих викликів
## Очищення застарілих дзвінків
Використовуйте `staleCallReaperSeconds`, щоб завершувати виклики, які ніколи не отримують термінальний webhook
(наприклад, виклики в режимі notify, які ніколи не завершуються). Типове значення — `0`
Використовуйте `staleCallReaperSeconds`, щоб завершувати дзвінки, які ніколи не отримують
термінальний webhook (наприклад, дзвінки в режимі notify, які ніколи не завершуються).
Типове значення — `0`
(вимкнено).
Рекомендовані діапазони:
- **Production:** `120``300` секунд для потоків у стилі notify.
- Зберігайте це значення **вищим за `maxDurationSeconds`**, щоб звичайні виклики могли
завершитися. Добра стартова точка — `maxDurationSeconds + 3060` секунд.
- Зберігайте це значення **вищим за `maxDurationSeconds`**, щоб звичайні дзвінки могли
завершитися. Хороша початкова точка — `maxDurationSeconds + 3060` секунд.
Приклад:
@ -416,29 +418,28 @@ openclaw voicecall smoke --to "+15555550123" --yes
## Безпека Webhook
Коли перед Gateway стоїть проксі або тунель, плагін реконструює
публічний URL для перевірки підпису. Ці параметри визначають, яким пересланим
заголовкам довіряти.
Коли перед Gateway стоїть проксі або тунель, плагін відновлює
публічну URL-адресу для перевірки підпису. Ці параметри керують тим,
яким пересланим заголовкам довіряти.
`webhookSecurity.allowedHosts` задає allowlist хостів із пересланих заголовків.
`webhookSecurity.allowedHosts` дозволяє хости зі списку дозволених із пересланих заголовків.
`webhookSecurity.trustForwardingHeaders` довіряє пересланим заголовкам без allowlist.
`webhookSecurity.trustForwardingHeaders` довіряє пересланим заголовкам без списку дозволених.
`webhookSecurity.trustedProxyIPs` довіряє пересланим заголовкам лише тоді, коли
віддалена IP-адреса запиту збігається зі списком.
Захист від повторного відтворення webhook увімкнено для Twilio і Plivo. Повторно відтворені коректні webhook-
запити підтверджуються, але пропускаються для побічних ефектів.
Захист від повторного відтворення webhook увімкнений для Twilio і Plivo. Повторно відтворені валідні webhook-запити
підтверджуються, але пропускаються без побічних ефектів.
Ходи розмови Twilio включають токен на кожен хід у зворотних викликах `<Gather>`, тож
застарілі/повторно відтворені голосові зворотні виклики не можуть задовольнити новіший
хід очікування транскрипту.
Повороти розмови Twilio включають токен для кожного ходу в callback-ах `<Gather>`, тому
застарілі або повторно відтворені callback-и мовлення не можуть задовольнити новіший очікуваний хід транскрипції.
Неавтентифіковані webhook-запити відхиляються до зчитування тіла, якщо
відсутні обов’язкові заголовки підпису провайдера.
Неавтентифіковані webhook-запити відхиляються ще до читання тіла, якщо відсутні
обов’язкові заголовки підпису провайдера.
Webhook voice-call використовує спільний профіль тіла pre-auth (64 KB / 5 секунд)
разом з обмеженням кількості одночасних запитів на IP перед перевіркою підпису.
Webhook voice-call використовує спільний профіль тіла до автентифікації (64 KB / 5 секунд)
плюс обмеження кількості одночасних запитів з однієї IP-адреси до перевірки підпису.
Приклад зі стабільним публічним хостом:
@ -459,11 +460,11 @@ Webhook voice-call використовує спільний профіль ті
}
```
## TTS для викликів
## TTS для дзвінків
Voice Call використовує конфігурацію core `messages.tts` для
потокового мовлення у викликах. Ви можете перевизначити її в конфігурації плагіна з
**тією самою формою** — вона глибоко зливається з `messages.tts`.
Voice Call використовує базову конфігурацію `messages.tts` для
потокового мовлення в дзвінках. Ви можете перевизначити її в конфігурації плагіна з
**такою самою структурою** — вона глибоко об’єднується з `messages.tts`.
```json5
{
@ -481,15 +482,15 @@ Voice Call використовує конфігурацію core `messages.tts`
Примітки:
- Застарілі ключі `tts.<provider>` у конфігурації плагіна (`openai`, `elevenlabs`, `microsoft`, `edge`) автоматично мігрують до `tts.providers.<provider>` під час завантаження. У збереженій конфігурації віддавайте перевагу формі `providers`.
- **Мовлення Microsoft ігнорується для голосових викликів** (телефонному аудіо потрібен PCM; поточний транспорт Microsoft не надає вихідний телефонний PCM).
- Core TTS використовується, коли ввімкнено потокову передачу медіа Twilio; інакше виклики переходять до нативних голосів провайдера.
- Якщо медіапотік Twilio уже активний, Voice Call не переходить до TwiML `<Say>`. Якщо телефонний TTS недоступний у цьому стані, запит відтворення завершується помилкою замість змішування двох шляхів відтворення.
- Коли телефонний TTS переходить до вторинного провайдера, Voice Call записує попередження в журнал із ланцюжком провайдерів (`from`, `to`, `attempts`) для налагодження.
- Застарілі ключі `tts.<provider>` у конфігурації плагіна (`openai`, `elevenlabs`, `microsoft`, `edge`) виправляються через `openclaw doctor --fix`; у збереженій конфігурації слід використовувати `tts.providers.<provider>`.
- **Microsoft speech ігнорується для голосових дзвінків** (телефонне аудіо потребує PCM; поточний транспорт Microsoft не надає вихідний PCM для телефонії).
- Базовий TTS використовується, коли увімкнено потокове передавання медіа Twilio; інакше дзвінки повертаються до рідних голосів провайдера.
- Якщо медіапотік Twilio вже активний, Voice Call не повертається до TwiML `<Say>`. Якщо TTS для телефонії недоступний у такому стані, запит на відтворення завершується помилкою замість змішування двох шляхів відтворення.
- Коли TTS для телефонії повертається до вторинного провайдера, Voice Call записує попередження в журнал із ланцюжком провайдерів (`from`, `to`, `attempts`) для налагодження.
### Більше прикладів
Використовувати лише core TTS (без перевизначення):
Використовувати лише базовий TTS (без перевизначення):
```json5
{
@ -504,7 +505,7 @@ Voice Call використовує конфігурацію core `messages.tts`
}
```
Перевизначити на ElevenLabs лише для викликів (залишити типове значення core в інших місцях):
Перевизначити на ElevenLabs лише для дзвінків (залишити типове базове значення в інших місцях):
```json5
{
@ -529,7 +530,7 @@ Voice Call використовує конфігурацію core `messages.tts`
}
```
Перевизначити лише модель OpenAI для викликів (приклад глибокого злиття):
Перевизначити лише модель OpenAI для дзвінків (приклад глибокого об’єднання):
```json5
{
@ -552,25 +553,25 @@ Voice Call використовує конфігурацію core `messages.tts`
}
```
## Вхідні виклики
## Вхідні дзвінки
Політика вхідних викликів типово має значення `disabled`. Щоб увімкнути вхідні виклики, установіть:
Типове значення політики вхідних дзвінків — `disabled`. Щоб увімкнути вхідні дзвінки, задайте:
```json5
{
inboundPolicy: "allowlist",
allowFrom: ["+15550001234"],
inboundGreeting: "Hello! How can I help?",
inboundGreeting: "Привіт! Чим я можу допомогти?",
}
```
`inboundPolicy: "allowlist"` — це фільтр caller ID з низьким рівнем достовірності. Плагін
`inboundPolicy: "allowlist"` — це перевірка caller ID з низьким рівнем гарантії. Плагін
нормалізує значення `From`, надане провайдером, і порівнює його з `allowFrom`.
Перевірка webhook автентифікує доставку провайдером і цілісність payload, але
не доводить право власності на номер абонента PSTN/VoIP. Розглядайте `allowFrom` як
фільтрацію caller ID, а не як сильну ідентичність абонента.
не доводить право власності на номер абонента PSTN/VoIP. Сприймайте `allowFrom` як
фільтрацію caller ID, а не як сильну ідентифікацію абонента.
Автовідповіді використовують систему агента. Налаштовуйте за допомогою:
Автовідповіді використовують систему агента. Налаштовуйте через:
- `responseModel`
- `responseSystemPrompt`
@ -578,33 +579,33 @@ Voice Call використовує конфігурацію core `messages.tts`
### Контракт озвученого виводу
Для автовідповідей Voice Call додає до системного prompt суворий контракт озвученого виводу:
Для автовідповідей Voice Call додає суворий контракт озвученого виводу до system prompt:
- `{"spoken":"..."}`
Потім Voice Call захисно витягує текст мовлення:
- Ігнорує payload, позначені як вміст міркувань/помилок.
- Розбирає прямий JSON, fenced JSON або вбудовані ключі `"spoken"`.
- Переходить до звичайного тексту та видаляє ймовірні вступні абзаци з плануванням/метаданими.
- Ігнорує payload, позначені як вміст міркувань/помилок.
- Розбирає прямий JSON, JSON в огороджених блоках або вбудовані ключі `"spoken"`.
- Повертається до звичайного тексту та видаляє ймовірні вступні абзаци з плануванням/метаданими.
Це зберігає відтворення мовлення зосередженим на тексті для абонента й запобігає витоку тексту планування в аудіо.
Це допомагає зосередити озвучене відтворення на тексті для абонента та уникнути витоку тексту планування в аудіо.
### Поведінка запуску розмови
Для вихідних викликів `conversation` обробка першого повідомлення прив’язана до стану живого відтворення:
Для вихідних дзвінків `conversation` обробка першого повідомлення прив’язана до стану відтворення наживо:
- Очищення черги barge-in і автовідповідь пригнічуються лише тоді, коли початкове привітання активно озвучується.
- Якщо початкове відтворення завершується помилкою, виклик повертається до стану `listening`, а початкове повідомлення залишається в черзі для повторної спроби.
- Початкове відтворення для потокової передачі Twilio починається при підключенні потоку без додаткової затримки.
- Голосові розмови в реальному часі використовують власний початковий хід потоку реального часу. Voice Call не надсилає застаріле оновлення TwiML `<Say>` для цього початкового повідомлення, тож вихідні сесії `<Connect><Stream>` залишаються підключеними.
- Очищення черги barge-in та автовідповідь пригнічуються лише поки початкове привітання активно озвучується.
- Якщо початкове відтворення завершується помилкою, дзвінок повертається до `listening`, а початкове повідомлення залишається в черзі для повторної спроби.
- Початкове відтворення для Twilio streaming починається під час підключення потоку без додаткової затримки.
- Голосові розмови realtime використовують власний початковий хід потоку realtime. Voice Call не надсилає застаріле оновлення TwiML `<Say>` для цього початкового повідомлення, тому вихідні сесії `<Connect><Stream>` залишаються приєднаними.
### Пільговий період після від’єднання потоку Twilio
### Пільговий період відключення потоку Twilio
Коли медіапотік Twilio від’єднується, Voice Call чекає `2000ms` перед автоматичним завершенням виклику:
Коли медіапотік Twilio відключається, Voice Call чекає `2000ms` перед автоматичним завершенням дзвінка:
- Якщо потік перепідключається протягом цього вікна, автозавершення скасовується.
- Якщо після пільгового періоду жоден потік не зареєстровано повторно, виклик завершується, щоб запобігти зависанню активних викликів.
- Якщо потік повторно підключається протягом цього вікна, автоматичне завершення скасовується.
- Якщо після завершення пільгового періоду потік не зареєстровано повторно, дзвінок завершується, щоб запобігти завислим активним дзвінкам.
## CLI
@ -617,18 +618,18 @@ openclaw voicecall dtmf --call-id <id> --digits "ww123456#"
openclaw voicecall end --call-id <id>
openclaw voicecall status --call-id <id>
openclaw voicecall tail
openclaw voicecall latency # підсумувати затримку ходів із журналів
openclaw voicecall latency # підсумувати затримку ходів за журналами
openclaw voicecall expose --mode funnel
```
`latency` зчитує `calls.jsonl` зі стандартного шляху зберігання voice-call. Використовуйте
`--file <path>`, щоб вказати на інший журнал, і `--last <n>`, щоб обмежити аналіз
останніми N записами (типово 200). Вивід містить p50/p90/p99 для затримки
ходів і часу очікування прослуховування.
`latency` читає `calls.jsonl` зі стандартного шляху сховища voice-call. Використовуйте
`--file <path>`, щоб вказати інший журнал, і `--last <n>`, щоб обмежити аналіз
останніми N записами (типово 200). Вивід включає p50/p90/p99 для
затримки ходу та часу очікування прослуховування.
## Tool агента
## Інструмент агента
Назва tool: `voice_call`
Назва інструмента: `voice_call`
Дії:
@ -639,7 +640,7 @@ openclaw voicecall expose --mode funnel
- `end_call` (callId)
- `get_status` (callId)
Цей репозиторій містить відповідний документ Skills за адресою `skills/voice-call/SKILL.md`.
Цей репозиторій постачає відповідний документ Skills у `skills/voice-call/SKILL.md`.
## Gateway RPC
@ -652,6 +653,6 @@ openclaw voicecall expose --mode funnel
## Пов’язане
- [Перетворення тексту на мовлення](/uk/tools/tts)
- [Режим розмови](/uk/nodes/talk)
- [Голосове пробудження](/uk/nodes/voicewake)
- [Text-to-speech](/uk/tools/tts)
- [Talk mode](/uk/nodes/talk)
- [Voice wake](/uk/nodes/voicewake)

View File

@ -5,10 +5,10 @@ read_when:
summary: Використання моделей MiniMax в OpenClaw
title: MiniMax
x-i18n:
generated_at: "2026-04-25T00:30:49Z"
generated_at: "2026-04-25T04:07:29Z"
model: gpt-5.4
provider: openai
source_hash: 108e0e8de748d0ed68342e1391c7a661136e21e0b255b4afbccf913b6825c6ec
source_hash: 202b0852f3f1f484193d6f9a019b179c807dc13d7bed497f1122c36eae03e980
source_path: providers/minimax.md
workflow: 15
---
@ -33,25 +33,25 @@ MiniMax також надає:
| Модель | Тип | Опис |
| ------------------------ | ---------------- | ---------------------------------------- |
| `MiniMax-M2.7` | Чат (міркування) | Типова хостингова модель для міркування |
| `MiniMax-M2.7` | Чат (міркування) | Типова розміщена модель для міркування |
| `MiniMax-M2.7-highspeed` | Чат (міркування) | Швидший рівень міркування M2.7 |
| `MiniMax-VL-01` | Vision | Модель для розпізнавання зображень |
| `MiniMax-VL-01` | Vision | Модель розпізнавання зображень |
| `image-01` | Генерація зображень | Перетворення тексту на зображення та редагування зображення за зображенням |
| `music-2.5+` | Генерація музики | Типова музична модель |
| `music-2.5+` | Генерація музики | Типова модель музики |
| `music-2.5` | Генерація музики | Попередній рівень генерації музики |
| `music-2.0` | Генерація музики | Застарілий рівень генерації музики |
| `MiniMax-Hailuo-2.3` | Генерація відео | Потоки перетворення тексту на відео та використання зображення як референсу |
| `MiniMax-Hailuo-2.3` | Генерація відео | Потоки «текст у відео» та з опорним зображенням |
## Початок роботи
Виберіть бажаний спосіб автентифікації та виконайте кроки налаштування.
Оберіть бажаний спосіб автентифікації та виконайте кроки налаштування.
<Tabs>
<Tab title="OAuth (Coding Plan)">
**Найкраще підходить для:** швидкого налаштування MiniMax Coding Plan через OAuth, ключ API не потрібен.
**Найкраще для:** швидкого налаштування MiniMax Coding Plan через OAuth, без потреби в API key.
<Tabs>
<Tab title="International">
<Tab title="Міжнародний">
<Steps>
<Step title="Запустіть онбординг">
```bash
@ -67,7 +67,7 @@ MiniMax також надає:
</Step>
</Steps>
</Tab>
<Tab title="China">
<Tab title="Китай">
<Steps>
<Step title="Запустіть онбординг">
```bash
@ -96,17 +96,17 @@ MiniMax також надає:
</Tab>
<Tab title="API key">
**Найкраще підходить для:** хостингового MiniMax з API, сумісним з Anthropic.
**Найкраще для:** розміщеного MiniMax з API, сумісним з Anthropic.
<Tabs>
<Tab title="International">
<Tab title="Міжнародний">
<Steps>
<Step title="Запустіть онбординг">
```bash
openclaw onboard --auth-choice minimax-global-api
```
Це налаштовує `api.minimax.io` як базову URL-адресу.
Це налаштовує `api.minimax.io` як базовий URL.
</Step>
<Step title="Перевірте, що модель доступна">
```bash
@ -115,14 +115,14 @@ MiniMax також надає:
</Step>
</Steps>
</Tab>
<Tab title="China">
<Tab title="Китай">
<Steps>
<Step title="Запустіть онбординг">
```bash
openclaw onboard --auth-choice minimax-cn-api
```
Це налаштовує `api.minimaxi.com` як базову URL-адресу.
Це налаштовує `api.minimaxi.com` як базовий URL.
</Step>
<Step title="Перевірте, що модель доступна">
```bash
@ -173,7 +173,7 @@ MiniMax також надає:
```
<Warning>
У сумісному з Anthropic потоковому режимі OpenClaw за замовчуванням вимикає thinking для MiniMax, якщо ви явно не встановите `thinking` самостійно. Потоковий ендпоінт MiniMax повертає `reasoning_content` у дельта-чанках у стилі OpenAI замість нативних блоків thinking Anthropic, що може призвести до витоку внутрішніх міркувань у видимий вивід, якщо залишити цю можливість неявно ввімкненою.
У сумісному з Anthropic потоковому режимі OpenClaw за замовчуванням вимикає мислення MiniMax, якщо ви явно не встановите `thinking` самостійно. Потокова кінцева точка MiniMax надсилає `reasoning_content` у дельта-фрагментах у стилі OpenAI замість нативних блоків thinking Anthropic, що може призвести до витоку внутрішнього міркування у видимий вивід, якщо залишити це неявно ввімкненим.
</Warning>
<Note>
@ -194,21 +194,21 @@ MiniMax також надає:
```
</Step>
<Step title="Виберіть Model/auth">
Виберіть у меню **Model/auth**.
У меню виберіть **Model/auth**.
</Step>
<Step title="Виберіть параметр автентифікації MiniMax">
<Step title="Оберіть варіант автентифікації MiniMax">
Виберіть один із доступних варіантів MiniMax:
| Варіант автентифікації | Опис |
| --- | --- |
| `minimax-global-oauth` | International OAuth (Coding Plan) |
| `minimax-cn-oauth` | China OAuth (Coding Plan) |
| `minimax-global-oauth` | Міжнародний OAuth (Coding Plan) |
| `minimax-cn-oauth` | OAuth для Китаю (Coding Plan) |
| `minimax-global-api` | Міжнародний API key |
| `minimax-cn-api` | API key для Китаю |
</Step>
<Step title="Виберіть типову модель">
Коли з’явиться запит, виберіть типову модель.
<Step title="Виберіть модель за замовчуванням">
Коли з’явиться запит, виберіть модель за замовчуванням.
</Step>
</Steps>
@ -216,12 +216,12 @@ MiniMax також надає:
### Генерація зображень
Плагін MiniMax реєструє модель `image-01` для інструмента `image_generate`. Вона підтримує:
Plugin MiniMax реєструє модель `image-01` для інструмента `image_generate`. Підтримується:
- **Генерація зображень із тексту** з керуванням співвідношенням сторін
- **Редагування зображення за зображенням** (референс об’єкта) з керуванням співвідношенням сторін
- **Редагування зображення за зображенням** (опорний об’єкт) з керуванням співвідношенням сторін
- До **9 вихідних зображень** на запит
- До **1 референсного зображення** на запит редагування
- До **1 опорного зображення** на запит редагування
- Підтримувані співвідношення сторін: `1:1`, `16:9`, `4:3`, `3:2`, `2:3`, `3:4`, `9:16`, `21:9`
Щоб використовувати MiniMax для генерації зображень, встановіть його як провайдера генерації зображень:
@ -236,7 +236,7 @@ MiniMax також надає:
}
```
Плагін використовує той самий `MINIMAX_API_KEY` або OAuth-автентифікацію, що й текстові моделі. Додаткова конфігурація не потрібна, якщо MiniMax уже налаштовано.
Plugin використовує той самий `MINIMAX_API_KEY` або OAuth-автентифікацію, що й текстові моделі. Додаткова конфігурація не потрібна, якщо MiniMax уже налаштовано.
І `minimax`, і `minimax-portal` реєструють `image_generate` з тією самою
моделлю `image-01`. Налаштування з API key використовують `MINIMAX_API_KEY`; налаштування OAuth можуть натомість використовувати
@ -245,22 +245,45 @@ MiniMax також надає:
Коли онбординг або налаштування API key записує явні записи `models.providers.minimax`,
OpenClaw матеріалізує `MiniMax-M2.7` і
`MiniMax-M2.7-highspeed` як текстові чат-моделі. Розпізнавання зображень
експонується окремо через медіапровайдера `MiniMax-VL-01`, що належить плагіну.
надається окремо через медіапровайдер `MiniMax-VL-01`, що належить plugin.
<Note>
Див. [Генерація зображень](/uk/tools/image-generation), щоб ознайомитися зі спільними параметрами інструмента, вибором провайдера та поведінкою failover.
</Note>
### Перетворення тексту на мовлення
Вбудований plugin `minimax` реєструє MiniMax T2A v2 як провайдера мовлення для
`messages.tts`.
- Типова модель TTS: `speech-2.8-hd`
- Типовий голос: `English_expressive_narrator`
- Звичайні аудіовкладення залишаються у форматі MP3.
- Цілі voice-note, такі як Feishu і Telegram, перекодовуються з MP3 MiniMax
у 48kHz Opus через `ffmpeg`, оскільки API файлів Feishu/Lark
приймає лише `file_type: "opus"` для нативних аудіоповідомлень.
- MiniMax T2A приймає дробові значення `speed` і `vol`, але `pitch` надсилається як
ціле число; OpenClaw відкидає дробову частину значень `pitch` перед запитом до API.
| Налаштування | Змінна середовища | Типове значення | Опис |
| ---------------------------------------- | ---------------------- | -------------------------- | ------------------------------------ |
| `messages.tts.providers.minimax.baseUrl` | `MINIMAX_API_HOST` | `https://api.minimax.io` | Хост API MiniMax T2A. |
| `messages.tts.providers.minimax.model` | `MINIMAX_TTS_MODEL` | `speech-2.8-hd` | ID моделі TTS. |
| `messages.tts.providers.minimax.voiceId` | `MINIMAX_TTS_VOICE_ID` | `English_expressive_narrator` | ID голосу, що використовується для мовленнєвого виводу. |
| `messages.tts.providers.minimax.speed` | | `1.0` | Швидкість відтворення, `0.5..2.0`. |
| `messages.tts.providers.minimax.vol` | | `1.0` | Гучність, `(0, 10]`. |
| `messages.tts.providers.minimax.pitch` | | `0` | Цілочисельне зміщення тону, `-12..12`. |
### Генерація музики
Вбудований плагін `minimax` також реєструє генерацію музики через спільний
Вбудований plugin `minimax` також реєструє генерацію музики через спільний
інструмент `music_generate`.
- Типова музична модель: `minimax/music-2.5+`
- Також підтримуються `minimax/music-2.5` і `minimax/music-2.0`
- Керування підказкою: `lyrics`, `instrumental`, `durationSeconds`
- Керування prompt: `lyrics`, `instrumental`, `durationSeconds`
- Формат виводу: `mp3`
- Запуски з підтримкою сесій від’єднуються через спільний потік завдань/статусу, зокрема `action: "status"`
- Запуски із session-відстеженням відокремлюються через спільний потік завдань/статусу, включно з `action: "status"`
Щоб використовувати MiniMax як типовий музичний провайдер:
@ -282,11 +305,11 @@ OpenClaw матеріалізує `MiniMax-M2.7` і
### Генерація відео
Вбудований плагін `minimax` також реєструє генерацію відео через спільний
Вбудований plugin `minimax` також реєструє генерацію відео через спільний
інструмент `video_generate`.
- Типова відеомодель: `minimax/MiniMax-Hailuo-2.3`
- Режими: перетворення тексту на відео та потоки з одним референсним зображенням
- Режими: «текст у відео» та потоки з одним опорним зображенням
- Підтримує `aspectRatio` і `resolution`
Щоб використовувати MiniMax як типовий відеопровайдер:
@ -309,7 +332,7 @@ OpenClaw матеріалізує `MiniMax-M2.7` і
### Розпізнавання зображень
Плагін MiniMax реєструє розпізнавання зображень окремо від текстового
Plugin MiniMax реєструє розпізнавання зображень окремо від текстового
каталогу:
| ID провайдера | Типова модель зображень |
@ -318,24 +341,24 @@ OpenClaw матеріалізує `MiniMax-M2.7` і
| `minimax-portal` | `MiniMax-VL-01` |
Саме тому автоматична маршрутизація медіа може використовувати розпізнавання зображень MiniMax навіть
коли вбудований каталог текстових провайдерів усе ще показує лише текстові чат-посилання M2.7.
тоді, коли вбудований каталог текстового провайдера все ще показує лише текстові посилання чату M2.7.
### Вебпошук
Плагін MiniMax також реєструє `web_search` через API пошуку MiniMax Coding Plan.
Plugin MiniMax також реєструє `web_search` через API пошуку MiniMax Coding Plan.
- ID провайдера: `minimax`
- Структуровані результати: заголовки, URL-адреси, фрагменти, пов’язані запити
- Пріоритетна змінна середовища: `MINIMAX_CODE_PLAN_KEY`
- Псевдонім змінної середовища, що також приймається: `MINIMAX_CODING_API_KEY`
- Резервна сумісність: `MINIMAX_API_KEY`, якщо він уже вказує на токен coding-plan
- Повторне використання регіону: `plugins.entries.minimax.config.webSearch.region`, потім `MINIMAX_API_HOST`, потім базові URL-адреси провайдера MiniMax
- Пошук залишається на ID провайдера `minimax`; налаштування OAuth CN/global однаково можуть опосередковано спрямовувати регіон через `models.providers.minimax-portal.baseUrl`
- Структуровані результати: заголовки, URL, фрагменти, пов’язані запити
- Бажана змінна середовища: `MINIMAX_CODE_PLAN_KEY`
- Прийнятний псевдонім змінної середовища: `MINIMAX_CODING_API_KEY`
- Сумісний запасний варіант: `MINIMAX_API_KEY`, якщо він уже вказує на токен coding plan
- Повторне використання регіону: `plugins.entries.minimax.config.webSearch.region`, потім `MINIMAX_API_HOST`, потім базові URL провайдера MiniMax
- Пошук залишається на ID провайдера `minimax`; налаштування OAuth CN/global усе ще можуть опосередковано спрямовувати регіон через `models.providers.minimax-portal.baseUrl`
Конфігурація розміщується в `plugins.entries.minimax.config.webSearch.*`.
<Note>
Див. [Пошук MiniMax](/uk/tools/minimax-search) для повної конфігурації та використання вебпошуку.
Див. [MiniMax Search](/uk/tools/minimax-search), щоб ознайомитися з повною конфігурацією та використанням вебпошуку.
</Note>
## Розширена конфігурація
@ -344,8 +367,8 @@ OpenClaw матеріалізує `MiniMax-M2.7` і
<Accordion title="Параметри конфігурації">
| Параметр | Опис |
| --- | --- |
| `models.providers.minimax.baseUrl` | Рекомендовано `https://api.minimax.io/anthropic` (сумісний з Anthropic); `https://api.minimax.io/v1` є додатковим варіантом для payload, сумісних з OpenAI |
| `models.providers.minimax.api` | Рекомендовано `anthropic-messages`; `openai-completions` є додатковим варіантом для payload, сумісних з OpenAI |
| `models.providers.minimax.baseUrl` | Рекомендовано `https://api.minimax.io/anthropic` (сумісний з Anthropic); `https://api.minimax.io/v1` є необов’язковим для навантажень, сумісних з OpenAI |
| `models.providers.minimax.api` | Рекомендовано `anthropic-messages`; `openai-completions` є необов’язковим для навантажень, сумісних з OpenAI |
| `models.providers.minimax.apiKey` | API key MiniMax (`MINIMAX_API_KEY`) |
| `models.providers.minimax.models` | Визначає `id`, `name`, `reasoning`, `contextWindow`, `maxTokens`, `cost` |
| `agents.defaults.models` | Псевдоніми моделей, які ви хочете додати до allowlist |
@ -353,18 +376,18 @@ OpenClaw матеріалізує `MiniMax-M2.7` і
</Accordion>
<Accordion title="Типові значення thinking">
Для `api: "anthropic-messages"` OpenClaw додає `thinking: { type: "disabled" }`, якщо thinking вже не задано явно в params/config.
Для `api: "anthropic-messages"` OpenClaw додає `thinking: { type: "disabled" }`, якщо thinking ще не задано явно в params/config.
Це запобігає тому, щоб потоковий ендпоінт MiniMax надсилав `reasoning_content` у дельта-чанках у стилі OpenAI, що призводило б до витоку внутрішніх міркувань у видимий вивід.
Це запобігає тому, щоб потокова кінцева точка MiniMax надсилала `reasoning_content` у дельта-фрагментах у стилі OpenAI, що призвело б до витоку внутрішнього міркування у видимий вивід.
</Accordion>
<Accordion title="Швидкий режим">
`/fast on` або `params.fastMode: true` переписує `MiniMax-M2.7` на `MiniMax-M2.7-highspeed` у сумісному з Anthropic потоковому шляху.
`/fast on` або `params.fastMode: true` замінює `MiniMax-M2.7` на `MiniMax-M2.7-highspeed` у сумісному з Anthropic потоковому шляху.
</Accordion>
<Accordion title="Приклад failover">
**Найкраще підходить для:** використання вашої найсильнішої актуальної моделі нового покоління як основної з переходом на MiniMax M2.7 у разі збою. У прикладі нижче Opus використано як конкретну основну модель; замініть її на бажану вами актуальну основну модель нового покоління.
**Найкраще для:** зберегти вашу найсильнішу основну модель останнього покоління як primary і перейти на MiniMax M2.7 у разі відмови. У прикладі нижче як конкретну primary використано Opus; замініть її на бажану primary модель останнього покоління.
```json5
{
@ -388,9 +411,9 @@ OpenClaw матеріалізує `MiniMax-M2.7` і
<Accordion title="Деталі використання Coding Plan">
- API використання Coding Plan: `https://api.minimaxi.com/v1/api/openplatform/coding_plan/remains` (потрібен ключ coding plan).
- OpenClaw нормалізує використання coding plan MiniMax до того самого відображення `% left`, що й в інших провайдерів. Сирі поля `usage_percent` / `usagePercent` у MiniMax означають залишкову квоту, а не використану квоту, тому OpenClaw інвертує їх. Поля на основі підрахунку мають пріоритет, якщо вони доступні.
- Коли API повертає `model_remains`, OpenClaw надає перевагу запису chat-моделі, за потреби виводить мітку вікна з `start_time` / `end_time` і включає вибрану назву моделі до мітки плану, щоб вікна coding plan було легше розрізняти.
- Знімки використання розглядають `minimax`, `minimax-cn` і `minimax-portal` як одну й ту саму поверхню квоти MiniMax та надають перевагу збереженому OAuth MiniMax перед переходом до змінних середовища з ключем Coding Plan.
- OpenClaw нормалізує використання coding plan MiniMax до того самого відображення `% left`, що й в інших провайдерів. Необроблені поля MiniMax `usage_percent` / `usagePercent` — це квота, що залишилася, а не вже використана квота, тому OpenClaw інвертує їх. Поля на основі лічильників мають пріоритет, якщо вони присутні.
- Коли API повертає `model_remains`, OpenClaw віддає перевагу запису чат-моделі, за потреби виводить мітку вікна з `start_time` / `end_time` і включає вибрану назву моделі в мітку плану, щоб вікна coding plan було легше розрізняти.
- Знімки використання трактують `minimax`, `minimax-cn` і `minimax-portal` як одну й ту саму поверхню квоти MiniMax і віддають перевагу збереженому OAuth MiniMax, перш ніж переходити до змінних середовища ключа Coding Plan.
</Accordion>
</AccordionGroup>
@ -402,28 +425,28 @@ OpenClaw матеріалізує `MiniMax-M2.7` і
- Типова чат-модель: `MiniMax-M2.7`
- Альтернативна чат-модель: `MiniMax-M2.7-highspeed`
- Онбординг і пряме налаштування API key записують визначення лише текстових моделей для обох варіантів M2.7
- Для розпізнавання зображень використовується медіапровайдер `MiniMax-VL-01`, що належить плагіну
- Для розпізнавання зображень використовується медіапровайдер `MiniMax-VL-01`, що належить plugin
- Оновіть значення цін у `models.json`, якщо вам потрібне точне відстеження вартості
- Використовуйте `openclaw models list`, щоб підтвердити поточний ID провайдера, а потім перемкніться за допомогою `openclaw models set minimax/MiniMax-M2.7` або `openclaw models set minimax-portal/MiniMax-M2.7`
- Використовуйте `openclaw models list`, щоб підтвердити поточний ID провайдера, а потім перемкніть його через `openclaw models set minimax/MiniMax-M2.7` або `openclaw models set minimax-portal/MiniMax-M2.7`
<Tip>
Реферальне посилання для MiniMax Coding Plan (знижка 10%): [MiniMax Coding Plan](https://platform.minimax.io/subscribe/coding-plan?code=DbXJTRClnb&source=link)
</Tip>
<Note>
Див. [Провайдери моделей](/uk/concepts/model-providers) для правил провайдерів.
Див. [Провайдери моделей](/uk/concepts/model-providers), щоб ознайомитися з правилами для провайдерів.
</Note>
## Усунення несправностей
<AccordionGroup>
<Accordion title='"Невідома модель: minimax/MiniMax-M2.7"'>
Зазвичай це означає, що **провайдер MiniMax не налаштований** (немає відповідного запису провайдера і не знайдено профілю автентифікації/env key MiniMax). Виправлення для цього виявлення є у **2026.1.12**. Виправити можна так:
<Accordion title='"Unknown model: minimax/MiniMax-M2.7"'>
Зазвичай це означає, що **провайдер MiniMax не налаштовано** (немає відповідного запису провайдера і не знайдено профілю автентифікації/env key MiniMax). Виправлення для цього виявлення входить до **2026.1.12**. Виправити можна так:
- Оновіться до **2026.1.12** (або запустіть із вихідного коду `main`), а потім перезапустіть Gateway.
- Запустіть `openclaw configure` і виберіть параметр автентифікації **MiniMax**, або
- Оновіть до **2026.1.12** (або запустіть із вихідного коду `main`), а потім перезапустіть Gateway.
- Запустіть `openclaw configure` і виберіть варіант автентифікації **MiniMax**, або
- Додайте відповідний блок `models.providers.minimax` або `models.providers.minimax-portal` вручну, або
- Задайте `MINIMAX_API_KEY`, `MINIMAX_OAUTH_TOKEN` або профіль автентифікації MiniMax, щоб можна було інжектувати відповідний провайдер.
- Встановіть `MINIMAX_API_KEY`, `MINIMAX_OAUTH_TOKEN` або профіль автентифікації MiniMax, щоб можна було підставити відповідний провайдер.
Переконайтеся, що ID моделі **чутливий до регістру**:
@ -450,15 +473,15 @@ OpenClaw матеріалізує `MiniMax-M2.7` і
Вибір провайдерів, посилань на моделі та поведінки failover.
</Card>
<Card title="Генерація зображень" href="/uk/tools/image-generation" icon="image">
Спільні параметри інструмента для зображень і вибір провайдера.
Спільні параметри інструмента зображень і вибір провайдера.
</Card>
<Card title="Генерація музики" href="/uk/tools/music-generation" icon="music">
Спільні параметри музичного інструмента та вибір провайдера.
Спільні параметри інструмента музики і вибір провайдера.
</Card>
<Card title="Генерація відео" href="/uk/tools/video-generation" icon="video">
Спільні параметри відеоінструмента та вибір провайдера.
Спільні параметри інструмента відео і вибір провайдера.
</Card>
<Card title="Пошук MiniMax" href="/uk/tools/minimax-search" icon="magnifying-glass">
<Card title="MiniMax Search" href="/uk/tools/minimax-search" icon="magnifying-glass">
Конфігурація вебпошуку через MiniMax Coding Plan.
</Card>
<Card title="Усунення несправностей" href="/uk/help/troubleshooting" icon="wrench">

View File

@ -1,34 +1,35 @@
---
read_when:
- Ви хочете каталог OpenCode Go
- Вам потрібні runtime-посилання на моделі для моделей, розміщених у Go
- Вам потрібні посилання на моделі середовища виконання для моделей, розміщених на Go
summary: Використовуйте каталог OpenCode Go зі спільним налаштуванням OpenCode
title: OpenCode Go
x-i18n:
generated_at: "2026-04-23T23:05:10Z"
generated_at: "2026-04-25T04:07:29Z"
model: gpt-5.4
provider: openai
source_hash: d70ca7e7c63f95cbb698d5193c2d9fa48576a8d7311dbd7fa4e2f10a42e275a7
source_hash: 42aba47207d85cdc6d2c5d85c3726da660b456320765c83df92ee705f005d3c3
source_path: providers/opencode-go.md
workflow: 15
---
OpenCode Go — це каталог Go у [OpenCode](/uk/providers/opencode).
Він використовує той самий `OPENCODE_API_KEY`, що й каталог Zen, але зберігає runtime-ідентифікатор
provider `opencode-go`, щоб маршрутизація за моделями в upstream працювала правильно.
OpenCode Go — це каталог Go у межах [OpenCode](/uk/providers/opencode).
Він використовує той самий `OPENCODE_API_KEY`, що й каталог Zen, але зберігає ідентифікатор
провайдера середовища виконання `opencode-go`, щоб маршрутизація окремих моделей
на стороні постачальника залишалася коректною.
| Властивість | Значення |
| ---------------- | ----------------------------- |
| Runtime provider | `opencode-go` |
| Автентифікація | `OPENCODE_API_KEY` |
| Властивість | Значення |
| ----------------- | ------------------------------- |
| Провайдер середовища виконання | `opencode-go` |
| Автентифікація | `OPENCODE_API_KEY` |
| Батьківське налаштування | [OpenCode](/uk/providers/opencode) |
## Вбудований каталог
OpenClaw отримує каталог Go з комплектного реєстру моделей pi. Виконайте
`openclaw models list --provider opencode-go`, щоб побачити поточний список моделей.
OpenClaw отримує каталог Go із вбудованого реєстру моделей pi. Виконайте
`openclaw models list --provider opencode-go`, щоб переглянути поточний список моделей.
Згідно з комплектним каталогом pi, provider містить:
Станом на вбудований каталог pi, провайдер містить:
| Посилання на модель | Назва |
| --------------------------- | --------------------- |
@ -46,16 +47,16 @@ OpenClaw отримує каталог Go з комплектного реєст
## Початок роботи
<Tabs>
<Tab title="Interactive">
<Tab title="Інтерактивно">
<Steps>
<Step title="Запустіть початкове налаштування">
<Step title="Запустіть онбординг">
```bash
openclaw onboard --auth-choice opencode-go
```
</Step>
<Step title="Установіть модель Go як типову">
```bash
openclaw config set agents.defaults.model.primary "opencode-go/kimi-k2.5"
openclaw config set agents.defaults.model.primary "opencode-go/kimi-k2.6"
```
</Step>
<Step title="Переконайтеся, що моделі доступні">
@ -66,9 +67,9 @@ OpenClaw отримує каталог Go з комплектного реєст
</Steps>
</Tab>
<Tab title="Non-interactive">
<Tab title="Неінтерактивно">
<Steps>
<Step title="Передайте ключ напряму">
<Step title="Передайте ключ безпосередньо">
```bash
openclaw onboard --opencode-go-api-key "$OPENCODE_API_KEY"
```
@ -87,7 +88,7 @@ OpenClaw отримує каталог Go з комплектного реєст
```json5
{
env: { OPENCODE_API_KEY: "YOUR_API_KEY_HERE" }, // pragma: allowlist secret
agents: { defaults: { model: { primary: "opencode-go/kimi-k2.5" } } },
agents: { defaults: { model: { primary: "opencode-go/kimi-k2.6" } } },
}
```
@ -95,33 +96,33 @@ OpenClaw отримує каталог Go з комплектного реєст
<AccordionGroup>
<Accordion title="Поведінка маршрутизації">
OpenClaw автоматично обробляє маршрутизацію для кожної моделі, коли посилання на модель використовує
`opencode-go/...`. Додаткова конфігурація provider не потрібна.
OpenClaw автоматично обробляє маршрутизацію окремих моделей, коли посилання на модель використовує
`opencode-go/...`. Додаткова конфігурація провайдера не потрібна.
</Accordion>
<Accordion title="Умовність runtime-посилань">
Runtime-посилання залишаються явними: `opencode/...` для Zen, `opencode-go/...` для Go.
Це зберігає коректну маршрутизацію за моделями в upstream для обох каталогів.
<Accordion title="Угода про посилання середовища виконання">
Посилання середовища виконання залишаються явними: `opencode/...` для Zen, `opencode-go/...` для Go.
Це зберігає коректну маршрутизацію окремих моделей на стороні постачальника в обох каталогах.
</Accordion>
<Accordion title="Спільні облікові дані">
Один і той самий `OPENCODE_API_KEY` використовується як каталогами Zen, так і Go. Введення
ключа під час налаштування зберігає облікові дані для обох runtime-provider.
Той самий `OPENCODE_API_KEY` використовується як каталогом Zen, так і каталогом Go. Введення
ключа під час налаштування зберігає облікові дані для обох провайдерів середовища виконання.
</Accordion>
</AccordionGroup>
<Tip>
Див. [OpenCode](/uk/providers/opencode), щоб переглянути спільний огляд початкового налаштування та повну
довідку по каталогах Zen + Go.
Див. [OpenCode](/uk/providers/opencode), щоб переглянути спільний огляд онбордингу та повний
довідник каталогів Zen + Go.
</Tip>
## Пов’язано
## Пов’язане
<CardGroup cols={2}>
<Card title="OpenCode (батьківський)" href="/uk/providers/opencode" icon="server">
Спільне початкове налаштування, огляд каталогу та розширені примітки.
Спільний онбординг, огляд каталогу та додаткові примітки.
</Card>
<Card title="Вибір моделі" href="/uk/concepts/model-providers" icon="layers">
Вибір provider, посилань на моделі та поведінки failover.
Вибір провайдерів, посилань на моделі та поведінки резервного перемикання.
</Card>
</CardGroup>

View File

@ -1,37 +1,37 @@
---
read_when:
- Ви хочете доступ до моделей, розміщених в OpenCode
- Вам потрібен доступ до моделей, розміщених в OpenCode
- Ви хочете вибрати між каталогами Zen і Go
summary: Використання каталогів OpenCode Zen і Go з OpenClaw
summary: Використовуйте каталоги OpenCode Zen і Go з OpenClaw
title: OpenCode
x-i18n:
generated_at: "2026-04-23T23:05:20Z"
generated_at: "2026-04-25T04:07:31Z"
model: gpt-5.4
provider: openai
source_hash: d59c82a46988ef7dbbc98895af34441a5b378e5110ea636104df5f9c3672e3f0
source_hash: cb0521b038e519f139c66f98ddef4919d8c43ce64018ef8af8f7b42ac00114a4
source_path: providers/opencode.md
workflow: 15
---
OpenCode надає в OpenClaw два розміщені catalog:
OpenCode надає два розміщені каталоги в OpenClaw:
| Catalog | Префікс | Runtime-провайдер |
| ------- | ---------------- | ----------------- |
| **Zen** | `opencode/...` | `opencode` |
| **Go** | `opencode-go/...`| `opencode-go` |
| Каталог | Префікс | Постачальник середовища виконання |
| ------- | ---------------- | --------------------------------- |
| **Zen** | `opencode/...` | `opencode` |
| **Go** | `opencode-go/...` | `opencode-go` |
Обидва catalog використовують той самий API key OpenCode. OpenClaw зберігає id runtime-провайдерів
розділеними, щоб маршрутизація по моделях вище за потоком залишалася коректною, але onboarding і docs
розглядають це як єдине налаштування OpenCode.
Обидва каталоги використовують той самий API-ключ OpenCode. OpenClaw зберігає ідентифікатори постачальників середовища виконання
розділеними, щоб маршрутизація для кожної моделі на рівні upstream залишалася коректною, але онбординг і документація розглядають їх
як єдине налаштування OpenCode.
## Початок роботи
<Tabs>
<Tab title="Catalog Zen">
**Найкраще підходить для:** куруваного багатомодельного proxy OpenCode (Claude, GPT, Gemini).
<Tab title="Каталог Zen">
**Найкраще підходить для:** курованого багатомодельного проксі OpenCode (Claude, GPT, Gemini).
<Steps>
<Step title="Запустіть onboarding">
<Step title="Запустіть онбординг">
```bash
openclaw onboard --auth-choice opencode-zen
```
@ -42,12 +42,12 @@ OpenCode надає в OpenClaw два розміщені catalog:
openclaw onboard --opencode-zen-api-key "$OPENCODE_API_KEY"
```
</Step>
<Step title="Зробіть модель Zen типовою">
<Step title="Установіть модель Zen як стандартну">
```bash
openclaw config set agents.defaults.model.primary "opencode/claude-opus-4-6"
```
</Step>
<Step title="Переконайтеся, що моделі доступні">
<Step title="Перевірте, що моделі доступні">
```bash
openclaw models list --provider opencode
```
@ -56,11 +56,11 @@ OpenCode надає в OpenClaw два розміщені catalog:
</Tab>
<Tab title="Catalog Go">
<Tab title="Каталог Go">
**Найкраще підходить для:** лінійки Kimi, GLM і MiniMax, розміщеної в OpenCode.
<Steps>
<Step title="Запустіть onboarding">
<Step title="Запустіть онбординг">
```bash
openclaw onboard --auth-choice opencode-go
```
@ -71,12 +71,12 @@ OpenCode надає в OpenClaw два розміщені catalog:
openclaw onboard --opencode-go-api-key "$OPENCODE_API_KEY"
```
</Step>
<Step title="Зробіть модель Go типовою">
<Step title="Установіть модель Go як стандартну">
```bash
openclaw config set agents.defaults.model.primary "opencode-go/kimi-k2.5"
openclaw config set agents.defaults.model.primary "opencode-go/kimi-k2.6"
```
</Step>
<Step title="Переконайтеся, що моделі доступні">
<Step title="Перевірте, що моделі доступні">
```bash
openclaw models list --provider opencode-go
```
@ -86,7 +86,7 @@ OpenCode надає в OpenClaw два розміщені catalog:
</Tab>
</Tabs>
## Приклад config
## Приклад конфігурації
```json5
{
@ -95,62 +95,62 @@ OpenCode надає в OpenClaw два розміщені catalog:
}
```
## Вбудовані catalog
## Вбудовані каталоги
### Zen
| Властивість | Значення |
| ---------------- | ----------------------------------------------------------------------- |
| Runtime-провайдер | `opencode` |
| Властивість | Значення |
| ---------------- | ---------------------------------------------------------------------- |
| Постачальник середовища виконання | `opencode` |
| Приклади моделей | `opencode/claude-opus-4-6`, `opencode/gpt-5.5`, `opencode/gemini-3-pro` |
### Go
| Властивість | Значення |
| ---------------- | ------------------------------------------------------------------------ |
| Runtime-провайдер | `opencode-go` |
| Приклади моделей | `opencode-go/kimi-k2.5`, `opencode-go/glm-5`, `opencode-go/minimax-m2.5` |
| Властивість | Значення |
| ---------------- | ----------------------------------------------------------------------- |
| Постачальник середовища виконання | `opencode-go` |
| Приклади моделей | `opencode-go/kimi-k2.6`, `opencode-go/glm-5`, `opencode-go/minimax-m2.5` |
## Розширена конфігурація
<AccordionGroup>
<Accordion title="Alias API key">
`OPENCODE_ZEN_API_KEY` також підтримується як alias для `OPENCODE_API_KEY`.
<Accordion title="Псевдоніми API-ключа">
`OPENCODE_ZEN_API_KEY` також підтримується як псевдонім для `OPENCODE_API_KEY`.
</Accordion>
<Accordion title="Спільні облікові дані">
Введення одного ключа OpenCode під час setup зберігає облікові дані для обох runtime-
провайдерів. Вам не потрібно окремо проходити onboarding для кожного catalog.
Введення одного ключа OpenCode під час налаштування зберігає облікові дані для обох постачальників
середовища виконання. Вам не потрібно окремо проходити онбординг для кожного каталогу.
</Accordion>
<Accordion title="Білінг і dashboard">
Ви входите в OpenCode, додаєте платіжні дані й копіюєте свій API key. Білінг
і доступність catalog керуються з dashboard OpenCode.
<Accordion title="Білінг і панель керування">
Ви входите в OpenCode, додаєте платіжні дані та копіюєте свій API-ключ. Білінг
і доступність каталогів керуються з панелі керування OpenCode.
</Accordion>
<Accordion title="Поведінка replay для Gemini">
<Accordion title="Поведінка повторного відтворення Gemini">
Посилання OpenCode на базі Gemini залишаються на шляху proxy-Gemini, тому OpenClaw зберігає
там санітизацію thought-signature Gemini, не вмикаючи власну
валідацію replay Gemini або bootstrap-перезапис.
там очищення thought-signature Gemini без увімкнення власної перевірки повторного
відтворення Gemini або переписування bootstrap.
</Accordion>
<Accordion title="Поведінка replay не для Gemini">
Посилання OpenCode не на базі Gemini зберігають мінімальну політику replay, сумісну з OpenAI.
<Accordion title="Поведінка повторного відтворення не-Gemini">
Посилання OpenCode не-Gemini зберігають мінімальну політику повторного відтворення, сумісну з OpenAI.
</Accordion>
</AccordionGroup>
<Tip>
Введення одного ключа OpenCode під час setup зберігає облікові дані для обох runtime-провайдерів Zen і
Go, тож onboarding потрібно пройти лише один раз.
Введення одного ключа OpenCode під час налаштування зберігає облікові дані для обох постачальників середовища виконання,
Zen і Go, тому вам потрібно пройти онбординг лише один раз.
</Tip>
## Пов’язане
<CardGroup cols={2}>
<Card title="Вибір моделі" href="/uk/concepts/model-providers" icon="layers">
Вибір провайдерів, посилань на моделі та поведінки failover.
Вибір постачальників, посилань на моделі та поведінки резервного перемикання.
</Card>
<Card title="Довідник конфігурації" href="/uk/gateway/configuration-reference" icon="gear">
Повний довідник config для агентів, моделей і провайдерів.
<Card title="Довідник із конфігурації" href="/uk/gateway/configuration-reference" icon="gear">
Повний довідник із конфігурації для агентів, моделей і постачальників.
</Card>
</CardGroup>

View File

@ -1,15 +1,15 @@
---
read_when:
- Увімкнення перетворення тексту на мовлення для відповідей
- Налаштування TTS-провайдерів або обмежень
- Налаштування провайдерів TTS або обмежень
- Використання команд `/tts`
summary: Перетворення тексту на мовлення (TTS) для вихідних відповідей
title: Перетворення тексту на мовлення
x-i18n:
generated_at: "2026-04-25T03:44:38Z"
generated_at: "2026-04-25T04:07:50Z"
model: gpt-5.4
provider: openai
source_hash: 87a52ec119f063d56ffc1182533736ab9595c1f767750886ae20bcf45520cfd0
source_hash: 9f144c7e180a690278427700fa7b77d22c065ec108fe02faefd3bbb5bfb64fbd
source_path: tools/tts.md
workflow: 15
---
@ -21,24 +21,24 @@ OpenClaw може перетворювати вихідні відповіді
- **ElevenLabs** (основний або резервний провайдер)
- **Google Gemini** (основний або резервний провайдер; використовує Gemini API TTS)
- **Gradium** (основний або резервний провайдер; підтримує вивід голосових повідомлень і телефонії)
- **Gradium** (основний або резервний провайдер; підтримує вихід у форматі голосових повідомлень і телефонії)
- **Microsoft** (основний або резервний провайдер; поточна вбудована реалізація використовує `node-edge-tts`)
- **MiniMax** (основний або резервний провайдер; використовує API T2A v2)
- **OpenAI** (основний або резервний провайдер; також використовується для підсумків)
- **OpenAI** (основний або резервний провайдер; також використовується для зведень)
- **Vydra** (основний або резервний провайдер; спільний провайдер зображень, відео та мовлення)
- **xAI** (основний або резервний провайдер; використовує API xAI TTS)
- **xAI** (основний або резервний провайдер; використовує xAI TTS API)
### Примітки щодо мовлення Microsoft
Поточний вбудований провайдер мовлення Microsoft використовує онлайн-службу
нейронного TTS Microsoft Edge через бібліотеку `node-edge-tts`. Це хостинговий сервіс (не
Поточний вбудований провайдер мовлення Microsoft використовує онлайновий
нейронний сервіс TTS Microsoft Edge через бібліотеку `node-edge-tts`. Це хостований сервіс (не
локальний), він використовує кінцеві точки Microsoft і не потребує API-ключа.
`node-edge-tts` надає параметри конфігурації мовлення та формати виводу, але
сервіс підтримує не всі параметри. Застаріла конфігурація та директивний ввід
із використанням `edge` усе ще працюють і нормалізуються до `microsoft`.
`node-edge-tts` надає параметри налаштування мовлення та формати виводу, але
не всі параметри підтримуються сервісом. Старі налаштування та вхідні директиви,
що використовують `edge`, усе ще працюють і нормалізуються до `microsoft`.
Оскільки цей шлях є публічним вебсервісом без опублікованої SLA або квоти,
ставтеся до нього як до best-effort. Якщо вам потрібні гарантовані ліміти та підтримка, використовуйте OpenAI
Оскільки цей шлях є публічним вебсервісом без опублікованого SLA або квоти,
вважайте його best-effort. Якщо вам потрібні гарантовані ліміти та підтримка, використовуйте OpenAI
або ElevenLabs.
## Необов’язкові ключі
@ -53,11 +53,11 @@ OpenClaw може перетворювати вихідні відповіді
- `VYDRA_API_KEY`
- `XAI_API_KEY`
Для мовлення Microsoft API-ключ **не** потрібен.
Мовлення Microsoft **не** потребує API-ключа.
Якщо налаштовано кілька провайдерів, спочатку використовується вибраний провайдер, а інші є резервними варіантами.
Автопідсумок використовує налаштований `summaryModel` (або `agents.defaults.model.primary`),
тому, якщо ви ввімкнете підсумки, цей провайдер також має бути автентифікований.
Якщо налаштовано кілька провайдерів, спочатку використовується вибраний провайдер, а інші слугують резервними.
Автоматичне зведення використовує налаштований `summaryModel` (або `agents.defaults.model.primary`),
тому, якщо ви вмикаєте зведення, цей провайдер також має бути автентифікований.
## Посилання на сервіси
@ -66,18 +66,18 @@ OpenClaw може перетворювати вихідні відповіді
- [ElevenLabs Text to Speech](https://elevenlabs.io/docs/api-reference/text-to-speech)
- [Автентифікація ElevenLabs](https://elevenlabs.io/docs/api-reference/authentication)
- [Gradium](/uk/providers/gradium)
- [API MiniMax T2A v2](https://platform.minimaxi.com/document/T2A%20V2)
- [MiniMax T2A v2 API](https://platform.minimaxi.com/document/T2A%20V2)
- [node-edge-tts](https://github.com/SchneeHertz/node-edge-tts)
- [Формати виводу Microsoft Speech](https://learn.microsoft.com/azure/ai-services/speech-service/rest-text-to-speech#audio-outputs)
- [xAI Text to Speech](https://docs.x.ai/developers/rest-api-reference/inference/voice#text-to-speech-rest)
## Чи ввімкнено це за замовчуванням?
Ні. AutoTTS **вимкнено** за замовчуванням. Увімкніть його в конфігурації через
`messages.tts.auto` або локально за допомогою `/tts on`.
Ні. AutoTTS **вимкнено** за замовчуванням. Увімкніть його в конфігурації за допомогою
`messages.tts.auto` або локально через `/tts on`.
Коли `messages.tts.provider` не задано, OpenClaw вибирає першого налаштованого
провайдера мовлення в порядку автоматичного вибору реєстру.
Якщо `messages.tts.provider` не задано, OpenClaw вибирає перший налаштований
провайдер мовлення відповідно до порядку автоматичного вибору в реєстрі.
## Конфігурація
@ -97,7 +97,7 @@ OpenClaw може перетворювати вихідні відповіді
}
```
### OpenAI як основний, ElevenLabs як резервний
### OpenAI як основний із резервним ElevenLabs
```json5
{
@ -205,9 +205,9 @@ OpenClaw може перетворювати вихідні відповіді
}
```
Google Gemini TTS використовує шлях API-ключа Gemini API. Тут підходить API-ключ Google Cloud Console,
обмежений Gemini API, і це той самий тип ключа, який використовується
вбудованим провайдером генерації зображень Google. Порядок визначення:
Google Gemini TTS використовує шлях API-ключа Gemini. API-ключ Google Cloud Console,
обмежений Gemini API, тут є дійсним, і це той самий тип ключа, що використовується
вбудованим провайдером генерації зображень Google. Порядок розв’язання:
`messages.tts.providers.google.apiKey` -> `models.providers.google.apiKey` ->
`GEMINI_API_KEY` -> `GOOGLE_API_KEY`.
@ -233,10 +233,10 @@ Google Gemini TTS використовує шлях API-ключа Gemini API.
}
```
xAI TTS використовує той самий шлях `XAI_API_KEY`, що й вбудований
провайдер моделей Grok. Порядок визначення: `messages.tts.providers.xai.apiKey` -> `XAI_API_KEY`.
xAI TTS використовує той самий шлях `XAI_API_KEY`, що й вбудований провайдер моделей Grok.
Порядок розв’язання: `messages.tts.providers.xai.apiKey` -> `XAI_API_KEY`.
Поточні доступні голоси: `ara`, `eve`, `leo`, `rex`, `sal` і `una`; `eve`
голос за замовчуванням. `language` приймає тег BCP-47 або `auto`.
типовий. `language` приймає тег BCP-47 або `auto`.
### OpenRouter як основний
@ -260,7 +260,7 @@ xAI TTS використовує той самий шлях `XAI_API_KEY`, що
```
OpenRouter TTS використовує той самий шлях `OPENROUTER_API_KEY`, що й вбудований
провайдер моделей OpenRouter. Порядок визначення:
провайдер моделей OpenRouter. Порядок розв’язання:
`messages.tts.providers.openrouter.apiKey` ->
`models.providers.openrouter.apiKey` -> `OPENROUTER_API_KEY`.
@ -284,7 +284,7 @@ OpenRouter TTS використовує той самий шлях `OPENROUTER_A
}
```
### Вимкнення мовлення Microsoft
### Вимкнути мовлення Microsoft
```json5
{
@ -300,7 +300,7 @@ OpenRouter TTS використовує той самий шлях `OPENROUTER_A
}
```
### Власні ліміти + шлях до prefs
### Власні ліміти + шлях до налаштувань
```json5
{
@ -327,7 +327,7 @@ OpenRouter TTS використовує той самий шлях `OPENROUTER_A
}
```
### Вимкнення автопідсумку для довгих відповідей
### Вимкнути автоматичне зведення для довгих відповідей
```json5
{
@ -350,51 +350,51 @@ OpenRouter TTS використовує той самий шлях `OPENROUTER_A
- `auto`: режим autoTTS (`off`, `always`, `inbound`, `tagged`).
- `inbound` надсилає аудіо лише після вхідного голосового повідомлення.
- `tagged` надсилає аудіо лише тоді, коли відповідь містить директиви `[[tts:key=value]]` або блок `[[tts:text]]...[[/tts:text]]`.
- `enabled`: застарілий перемикач (doctor мігрує його до `auto`).
- `enabled`: застарілий перемикач (doctor переносить це до `auto`).
- `mode`: `"final"` (типово) або `"all"` (включає відповіді інструментів/блоків).
- `provider`: ідентифікатор провайдера мовлення, наприклад `"elevenlabs"`, `"google"`, `"gradium"`, `"microsoft"`, `"minimax"`, `"openai"`, `"vydra"` або `"xai"` (резервне перемикання відбувається автоматично).
- Якщо `provider` **не задано**, OpenClaw використовує першого налаштованого провайдера мовлення в порядку автоматичного вибору реєстру.
- Застарілий `provider: "edge"` усе ще працює й нормалізується до `microsoft`.
- `summaryModel`: необов’язкова недорога модель для автопідсумку; за замовчуванням використовується `agents.defaults.model.primary`.
- `provider`: ідентифікатор провайдера мовлення, наприклад `"elevenlabs"`, `"google"`, `"gradium"`, `"microsoft"`, `"minimax"`, `"openai"`, `"vydra"` або `"xai"` (резервний вибір відбувається автоматично).
- Якщо `provider` **не задано**, OpenClaw використовує першого налаштованого провайдера мовлення відповідно до порядку автоматичного вибору в реєстрі.
- Застарілий `provider: "edge"` усе ще працює і нормалізується до `microsoft`.
- `summaryModel`: необов’язкова недорога модель для автоматичного зведення; типово використовується `agents.defaults.model.primary`.
- Приймає `provider/model` або налаштований псевдонім моделі.
- `modelOverrides`: дозволяє моделі видавати директиви TTS (увімкнено за замовчуванням).
- `allowProvider` за замовчуванням має значення `false` (перемикання провайдера вмикається лише явно).
- `providers.<id>`: налаштування провайдера, що належать провайдеру, з ключем за ідентифікатором провайдера мовлення.
- Застарілі прямі блоки провайдерів (`messages.tts.openai`, `messages.tts.elevenlabs`, `messages.tts.microsoft`, `messages.tts.edge`) автоматично мігруються до `messages.tts.providers.<id>` під час завантаження.
- `maxTextLength`: жорстке обмеження для вхідного тексту TTS (символи). `/tts audio` завершується помилкою, якщо його перевищено.
- `modelOverrides`: дозволяє моделі видавати директиви TTS (типово ввімкнено).
- `allowProvider` типово має значення `false` (перемикання провайдера вмикається явно).
- `providers.<id>`: налаштування, що належать провайдеру, із ключем за ідентифікатором провайдера мовлення.
- Застарілі прямі блоки провайдерів (`messages.tts.openai`, `messages.tts.elevenlabs`, `messages.tts.microsoft`, `messages.tts.edge`) виправляються через `openclaw doctor --fix`; у збереженій конфігурації слід використовувати `messages.tts.providers.<id>`.
- `maxTextLength`: жорстке обмеження для вхідного тексту TTS (символи). `/tts audio` завершується помилкою, якщо ліміт перевищено.
- `timeoutMs`: тайм-аут запиту (мс).
- `prefsPath`: перевизначає локальний шлях до JSON-файлу налаштувань (провайдер/ліміт/підсумок).
- `prefsPath`: перевизначає локальний шлях до JSON-файлу налаштувань (провайдер/ліміт/зведення).
- Значення `apiKey` повертаються до змінних середовища (`ELEVENLABS_API_KEY`/`XI_API_KEY`, `GEMINI_API_KEY`/`GOOGLE_API_KEY`, `GRADIUM_API_KEY`, `MINIMAX_API_KEY`, `OPENAI_API_KEY`, `VYDRA_API_KEY`, `XAI_API_KEY`).
- `providers.elevenlabs.baseUrl`: перевизначає базовий URL API ElevenLabs.
- `providers.openai.baseUrl`: перевизначає кінцеву точку OpenAI TTS.
- Порядок визначення: `messages.tts.providers.openai.baseUrl` -> `OPENAI_TTS_BASE_URL` -> `https://api.openai.com/v1`
- Нестандартні значення розглядаються як сумісні з OpenAI TTS кінцеві точки, тому дозволені власні назви моделей і голосів.
- Порядок розв’язання: `messages.tts.providers.openai.baseUrl` -> `OPENAI_TTS_BASE_URL` -> `https://api.openai.com/v1`
- Нестандартні значення вважаються OpenAI-сумісними кінцевими точками TTS, тому власні назви моделей і голосів підтримуються.
- `providers.elevenlabs.voiceSettings`:
- `stability`, `similarityBoost`, `style`: `0..1`
- `useSpeakerBoost`: `true|false`
- `speed`: `0.5..2.0` (1.0 = нормально)
- `speed`: `0.5..2.0` (1.0 = звичайна швидкість)
- `providers.elevenlabs.applyTextNormalization`: `auto|on|off`
- `providers.elevenlabs.languageCode`: 2-літерний ISO 639-1 (наприклад, `en`, `de`)
- `providers.elevenlabs.seed`: ціле число `0..4294967295` (best-effort детермінізм)
- `providers.minimax.baseUrl`: перевизначає базовий URL API MiniMax (типово `https://api.minimax.io`, env: `MINIMAX_API_HOST`).
- `providers.minimax.model`: модель TTS (типово `speech-2.8-hd`, env: `MINIMAX_TTS_MODEL`).
- `providers.minimax.voiceId`: ідентифікатор голосу (типово `English_expressive_narrator`, env: `MINIMAX_TTS_VOICE_ID`).
- `providers.elevenlabs.languageCode`: дволітерний ISO 639-1 (наприклад, `en`, `de`)
- `providers.elevenlabs.seed`: ціле число `0..4294967295` (best-effort детермінованість)
- `providers.minimax.baseUrl`: перевизначає базовий URL API MiniMax (типово `https://api.minimax.io`, змінна середовища: `MINIMAX_API_HOST`).
- `providers.minimax.model`: модель TTS (типово `speech-2.8-hd`, змінна середовища: `MINIMAX_TTS_MODEL`).
- `providers.minimax.voiceId`: ідентифікатор голосу (типово `English_expressive_narrator`, змінна середовища: `MINIMAX_TTS_VOICE_ID`).
- `providers.minimax.speed`: швидкість відтворення `0.5..2.0` (типово 1.0).
- `providers.minimax.vol`: гучність `(0, 10]` (типово 1.0; має бути більшою за 0).
- `providers.minimax.pitch`: зсув тону `-12..12` (типово 0).
- `providers.minimax.pitch`: цілочисельний зсув тону `-12..12` (типово 0). Дробові значення обрізаються перед викликом MiniMax T2A, оскільки API відхиляє нецілі значення тону.
- `providers.google.model`: модель Gemini TTS (типово `gemini-3.1-flash-tts-preview`).
- `providers.google.voiceName`: назва вбудованого голосу Gemini (типово `Kore`; також приймається `voice`).
- `providers.google.baseUrl`: перевизначає базовий URL Gemini API. Дозволено лише `https://generativelanguage.googleapis.com`.
- Якщо `messages.tts.providers.google.apiKey` не вказано, TTS може повторно використовувати `models.providers.google.apiKey` перед поверненням до змінних середовища.
- `providers.google.baseUrl`: перевизначає базовий URL API Gemini. Підтримується лише `https://generativelanguage.googleapis.com`.
- Якщо `messages.tts.providers.google.apiKey` пропущено, TTS може повторно використати `models.providers.google.apiKey` перед поверненням до змінних середовища.
- `providers.gradium.baseUrl`: перевизначає базовий URL API Gradium (типово `https://api.gradium.ai`).
- `providers.gradium.voiceId`: ідентифікатор голосу Gradium (типово Emma, `YTpq7expH9539ERJ`).
- `providers.xai.apiKey`: API-ключ xAI TTS (env: `XAI_API_KEY`).
- `providers.xai.baseUrl`: перевизначає базовий URL xAI TTS (типово `https://api.x.ai/v1`, env: `XAI_BASE_URL`).
- `providers.xai.apiKey`: API-ключ xAI TTS (змінна середовища: `XAI_API_KEY`).
- `providers.xai.baseUrl`: перевизначає базовий URL xAI TTS (типово `https://api.x.ai/v1`, змінна середовища: `XAI_BASE_URL`).
- `providers.xai.voiceId`: ідентифікатор голосу xAI (типово `eve`; поточні доступні голоси: `ara`, `eve`, `leo`, `rex`, `sal`, `una`).
- `providers.xai.language`: код мови BCP-47 або `auto` (типово `en`).
- `providers.xai.responseFormat`: `mp3`, `wav`, `pcm`, `mulaw` або `alaw` (типово `mp3`).
- `providers.xai.speed`: перевизначення швидкості на рівні провайдера.
- `providers.openrouter.apiKey`: API-ключ OpenRouter (env: `OPENROUTER_API_KEY`; може повторно використовувати `models.providers.openrouter.apiKey`).
- `providers.openrouter.apiKey`: API-ключ OpenRouter (змінна середовища: `OPENROUTER_API_KEY`; може повторно використовувати `models.providers.openrouter.apiKey`).
- `providers.openrouter.baseUrl`: перевизначає базовий URL OpenRouter TTS (типово `https://openrouter.ai/api/v1`; застарілий `https://openrouter.ai/v1` нормалізується).
- `providers.openrouter.model`: ідентифікатор моделі OpenRouter TTS (типово `hexgrad/kokoro-82m`; також приймається `modelId`).
- `providers.openrouter.voice`: специфічний для провайдера ідентифікатор голосу (типово `af_alloy`; також приймається `voiceId`).
@ -404,32 +404,32 @@ OpenRouter TTS використовує той самий шлях `OPENROUTER_A
- `providers.microsoft.voice`: назва нейронного голосу Microsoft (наприклад, `en-US-MichelleNeural`).
- `providers.microsoft.lang`: код мови (наприклад, `en-US`).
- `providers.microsoft.outputFormat`: формат виводу Microsoft (наприклад, `audio-24khz-48kbitrate-mono-mp3`).
- Перегляньте формати виводу Microsoft Speech для допустимих значень; не всі формати підтримуються вбудованим транспортом на основі Edge.
- `providers.microsoft.rate` / `providers.microsoft.pitch` / `providers.microsoft.volume`: рядки у відсотках (наприклад, `+10%`, `-5%`).
- Див. допустимі значення у формати виводу Microsoft Speech; не всі формати підтримуються вбудованим транспортом на базі Edge.
- `providers.microsoft.rate` / `providers.microsoft.pitch` / `providers.microsoft.volume`: рядки з відсотками (наприклад, `+10%`, `-5%`).
- `providers.microsoft.saveSubtitles`: записує JSON-субтитри поруч з аудіофайлом.
- `providers.microsoft.proxy`: URL проксі для запитів мовлення Microsoft.
- `providers.microsoft.timeoutMs`: перевизначення тайм-ауту запиту (мс).
- `edge.*`: застарілий псевдонім для тих самих налаштувань Microsoft.
## Перевизначення, керовані моделлю (увімкнено за замовчуванням)
## Керовані моделлю перевизначення (типово ввімкнено)
За замовчуванням модель **може** видавати директиви TTS для однієї відповіді.
Типово модель **може** видавати директиви TTS для однієї відповіді.
Коли `messages.tts.auto` має значення `tagged`, ці директиви потрібні для запуску аудіо.
Коли це ввімкнено, модель може видавати директиви `[[tts:...]]` для перевизначення голосу
для однієї відповіді, а також необов’язковий блок `[[tts:text]]...[[/tts:text]]`, щоб
додати виразні теги (сміх, підказки для співу тощо), які мають з’являтися лише в
аудіо.
Якщо це ввімкнено, модель може видавати директиви `[[tts:...]]`, щоб перевизначити голос
для однієї відповіді, а також необов’язковий блок `[[tts:text]]...[[/tts:text]]`,
щоб додати виразні теги (сміх, вокальні підказки тощо), які мають з’являтися лише
в аудіо.
Директиви `provider=...` ігноруються, якщо не встановлено `modelOverrides.allowProvider: true`.
Директиви `provider=...` ігноруються, якщо не вказано `modelOverrides.allowProvider: true`.
Приклад пейлоада відповіді:
Приклад вмісту відповіді:
```
Ось, будь ласка.
Here you go.
[[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](сміється) Прочитай пісню ще раз.[[/tts:text]]
[[tts:text]](laughs) Read the song once more.[[/tts:text]]
```
Доступні ключі директив (коли ввімкнено):
@ -439,7 +439,7 @@ OpenRouter TTS використовує той самий шлях `OPENROUTER_A
- `model` (модель OpenAI TTS, ідентифікатор моделі ElevenLabs або модель MiniMax) або `google_model` (модель Google TTS)
- `stability`, `similarityBoost`, `style`, `speed`, `useSpeakerBoost`
- `vol` / `volume` (гучність MiniMax, 0-10)
- `pitch` (тон MiniMax, від -12 до 12)
- `pitch` (цілочисельний тон MiniMax, від -12 до 12; дробові значення обрізаються перед запитом до MiniMax)
- `applyTextNormalization` (`auto|on|off`)
- `languageCode` (ISO 639-1)
- `seed`
@ -458,7 +458,7 @@ OpenRouter TTS використовує той самий шлях `OPENROUTER_A
}
```
Необов’язковий список дозволів (увімкнути перемикання провайдера, залишивши інші параметри налаштовуваними):
Необов’язковий список дозволів (увімкнути перемикання провайдера, зберігаючи інші параметри налаштовуваними):
```json5
{
@ -474,9 +474,9 @@ OpenRouter TTS використовує той самий шлях `OPENROUTER_A
}
```
## Налаштування для окремого користувача
## Налаштування для кожного користувача
Команди зі слешем записують локальні перевизначення до `prefsPath` (типово:
Слеш-команди записують локальні перевизначення в `prefsPath` (типово:
`~/.openclaw/settings/tts.json`, перевизначається через `OPENCLAW_TTS_PREFS` або
`messages.tts.prefsPath`).
@ -484,7 +484,7 @@ OpenRouter TTS використовує той самий шлях `OPENROUTER_A
- `enabled`
- `provider`
- `maxLength` (поріг підсумку; типово 1500 символів)
- `maxLength` (поріг зведення; типово 1500 символів)
- `summarize` (типово `true`)
Вони перевизначають `messages.tts.*` для цього хоста.
@ -495,54 +495,54 @@ OpenRouter TTS використовує той самий шлях `OPENROUTER_A
- 48 кГц / 64 кбіт/с — хороший компроміс для голосових повідомлень.
- **Інші канали**: MP3 (`mp3_44100_128` від ElevenLabs, `mp3` від OpenAI).
- 44,1 кГц / 128 кбіт/с — типовий баланс для чіткості мовлення.
- **MiniMax**: MP3 (модель `speech-2.8-hd`, частота дискретизації 32 кГц). Формат голосових повідомлень нативно не підтримується; використовуйте OpenAI або ElevenLabs для гарантованих голосових повідомлень Opus.
- **Google Gemini**: Gemini API TTS повертає сирий PCM 24 кГц. OpenClaw обгортає його у WAV для аудіовкладень і повертає PCM напряму для Talk/телефонії. Нативний формат голосових повідомлень Opus цим шляхом не підтримується.
- **MiniMax**: MP3 (модель `speech-2.8-hd`, частота дискретизації 32 кГц) для звичайних аудіовкладень. Для цілей голосових повідомлень, як-от Feishu і Telegram, OpenClaw перекодовує MP3 MiniMax у 48 кГц Opus за допомогою `ffmpeg` перед доставленням.
- **Google Gemini**: Gemini API TTS повертає необроблений PCM 24 кГц. OpenClaw упаковує його як WAV для аудіовкладень і повертає PCM напряму для Talk/телефонії. Нативний формат голосових повідомлень Opus цим шляхом не підтримується.
- **Gradium**: WAV для аудіовкладень, Opus для цілей голосових повідомлень і `ulaw_8000` на 8 кГц для телефонії.
- **xAI**: типово MP3; `responseFormat` може бути `mp3`, `wav`, `pcm`, `mulaw` або `alaw`. OpenClaw використовує пакетну REST-кінцеву точку xAI TTS і повертає повністю сформоване аудіовкладення; WebSocket потокового TTS xAI цим шляхом провайдера не використовується. Нативний формат голосових повідомлень Opus цим шляхом не підтримується.
- **xAI**: типово MP3; `responseFormat` може бути `mp3`, `wav`, `pcm`, `mulaw` або `alaw`. OpenClaw використовує пакетну REST-кінцеву точку xAI TTS і повертає готове аудіовкладення; потоковий WebSocket TTS xAI цим шляхом провайдера не використовується. Нативний формат голосових повідомлень Opus цим шляхом не підтримується.
- **Microsoft**: використовує `microsoft.outputFormat` (типово `audio-24khz-48kbitrate-mono-mp3`).
- Вбудований транспорт приймає `outputFormat`, але сервіс надає не всі формати.
- Вбудований транспорт приймає `outputFormat`, але не всі формати доступні в сервісі.
- Значення формату виводу відповідають форматам виводу Microsoft Speech (включно з Ogg/WebM Opus).
- Telegram `sendVoice` приймає OGG/MP3/M4A; використовуйте OpenAI/ElevenLabs, якщо вам потрібні
гарантовані голосові повідомлення Opus.
- Якщо налаштований формат виводу Microsoft завершується помилкою, OpenClaw повторює спробу з MP3.
- Telegram `sendVoice` приймає OGG/MP3/M4A; використовуйте OpenAI/ElevenLabs, якщо вам
потрібні гарантовані голосові повідомлення Opus.
- Якщо налаштований формат виводу Microsoft не спрацьовує, OpenClaw повторює спробу з MP3.
Формати виводу OpenAI/ElevenLabs фіксовані для кожного каналу (див. вище).
## Поведінка auto-TTS
## Поведінка Auto-TTS
Коли ввімкнено, OpenClaw:
Коли це ввімкнено, OpenClaw:
- пропускає TTS, якщо відповідь уже містить медіа або директиву `MEDIA:`.
- пропускає дуже короткі відповіді (< 10 символів).
- створює підсумки для довгих відповідей, якщо це ввімкнено, використовуючи `agents.defaults.model.primary` (або `summaryModel`).
- додає згенероване аудіо до відповіді.
- створює зведення для довгих відповідей, якщо це ввімкнено, використовуючи `agents.defaults.model.primary` (або `summaryModel`).
- прикріплює згенероване аудіо до відповіді.
Якщо відповідь перевищує `maxLength`, а підсумки вимкнено (або немає API-ключа для
моделі підсумків), аудіо
пропускається, і надсилається звичайна текстова відповідь.
Якщо відповідь перевищує `maxLength`, а зведення вимкнено (або немає API-ключа для
моделі зведення), аудіо
пропускається і надсилається звичайна текстова відповідь.
## Схема потоку
```
Відповідь -> TTS увімкнено?
ні -> надіслати текст
так -> є медіа / MEDIA: / коротка?
так -> надіслати текст
ні -> довжина > ліміт?
ні -> TTS -> додати аудіо
так -> підсумок увімкнено?
ні -> надіслати текст
так -> підсумувати (summaryModel або agents.defaults.model.primary)
-> TTS -> додати аудіо
Reply -> TTS enabled?
no -> send text
yes -> has media / MEDIA: / short?
yes -> send text
no -> length > limit?
no -> TTS -> attach audio
yes -> summary enabled?
no -> send text
yes -> summarize (summaryModel or agents.defaults.model.primary)
-> TTS -> attach audio
```
## Використання команд зі слешем
## Використання слеш-команд
Є одна команда: `/tts`.
Докладніше про ввімкнення див. у [Команди зі слешем](/uk/tools/slash-commands).
Існує одна команда: `/tts`.
Деталі ввімкнення див. у [Слеш-команди](/uk/tools/slash-commands).
Примітка для Discord: `/tts` — це вбудована команда Discord, тому OpenClaw реєструє
там `/voice` як нативну команду. Текстова команда `/tts ...` усе ще працює.
там `/voice` як нативну команду. Текстовий `/tts ...` усе одно працює.
```
/tts off
@ -563,19 +563,19 @@ OpenRouter TTS використовує той самий шлях `OPENROUTER_A
- Використовуйте конфігурацію, якщо вам потрібні типові значення `inbound` або `tagged`.
- `limit` і `summary` зберігаються в локальних налаштуваннях, а не в основній конфігурації.
- `/tts audio` генерує одноразову аудіовідповідь (не вмикає TTS).
- `/tts status` включає видимість резервного перемикання для останньої спроби:
- успішне резервне перемикання: `Fallback: <primary> -> <used>` плюс `Attempts: ...`
- `/tts status` містить видимість резервного переходу для останньої спроби:
- успішний резервний перехід: `Fallback: <primary> -> <used>` плюс `Attempts: ...`
- помилка: `Error: ...` плюс `Attempts: ...`
- детальна діагностика: `Attempt details: provider:outcome(reasonCode) latency`
- Помилки API OpenAI і ElevenLabs тепер включають розібрані деталі помилки провайдера та id запиту (коли його повертає провайдер), що відображається в помилках/логах TTS.
- Збої API OpenAI та ElevenLabs тепер містять розібрані деталі помилки провайдера та ідентифікатор запиту (коли провайдер його повертає), що відображається в помилках/журналах TTS.
## Інструмент агента
Інструмент `tts` перетворює текст на мовлення та повертає аудіовкладення для
доставки у відповіді. Якщо каналом є Feishu, Matrix, Telegram або WhatsApp,
Інструмент `tts` перетворює текст на мовлення й повертає аудіовкладення для
доставлення відповіді. Коли каналом є Feishu, Matrix, Telegram або WhatsApp,
аудіо доставляється як голосове повідомлення, а не як файлове вкладення.
Він приймає необов’язкові поля `channel` і `timeoutMs`; `timeoutMs` — це
тайм-аут запиту до провайдера для окремого виклику в мілісекундах.
тайм-аут запиту провайдера для окремого виклику в мілісекундах.
## Gateway RPC