chore(i18n): refresh uk translations
This commit is contained in:
parent
b7a6405acf
commit
8246384f64
@ -5,10 +5,10 @@ read_when:
|
||||
summary: 'Plugin Google Meet: приєднання до явних URL-адрес Meet через Chrome або Twilio з типовими налаштуваннями голосу в реальному часі'
|
||||
title: Plugin Google Meet
|
||||
x-i18n:
|
||||
generated_at: "2026-04-24T08:44:59Z"
|
||||
generated_at: "2026-04-24T09:19:21Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 8d430a1f2d6ee7fc1d997ef388a2e0d2915a6475480343e7060edac799dfc027
|
||||
source_hash: f1673ac4adc9cf163194a340dd6e451d0e4d28bb62adeb126898298e62106d43
|
||||
source_path: plugins/google-meet.md
|
||||
workflow: 15
|
||||
---
|
||||
@ -19,36 +19,39 @@ x-i18n:
|
||||
|
||||
Plugin є навмисно явним:
|
||||
|
||||
- Він приєднується лише за явним URL `https://meet.google.com/...`.
|
||||
- Він приєднується лише до явного URL `https://meet.google.com/...`.
|
||||
- Голос `realtime` є режимом за замовчуванням.
|
||||
- Голос realtime може повертатися до повного агента OpenClaw, коли потрібні глибші
|
||||
- Голос у реальному часі може повертатися до повного агента OpenClaw, коли потрібні глибші
|
||||
міркування або інструменти.
|
||||
- Автентифікація починається з особистого Google OAuth або вже виконаного входу в профіль Chrome.
|
||||
- Автоматичного оголошення згоди немає.
|
||||
- Типовий аудіобекенд Chrome — `BlackHole 2ch`.
|
||||
- Chrome може працювати локально або на підключеному вузлі.
|
||||
- Twilio приймає номер для дозвону та необов’язкову PIN-код або DTMF-послідовність.
|
||||
- Типовим аудіобекендом Chrome є `BlackHole 2ch`.
|
||||
- Chrome може працювати локально або на підключеному вузлі хоста.
|
||||
- Twilio приймає номер для дозвону та необов’язковий PIN або послідовність DTMF.
|
||||
- Команда CLI — `googlemeet`; `meet` зарезервовано для ширших
|
||||
телекомунікаційних робочих процесів агента.
|
||||
робочих процесів телеконференцій агентів.
|
||||
|
||||
## Швидкий старт
|
||||
|
||||
Установіть локальні аудіозалежності й переконайтеся, що провайдер realtime може використовувати
|
||||
OpenAI:
|
||||
Установіть локальні аудіозалежності та налаштуйте бекенд-провайдера голосу в реальному часі.
|
||||
OpenAI використовується за замовчуванням; Google Gemini Live також працює з
|
||||
`realtime.provider: "google"`:
|
||||
|
||||
```bash
|
||||
brew install blackhole-2ch sox
|
||||
export OPENAI_API_KEY=sk-...
|
||||
# or
|
||||
export GEMINI_API_KEY=...
|
||||
```
|
||||
|
||||
`blackhole-2ch` установлює віртуальний аудіопристрій `BlackHole 2ch`. Інсталятор
|
||||
Homebrew потребує перезавантаження, перш ніж macOS покаже цей пристрій:
|
||||
Homebrew вимагає перезавантаження, перш ніж macOS зробить пристрій доступним:
|
||||
|
||||
```bash
|
||||
sudo reboot
|
||||
```
|
||||
|
||||
Після перезавантаження перевірте обидва компоненти:
|
||||
Після перезавантаження перевірте обидві складові:
|
||||
|
||||
```bash
|
||||
system_profiler SPAudioDataType | grep -i BlackHole
|
||||
@ -92,33 +95,33 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij
|
||||
```
|
||||
|
||||
Chrome приєднується як профіль Chrome, у якому виконано вхід. У Meet виберіть `BlackHole 2ch` для
|
||||
шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого двобічного аудіо використовуйте
|
||||
окремі віртуальні пристрої або граф у стилі Loopback; одного пристрою BlackHole
|
||||
достатньо для першого smoke-тесту, але може виникати луна.
|
||||
шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого двостороннього аудіо використовуйте
|
||||
окремі віртуальні пристрої або граф на кшталт Loopback; одного пристрою BlackHole
|
||||
достатньо для першого димового тесту, але може виникати луна.
|
||||
|
||||
### Локальний Gateway + Parallels Chrome
|
||||
|
||||
Вам **не** потрібен повний OpenClaw Gateway або ключ API моделі всередині macOS VM
|
||||
лише для того, щоб Chrome працював у VM. Запустіть Gateway і агента локально, а потім запустіть
|
||||
вузол-хост у VM. Один раз увімкніть вбудований Plugin у VM, щоб вузол
|
||||
лише для того, щоб VM володіла Chrome. Запустіть Gateway і агента локально, а потім
|
||||
запустіть хост вузла у VM. Один раз увімкніть вбудований Plugin у VM, щоб вузол
|
||||
рекламував команду Chrome:
|
||||
|
||||
Що де працює:
|
||||
Що де запускається:
|
||||
|
||||
- Хост Gateway: OpenClaw Gateway, робочий простір агента, ключі моделі/API, realtime
|
||||
провайдер і конфігурація Plugin Google Meet.
|
||||
- Parallels macOS VM: CLI/node host OpenClaw, Google Chrome, SoX, BlackHole 2ch
|
||||
і профіль Chrome із виконаним входом у Google.
|
||||
- Не потрібно у VM: служба Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування
|
||||
провайдера моделі.
|
||||
- Хост Gateway: OpenClaw Gateway, робочий простір агента, ключі моделі/API, провайдер
|
||||
реального часу та конфігурація Plugin Google Meet.
|
||||
- Parallels macOS VM: OpenClaw CLI/хост вузла, Google Chrome, SoX, BlackHole 2ch,
|
||||
і профіль Chrome з виконаним входом у Google.
|
||||
- Не потрібно у VM: служба Gateway, конфігурація агента, ключ OpenAI/GPT або
|
||||
налаштування провайдера моделі.
|
||||
|
||||
Установіть залежності VM:
|
||||
Установіть залежності у VM:
|
||||
|
||||
```bash
|
||||
brew install blackhole-2ch sox
|
||||
```
|
||||
|
||||
Перезавантажте VM після встановлення BlackHole, щоб macOS показала `BlackHole 2ch`:
|
||||
Перезавантажте VM після встановлення BlackHole, щоб macOS зробила `BlackHole 2ch` доступним:
|
||||
|
||||
```bash
|
||||
sudo reboot
|
||||
@ -137,21 +140,21 @@ command -v rec play
|
||||
openclaw plugins enable google-meet
|
||||
```
|
||||
|
||||
Запустіть вузол-хост у VM:
|
||||
Запустіть хост вузла у VM:
|
||||
|
||||
```bash
|
||||
openclaw node run --host <gateway-host> --port 18789 --display-name parallels-macos
|
||||
```
|
||||
|
||||
Якщо `<gateway-host>` — це LAN IP і ви не використовуєте TLS, вузол відхиляє
|
||||
простий WebSocket, якщо ви явно не дозволите це для цієї довіреної приватної мережі:
|
||||
Якщо `<gateway-host>` — це IP-адреса LAN і ви не використовуєте TLS, вузол відхиляє
|
||||
незашифрований WebSocket, якщо ви явно не дозволите це для цієї довіреної приватної мережі:
|
||||
|
||||
```bash
|
||||
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
|
||||
openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macos
|
||||
```
|
||||
|
||||
Використовуйте ту саму змінну середовища під час встановлення вузла як LaunchAgent:
|
||||
Використовуйте ту саму змінну середовища, коли встановлюєте вузол як LaunchAgent:
|
||||
|
||||
```bash
|
||||
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
|
||||
@ -163,7 +166,7 @@ openclaw node restart
|
||||
параметр `openclaw.json`. `openclaw node install` зберігає його в середовищі LaunchAgent,
|
||||
коли він присутній у команді встановлення.
|
||||
|
||||
Схваліть вузол із хоста Gateway:
|
||||
Схваліть вузол з хоста Gateway:
|
||||
|
||||
```bash
|
||||
openclaw devices list
|
||||
@ -201,7 +204,7 @@ openclaw nodes status
|
||||
}
|
||||
```
|
||||
|
||||
Тепер приєднуйтеся як зазвичай із хоста Gateway:
|
||||
Тепер приєднуйтеся як зазвичай з хоста Gateway:
|
||||
|
||||
```bash
|
||||
openclaw googlemeet join https://meet.google.com/abc-defg-hij
|
||||
@ -209,11 +212,11 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij
|
||||
|
||||
або попросіть агента використати інструмент `google_meet` з `transport: "chrome-node"`.
|
||||
|
||||
Якщо `chromeNode.node` не вказано, OpenClaw автоматично вибирає вузол лише тоді, коли рівно один
|
||||
підключений вузол рекламує `googlemeet.chrome`. Якщо підключено кілька
|
||||
придатних вузлів, установіть `chromeNode.node` на id вузла, видиме ім’я або віддалену IP-адресу.
|
||||
Якщо `chromeNode.node` пропущено, OpenClaw виконує автоматичний вибір лише тоді, коли рівно один
|
||||
підключений вузол рекламує `googlemeet.chrome`. Якщо підключено кілька придатних вузлів,
|
||||
установіть `chromeNode.node` на id вузла, відображуване ім’я або віддалену IP-адресу.
|
||||
|
||||
Типові перевірки збоїв:
|
||||
Поширені перевірки збоїв:
|
||||
|
||||
- `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM,
|
||||
схваліть сполучення та переконайтеся, що `openclaw plugins enable google-meet` було виконано
|
||||
@ -221,26 +224,26 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij
|
||||
`gateway.nodes.allowCommands: ["googlemeet.chrome"]`.
|
||||
- `BlackHole 2ch audio device not found on the node`: установіть `blackhole-2ch`
|
||||
у VM і перезавантажте VM.
|
||||
- Chrome відкривається, але не може приєднатися: виконайте вхід у Chrome всередині VM і підтвердьте, що
|
||||
цей профіль може приєднатися до URL Meet вручну.
|
||||
- Немає аудіо: у Meet направте мікрофон/динамік через шлях віртуального аудіопристрою,
|
||||
який використовує OpenClaw; використовуйте окремі віртуальні пристрої або маршрутизацію у стилі Loopback
|
||||
для чистого двобічного аудіо.
|
||||
- Chrome відкривається, але не може приєднатися: увійдіть у Chrome всередині VM і підтвердьте, що цей
|
||||
профіль може вручну приєднатися до URL Meet.
|
||||
- Немає аудіо: у Meet спрямуйте мікрофон/динамік через шлях віртуального аудіопристрою,
|
||||
який використовує OpenClaw; для чистого двостороннього аудіо використовуйте окремі віртуальні пристрої або маршрутизацію
|
||||
на кшталт Loopback.
|
||||
|
||||
## Примітки щодо встановлення
|
||||
|
||||
Типовий шлях Chrome realtime використовує два зовнішні інструменти:
|
||||
Типовий режим Chrome у реальному часі використовує два зовнішні інструменти:
|
||||
|
||||
- `sox`: утиліта командного рядка для роботи з аудіо. Plugin використовує її команди `rec` і `play`
|
||||
для типового аудіомоста 8 кГц G.711 mu-law.
|
||||
- `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій `BlackHole 2ch`,
|
||||
для типового аудіомоста 8 kHz G.711 mu-law.
|
||||
- `blackhole-2ch`: віртуальний аудіодрайвер для macOS. Він створює аудіопристрій `BlackHole 2ch`,
|
||||
через який Chrome/Meet може маршрутизувати аудіо.
|
||||
|
||||
OpenClaw не постачає і не розповсюджує жоден із цих пакетів. Документація просить користувачів
|
||||
установлювати їх як залежності хоста через Homebrew. SoX ліцензовано як
|
||||
`LGPL-2.0-only AND GPL-2.0-only`; BlackHole — за GPL-3.0. Якщо ви збираєте
|
||||
інсталятор або appliance, що постачає BlackHole разом з OpenClaw, перегляньте умови
|
||||
ліцензування BlackHole у першоджерелі або отримайте окрему ліцензію від Existential Audio.
|
||||
OpenClaw не постачає і не розповсюджує жоден із цих пакетів. У документації користувачам пропонується
|
||||
встановлювати їх як залежності хоста через Homebrew. SoX ліцензовано як
|
||||
`LGPL-2.0-only AND GPL-2.0-only`; BlackHole — GPL-3.0. Якщо ви збираєте
|
||||
інсталятор або пристрій, який постачає BlackHole разом з OpenClaw, перегляньте
|
||||
висхідні умови ліцензування BlackHole або отримайте окрему ліцензію від Existential Audio.
|
||||
|
||||
## Транспорти
|
||||
|
||||
@ -248,7 +251,7 @@ OpenClaw не постачає і не розповсюджує жоден із
|
||||
|
||||
Транспорт Chrome відкриває URL Meet у Google Chrome і приєднується як профіль Chrome, у якому виконано вхід.
|
||||
У macOS Plugin перед запуском перевіряє наявність `BlackHole 2ch`.
|
||||
Якщо це налаштовано, він також запускає команду перевірки стану аудіомоста та команду запуску
|
||||
Якщо налаштовано, він також запускає команду перевірки стану аудіомоста та команду запуску
|
||||
перед відкриттям Chrome. Використовуйте `chrome`, коли Chrome/аудіо працюють на хості Gateway;
|
||||
використовуйте `chrome-node`, коли Chrome/аудіо працюють на підключеному вузлі, наприклад у Parallels
|
||||
macOS VM.
|
||||
@ -258,14 +261,14 @@ 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 для пошуку телефонних номерів.
|
||||
|
||||
```bash
|
||||
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
|
||||
@ -285,8 +288,8 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
|
||||
|
||||
## OAuth і попередня перевірка
|
||||
|
||||
Доступ Google Meet Media API спочатку використовує особистий OAuth client. Налаштуйте
|
||||
`oauth.clientId` і, за бажанням, `oauth.clientSecret`, а потім виконайте:
|
||||
Доступ до Google Meet Media API спочатку використовує особистий клієнт OAuth. Налаштуйте
|
||||
`oauth.clientId` і, за потреби, `oauth.clientSecret`, а потім виконайте:
|
||||
|
||||
```bash
|
||||
openclaw googlemeet auth login --json
|
||||
@ -296,7 +299,7 @@ openclaw googlemeet auth login --json
|
||||
локальний callback на `http://localhost:8085/oauth2callback` і ручний
|
||||
потік копіювання/вставлення з `--manual`.
|
||||
|
||||
Ці змінні середовища підтримуються як резервні варіанти:
|
||||
Ці змінні середовища приймаються як резервні варіанти:
|
||||
|
||||
- `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID`
|
||||
- `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` або `GOOGLE_MEET_CLIENT_SECRET`
|
||||
@ -307,30 +310,33 @@ 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
|
||||
```
|
||||
|
||||
Запустіть попередню перевірку перед роботою з медіа:
|
||||
Перед роботою з медіа виконайте попередню перевірку:
|
||||
|
||||
```bash
|
||||
openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij
|
||||
```
|
||||
|
||||
Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud
|
||||
project, OAuth principal і учасники зустрічі зареєстровані в Google
|
||||
Workspace Developer Preview Program для Meet media APIs.
|
||||
Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш проєкт Cloud,
|
||||
принципал OAuth і учасники зустрічі зареєстровані в Google
|
||||
Workspace Developer Preview Program для медіа API Meet.
|
||||
|
||||
## Конфігурація
|
||||
|
||||
Поширеному шляху Chrome realtime потрібні лише ввімкнений Plugin, BlackHole, SoX
|
||||
і ключ OpenAI:
|
||||
Поширений шлях Chrome у реальному часі потребує лише ввімкненого Plugin, BlackHole, SoX
|
||||
і ключа бекенд-провайдера голосу в реальному часі. OpenAI використовується за замовчуванням; установіть
|
||||
`realtime.provider: "google"`, щоб використовувати Google Gemini Live:
|
||||
|
||||
```bash
|
||||
brew install blackhole-2ch sox
|
||||
export OPENAI_API_KEY=sk-...
|
||||
# or
|
||||
export GEMINI_API_KEY=...
|
||||
```
|
||||
|
||||
Установіть конфігурацію Plugin у `plugins.entries.google-meet.config`:
|
||||
@ -352,18 +358,18 @@ export OPENAI_API_KEY=sk-...
|
||||
|
||||
- `defaultTransport: "chrome"`
|
||||
- `defaultMode: "realtime"`
|
||||
- `chromeNode.node`: необов’язковий id/ім’я/IP вузла для `chrome-node`
|
||||
- `chromeNode.node`: необов’язкові id/ім’я/IP вузла для `chrome-node`
|
||||
- `chrome.audioBackend: "blackhole-2ch"`
|
||||
- `chrome.audioInputCommand`: команда SoX `rec`, що записує аудіо 8 кГц G.711 mu-law
|
||||
у stdout
|
||||
- `chrome.audioOutputCommand`: команда SoX `play`, що читає аудіо 8 кГц G.711 mu-law
|
||||
зі stdin
|
||||
- `chrome.audioInputCommand`: команда SoX `rec`, що записує аудіо
|
||||
8 kHz G.711 mu-law у stdout
|
||||
- `chrome.audioOutputCommand`: команда SoX `play`, що читає аудіо
|
||||
8 kHz G.711 mu-law із stdin
|
||||
- `realtime.provider: "openai"`
|
||||
- `realtime.toolPolicy: "safe-read-only"`
|
||||
- `realtime.instructions`: короткі усні відповіді, з
|
||||
`openclaw_agent_consult` для глибших відповідей
|
||||
- `realtime.introMessage`: коротка усна перевірка готовності, коли realtime-міст
|
||||
підключається; установіть `""`, щоб приєднуватися беззвучно
|
||||
- `realtime.introMessage`: коротка усна перевірка готовності, коли міст реального часу
|
||||
підключається; установіть `""`, щоб приєднатися беззвучно
|
||||
|
||||
Необов’язкові перевизначення:
|
||||
|
||||
@ -379,8 +385,15 @@ export OPENAI_API_KEY=sk-...
|
||||
node: "parallels-macos",
|
||||
},
|
||||
realtime: {
|
||||
provider: "google",
|
||||
toolPolicy: "owner",
|
||||
introMessage: "Say exactly: I'm here.",
|
||||
providers: {
|
||||
google: {
|
||||
model: "gemini-2.5-flash-native-audio-preview-12-2025",
|
||||
voice: "Kore",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
@ -415,12 +428,12 @@ export OPENAI_API_KEY=sk-...
|
||||
|
||||
Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. Використовуйте
|
||||
`transport: "chrome-node"`, коли Chrome працює на підключеному вузлі, наприклад у Parallels
|
||||
VM. В обох випадках модель realtime і `openclaw_agent_consult` працюють на
|
||||
VM. В обох випадках модель реального часу та `openclaw_agent_consult` працюють на
|
||||
хості Gateway, тому облікові дані моделі залишаються там.
|
||||
|
||||
Використовуйте `action: "status"`, щоб перелічити активні сесії або перевірити ID сесії. Використовуйте
|
||||
`action: "speak"` із `sessionId` і `message`, щоб змусити агента realtime
|
||||
говорити негайно. Використовуйте `action: "leave"`, щоб позначити сесію як завершену.
|
||||
`action: "speak"` із `sessionId` і `message`, щоб агент реального часу
|
||||
одразу заговорив. Використовуйте `action: "leave"`, щоб позначити сесію завершеною.
|
||||
|
||||
```json
|
||||
{
|
||||
@ -430,28 +443,28 @@ VM. В обох випадках модель realtime і `openclaw_agent_consul
|
||||
}
|
||||
```
|
||||
|
||||
## Консультація агента realtime
|
||||
## Консультація агента в реальному часі
|
||||
|
||||
Режим Chrome realtime оптимізований для живого голосового циклу. Провайдер голосу realtime
|
||||
чує аудіо зустрічі та говорить через налаштований аудіоміст.
|
||||
Коли моделі realtime потрібні глибші міркування, актуальна інформація або звичайні
|
||||
Режим Chrome у реальному часі оптимізовано для живого голосового циклу. Провайдер голосу
|
||||
в реальному часі чує аудіо зустрічі й говорить через налаштований аудіоміст.
|
||||
Коли моделі реального часу потрібні глибші міркування, актуальна інформація або звичайні
|
||||
інструменти OpenClaw, вона може викликати `openclaw_agent_consult`.
|
||||
|
||||
Інструмент consult непомітно запускає звичайного агента OpenClaw з контекстом
|
||||
нещодавньої стенограми зустрічі й повертає стислу усну відповідь до голосової
|
||||
сесії realtime. Потім голосова модель може озвучити цю відповідь назад у зустрічі.
|
||||
Інструмент consult запускає звичайного агента OpenClaw у фоновому режимі з контекстом
|
||||
недавньої стенограми зустрічі та повертає стислу усну відповідь до голосової сесії
|
||||
реального часу. Потім голосова модель може озвучити цю відповідь назад у зустріч.
|
||||
|
||||
`realtime.toolPolicy` керує запуском consult:
|
||||
|
||||
- `safe-read-only`: показувати інструмент consult і обмежувати звичайного агента
|
||||
- `safe-read-only`: надавати інструмент consult і обмежувати звичайного агента
|
||||
інструментами `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і
|
||||
`memory_get`.
|
||||
- `owner`: показувати інструмент consult і дозволяти звичайному агенту використовувати
|
||||
стандартну політику інструментів агента.
|
||||
- `none`: не показувати інструмент consult моделі голосу realtime.
|
||||
- `owner`: надавати інструмент consult і дозволяти звичайному агенту використовувати
|
||||
звичайну політику інструментів агента.
|
||||
- `none`: не надавати інструмент consult голосовій моделі реального часу.
|
||||
|
||||
Ключ сесії consult має область дії на рівні окремої сесії Meet, тому наступні виклики consult
|
||||
можуть повторно використовувати попередній контекст consult під час тієї самої зустрічі.
|
||||
Ключ сесії consult обмежено однією сесією Meet, тому подальші виклики consult
|
||||
можуть повторно використовувати попередній контекст consult протягом тієї самої зустрічі.
|
||||
|
||||
Щоб примусово виконати усну перевірку готовності після того, як Chrome повністю приєднався до дзвінка:
|
||||
|
||||
@ -461,29 +474,29 @@ openclaw googlemeet speak meet_... "Say exactly: I'm here and listening."
|
||||
|
||||
## Примітки
|
||||
|
||||
Офіційний media API Google Meet орієнтований на отримання, тому для мовлення в дзвінок Meet
|
||||
усе ще потрібен шлях учасника. Цей plugin зберігає цю межу видимою:
|
||||
Chrome обробляє участь через браузер і локальну маршрутизацію аудіо; Twilio обробляє
|
||||
Офіційний медіа API Google Meet орієнтований на отримання, тому для мовлення в дзвінок
|
||||
Meet усе ще потрібен шлях участі учасника. Цей Plugin зберігає цю межу видимою:
|
||||
Chrome відповідає за участь через браузер і локальну маршрутизацію аудіо; Twilio відповідає за
|
||||
участь через телефонний дозвін.
|
||||
|
||||
Режиму Chrome realtime потрібне одне з такого:
|
||||
Для режиму Chrome у реальному часі потрібно одне з такого:
|
||||
|
||||
- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw керує
|
||||
мостом моделі realtime і передає аудіо 8 кГц G.711 mu-law між цими
|
||||
командами та вибраним провайдером голосу realtime.
|
||||
мостом моделі реального часу й передає аудіо 8 kHz G.711 mu-law між цими
|
||||
командами та вибраним провайдером голосу реального часу.
|
||||
- `chrome.audioBridgeCommand`: зовнішня команда моста керує всім локальним
|
||||
аудіошляхом і має завершитися після запуску або перевірки свого демона.
|
||||
|
||||
Для чистого двобічного аудіо маршрутизуйте вихід Meet і мікрофон Meet через окремі
|
||||
віртуальні пристрої або граф віртуальних пристроїв у стилі Loopback. Один спільний
|
||||
Для чистого двостороннього аудіо спрямовуйте вихід Meet і мікрофон Meet через окремі
|
||||
віртуальні пристрої або граф віртуальних пристроїв на кшталт Loopback. Один спільний
|
||||
пристрій BlackHole може повертати голоси інших учасників назад у дзвінок.
|
||||
|
||||
`googlemeet speak` запускає активний аудіоміст realtime для сесії
|
||||
`googlemeet speak` запускає активний аудіоміст реального часу для сесії
|
||||
Chrome. `googlemeet leave` зупиняє цей міст. Для сесій Twilio, делегованих
|
||||
через Plugin Voice Call, `leave` також завершує базовий голосовий дзвінок.
|
||||
через Plugin Voice Call, `leave` також завершує пов’язаний голосовий дзвінок.
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Plugin Voice call](/uk/plugins/voice-call)
|
||||
- [Режим talk](/uk/nodes/talk)
|
||||
- [Створення плагінів](/uk/plugins/building-plugins)
|
||||
- [Створення Plugin](/uk/plugins/building-plugins)
|
||||
|
||||
@ -2,13 +2,13 @@
|
||||
read_when:
|
||||
- Ви хочете здійснити вихідний голосовий дзвінок з OpenClaw
|
||||
- Ви налаштовуєте або розробляєте плагін voice-call
|
||||
summary: 'Плагін Voice Call: вихідні + вхідні дзвінки через Twilio/Telnyx/Plivo (встановлення плагіна + налаштування + CLI)'
|
||||
summary: 'Плагін Voice Call: вихідні + вхідні дзвінки через Twilio/Telnyx/Plivo (встановлення плагіна + конфігурація + CLI)'
|
||||
title: Плагін Voice call
|
||||
x-i18n:
|
||||
generated_at: "2026-04-24T00:54:17Z"
|
||||
generated_at: "2026-04-24T09:19:22Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 4cd57118133506c22604ab9592a823546a91795ab425de4b7a81edbbb8374e6d
|
||||
source_hash: 6aed4e33ce090c86f43c71280f033e446f335c53d42456fdc93c9938250e9af6
|
||||
source_path: plugins/voice-call.md
|
||||
workflow: 15
|
||||
---
|
||||
@ -16,27 +16,27 @@ x-i18n:
|
||||
# Voice Call (плагін)
|
||||
|
||||
Голосові дзвінки для OpenClaw через плагін. Підтримує вихідні сповіщення та
|
||||
багатоходові розмови з політиками вхідних викликів.
|
||||
багатоходові розмови з політиками для вхідних викликів.
|
||||
|
||||
Поточні провайдери:
|
||||
|
||||
- `twilio` (Programmable Voice + Media Streams)
|
||||
- `telnyx` (Call Control v2)
|
||||
- `plivo` (Voice API + XML transfer + GetInput speech)
|
||||
- `mock` (розробка/без мережі)
|
||||
- `mock` (dev/без мережі)
|
||||
|
||||
Швидка ментальна модель:
|
||||
Коротка ментальна модель:
|
||||
|
||||
- Встановіть плагін
|
||||
- Перезапустіть Gateway
|
||||
- Налаштуйте в `plugins.entries.voice-call.config`
|
||||
- Використовуйте `openclaw voicecall ...` або інструмент `voice_call`
|
||||
|
||||
## Де він працює (локально чи віддалено)
|
||||
## Де це працює (локально чи віддалено)
|
||||
|
||||
Плагін Voice Call працює **всередині процесу Gateway**.
|
||||
|
||||
Якщо ви використовуєте віддалений Gateway, встановіть/налаштуйте плагін на **машині, де працює Gateway**, а потім перезапустіть Gateway, щоб завантажити його.
|
||||
Якщо ви використовуєте віддалений Gateway, встановіть/налаштуйте плагін на **машині, де запущено Gateway**, а потім перезапустіть Gateway, щоб завантажити його.
|
||||
|
||||
## Встановлення
|
||||
|
||||
@ -48,7 +48,7 @@ openclaw plugins install @openclaw/voice-call
|
||||
|
||||
Після цього перезапустіть Gateway.
|
||||
|
||||
### Варіант B: встановлення з локальної папки (розробка, без копіювання)
|
||||
### Варіант B: встановлення з локальної папки (dev, без копіювання)
|
||||
|
||||
```bash
|
||||
PLUGIN_SRC=./path/to/local/voice-call-plugin
|
||||
@ -58,7 +58,7 @@ cd "$PLUGIN_SRC" && pnpm install
|
||||
|
||||
Після цього перезапустіть Gateway.
|
||||
|
||||
## Налаштування
|
||||
## Конфігурація
|
||||
|
||||
Задайте конфігурацію в `plugins.entries.voice-call.config`:
|
||||
|
||||
@ -81,7 +81,7 @@ cd "$PLUGIN_SRC" && pnpm install
|
||||
telnyx: {
|
||||
apiKey: "...",
|
||||
connectionId: "...",
|
||||
// Публічний ключ webhook Telnyx з Telnyx Mission Control Portal
|
||||
// Публічний ключ Webhook Telnyx з Telnyx Mission Control Portal
|
||||
// (рядок Base64; також можна задати через TELNYX_PUBLIC_KEY).
|
||||
publicKey: "...",
|
||||
},
|
||||
@ -103,7 +103,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" }
|
||||
@ -114,7 +114,7 @@ cd "$PLUGIN_SRC" && pnpm install
|
||||
|
||||
streaming: {
|
||||
enabled: true,
|
||||
provider: "openai", // необов’язково; якщо не задано, використовується перший зареєстрований провайдер транскрипції в реальному часі
|
||||
provider: "openai", // необов’язково; якщо не вказано, використовується перший зареєстрований провайдер транскрипції в реальному часі
|
||||
streamPath: "/voice/stream",
|
||||
providers: {
|
||||
openai: {
|
||||
@ -129,6 +129,17 @@ cd "$PLUGIN_SRC" && pnpm install
|
||||
maxPendingConnectionsPerIp: 4,
|
||||
maxConnections: 128,
|
||||
},
|
||||
|
||||
realtime: {
|
||||
enabled: false,
|
||||
provider: "google", // необов’язково; якщо не вказано, використовується перший зареєстрований голосовий провайдер у реальному часі
|
||||
providers: {
|
||||
google: {
|
||||
model: "gemini-2.5-flash-native-audio-preview-12-2025",
|
||||
voice: "Kore",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -138,48 +149,132 @@ cd "$PLUGIN_SRC" && pnpm install
|
||||
|
||||
Примітки:
|
||||
|
||||
- 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; перевірка підпису завжди примусово виконується.
|
||||
- Twilio/Telnyx вимагають **публічно доступний** URL Webhook.
|
||||
- Plivo вимагає **публічно доступний** URL Webhook.
|
||||
- `mock` — це локальний dev-провайдер (без мережевих викликів).
|
||||
- Якщо старі конфігурації досі використовують `provider: "log"`, `twilio.from` або застарілі ключі `streaming.*` для OpenAI, виконайте `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 не проходитимуть перевірку. Для продакшну віддавайте перевагу стабільному домену або воронці Tailscale.
|
||||
- Типові параметри безпеки Streaming:
|
||||
- `streaming.preStartTimeoutMs` закриває сокети, які ніколи не надсилають валідний кадр `start`.
|
||||
- URL-адреси безкоштовного рівня Ngrok можуть змінюватися або додавати проміжну поведінку; якщо `publicUrl` зміниться, підписи Twilio не пройдуть перевірку. Для production віддавайте перевагу стабільному домену або Tailscale funnel.
|
||||
- `realtime.enabled` запускає повноцінні голосові розмови голос-до-голосу; не вмикайте його разом із `streaming.enabled`.
|
||||
- Типові параметри безпеки streaming:
|
||||
- `streaming.preStartTimeoutMs` закриває сокети, які так і не надсилають валідний кадр `start`.
|
||||
- `streaming.maxPendingConnections` обмежує загальну кількість неавтентифікованих сокетів до старту.
|
||||
- `streaming.maxPendingConnectionsPerIp` обмежує неавтентифіковані сокети до старту на одну вихідну IP-адресу.
|
||||
- `streaming.maxConnections` обмежує загальну кількість відкритих сокетів медіапотоку (очікуваних + активних).
|
||||
- Резервний механізм під час виконання поки що все ще приймає ці старі ключі voice-call, але шлях переписування — це `openclaw doctor --fix`, а shim сумісності є тимчасовим.
|
||||
- `streaming.maxPendingConnectionsPerIp` обмежує кількість неавтентифікованих сокетів до старту з однієї IP-адреси джерела.
|
||||
- `streaming.maxConnections` обмежує загальну кількість відкритих сокетів медіапотоку (очікувальні + активні).
|
||||
- Під час виконання fallback наразі все ще приймає ці старі ключі voice-call, але шлях переписування — це `openclaw doctor --fix`, а шар сумісності є тимчасовим.
|
||||
|
||||
## Streaming transcription
|
||||
## Голосові розмови в реальному часі
|
||||
|
||||
`streaming` вибирає провайдера транскрипції в реальному часі для аудіо викликів наживо.
|
||||
`realtime` вибирає повнодуплексного голосового провайдера в реальному часі для аудіо живого дзвінка.
|
||||
Він відокремлений від `streaming`, який лише пересилає аудіо провайдерам
|
||||
транскрипції в реальному часі.
|
||||
|
||||
Поточна поведінка під час виконання:
|
||||
|
||||
- `streaming.provider` є необов’язковим. Якщо не задано, Voice Call використовує
|
||||
першого зареєстрованого провайдера транскрипції в реальному часі.
|
||||
- До вбудованих провайдерів транскрипції в реальному часі входять Deepgram (`deepgram`),
|
||||
ElevenLabs (`elevenlabs`), Mistral (`mistral`), OpenAI (`openai`) та xAI
|
||||
(`xai`), які реєструються їхніми плагінами провайдерів.
|
||||
- Необроблена конфігурація, якою володіє провайдер, розміщується в `streaming.providers.<providerId>`.
|
||||
- Якщо `streaming.provider` вказує на незареєстрованого провайдера, або якщо взагалі не зареєстровано жодного
|
||||
провайдера транскрипції в реальному часі, Voice Call записує попередження в журнал і
|
||||
пропускає медіа-Streaming замість того, щоб зірвати роботу всього плагіна.
|
||||
- `realtime.enabled` підтримується для Twilio Media Streams.
|
||||
- `realtime.enabled` не можна поєднувати з `streaming.enabled`.
|
||||
- `realtime.provider` є необов’язковим. Якщо не вказано, Voice Call використовує першого
|
||||
зареєстрованого голосового провайдера в реальному часі.
|
||||
- Вбудовані голосові провайдери в реальному часі включають Google Gemini Live (`google`) та
|
||||
OpenAI (`openai`), зареєстровані їхніми плагінами провайдерів.
|
||||
- Сирий конфіг, що належить провайдеру, розташовано в `realtime.providers.<providerId>`.
|
||||
- Якщо `realtime.provider` вказує на незареєстрованого провайдера або якщо жодного голосового
|
||||
провайдера в реальному часі взагалі не зареєстровано, Voice Call записує попередження в лог і пропускає
|
||||
медіа в реальному часі замість того, щоб ламати весь плагін.
|
||||
|
||||
Типові параметри транскрипції Streaming OpenAI:
|
||||
Типові значення Google Gemini Live realtime:
|
||||
|
||||
- Ключ API: `streaming.providers.openai.apiKey` або `OPENAI_API_KEY`
|
||||
- API key: `realtime.providers.google.apiKey`, `GEMINI_API_KEY` або
|
||||
`GOOGLE_GENERATIVE_AI_API_KEY`
|
||||
- model: `gemini-2.5-flash-native-audio-preview-12-2025`
|
||||
- voice: `Kore`
|
||||
|
||||
Приклад:
|
||||
|
||||
```json5
|
||||
{
|
||||
plugins: {
|
||||
entries: {
|
||||
"voice-call": {
|
||||
config: {
|
||||
provider: "twilio",
|
||||
inboundPolicy: "allowlist",
|
||||
allowFrom: ["+15550005678"],
|
||||
realtime: {
|
||||
enabled: true,
|
||||
provider: "google",
|
||||
instructions: "Говоріть коротко й запитуйте перед використанням інструментів.",
|
||||
providers: {
|
||||
google: {
|
||||
apiKey: "${GEMINI_API_KEY}",
|
||||
model: "gemini-2.5-flash-native-audio-preview-12-2025",
|
||||
voice: "Kore",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Використовуйте OpenAI натомість:
|
||||
|
||||
```json5
|
||||
{
|
||||
plugins: {
|
||||
entries: {
|
||||
"voice-call": {
|
||||
config: {
|
||||
realtime: {
|
||||
enabled: true,
|
||||
provider: "openai",
|
||||
providers: {
|
||||
openai: {
|
||||
apiKey: "${OPENAI_API_KEY}",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Див. [провайдер Google](/uk/providers/google) і [провайдер OpenAI](/uk/providers/openai)
|
||||
для параметрів голосу в реальному часі, специфічних для провайдера.
|
||||
|
||||
## Streaming транскрипції
|
||||
|
||||
`streaming` вибирає провайдера транскрипції в реальному часі для аудіо живого дзвінка.
|
||||
|
||||
Поточна поведінка під час виконання:
|
||||
|
||||
- `streaming.provider` є необов’язковим. Якщо не вказано, Voice Call використовує першого
|
||||
зареєстрованого провайдера транскрипції в реальному часі.
|
||||
- Вбудовані провайдери транскрипції в реальному часі включають Deepgram (`deepgram`),
|
||||
ElevenLabs (`elevenlabs`), Mistral (`mistral`), OpenAI (`openai`) і xAI
|
||||
(`xai`), зареєстровані їхніми плагінами провайдерів.
|
||||
- Сирий конфіг, що належить провайдеру, розташовано в `streaming.providers.<providerId>`.
|
||||
- Якщо `streaming.provider` вказує на незареєстрованого провайдера або якщо жодного провайдера
|
||||
транскрипції в реальному часі взагалі не зареєстровано, Voice Call записує попередження в лог і
|
||||
пропускає streaming медіа замість того, щоб ламати весь плагін.
|
||||
|
||||
Типові значення транскрипції streaming OpenAI:
|
||||
|
||||
- API key: `streaming.providers.openai.apiKey` або `OPENAI_API_KEY`
|
||||
- model: `gpt-4o-transcribe`
|
||||
- `silenceDurationMs`: `800`
|
||||
- `vadThreshold`: `0.5`
|
||||
|
||||
Типові параметри транскрипції Streaming xAI:
|
||||
Типові значення транскрипції streaming xAI:
|
||||
|
||||
- Ключ API: `streaming.providers.xai.apiKey` або `XAI_API_KEY`
|
||||
- API key: `streaming.providers.xai.apiKey` або `XAI_API_KEY`
|
||||
- endpoint: `wss://api.x.ai/v1/stt`
|
||||
- `encoding`: `mulaw`
|
||||
- `sampleRate`: `8000`
|
||||
@ -214,7 +309,7 @@ cd "$PLUGIN_SRC" && pnpm install
|
||||
}
|
||||
```
|
||||
|
||||
Натомість використовуйте xAI:
|
||||
Використовуйте xAI натомість:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -249,17 +344,17 @@ cd "$PLUGIN_SRC" && pnpm install
|
||||
- `streaming.silenceDurationMs` → `streaming.providers.openai.silenceDurationMs`
|
||||
- `streaming.vadThreshold` → `streaming.providers.openai.vadThreshold`
|
||||
|
||||
## Очищення застарілих викликів
|
||||
## Очищувач застарілих викликів
|
||||
|
||||
Використовуйте `staleCallReaperSeconds`, щоб завершувати виклики, які ніколи не отримують фінальний webhook
|
||||
Використовуйте `staleCallReaperSeconds`, щоб завершувати виклики, які ніколи не отримують фінального Webhook
|
||||
(наприклад, виклики в режимі notify, які ніколи не завершуються). Типове значення — `0`
|
||||
(вимкнено).
|
||||
|
||||
Рекомендовані діапазони:
|
||||
|
||||
- **Продакшн:** `120`–`300` секунд для потоків у стилі notify.
|
||||
- **Production:** `120`–`300` секунд для потоків у стилі notify.
|
||||
- Тримайте це значення **вищим за `maxDurationSeconds`**, щоб звичайні виклики могли
|
||||
завершитися. Хороша початкова точка — `maxDurationSeconds + 30–60` секунд.
|
||||
завершитися. Гарна стартова точка — `maxDurationSeconds + 30–60` секунд.
|
||||
|
||||
Приклад:
|
||||
|
||||
@ -281,27 +376,27 @@ cd "$PLUGIN_SRC" && pnpm install
|
||||
## Безпека Webhook
|
||||
|
||||
Коли перед Gateway стоїть проксі або тунель, плагін реконструює
|
||||
публічний URL для перевірки підпису. Ці параметри визначають, яким
|
||||
переспрямованим заголовкам довіряти.
|
||||
публічний URL для перевірки підпису. Ці параметри керують тим, яким forwarded
|
||||
заголовкам довіряти.
|
||||
|
||||
`webhookSecurity.allowedHosts` формує allowlist хостів із заголовків переспрямування.
|
||||
`webhookSecurity.allowedHosts` задає allowlist хостів із forwarding-заголовків.
|
||||
|
||||
`webhookSecurity.trustForwardingHeaders` довіряє переспрямованим заголовкам без allowlist.
|
||||
`webhookSecurity.trustForwardingHeaders` довіряє forwarded-заголовкам без allowlist.
|
||||
|
||||
`webhookSecurity.trustedProxyIPs` довіряє переспрямованим заголовкам лише тоді, коли
|
||||
`webhookSecurity.trustedProxyIPs` довіряє forwarded-заголовкам лише тоді, коли
|
||||
віддалена IP-адреса запиту збігається зі списком.
|
||||
|
||||
Захист від повторного відтворення webhook увімкнено для Twilio та Plivo. Повторно відтворені валідні webhook-
|
||||
запити підтверджуються, але їхні побічні ефекти пропускаються.
|
||||
Захист від повторного відтворення Webhook увімкнено для Twilio та Plivo. Повторно відтворені валідні запити Webhook
|
||||
підтверджуються, але пропускаються з погляду побічних ефектів.
|
||||
|
||||
Ходи розмови Twilio включають окремий токен для кожного ходу в callback-ах `<Gather>`, тому
|
||||
застарілі/повторно відтворені callback-и мовлення не можуть задовольнити новіший очікуваний хід транскрипції.
|
||||
Ходи розмов Twilio включають токен на кожен хід у callback-ах `<Gather>`, тому
|
||||
застарілі/повторно відтворені callback-и мовлення не можуть задовольнити новіший очікуваний хід транскрипту.
|
||||
|
||||
Неавтентифіковані webhook-запити відхиляються до читання тіла, якщо відсутні
|
||||
Неавтентифіковані запити Webhook відхиляються до читання тіла, якщо відсутні
|
||||
обов’язкові заголовки підпису провайдера.
|
||||
|
||||
Webhook voice-call використовує спільний профіль тіла до автентифікації (64 КБ / 5 секунд)
|
||||
разом з обмеженням одночасних запитів на IP перед перевіркою підпису.
|
||||
Webhook voice-call використовує спільний профіль тіла до автентифікації (64 KB / 5 секунд)
|
||||
плюс обмеження кількості одночасних запитів на IP до перевірки підпису.
|
||||
|
||||
Приклад зі стабільним публічним хостом:
|
||||
|
||||
@ -322,11 +417,11 @@ Webhook voice-call використовує спільний профіль ті
|
||||
}
|
||||
```
|
||||
|
||||
## TTS для викликів
|
||||
## TTS для дзвінків
|
||||
|
||||
Voice Call використовує основну конфігурацію `messages.tts` для
|
||||
Streaming мовлення у викликах. Ви можете перевизначити її в конфігурації плагіна з
|
||||
**тією самою структурою** — вона виконує deep merge з `messages.tts`.
|
||||
Voice Call використовує базову конфігурацію `messages.tts` для
|
||||
потокового мовлення під час дзвінків. Ви можете перевизначити її в конфігурації плагіна з
|
||||
**тією самою структурою** — вона deep-merge-иться з `messages.tts`.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -344,15 +439,15 @@ Streaming мовлення у викликах. Ви можете перевиз
|
||||
|
||||
Примітки:
|
||||
|
||||
- Застарілі ключі `tts.<provider>` у конфігурації плагіна (`openai`, `elevenlabs`, `microsoft`, `edge`) автоматично мігруються до `tts.providers.<provider>` під час завантаження. У збереженій конфігурації віддавайте перевагу структурі `providers`.
|
||||
- **Microsoft speech ігнорується для голосових викликів** (телефонному аудіо потрібен PCM; поточний транспорт Microsoft не надає телекомунікаційний PCM-вивід).
|
||||
- Основний TTS використовується, коли ввімкнено Twilio media streaming; інакше виклики повертаються до рідних голосів провайдера.
|
||||
- Якщо потік медіа Twilio вже активний, Voice Call не повертається до TwiML `<Say>`. Якщо телекомунікаційний TTS недоступний у цьому стані, запит відтворення завершується помилкою замість змішування двох шляхів відтворення.
|
||||
- Коли телекомунікаційний TTS повертається до вторинного провайдера, Voice Call записує попередження в журнал із ланцюжком провайдерів (`from`, `to`, `attempts`) для налагодження.
|
||||
- Застарілі ключі `tts.<provider>` усередині конфігурації плагіна (`openai`, `elevenlabs`, `microsoft`, `edge`) автоматично мігруються до `tts.providers.<provider>` під час завантаження. У збереженій конфігурації віддавайте перевагу формі `providers`.
|
||||
- **Microsoft speech ігнорується для голосових дзвінків** (телефонному аудіо потрібен PCM; поточний транспорт Microsoft не надає вихід PCM для телефонії).
|
||||
- Базовий TTS використовується, коли ввімкнено потокове медіа Twilio; інакше дзвінки переходять до вбудованих голосів провайдера.
|
||||
- Якщо медіапотік Twilio вже активний, Voice Call не переходить на TwiML `<Say>`. Якщо TTS для телефонії в такому стані недоступний, запит на відтворення завершується помилкою замість змішування двох шляхів відтворення.
|
||||
- Коли TTS для телефонії переходить на вторинного провайдера, Voice Call записує попередження в лог із ланцюжком провайдерів (`from`, `to`, `attempts`) для налагодження.
|
||||
|
||||
### Більше прикладів
|
||||
|
||||
Використовувати лише основний TTS (без перевизначення):
|
||||
Використовувати лише базовий TTS (без перевизначення):
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -367,7 +462,7 @@ Streaming мовлення у викликах. Ви можете перевиз
|
||||
}
|
||||
```
|
||||
|
||||
Перевизначити на ElevenLabs лише для викликів (зберегти основне значення за замовчуванням деінде):
|
||||
Перевизначити на ElevenLabs лише для дзвінків (залишити базове значення в інших місцях):
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -392,7 +487,7 @@ Streaming мовлення у викликах. Ви можете перевиз
|
||||
}
|
||||
```
|
||||
|
||||
Перевизначити лише модель OpenAI для викликів (приклад deep merge):
|
||||
Перевизначити лише модель OpenAI для дзвінків (приклад deep-merge):
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -415,9 +510,9 @@ Streaming мовлення у викликах. Ви можете перевиз
|
||||
}
|
||||
```
|
||||
|
||||
## Вхідні виклики
|
||||
## Вхідні дзвінки
|
||||
|
||||
Типова політика вхідних викликів — `disabled`. Щоб увімкнути вхідні виклики, задайте:
|
||||
Типове значення політики вхідних дзвінків — `disabled`. Щоб увімкнути вхідні дзвінки, задайте:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -427,11 +522,11 @@ Streaming мовлення у викликах. Ви можете перевиз
|
||||
}
|
||||
```
|
||||
|
||||
`inboundPolicy: "allowlist"` — це низьконадійний фільтр caller ID. Плагін
|
||||
нормалізує надане провайдером значення `From` і порівнює його з `allowFrom`.
|
||||
Перевірка webhook автентифікує доставку від провайдера та цілісність payload, але
|
||||
вона не доводить право власності на номер абонента PSTN/VoIP. Розглядайте `allowFrom` як
|
||||
фільтрацію caller ID, а не як надійну ідентифікацію абонента.
|
||||
`inboundPolicy: "allowlist"` — це низькорівневий фільтр caller ID. Плагін
|
||||
нормалізує значення `From`, яке надає провайдер, і порівнює його з `allowFrom`.
|
||||
Перевірка Webhook автентифікує доставку від провайдера та цілісність payload, але
|
||||
не доводить право власності на номер абонента PSTN/VoIP. Сприймайте `allowFrom` як
|
||||
фільтрацію caller ID, а не як сильне підтвердження особи абонента.
|
||||
|
||||
Автовідповіді використовують систему агентів. Налаштовуйте через:
|
||||
|
||||
@ -441,7 +536,7 @@ Streaming мовлення у викликах. Ви можете перевиз
|
||||
|
||||
### Контракт озвученого виводу
|
||||
|
||||
Для автовідповідей Voice Call додає суворий контракт озвученого виводу до system prompt:
|
||||
Для автовідповідей Voice Call додає до системного prompt суворий контракт озвученого виводу:
|
||||
|
||||
- `{"spoken":"..."}`
|
||||
|
||||
@ -449,24 +544,24 @@ Streaming мовлення у викликах. Ви можете перевиз
|
||||
|
||||
- Ігнорує payload, позначені як reasoning/error content.
|
||||
- Розбирає прямий JSON, JSON у fenced-блоках або вбудовані ключі `"spoken"`.
|
||||
- Повертається до звичайного тексту та видаляє ймовірні вступні абзаци з плануванням/метакоментарями.
|
||||
- Переходить до plain text і видаляє ймовірні вступні абзаци з плануванням/метаданими.
|
||||
|
||||
Це дозволяє зосередити озвучене відтворення на тексті, призначеному для абонента, і уникнути потрапляння тексту планування в аудіо.
|
||||
Це дозволяє зосередити озвучення на тексті для абонента й уникнути потрапляння в аудіо тексту планування.
|
||||
|
||||
### Поведінка запуску розмови
|
||||
### Поведінка під час запуску розмови
|
||||
|
||||
Для вихідних викликів `conversation` обробка першого повідомлення прив’язана до стану відтворення наживо:
|
||||
Для вихідних дзвінків у режимі `conversation` обробка першого повідомлення пов’язана зі станом живого відтворення:
|
||||
|
||||
- Очищення черги barge-in і автовідповідь пригнічуються лише поки початкове привітання активно озвучується.
|
||||
- Якщо початкове відтворення завершується помилкою, виклик повертається до `listening`, а початкове повідомлення залишається в черзі для повторної спроби.
|
||||
- Початкове відтворення для Twilio streaming запускається при підключенні потоку без додаткової затримки.
|
||||
- Очищення черги barge-in та автовідповідь пригнічуються лише тоді, коли початкове привітання активно озвучується.
|
||||
- Якщо початкове відтворення не вдається, дзвінок повертається до стану `listening`, а початкове повідомлення залишається в черзі для повторної спроби.
|
||||
- Початкове відтворення для потокового Twilio починається під час підключення потоку без додаткової затримки.
|
||||
|
||||
### Пільговий період після відключення потоку Twilio
|
||||
|
||||
Коли медіапотік Twilio відключається, Voice Call чекає `2000ms`, перш ніж автоматично завершити виклик:
|
||||
Коли медіапотік Twilio відключається, Voice Call чекає `2000ms` перед автоматичним завершенням дзвінка:
|
||||
|
||||
- Якщо потік перепідключається протягом цього вікна, авто-завершення скасовується.
|
||||
- Якщо після завершення пільгового періоду потік не реєструється знову, виклик завершується, щоб запобігти завислим активним викликам.
|
||||
- Якщо після завершення пільгового періоду потік не реєструється знову, дзвінок завершується, щоб запобігти завислим активним дзвінкам.
|
||||
|
||||
## CLI
|
||||
|
||||
@ -479,14 +574,14 @@ 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 для затримки ходу
|
||||
та часу очікування прослуховування.
|
||||
|
||||
## Інструмент агента
|
||||
|
||||
@ -515,5 +610,5 @@ openclaw voicecall expose --mode funnel
|
||||
## Пов’язане
|
||||
|
||||
- [Text-to-speech](/uk/tools/tts)
|
||||
- [Режим розмови](/uk/nodes/talk)
|
||||
- [Голосова активація](/uk/nodes/voicewake)
|
||||
- [Talk mode](/uk/nodes/talk)
|
||||
- [Voice wake](/uk/nodes/voicewake)
|
||||
|
||||
@ -1,87 +1,89 @@
|
||||
---
|
||||
read_when:
|
||||
- Пошук огляду медіаможливостей
|
||||
- Вибір provider медіа для налаштування
|
||||
- Шукаєте огляд медіаможливостей
|
||||
- Вирішуєте, якого постачальника медіа налаштувати
|
||||
- Розуміння того, як працює асинхронна генерація медіа
|
||||
summary: Уніфікована цільова сторінка для генерації медіа, розуміння медіа та мовленнєвих можливостей
|
||||
summary: Уніфікована цільова сторінка для генерації медіа, розуміння та можливостей мовлення
|
||||
title: Огляд медіа
|
||||
x-i18n:
|
||||
generated_at: "2026-04-23T23:08:11Z"
|
||||
generated_at: "2026-04-24T09:19:22Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 469fb173ac3853011b8cd4f89f3ab97dd7d14e12e4e1d7d87e84de05d025a593
|
||||
source_hash: 39848c6104ebd4feeb37b233b70f3312fa076b535c3b3780336729eb9fdfa4e6
|
||||
source_path: tools/media-overview.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Генерація та розуміння медіа
|
||||
|
||||
OpenClaw генерує зображення, відео й музику, розуміє вхідні медіа (зображення, аудіо, відео) та озвучує відповіді за допомогою text-to-speech. Усі медіаможливості керуються інструментами: агент вирішує, коли їх використовувати, залежно від розмови, і кожен інструмент з’являється лише тоді, коли налаштовано принаймні одного відповідного provider.
|
||||
OpenClaw генерує зображення, відео та музику, розуміє вхідні медіа (зображення, аудіо, відео) і озвучує відповіді за допомогою перетворення тексту на мовлення. Усі медіаможливості керуються інструментами: агент вирішує, коли їх використовувати, на основі розмови, і кожен інструмент з’являється лише тоді, коли налаштовано принаймні одного базового постачальника.
|
||||
|
||||
## Можливості з першого погляду
|
||||
|
||||
| Можливість | Інструмент | Provider | Що робить |
|
||||
| ------------------- | ---------------- | -------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
|
||||
| Генерація зображень | `image_generate` | ComfyUI, fal, Google, MiniMax, OpenAI, Vydra, xAI | Створює або редагує зображення за текстовими prompt чи посиланнями |
|
||||
| Генерація відео | `video_generate` | Alibaba, BytePlus, ComfyUI, fal, Google, MiniMax, OpenAI, Qwen, Runway, Together, Vydra, xAI | Створює відео з тексту, зображень або наявних відео |
|
||||
| Генерація музики | `music_generate` | ComfyUI, Google, MiniMax | Створює музику або аудіодоріжки з текстових prompt |
|
||||
| Text-to-speech (TTS) | `tts` | ElevenLabs, Microsoft, MiniMax, OpenAI, xAI | Перетворює вихідні відповіді на озвучене аудіо |
|
||||
| Розуміння медіа | (автоматично) | Будь-який provider моделі з підтримкою vision/audio, а також резервні CLI-варіанти | Підсумовує вхідні зображення, аудіо та відео |
|
||||
| Можливість | Інструмент | Постачальники | Що він робить |
|
||||
| -------------------- | ---------------- | -------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
|
||||
| Генерація зображень | `image_generate` | ComfyUI, fal, Google, MiniMax, OpenAI, Vydra, xAI | Створює або редагує зображення з текстових запитів чи референсів |
|
||||
| Генерація відео | `video_generate` | Alibaba, BytePlus, ComfyUI, fal, Google, MiniMax, OpenAI, Qwen, Runway, Together, Vydra, xAI | Створює відео з тексту, зображень або наявних відео |
|
||||
| Генерація музики | `music_generate` | ComfyUI, Google, MiniMax | Створює музику або аудіодоріжки з текстових запитів |
|
||||
| Перетворення тексту на мовлення (TTS) | `tts` | ElevenLabs, Google, Microsoft, MiniMax, OpenAI, xAI | Перетворює вихідні відповіді на озвучене аудіо |
|
||||
| Розуміння медіа | (автоматично) | Будь-який постачальник моделей із підтримкою зору/аудіо, а також резервні варіанти CLI | Підсумовує вхідні зображення, аудіо та відео |
|
||||
|
||||
## Матриця можливостей provider
|
||||
## Матриця можливостей постачальників
|
||||
|
||||
Ця таблиця показує, які provider підтримують які медіаможливості на платформі.
|
||||
Ця таблиця показує, які постачальники підтримують які медіаможливості на всій платформі.
|
||||
|
||||
| Provider | Зображення | Відео | Музика | TTS | STT / Транскрибування | Розуміння медіа |
|
||||
| ---------- | ---------- | ----- | ------ | --- | --------------------- | --------------- |
|
||||
| Alibaba | | Yes | | | | |
|
||||
| BytePlus | | Yes | | | | |
|
||||
| ComfyUI | Yes | Yes | Yes | | | |
|
||||
| Deepgram | | | | | Yes | |
|
||||
| ElevenLabs | | | | Yes | Yes | |
|
||||
| fal | Yes | Yes | | | | |
|
||||
| Google | Yes | Yes | Yes | | | Yes |
|
||||
| Microsoft | | | | Yes | | |
|
||||
| MiniMax | Yes | Yes | Yes | Yes | | |
|
||||
| Mistral | | | | | Yes | |
|
||||
| OpenAI | Yes | Yes | | Yes | Yes | Yes |
|
||||
| Qwen | | Yes | | | | |
|
||||
| Runway | | Yes | | | | |
|
||||
| Together | | Yes | | | | |
|
||||
| Vydra | Yes | Yes | | | | |
|
||||
| xAI | Yes | Yes | | Yes | Yes | Yes |
|
||||
| Постачальник | Зображення | Відео | Музика | TTS | STT / Транскрибування | Голос у реальному часі | Розуміння медіа |
|
||||
| ------------ | ---------- | ----- | ------ | --- | --------------------- | ---------------------- | --------------- |
|
||||
| Alibaba | | Yes | | | | | |
|
||||
| BytePlus | | Yes | | | | | |
|
||||
| ComfyUI | Yes | Yes | Yes | | | | |
|
||||
| Deepgram | | | | | Yes | | |
|
||||
| ElevenLabs | | | | Yes | Yes | | |
|
||||
| fal | Yes | Yes | | | | | |
|
||||
| Google | Yes | Yes | Yes | Yes | | Yes | Yes |
|
||||
| Microsoft | | | | Yes | | | |
|
||||
| MiniMax | Yes | Yes | Yes | Yes | | | |
|
||||
| Mistral | | | | | Yes | | |
|
||||
| OpenAI | Yes | Yes | | Yes | Yes | Yes | Yes |
|
||||
| Qwen | | Yes | | | | | |
|
||||
| Runway | | Yes | | | | | |
|
||||
| Together | | Yes | | | | | |
|
||||
| Vydra | Yes | Yes | | | | | |
|
||||
| xAI | Yes | Yes | | Yes | Yes | | Yes |
|
||||
|
||||
<Note>
|
||||
Розуміння медіа використовує будь-яку модель із підтримкою vision або audio, зареєстровану у вашій конфігурації provider. У таблиці вище виділено provider із виділеною підтримкою розуміння медіа; більшість LLM-provider з мультимодальними моделями (Anthropic, Google, OpenAI тощо) також можуть розуміти вхідні медіа, якщо вони налаштовані як активна модель для відповідей.
|
||||
Розуміння медіа використовує будь-яку модель із підтримкою зору або аудіо, зареєстровану у вашій конфігурації постачальника. Таблиця вище виділяє постачальників зі спеціалізованою підтримкою розуміння медіа; більшість постачальників LLM із мультимодальними моделями (Anthropic, Google, OpenAI тощо) також можуть розуміти вхідні медіа, якщо їх налаштовано як активну модель для відповідей.
|
||||
</Note>
|
||||
|
||||
## Як працює асинхронна генерація
|
||||
|
||||
Генерація відео й музики виконується як фонові завдання, оскільки обробка provider зазвичай триває від 30 секунд до кількох хвилин. Коли агент викликає `video_generate` або `music_generate`, OpenClaw надсилає запит provider, одразу повертає ідентифікатор завдання й відстежує роботу в журналі завдань. Поки завдання виконується, агент продовжує відповідати на інші повідомлення. Коли provider завершує роботу, OpenClaw пробуджує агента, щоб той міг надіслати готове медіа назад у початковий канал. Генерація зображень і TTS є синхронними та завершуються в межах відповіді.
|
||||
Генерація відео та музики виконується як фонові завдання, оскільки обробка у постачальників зазвичай триває від 30 секунд до кількох хвилин. Коли агент викликає `video_generate` або `music_generate`, OpenClaw надсилає запит постачальнику, одразу повертає ідентифікатор завдання та відстежує роботу в журналі завдань. Поки завдання виконується, агент продовжує відповідати на інші повідомлення. Коли постачальник завершує обробку, OpenClaw пробуджує агента, щоб той міг опублікувати готовий медіарезультат назад у вихідний канал. Генерація зображень і TTS є синхронними та завершуються безпосередньо під час відповіді.
|
||||
|
||||
Deepgram, ElevenLabs, Mistral, OpenAI і xAI можуть транскрибувати вхідне
|
||||
аудіо через пакетний шлях `tools.media.audio`, якщо це налаштовано. Deepgram,
|
||||
ElevenLabs, Mistral, OpenAI і xAI також реєструють provider потокового STT для Voice Call,
|
||||
тому живе телефонне аудіо можна пересилати вибраному вендору
|
||||
аудіо через пакетний шлях `tools.media.audio`, якщо їх налаштовано. Deepgram,
|
||||
ElevenLabs, Mistral, OpenAI і xAI також реєструють постачальників потокового STT для
|
||||
Voice Call, тож живе телефонне аудіо може бути переспрямоване до вибраного постачальника
|
||||
без очікування завершення запису.
|
||||
|
||||
OpenAI зіставляється з поверхнями OpenClaw для зображень, відео, пакетного TTS, пакетного STT, потокового STT для Voice Call, realtime voice і memory embedding. xAI наразі
|
||||
зіставляється з поверхнями OpenClaw для зображень, відео, пошуку, виконання коду, пакетного TTS, пакетного STT
|
||||
і потокового STT для Voice Call. Realtime voice xAI — це
|
||||
можливість upstream, але вона не зареєстрована в OpenClaw, доки спільний контракт
|
||||
realtime voice не зможе її представити.
|
||||
Google відповідає поверхням OpenClaw для зображень, відео, музики, пакетного TTS, backend realtime
|
||||
voice і розуміння медіа. OpenAI відповідає поверхням OpenClaw для зображень,
|
||||
відео, пакетного TTS, пакетного STT, потокового STT для Voice Call, backend realtime voice
|
||||
та вбудовувань пам’яті. xAI наразі відповідає поверхням OpenClaw для зображень, відео,
|
||||
пошуку, виконання коду, пакетного TTS, пакетного STT і потокового STT для Voice Call.
|
||||
Голос xAI Realtime є можливістю на стороні постачальника, але він не
|
||||
реєструється в OpenClaw, доки спільний контракт голосу в реальному часі не зможе це виразити.
|
||||
|
||||
## Швидкі посилання
|
||||
|
||||
- [Генерація зображень](/uk/tools/image-generation) -- генерація та редагування зображень
|
||||
- [Генерація відео](/uk/tools/video-generation) -- text-to-video, image-to-video і video-to-video
|
||||
- [Генерація зображень](/uk/tools/image-generation) -- генерування та редагування зображень
|
||||
- [Генерація відео](/uk/tools/video-generation) -- текст у відео, зображення у відео та відео у відео
|
||||
- [Генерація музики](/uk/tools/music-generation) -- створення музики й аудіодоріжок
|
||||
- [Text-to-Speech](/uk/tools/tts) -- перетворення відповідей на озвучене аудіо
|
||||
- [Перетворення тексту на мовлення](/uk/tools/tts) -- перетворення відповідей на озвучене аудіо
|
||||
- [Розуміння медіа](/uk/nodes/media-understanding) -- розуміння вхідних зображень, аудіо та відео
|
||||
|
||||
## Пов’язано
|
||||
## Пов’язане
|
||||
|
||||
- [Генерація зображень](/uk/tools/image-generation)
|
||||
- [Генерація відео](/uk/tools/video-generation)
|
||||
- [Генерація музики](/uk/tools/music-generation)
|
||||
- [Text-to-speech](/uk/tools/tts)
|
||||
- [Перетворення тексту на мовлення](/uk/tools/tts)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user