From c84a05a9b25e4eea04ca4693d1f390fb1f949881 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Mon, 4 May 2026 06:25:16 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/plugins/google-meet.md | 1040 +++++++++++++++++-------------- docs/uk/providers/elevenlabs.md | 68 +- 2 files changed, 598 insertions(+), 510 deletions(-) diff --git a/docs/uk/plugins/google-meet.md b/docs/uk/plugins/google-meet.md index 8c0b1efe9..652fecb81 100644 --- a/docs/uk/plugins/google-meet.md +++ b/docs/uk/plugins/google-meet.md @@ -1,44 +1,44 @@ --- read_when: - - Ви хочете, щоб агент OpenClaw приєднався до дзвінка Google Meet + - Ви хочете, щоб агент 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 node або Twilio як транспорт Google Meet +summary: 'Plugin Google Meet: приєднання за явними URL Meet через Chrome або Twilio з типовими налаштуваннями зворотного зв’язку агента' +title: Plugin для Google Meet x-i18n: - generated_at: "2026-05-04T05:46:10Z" + generated_at: "2026-05-04T06:21:42Z" model: gpt-5.5 provider: openai - source_hash: ad2117a42a91f9b494e8c48cc4cfd7439c8bd7b32fd8b97a139fb9b8bbde40a1 + source_hash: 459802231a807001d96d43950993f612234a5394fbe8c57a9992e97e8851dda2 source_path: plugins/google-meet.md workflow: 16 --- -Підтримка учасника Google Meet для OpenClaw — плагін навмисно працює явно: +Підтримка учасника Google Meet для OpenClaw — Plugin навмисно працює лише явно: - Він приєднується лише до явної URL-адреси `https://meet.google.com/...`. - Він може створити новий простір Meet через Google Meet API, а потім приєднатися до - повернутої URL-адреси. -- `agent` — типовий режим відповіді голосом: транскрипція в реальному часі слухає, - налаштований агент OpenClaw відповідає, а звичайний OpenClaw TTS говорить у Meet. -- `bidi` залишається доступним як резервний режим прямої голосової моделі реального часу. + поверненої URL-адреси. +- `agent` — стандартний режим відповіді голосом: realtime-транскрипція слухає, + налаштований агент OpenClaw відповідає, а звичайний OpenClaw TTS промовляє в Meet. +- `bidi` лишається доступним як резервний режим прямої realtime-голосової моделі. - Агенти вибирають поведінку приєднання через `mode`: використовуйте `agent` для живого - прослуховування/відповіді голосом, `bidi` для прямого резервного голосу в реальному часі або `transcribe` - для приєднання/керування браузером без моста відповіді голосом. -- Автентифікація починається з особистого Google OAuth або вже виконаного входу в профіль Chrome. + прослуховування/відповіді голосом, `bidi` для прямого резервного realtime-голосу або `transcribe`, + щоб приєднатися/керувати браузером без мосту відповіді голосом. +- Автентифікація починається як персональний Google OAuth або вже виконаний вхід у профілі Chrome. - Автоматичного оголошення згоди немає. -- Типовий аудіобекенд Chrome — `BlackHole 2ch`. +- Стандартний аудіобекенд Chrome — `BlackHole 2ch`. - Chrome може працювати локально або на спареному вузловому хості. -- Twilio приймає номер для дозвону плюс необов'язковий PIN або послідовність DTMF; він - не може напряму набрати URL-адресу Meet. +- Twilio приймає номер для набору плюс необов’язковий PIN або послідовність DTMF; він + не може набрати URL Meet напряму. - Команда CLI — `googlemeet`; `meet` зарезервовано для ширших агентських - телеконференц-процесів. + телеконференційних робочих процесів. ## Швидкий старт -Установіть локальні аудіозалежності й налаштуйте постачальника транскрипції в реальному часі -плюс звичайний OpenClaw TTS. OpenAI є типовим постачальником транскрипції; -Google Gemini Live також працює як окремий резервний голос `bidi` з +Встановіть локальні аудіозалежності та налаштуйте постачальника realtime-транскрипції +плюс звичайний OpenClaw TTS. OpenAI є стандартним постачальником транскрипції; +Google Gemini Live також працює як окремий голосовий резерв `bidi` з `realtime.voiceProvider: "google"`: ```bash @@ -49,7 +49,7 @@ export GEMINI_API_KEY=... ``` `blackhole-2ch` встановлює віртуальний аудіопристрій `BlackHole 2ch`. Інсталятор -Homebrew потребує перезавантаження, перш ніж macOS покаже пристрій: +Homebrew вимагає перезавантаження, перш ніж macOS покаже пристрій: ```bash sudo reboot @@ -62,7 +62,7 @@ system_profiler SPAudioDataType | grep -i BlackHole command -v sox ``` -Увімкніть плагін: +Увімкніть Plugin: ```json5 { @@ -83,33 +83,33 @@ command -v sox openclaw googlemeet setup ``` -Вивід налаштування призначений для читання агентом і враховує режим. Він повідомляє про профіль Chrome, -закріплення вузла, а для приєднань Chrome у реальному часі — про аудіоміст -BlackHole/SoX і відкладені перевірки вступу в реальному часі. Для приєднань лише для спостереження перевірте той самий -транспорт із `--mode transcribe`; цей режим пропускає передумови аудіо в реальному часі, -бо він не слухає й не говорить через міст: +Вивід налаштування призначений бути читабельним для агента й обізнаним про режим. Він повідомляє про профіль Chrome, +закріплення вузла, а для realtime-приєднань Chrome — про аудіоміст +BlackHole/SoX і відкладені перевірки realtime-вступу. Для приєднань лише для спостереження перевірте той самий +транспорт із `--mode transcribe`; цей режим пропускає realtime-аудіопередумови, +бо він не слухає через міст і не говорить через нього: ```bash openclaw googlemeet setup --transport chrome-node --mode transcribe ``` Коли налаштовано делегування Twilio, налаштування також повідомляє, чи готові -плагін `voice-call`, облікові дані Twilio і публічна доступність Webhook. -Сприймайте будь-яку перевірку `ok: false` як блокер для перевіреного транспорту й режиму -перед тим, як просити агента приєднатися. Використовуйте `openclaw googlemeet setup --json` для -скриптів або машинозчитуваного виводу. Використовуйте `--transport chrome`, +Plugin `voice-call`, облікові дані Twilio та публічна доступність Webhook. +Вважайте будь-яку перевірку `ok: false` блокером для перевіреного транспорту й режиму, +перш ніж просити агента приєднатися. Використовуйте `openclaw googlemeet setup --json` для +скриптів або машинно-читаного виводу. Використовуйте `--transport chrome`, `--transport chrome-node` або `--transport twilio`, щоб попередньо перевірити конкретний -транспорт до того, як агент спробує його використати. +транспорт до того, як агент спробує його. -Для Twilio завжди явно перевіряйте транспорт, коли типовий транспорт — -Chrome: +Для Twilio завжди явно попередньо перевіряйте транспорт, коли стандартний транспорт +— Chrome: ```bash openclaw googlemeet setup --transport twilio ``` -Це виявляє відсутню прив'язку `voice-call`, облікові дані Twilio або недоступну -публічну Webhook-адресу до того, як агент спробує набрати зустріч. +Це виявляє відсутню обв’язку `voice-call`, облікові дані Twilio або недосяжну +публічну доступність Webhook до того, як агент спробує набрати зустріч. Приєднайтеся до зустрічі: @@ -128,11 +128,11 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij } ``` -Інструмент `google_meet` для агента залишається доступним на хостах не з macOS для -артефактів, календаря, налаштування, транскрибування, Twilio та потоків `chrome-node`. Локальні -дії Chrome з відповіддю голосом там заблоковані, бо вбудований аудіошлях Chrome +Агентський інструмент `google_meet` лишається доступним на хостах не macOS для +артефактів, календаря, налаштування, транскрипції, Twilio та потоків `chrome-node`. Локальні +дії відповіді голосом Chrome там заблоковані, бо вбудований аудіошлях Chrome зараз залежить від macOS `BlackHole 2ch`. На Linux використовуйте `mode: "transcribe"`, -дозвін Twilio або macOS-хост `chrome-node` для участі Chrome з відповіддю голосом. +набір Twilio або хост macOS `chrome-node` для участі Chrome з відповіддю голосом. Створіть нову зустріч і приєднайтеся до неї: @@ -141,24 +141,24 @@ openclaw googlemeet create --transport chrome-node --mode agent ``` Для кімнат, створених через API, використовуйте Google Meet `SpaceConfig.accessType`, коли хочете, -щоб політика входу без стуку для кімнати була явною, а не успадкованою з типових значень +щоб політика кімнати без запиту на вхід була явною, а не успадкованою зі стандартних налаштувань облікового запису Google: ```bash openclaw googlemeet create --access-type OPEN --transport chrome-node --mode agent ``` -`OPEN` дозволяє будь-кому з URL-адресою Meet приєднатися без стуку. `TRUSTED` дозволяє -довіреним користувачам організації хоста, запрошеним зовнішнім користувачам і користувачам із дозвоном -приєднуватися без стуку. `RESTRICTED` обмежує вхід без стуку лише запрошеними. Ці -налаштування застосовуються лише до офіційного шляху створення через Google Meet API, тому облікові дані -OAuth мають бути налаштовані. +`OPEN` дозволяє будь-кому з URL Meet приєднатися без запиту на вхід. `TRUSTED` дозволяє +довіреним користувачам організації хоста, запрошеним зовнішнім користувачам і користувачам +телефонного набору приєднуватися без запиту на вхід. `RESTRICTED` обмежує вхід без запиту лише запрошеними. Ці +налаштування застосовуються лише до офіційного шляху створення Google Meet API, тому облікові дані OAuth +мають бути налаштовані. Якщо ви автентифікували Google Meet до появи цієї опції, повторно запустіть `openclaw googlemeet auth login --json` після додавання області -`meetings.space.settings` на екрані згоди Google OAuth. +`meetings.space.settings` до екрана згоди Google OAuth. -Створіть лише URL-адресу без приєднання: +Створіть лише URL без приєднання: ```bash openclaw googlemeet create --no-join @@ -168,25 +168,25 @@ openclaw googlemeet create --no-join - Створення через API: використовується, коли налаштовано облікові дані Google Meet OAuth. Це найдетермінованіший шлях, який не залежить від стану інтерфейсу браузера. -- Резервний браузерний шлях: використовується, коли облікових даних OAuth немає. OpenClaw використовує +- Браузерний резерв: використовується, коли облікові дані OAuth відсутні. OpenClaw використовує закріплений вузол Chrome, відкриває `https://meet.google.com/new`, чекає, доки Google - перенаправить на справжню URL-адресу з кодом зустрічі, а потім повертає цю URL-адресу. Цей шлях потребує, - щоб профіль OpenClaw Chrome на вузлі вже був залогінений у Google. - Браузерна автоматизація обробляє власний первинний запит Meet на мікрофон; цей запит - не вважається помилкою входу Google. - Потоки приєднання й створення також намагаються повторно використати наявну вкладку Meet перед відкриттям - нової. Зіставлення ігнорує безпечні рядки запиту URL, як-от `authuser`, тому повторна спроба - агента має сфокусувати вже відкриту зустріч замість створення другої + перенаправить на справжню URL-адресу з кодом зустрічі, а потім повертає цю URL-адресу. Цей шлях вимагає, + щоб у профілі OpenClaw Chrome на вузлі вже було виконано вхід у Google. + Браузерна автоматизація обробляє власний запит Meet на мікрофон під час першого запуску; цей запит + не вважається помилкою входу в Google. + Потоки приєднання та створення також намагаються повторно використати наявну вкладку Meet перед відкриттям + нової. Зіставлення ігнорує нешкідливі рядки запиту URL, як-от `authuser`, тож + повторна спроба агента має сфокусувати вже відкриту зустріч замість створення другої вкладки Chrome. Вивід команди/інструмента містить поле `source` (`api` або `browser`), щоб агенти -могли пояснити, який шлях було використано. `create` типово приєднується до нової зустрічі й -повертає `joined: true` плюс сесію приєднання. Щоб лише створити URL-адресу, використовуйте -`create --no-join` у CLI або передайте `"join": false` інструменту. +могли пояснити, який шлях було використано. `create` стандартно приєднується до нової зустрічі й +повертає `joined: true` плюс сесію приєднання. Щоб лише створити URL, +використовуйте `create --no-join` у CLI або передайте `"join": false` інструменту. -Або скажіть агенту: "Створи Google Meet, приєднайся до нього в режимі відповіді голосом агента -і надішли мені посилання." Агент має викликати `google_meet` з -`action: "create"`, а потім поширити повернуте `meetingUri`. +Або скажіть агенту: «Створи Google Meet, приєднайся до нього в режимі агентської відповіді голосом +і надішли мені посилання». Агент має викликати `google_meet` з +`action: "create"`, а потім поділитися поверненим `meetingUri`. ```json { @@ -196,56 +196,56 @@ openclaw googlemeet create --no-join } ``` -Для приєднання лише для спостереження/керування браузером установіть `"mode": "transcribe"`. Це не -запускає дуплексний голосовий міст реального часу, не потребує BlackHole або SoX -і не відповідатиме голосом у зустріч. Приєднання Chrome у цьому режимі також уникають -надання дозволів OpenClaw на мікрофон/камеру й обходять шлях Meet **Use -microphone**. Якщо Meet показує проміжний екран вибору аудіо, автоматизація намагається -вибрати шлях без мікрофона, а інакше повідомляє про ручну дію замість відкриття -локального мікрофона. У режимі transcribe керовані транспорти Chrome також встановлюють -best-effort спостерігач субтитрів Meet. `googlemeet status --json` і +Для приєднання лише для спостереження/керування браузером установіть `"mode": "transcribe"`. Це +не запускає дуплексний realtime-голосовий міст, не потребує BlackHole або SoX +і не відповідатиме голосом у зустрічі. Приєднання Chrome у цьому режимі також уникає +надання дозволів OpenClaw на мікрофон/камеру та уникає шляху Meet **Використовувати +мікрофон**. Якщо Meet показує проміжний екран вибору аудіо, автоматизація пробує +шлях без мікрофона, а інакше повідомляє про ручну дію замість відкриття +локального мікрофона. У режимі транскрипції керовані транспорти Chrome також встановлюють +спостерігач субтитрів Meet у режимі найкращого зусилля. `googlemeet status --json` і `googlemeet doctor` показують `captioning`, `captionsEnabledAttempted`, -`transcriptLines`, `lastCaptionAt`, `lastCaptionSpeaker`, `lastCaptionText`, -і короткий хвіст `recentTranscript`, щоб оператори могли зрозуміти, чи браузер -приєднався до дзвінка і чи субтитри Meet генерують текст. +`transcriptLines`, `lastCaptionAt`, `lastCaptionSpeaker`, `lastCaptionText` +та короткий хвіст `recentTranscript`, щоб оператори могли зрозуміти, чи браузер +приєднався до дзвінка і чи субтитри Meet створюють текст. Використовуйте `openclaw googlemeet test-listen --transport chrome-node`, коли -потрібна перевірка так/ні: вона приєднується в режимі transcribe, чекає на новий рух субтитрів або -транскрипту і повертає `listenVerified`, `listenTimedOut`, поля ручних -дій і останній стан субтитрів. +потрібна перевірка так/ні: він приєднується в режимі транскрипції, чекає на свіжі субтитри або +рух транскрипту й повертає `listenVerified`, `listenTimedOut`, поля ручної +дії та найновіший стан субтитрів. -Під час сесій реального часу статус `google_meet` містить стан браузера та аудіомоста, -зокрема `inCall`, `manualActionRequired`, `providerConnected`, +Під час realtime-сесій статус `google_meet` містить стан браузера й аудіомоста, +як-от `inCall`, `manualActionRequired`, `providerConnected`, `realtimeReady`, `audioInputActive`, `audioOutputActive`, останні часові мітки вводу/виводу, -лічильники байтів і стан закриття моста. Якщо з'являється безпечний запит сторінки Meet, +лічильники байтів і стан закриття моста. Якщо з’являється безпечний запит сторінки Meet, браузерна автоматизація обробляє його, коли може. Вхід, допуск хостом і запити дозволів браузера/ОС повідомляються як ручна дія з причиною та -повідомленням, яке агент має передати. Керовані сесії Chrome відтворюють вступну або +повідомленням для агента, яке треба передати. Керовані сесії Chrome видають вступ або тестову фразу лише після того, як стан браузера повідомить `inCall: true`; інакше статус повідомляє -`speechReady: false`, а спробу мовлення блокують замість удавання, що +`speechReady: false`, а спроба мовлення блокується замість удавання, що агент говорив у зустріч. -Локальні приєднання Chrome використовують залогінений профіль браузера OpenClaw. Режим реального часу +Локальні приєднання Chrome відбуваються через профіль браузера OpenClaw, у якому виконано вхід. Realtime-режим потребує `BlackHole 2ch` для шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого дуплексного аудіо використовуйте окремі віртуальні пристрої або граф у стилі Loopback; одного -пристрою BlackHole достатньо для першого smoke test, але він може давати луну. +пристрою BlackHole достатньо для першого smoke-тесту, але він може давати відлуння. ### Локальний Gateway + Parallels Chrome -Вам **не** потрібен повний OpenClaw Gateway або ключ API моделі всередині macOS VM -лише для того, щоб VM володіла Chrome. Запустіть Gateway і агента локально, а потім запустіть -вузловий хост у VM. Увімкніть вбудований плагін на VM один раз, щоб вузол -оголосив команду Chrome: +Вам **не** потрібен повний OpenClaw Gateway або ключ model API всередині macOS VM, +щоб лише зробити VM власником Chrome. Запустіть Gateway і агента локально, потім запустіть +вузловий хост у VM. Один раз увімкніть вбудований Plugin у VM, щоб вузол +рекламував команду Chrome: -Що де запускається: +Що де працює: -- Хост Gateway: OpenClaw Gateway, робоча область агента, ключі моделі/API, постачальник реального часу - і конфіг плагіна Google Meet. +- Хост Gateway: OpenClaw Gateway, робоча область агента, ключі model/API, realtime + provider і конфігурація Google Meet Plugin. - Parallels macOS VM: OpenClaw CLI/вузловий хост, Google Chrome, SoX, BlackHole 2ch - і профіль Chrome, залогінений у Google. -- Не потрібно у VM: сервіс Gateway, конфіг агента, ключ OpenAI/GPT або налаштування - постачальника моделі. + і профіль Chrome із входом у Google. +- Не потрібно у VM: служба Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування + model provider. -Установіть залежності VM: +Встановіть залежності VM: ```bash brew install blackhole-2ch sox @@ -264,7 +264,7 @@ system_profiler SPAudioDataType | grep -i BlackHole command -v sox ``` -Установіть або оновіть OpenClaw у VM, а потім увімкніть там вбудований плагін: +Встановіть або оновіть OpenClaw у VM, потім увімкніть там вбудований Plugin: ```bash openclaw plugins enable google-meet @@ -276,8 +276,8 @@ openclaw plugins enable google-meet openclaw node run --host --port 18789 --display-name parallels-macos ``` -Якщо `` — це LAN IP і ви не використовуєте TLS, вузол відхилить -незашифрований WebSocket, якщо ви явно не дозволите його для цієї довіреної приватної мережі: +Якщо `` — LAN IP і ви не використовуєте TLS, вузол відмовляється від +відкритого WebSocket, якщо ви явно не погодитеся для цієї довіреної приватної мережі: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ @@ -303,14 +303,14 @@ openclaw devices list openclaw devices approve ``` -Підтвердьте, що Gateway бачить вузол і що він оголошує і `googlemeet.chrome`, +Підтвердьте, що Gateway бачить вузол і що він рекламує і `googlemeet.chrome`, і можливість браузера/`browser.proxy`: ```bash openclaw nodes status ``` -Маршрутизуйте Meet через цей вузол на хості Gateway: +Спрямуйте Meet через цей вузол на хості Gateway: ```json5 { @@ -340,7 +340,7 @@ openclaw nodes status } ``` -Тепер приєднайтеся звичайно з хоста Gateway: +Тепер приєднуйтеся звичайно з хоста Gateway: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij @@ -348,54 +348,103 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij або попросіть агента використати інструмент `google_meet` з `transport: "chrome-node"`. -Для smoke test однією командою, який створює або повторно використовує сесію, промовляє відому -фразу і друкує стан сесії: +Для smoke-тесту однією командою, який створює або повторно використовує сесію, промовляє відому +фразу й друкує стан сесії: ```bash openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij ``` -Під час приєднання в реальному часі браузерна автоматизація OpenClaw заповнює ім’я гостя, натискає Приєднатися/Попросити приєднатися та приймає перший вибір Meet «Використовувати мікрофон», коли з’являється цей запит. Під час приєднання лише для спостереження або створення зустрічі лише в браузері вона проходить повз той самий запит без мікрофона, коли такий вибір доступний. Якщо профіль браузера не ввійшов в обліковий запис, Meet очікує допуску від організатора, Chrome потребує дозволу на мікрофон/камеру для приєднання в реальному часі або Meet застряг на запиті, який автоматизація не змогла розв’язати, результат join/test-speech повідомляє `manualActionRequired: true` з `manualActionReason` і `manualActionMessage`. Агенти мають припинити повторювати приєднання, повідомити це точне повідомлення разом із поточними `browserUrl`/`browserTitle` і повторювати спробу лише після завершення ручної дії в браузері. +Під час приєднання в реальному часі автоматизація браузера OpenClaw заповнює ім’я гостя, натискає +Join/Ask to join і приймає перший вибір Meet "Use microphone", коли з’являється цей +запит. Під час приєднання лише для спостереження або створення зустрічі лише в браузері вона +продовжує після того самого запиту без мікрофона, коли такий вибір доступний. +Якщо профіль браузера не ввійшов в обліковий запис, Meet очікує підтвердження від організатора, +Chrome потребує дозволу на мікрофон/камеру для приєднання в реальному часі, або Meet застряг +на запиті, який автоматизація не змогла розв’язати, результат join/test-speech повідомляє +`manualActionRequired: true` з `manualActionReason` і +`manualActionMessage`. Агенти мають припинити повторювати приєднання, повідомити це точне +повідомлення разом із поточними `browserUrl`/`browserTitle` і повторити спробу лише після +завершення ручної дії в браузері. -Якщо `chromeNode.node` пропущено, OpenClaw автоматично вибирає лише тоді, коли рівно один підключений вузол оголошує і `googlemeet.chrome`, і керування браузером. Якщо підключено кілька придатних вузлів, задайте `chromeNode.node` як ідентифікатор вузла, відображуване ім’я або віддалену IP-адресу. +Якщо `chromeNode.node` опущено, OpenClaw автоматично вибирає лише тоді, коли рівно один +підключений вузол оголошує і `googlemeet.chrome`, і керування браузером. Якщо +підключено кілька придатних вузлів, установіть `chromeNode.node` на id вузла, +відображуване ім’я або віддалену IP-адресу. -Поширені перевірки помилок: +Типові перевірки збоїв: -- `Configured Google Meet node ... is not usable: offline`: закріплений вузол відомий Gateway, але недоступний. Агенти мають розглядати цей вузол як діагностичний стан, а не як придатний хост Chrome, і повідомляти про блокер налаштування замість переходу до іншого транспорту, якщо користувач не просив цього. -- `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM, підтвердьте спарювання та переконайтеся, що `openclaw plugins enable google-meet` і `openclaw plugins enable browser` були запущені у VM. Також підтвердьте, що хост Gateway дозволяє обидві команди вузла через `gateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"]`. -- `BlackHole 2ch audio device not found`: установіть `blackhole-2ch` на хості, який перевіряється, і перезавантажтеся перед використанням локального аудіо Chrome. -- `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 для чистого дуплексного аудіо. +- `Configured Google Meet node ... is not usable: offline`: закріплений вузол + відомий Gateway, але недоступний. Агенти мають розглядати цей вузол як + діагностичний стан, а не як придатний хост Chrome, і повідомити про блокер + налаштування замість переходу на інший транспорт, якщо користувач цього не просив. +- `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM, + схваліть спарювання й переконайтеся, що `openclaw plugins enable google-meet` і + `openclaw plugins enable browser` були виконані у VM. Також підтвердьте, що + хост Gateway дозволяє обидві команди вузла через + `gateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"]`. +- `BlackHole 2ch audio device not found`: установіть `blackhole-2ch` на хості, + який перевіряється, і перезавантажтеся перед використанням локального аудіо Chrome. +- `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 використовує два зовнішні інструменти: +Стандартний зворотний аудіоканал Chrome використовує два зовнішні інструменти: -- `sox`: аудіоутиліта командного рядка. Plugin використовує явні команди пристрою CoreAudio для типового аудіомоста 24 кГц PCM16. -- `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій `BlackHole 2ch`, через який Chrome/Meet може маршрутизувати аудіо. +- `sox`: утиліта командного рядка для аудіо. Plugin використовує явні команди пристрою CoreAudio + для стандартного аудіомоста 24 кГц PCM16. +- `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, перегляньте умови ліцензування upstream BlackHole або отримайте окрему ліцензію від Existential Audio. +OpenClaw не комплектує й не розповсюджує жоден із цих пакетів. Документація просить користувачів +установити їх як залежності хоста через Homebrew. SoX ліцензовано як +`LGPL-2.0-only AND GPL-2.0-only`; BlackHole має GPL-3.0. Якщо ви створюєте +інсталятор або appliance, який комплектує BlackHole з OpenClaw, перегляньте умови +ліцензування BlackHole від upstream або отримайте окрему ліцензію від Existential Audio. ## Транспорти ### Chrome -Транспорт Chrome відкриває URL-адресу Meet через керування браузером OpenClaw і приєднується як профіль браузера OpenClaw, що ввійшов в обліковий запис. На macOS Plugin перевіряє наявність `BlackHole 2ch` перед запуском. Якщо налаштовано, він також запускає команду перевірки стану аудіомоста й команду запуску перед відкриттям Chrome. Використовуйте `chrome`, коли Chrome/аудіо працюють на хості Gateway; використовуйте `chrome-node`, коли Chrome/аудіо працюють на спареному вузлі, наприклад VM Parallels macOS. Для локального Chrome виберіть профіль через `browser.defaultProfile`; `chrome.browserProfile` передається хостам `chrome-node`. +Транспорт Chrome відкриває URL-адресу Meet через керування браузером OpenClaw і приєднується +як профіль браузера OpenClaw, що ввійшов в обліковий запис. На macOS Plugin перевіряє наявність +`BlackHole 2ch` перед запуском. Якщо налаштовано, він також запускає команду перевірки справності +аудіомоста й команду запуску перед відкриттям Chrome. Використовуйте `chrome`, коли +Chrome/аудіо працюють на хості Gateway; використовуйте `chrome-node`, коли Chrome/аудіо працюють +на спареному вузлі, наприклад VM Parallels macOS. Для локального Chrome виберіть +профіль через `browser.defaultProfile`; `chrome.browserProfile` передається +хостам `chrome-node`. ```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: @@ -438,7 +487,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... @@ -447,9 +497,11 @@ export TWILIO_FROM_NUMBER=+15550001234 export GEMINI_API_KEY=... ``` -Натомість використовуйте `realtime.provider: "openai"` з Plugin провайдера OpenAI і `OPENAI_API_KEY`, якщо це ваш провайдер голосу в реальному часі. +Натомість використовуйте `realtime.provider: "openai"` з Plugin постачальника OpenAI і +`OPENAI_API_KEY`, якщо це ваш постачальник голосу в реальному часі. -Перезапустіть або перезавантажте Gateway після ввімкнення `voice-call`; зміни конфігурації Plugin не з’являються в уже запущеному процесі Gateway, доки він не перезавантажиться. +Перезапустіть або перезавантажте Gateway після ввімкнення `voice-call`; зміни конфігурації Plugin +не з’являються в уже запущеному процесі Gateway, доки він не перезавантажиться. Потім перевірте: @@ -459,7 +511,9 @@ openclaw plugins list | grep -E 'google-meet|voice-call' openclaw googlemeet setup ``` -Коли делегування Twilio підключено, `googlemeet setup` містить успішні перевірки `twilio-voice-call-plugin`, `twilio-voice-call-credentials` і `twilio-voice-call-webhook`. +Коли делегування Twilio підключено, `googlemeet setup` містить успішні +перевірки `twilio-voice-call-plugin`, `twilio-voice-call-credentials` і +`twilio-voice-call-webhook`. ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij \ @@ -468,7 +522,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 \ @@ -477,31 +531,41 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --dtmf-sequence ww123456# ``` -## OAuth і preflight +## OAuth і попередня перевірка -OAuth необов’язковий для створення посилання Meet, оскільки `googlemeet create` може відступити до браузерної автоматизації. Налаштуйте OAuth, коли потрібні офіційне створення через API, розв’язання простору або перевірки preflight Meet Media API. +OAuth необов’язковий для створення посилання Meet, бо `googlemeet create` може +відкотитися до автоматизації браузера. Налаштуйте OAuth, коли потрібні офіційне створення через API, +розв’язання просторів або попередні перевірки Meet Media API. -Доступ до Google Meet API використовує користувацький OAuth: створіть клієнт Google Cloud OAuth, запитайте потрібні scopes, авторизуйте обліковий запис Google, а потім збережіть отриманий refresh token у конфігурації Plugin Google Meet або надайте змінні середовища `OPENCLAW_GOOGLE_MEET_*`. +Доступ до Google Meet API використовує користувацький OAuth: створіть OAuth-клієнт Google Cloud, +запитайте потрібні області, авторизуйте обліковий запис Google, а потім збережіть +отриманий refresh token у конфігурації Plugin Google Meet або надайте +змінні середовища `OPENCLAW_GOOGLE_MEET_*`. -OAuth не замінює шлях приєднання Chrome. Транспорти Chrome і Chrome-node усе ще приєднуються через профіль Chrome, що ввійшов в обліковий запис, BlackHole/SoX і підключений вузол, коли ви використовуєте участь через браузер. OAuth призначений лише для офіційного шляху Google Meet API: створення просторів зустрічей, розв’язання просторів і виконання перевірок preflight Meet Media API. +OAuth не замінює шлях приєднання Chrome. Транспорти Chrome і Chrome-node +усе одно приєднуються через профіль Chrome, що ввійшов в обліковий запис, BlackHole/SoX і підключений +вузол, коли ви використовуєте участь через браузер. OAuth призначений лише для офіційного шляху +Google Meet API: створення просторів зустрічей, розв’язання просторів і запуск попередніх +перевірок Meet Media API. -### Створення облікових даних Google +### Створіть облікові дані Google У Google Cloud Console: 1. Створіть або виберіть проєкт Google Cloud. 2. Увімкніть **Google Meet REST API** для цього проєкту. 3. Налаштуйте екран згоди OAuth. - - **Internal** — найпростіший варіант для організації Google Workspace. - - **External** працює для особистих/тестових налаштувань; поки застосунок перебуває в Testing, додайте кожен обліковий запис Google, який авторизуватиме застосунок, як тестового користувача. -4. Додайте scopes, які запитує OpenClaw: + - **Internal** найпростіший для організації Google Workspace. + - **External** працює для персональних/тестових налаштувань; доки застосунок у Testing, + додайте кожен обліковий запис Google, який авторизуватиме застосунок, як тестового користувача. +4. Додайте області, які запитує OpenClaw: - `https://www.googleapis.com/auth/meetings.space.created` - `https://www.googleapis.com/auth/meetings.space.readonly` - `https://www.googleapis.com/auth/meetings.space.settings` - `https://www.googleapis.com/auth/meetings.conference.media.readonly` 5. Створіть OAuth client ID. - Тип застосунку: **Web application**. - - Авторизована URI перенаправлення: + - Авторизований URI переспрямування: ```text http://localhost:8085/oauth2callback @@ -509,17 +573,26 @@ OAuth не замінює шлях приєднання Chrome. Транспор 6. Скопіюйте client ID і client secret. -`meetings.space.created` потрібен Google Meet `spaces.create`. `meetings.space.readonly` дає OpenClaw змогу розв’язувати URL-адреси/коди Meet у простори. `meetings.space.settings` дає OpenClaw змогу передавати налаштування `SpaceConfig`, як-от `accessType`, під час створення кімнати через API. `meetings.conference.media.readonly` призначений для preflight Meet Media API і роботи з медіа; Google може вимагати участі в Developer Preview для фактичного використання Media API. Якщо вам потрібні лише приєднання Chrome на основі браузера, повністю пропустіть OAuth. +`meetings.space.created` потрібен Google Meet `spaces.create`. +`meetings.space.readonly` дає OpenClaw змогу розв’язувати URL-адреси/коди Meet у простори. +`meetings.space.settings` дає OpenClaw змогу передавати налаштування `SpaceConfig`, як-от +`accessType`, під час створення кімнати через API. +`meetings.conference.media.readonly` призначений для попередньої перевірки Meet Media API і роботи з медіа; +Google може вимагати реєстрації в Developer Preview для фактичного використання Media API. +Якщо вам потрібні лише браузерні приєднання Chrome, повністю пропустіть OAuth. -### Випуск refresh token +### Згенеруйте refresh token -Налаштуйте `oauth.clientId` і, за потреби, `oauth.clientSecret`, або передайте їх як змінні середовища, а потім запустіть: +Налаштуйте `oauth.clientId` і, за потреби, `oauth.clientSecret`, або передайте їх як +змінні середовища, а потім виконайте: ```bash openclaw googlemeet auth login --json ``` -Команда виводить конфігураційний блок `oauth` з refresh token. Вона використовує PKCE, localhost callback на `http://localhost:8085/oauth2callback` і ручний потік копіювання/вставлення з `--manual`. +Команда друкує блок конфігурації `oauth` з refresh token. Вона використовує PKCE, +localhost callback на `http://localhost:8085/oauth2callback` і ручний +потік копіювання/вставлення з `--manual`. Приклади: @@ -573,30 +646,39 @@ JSON-вивід містить: } ``` -Віддавайте перевагу змінним середовища, коли не хочете зберігати refresh token у конфігурації. Якщо наявні і конфігурація, і значення середовища, Plugin спершу використовує конфігурацію, а потім fallback до середовища. +Надавайте перевагу змінним середовища, коли не хочете зберігати refresh token у конфігурації. +Якщо наявні і значення конфігурації, і значення середовища, Plugin спочатку використовує конфігурацію, +а потім резервно звертається до середовища. -Згода OAuth включає створення просторів Meet, доступ на читання просторів Meet і доступ на читання медіа конференції Meet. Якщо ви автентифікувалися до появи підтримки створення зустрічей, повторно запустіть `openclaw googlemeet auth login --json`, щоб refresh token мав scope `meetings.space.created`. +Згода OAuth охоплює створення просторів Meet, доступ для читання просторів Meet і доступ для читання +медіа конференцій Meet. Якщо ви автентифікувалися до появи підтримки створення зустрічей, +повторно виконайте `openclaw googlemeet auth login --json`, щоб refresh token мав область +`meetings.space.created`. -### Перевірка OAuth через doctor +### Перевірте OAuth за допомогою doctor -Запустіть OAuth doctor, коли потрібна швидка перевірка стану без секретів: +Запускайте OAuth doctor, коли потрібна швидка перевірка справності без секретів: ```bash openclaw googlemeet doctor --oauth --json ``` -Це не завантажує runtime Chrome і не потребує підключеного вузла Chrome. Воно перевіряє, що конфігурація OAuth існує і що refresh token може видати access token. JSON-звіт містить лише поля стану, як-от `ok`, `configured`, `tokenSource`, `expiresAt`, і повідомлення перевірок; він не друкує access token, refresh token або client secret. +Це не завантажує runtime Chrome і не потребує підключеного вузла Chrome. Воно +перевіряє, що конфігурація OAuth існує і що refresh token може згенерувати access +token. JSON-звіт містить лише поля стану, як-от `ok`, `configured`, +`tokenSource`, `expiresAt`, і повідомлення перевірок; він не друкує access +token, refresh token або client secret. -Поширені результати: +Типові результати: | Перевірка | Значення | | -------------------- | --------------------------------------------------------------------------------------- | -| `oauth-config` | Наявні `oauth.clientId` плюс `oauth.refreshToken` або кешований маркер доступу. | -| `oauth-token` | Кешований маркер доступу досі чинний або маркер оновлення створив новий маркер доступу. | +| `oauth-config` | Наявні `oauth.clientId` і `oauth.refreshToken` або кешований токен доступу. | +| `oauth-token` | Кешований токен доступу досі чинний, або токен оновлення видав новий токен доступу. | | `meet-spaces-get` | Необов’язкова перевірка `--meeting` визначила наявний простір Meet. | | `meet-spaces-create` | Необов’язкова перевірка `--create-space` створила новий простір Meet. | -Щоб також підтвердити ввімкнення Google Meet API та область `spaces.create`, запустіть +Щоб також підтвердити ввімкнення Google Meet API і область дії `spaces.create`, запустіть перевірку створення з побічним ефектом: ```bash @@ -604,11 +686,11 @@ openclaw googlemeet doctor --oauth --create-space --json openclaw googlemeet create --no-join --json ``` -`--create-space` створює тимчасовий Meet URL. Використовуйте це, коли потрібно підтвердити, +`--create-space` створює одноразову URL-адресу Meet. Використовуйте її, коли потрібно підтвердити, що в проєкті Google Cloud увімкнено Meet API і що авторизований -обліковий запис має область `meetings.space.created`. +обліковий запис має область дії `meetings.space.created`. -Щоб підтвердити доступ для читання наявного простору зустрічі: +Щоб підтвердити доступ для читання до наявного простору зустрічі: ```bash openclaw googlemeet doctor --oauth --meeting https://meet.google.com/abc-defg-hij --json @@ -616,17 +698,17 @@ openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij ``` `doctor --oauth --meeting` і `resolve-space` підтверджують доступ для читання до наявного -простору, до якого має доступ авторизований обліковий запис Google. `403` від цих перевірок -зазвичай означає, що Google Meet REST API вимкнено, погодженому маркеру оновлення -бракує потрібної області або обліковий запис Google не має доступу до цього простору Meet. -Помилка маркера оновлення означає, що потрібно повторно виконати `openclaw googlemeet auth login +простору, до якого авторизований обліковий запис Google має доступ. `403` від цих перевірок +зазвичай означає, що Google Meet REST API вимкнено, погоджений токен оновлення +не має потрібної області дії або обліковий запис Google не має доступу до цього простору +Meet. Помилка токена оновлення означає, що потрібно повторно виконати `openclaw googlemeet auth login --json` і зберегти новий блок `oauth`. Для резервного браузерного режиму облікові дані OAuth не потрібні. У цьому режимі автентифікація Google -надходить із профілю Chrome, у який виконано вхід, на вибраному вузлі, а не з +надходить із профілю Chrome, у який виконано вхід на вибраному Node, а не з конфігурації OpenClaw. -Ці змінні середовища приймаються як резервні значення: +Ці змінні середовища приймаються як резервні: - `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID` - `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` або `GOOGLE_MEET_CLIENT_SECRET` @@ -637,7 +719,7 @@ openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij - `OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING` або `GOOGLE_MEET_DEFAULT_MEETING` - `OPENCLAW_GOOGLE_MEET_PREVIEW_ACK` або `GOOGLE_MEET_PREVIEW_ACK` -Визначте Meet URL, код або `spaces/{id}` через `spaces.get`: +Визначте URL-адресу Meet, код або `spaces/{id}` через `spaces.get`: ```bash openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij @@ -657,11 +739,11 @@ openclaw googlemeet attendance --meeting https://meet.google.com/abc-defg-hij openclaw googlemeet export --meeting https://meet.google.com/abc-defg-hij --output ./meet-export ``` -З `--meeting` команди `artifacts` і `attendance` типово використовують найновіший запис конференції. +З `--meeting`, `artifacts` і `attendance` типово використовують найновіший запис конференції. Передайте `--all-conference-records`, коли потрібні всі збережені записи для цієї зустрічі. -Пошук у календарі може визначити URL зустрічі з Google Calendar перед читанням +Пошук у календарі може визначити URL-адресу зустрічі з Google Calendar перед читанням артефактів Meet: ```bash @@ -671,14 +753,14 @@ openclaw googlemeet artifacts --event "Weekly sync" openclaw googlemeet attendance --today --format csv --output attendance.csv ``` -`--today` шукає в сьогоднішньому календарі `primary` подію Calendar із -посиланням Google Meet. Використовуйте `--event ` для пошуку відповідного тексту події та +`--today` шукає в сьогоднішньому `primary` календарі подію Calendar із +посиланням Google Meet. Використовуйте `--event ` для пошуку відповідного тексту події, і `--calendar ` для неосновного календаря. Пошук у календарі потребує свіжого -входу OAuth, який включає область лише для читання подій Calendar. +входу OAuth, що включає область дії лише для читання подій Calendar. `calendar-events` попередньо показує відповідні події Meet і позначає подію, яку виберуть `latest`, `artifacts`, `attendance` або `export`. -Якщо ви вже знаєте ідентифікатор запису конференції, звертайтеся до нього напряму: +Якщо ви вже знаєте ідентифікатор запису конференції, зверніться до нього напряму: ```bash openclaw googlemeet latest --meeting https://meet.google.com/abc-defg-hij @@ -693,9 +775,9 @@ openclaw googlemeet attendance --conference-record conferenceRecords/abc123 --js openclaw googlemeet end-active-conference https://meet.google.com/abc-defg-hij ``` -Це викликає Google Meet `spaces.endActiveConference` і потребує OAuth з областю -`meetings.space.created` для простору, яким може керувати авторизований обліковий запис. -OpenClaw приймає Meet URL, код зустрічі або вхідні дані `spaces/{id}` і визначає їх +Це викликає Google Meet `spaces.endActiveConference` і потребує OAuth з областю дії +`meetings.space.created` для простору, яким авторизований обліковий запис може керувати. +OpenClaw приймає URL-адресу Meet, код зустрічі або вхід `spaces/{id}` і визначає його як ресурс простору API перед завершенням активної конференції. Це окремо від `googlemeet leave`: `leave` зупиняє локальну/сеансову участь OpenClaw, тоді як `end-active-conference` просить Google Meet завершити активну @@ -716,31 +798,31 @@ openclaw googlemeet export --conference-record conferenceRecords/abc123 \ --include-doc-bodies --dry-run ``` -`artifacts` повертає метадані запису конференції плюс метадані ресурсів учасників, записів, -транскрипта, структурованих записів транскрипта та розумних нотаток, коли +`artifacts` повертає метадані запису конференції, а також метадані ресурсів учасників, записів, +транскриптів, структурованих записів транскрипту та розумних нотаток, коли Google надає їх для зустрічі. Використовуйте `--no-transcript-entries`, щоб пропустити пошук записів для великих зустрічей. `attendance` розгортає учасників у рядки сеансів учасників із часом першої/останньої появи, загальною тривалістю сеансу, -прапорцями запізнення/раннього виходу та об’єднанням дубльованих ресурсів учасників за користувачем, -що ввійшов, або відображуваним іменем. Передайте `--no-merge-duplicates`, щоб зберегти необроблені ресурси учасників -окремо, `--late-after-minutes`, щоб налаштувати виявлення запізнень, і +прапорцями запізнення/раннього виходу та дубльованими ресурсами учасників, об’єднаними за користувачем, +який виконав вхід, або відображуваним іменем. Передайте `--no-merge-duplicates`, щоб залишити необроблені ресурси учасників +окремими, `--late-after-minutes`, щоб налаштувати виявлення запізнення, і `--early-before-minutes`, щоб налаштувати виявлення раннього виходу. `export` записує папку, що містить `summary.md`, `attendance.csv`, `transcript.md`, `artifacts.json`, `attendance.json` і `manifest.json`. -`manifest.json` фіксує вибрані вхідні дані, параметри експорту, записи конференції, -вихідні файли, лічильники, джерело маркера, подію Calendar, якщо її було використано, і будь-які -попередження про часткове отримання. Передайте `--zip`, щоб також записати переносний архів поряд +`manifest.json` записує вибраний вхід, параметри експорту, записи конференції, +вихідні файли, лічильники, джерело токена, подію Calendar, коли вона використовувалася, і будь-які +попередження про часткове отримання. Передайте `--zip`, щоб також записати переносний архів поруч із папкою. Передайте `--include-doc-bodies`, щоб експортувати текст пов’язаних транскриптів і розумних нотаток Google Docs через Google Drive `files.export`; для цього потрібен -свіжий вхід OAuth, який включає область лише для читання Drive Meet. Без -`--include-doc-bodies` експорти включають лише метадані Meet і структуровані записи транскрипта. -Якщо Google повертає часткову помилку артефакта, як-от помилку переліку розумних нотаток, -запису транскрипта або тіла документа Drive, підсумок і -маніфест зберігають попередження замість того, щоб зірвати весь експорт. +свіжий вхід OAuth, що включає область дії лише для читання Drive Meet. Без +`--include-doc-bodies` експорт містить лише метадані Meet і структуровані записи транскрипту. +Якщо Google повертає часткову помилку артефакту, наприклад помилку переліку розумних нотаток, +запису транскрипту або тіла документа Drive, зведення і +маніфест зберігають попередження замість провалу всього експорту. Використовуйте `--dry-run`, щоб отримати ті самі дані артефактів/відвідуваності та вивести JSON маніфесту без створення папки або ZIP. Це корисно перед записом -великого експорту або коли агенту потрібні лише лічильники, вибрані записи та +великого експорту або коли агенту потрібні лише лічильники, вибрані записи і попередження. Агенти також можуть створити той самий пакет через інструмент `google_meet`: @@ -755,9 +837,9 @@ JSON маніфесту без створення папки або ZIP. Це к } ``` -Установіть `"dryRun": true`, щоб повернути лише маніфест експорту та пропустити запис файлів. +Установіть `"dryRun": true`, щоб повернути лише маніфест експорту і пропустити записи файлів. -Агенти також можуть створити кімнату на основі API з явною політикою доступу: +Агенти також можуть створити кімнату з підтримкою API та явною політикою доступу: ```json { @@ -777,7 +859,7 @@ JSON маніфесту без створення папки або ZIP. Це к } ``` -Для перевірки спершу з прослуховуванням агенти мають використовувати `test_listen`, перш ніж стверджувати, що +Для перевірки за принципом спочатку слухання агенти мають використовувати `test_listen`, перш ніж стверджувати, що зустріч корисна: ```json @@ -789,7 +871,7 @@ JSON маніфесту без створення папки або ZIP. Це к } ``` -Запустіть захищену live smoke-перевірку на реальній збереженій зустрічі: +Запустіть захищений live smoke проти реальної збереженої зустрічі: ```bash OPENCLAW_LIVE_TEST=1 \ @@ -797,32 +879,32 @@ OPENCLAW_GOOGLE_MEET_LIVE_MEETING=https://meet.google.com/abc-defg-hij \ pnpm test:live -- extensions/google-meet/google-meet.live.test.ts ``` -Запустіть live браузерну пробу з прослуховуванням спочатку на зустрічі, де хтось буде -говорити за наявності субтитрів Meet: +Запустіть live браузерну пробу за принципом спочатку слухання проти зустрічі, де хтось буде +говорити з доступними субтитрами Meet: ```bash openclaw googlemeet setup --transport chrome-node --mode transcribe openclaw googlemeet test-listen https://meet.google.com/abc-defg-hij --transport chrome-node --timeout-ms 30000 ``` -Середовище live smoke-перевірки: +Середовище live smoke: -- `OPENCLAW_LIVE_TEST=1` вмикає захищені live-тести. -- `OPENCLAW_GOOGLE_MEET_LIVE_MEETING` вказує на збережений Meet URL, код або +- `OPENCLAW_LIVE_TEST=1` вмикає захищені live тести. +- `OPENCLAW_GOOGLE_MEET_LIVE_MEETING` вказує на збережену URL-адресу Meet, код або `spaces/{id}`. - `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID` надає ідентифікатор клієнта OAuth. - `OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN` або `GOOGLE_MEET_REFRESH_TOKEN` надає - маркер оновлення. + токен оновлення. - Необов’язково: `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET`, `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN` і `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` використовують ті самі резервні імена без префікса `OPENCLAW_`. -Базова live smoke-перевірка артефактів/відвідуваності потребує +Базовий live smoke артефактів/відвідуваності потребує `https://www.googleapis.com/auth/meetings.space.readonly` і `https://www.googleapis.com/auth/meetings.conference.media.readonly`. Пошук у Calendar -потребує `https://www.googleapis.com/auth/calendar.events.readonly`. Експорт -тіла документа Drive потребує +потребує `https://www.googleapis.com/auth/calendar.events.readonly`. Експорт тіла документа Drive +потребує `https://www.googleapis.com/auth/drive.meet.readonly`. Створіть свіжий простір Meet: @@ -831,11 +913,11 @@ openclaw googlemeet test-listen https://meet.google.com/abc-defg-hij --transport openclaw googlemeet create ``` -Команда виводить новий `meeting uri`, джерело та сеанс приєднання. З обліковими даними OAuth +Команда виводить новий `meeting uri`, джерело і сеанс приєднання. З обліковими даними OAuth вона використовує офіційний Google Meet API. Без облікових даних OAuth вона -використовує як резервний варіант профіль браузера закріпленого вузла Chrome, у який виконано вхід. Агенти можуть +використовує профіль браузера вибраного Chrome Node, у який виконано вхід, як резерв. Агенти можуть використовувати інструмент `google_meet` з `action: "create"`, щоб створити й приєднатися за один -крок. Для створення лише URL передайте `"join": false`. +крок. Для створення лише URL-адреси передайте `"join": false`. Приклад JSON-виводу з резервного браузерного режиму: @@ -857,9 +939,9 @@ openclaw googlemeet create } ``` -Якщо резервний браузерний режим стикається з входом Google або блокуванням дозволів Meet до того, як -зможе створити URL, метод Gateway повертає невдалу відповідь, а інструмент -`google_meet` повертає структуровані деталі замість звичайного рядка: +Якщо резервний браузерний режим натрапляє на вхід Google або блокування дозволів Meet до того, як +зможе створити URL-адресу, метод Gateway повертає невдалу відповідь, а +інструмент `google_meet` повертає структуровані деталі замість простого рядка: ```json { @@ -878,8 +960,8 @@ openclaw googlemeet create ``` Коли агент бачить `manualActionRequired: true`, він має повідомити -`manualActionMessage` разом із контекстом вузла/вкладки браузера та припинити відкривати нові -вкладки Meet, доки оператор не завершить крок у браузері. +`manualActionMessage` разом із контекстом браузерного Node/вкладки й припинити відкривати нові +вкладки Meet, доки оператор не виконає браузерний крок. Приклад JSON-виводу зі створення через API: @@ -902,23 +984,23 @@ 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 -проєкт, OAuth-принципал і учасники зустрічі зареєстровані в Google +project, OAuth principal і учасники зустрічі зареєстровані в Google Workspace Developer Preview Program для Meet media APIs. ## Конфігурація -Спільному шляху агента Chrome потрібні лише ввімкнений Plugin, BlackHole, SoX, -ключ провайдера транскрипції в реальному часі та налаштований провайдер TTS OpenClaw. -OpenAI є стандартним провайдером транскрипції; установіть `realtime.voiceProvider` на +Загальному шляху Chrome-агента потрібні лише увімкнений Plugin, BlackHole, SoX, +ключ провайдера транскрибування в реальному часі та налаштований провайдер TTS OpenClaw. +OpenAI є стандартним провайдером транскрибування; установіть `realtime.voiceProvider` на `"google"` і `realtime.model`, щоб використовувати Google Gemini Live для режиму `bidi` -без зміни стандартного провайдера транскрипції для режиму агента: +без зміни стандартного провайдера транскрибування для agent-режиму: ```bash brew install blackhole-2ch sox @@ -927,7 +1009,7 @@ export OPENAI_API_KEY=sk-... export GEMINI_API_KEY=... ``` -Задайте конфігурацію Plugin у `plugins.entries.google-meet.config`: +Установіть конфігурацію Plugin у `plugins.entries.google-meet.config`: ```json5 { @@ -942,64 +1024,65 @@ export GEMINI_API_KEY=... } ``` -Типові значення: +Значення за замовчуванням: - `defaultTransport: "chrome"` - `defaultMode: "agent"` (`"realtime"` приймається лише як застарілий псевдонім сумісності для `"agent"`; нові виклики інструментів мають указувати `"agent"`) -- `chromeNode.node`: необов’язковий ідентифікатор/назва/IP вузла для `chrome-node` +- `chromeNode.node`: необов’язковий ідентифікатор/назва/IP Node для + `chrome-node` - `chrome.audioBackend: "blackhole-2ch"` -- `chrome.guestName: "OpenClaw Agent"`: ім’я, що використовується на гостьовому - екрані Meet без виконаного входу -- `chrome.autoJoin: true`: best-effort заповнення гостьового імені та натискання Join Now - через браузерну автоматизацію OpenClaw на `chrome-node` +- `chrome.guestName: "OpenClaw Agent"`: ім’я, що використовується на екрані гостя Meet + без виконаного входу +- `chrome.autoJoin: true`: best-effort заповнення імені гостя та натискання Join Now + через автоматизацію браузера OpenClaw на `chrome-node` - `chrome.reuseExistingTab: true`: активувати наявну вкладку Meet замість - відкривання дублікатів -- `chrome.waitForInCallMs: 20000`: чекати, доки вкладка Meet повідомить про стан у дзвінку, - перш ніж запускати вступ для відповіді голосом -- `chrome.audioFormat: "pcm16-24khz"`: аудіоформат пари команд. Використовуйте - `"g711-ulaw-8khz"` лише для застарілих/користувацьких пар команд, які досі видають - телефонний звук. -- `chrome.audioBufferBytes: 4096`: буфер обробки SoX для згенерованих Chrome - аудіокоманд пари команд. Це половина стандартного буфера SoX у 8192 байти, - що зменшує стандартну затримку каналу, залишаючи простір для збільшення на завантажених хостах. + відкриття дублікатів +- `chrome.waitForInCallMs: 20000`: чекати, доки вкладка Meet повідомить, що вона у виклику, + перш ніж буде запущено вступ talk-back +- `chrome.audioFormat: "pcm16-24khz"`: аудіоформат command-pair. Використовуйте + `"g711-ulaw-8khz"` лише для застарілих/кастомних command pairs, які все ще видають + телефонне аудіо. +- `chrome.audioBufferBytes: 4096`: буфер обробки SoX для згенерованих аудіокоманд Chrome + command-pair. Це половина стандартного буфера SoX у 8192 байти, + що зменшує стандартну затримку каналу, залишаючи можливість збільшити її на зайнятих хостах. Значення нижче мінімуму SoX обмежуються 17 байтами. - `chrome.audioInputCommand`: команда SoX, що читає з CoreAudio `BlackHole 2ch` - і записує аудіо у форматі `chrome.audioFormat` -- `chrome.audioOutputCommand`: команда SoX, що читає аудіо у форматі `chrome.audioFormat` + і записує аудіо у `chrome.audioFormat` +- `chrome.audioOutputCommand`: команда SoX, що читає аудіо у `chrome.audioFormat` і записує в CoreAudio `BlackHole 2ch` - `chrome.bargeInInputCommand`: необов’язкова команда локального мікрофона, що записує signed 16-bit little-endian mono PCM для виявлення людського втручання, поки - активне відтворення асистента. Наразі це застосовується до розміщеного на Gateway - моста пари команд `chrome`. -- `chrome.bargeInRmsThreshold: 650`: рівень RMS, що вважається людським - перериванням на `chrome.bargeInInputCommand` -- `chrome.bargeInPeakThreshold: 2500`: піковий рівень, що вважається людським - перериванням на `chrome.bargeInInputCommand` + відтворення асистента активне. Наразі це застосовується до розміщеного на Gateway + command-pair bridge `chrome`. +- `chrome.bargeInRmsThreshold: 650`: рівень RMS, який рахується як людське + переривання на `chrome.bargeInInputCommand` +- `chrome.bargeInPeakThreshold: 2500`: піковий рівень, який рахується як людське + переривання на `chrome.bargeInInputCommand` - `chrome.bargeInCooldownMs: 900`: мінімальна затримка між повторними очищеннями людських переривань -- `mode: "agent"`: стандартний режим відповіді голосом. Мовлення учасників транскрибується - налаштованим провайдером транскрипції в реальному часі, надсилається налаштованому - агенту OpenClaw у сеансі субагента для конкретної зустрічі та озвучується через - звичайне середовище виконання OpenClaw TTS. -- `mode: "bidi"`: резервний прямий двоспрямований режим моделі реального часу. Провайдер - голосу реального часу відповідає безпосередньо на мовлення учасників і може викликати - `openclaw_agent_consult` для глибших відповідей із підтримкою інструментів. -- `mode: "transcribe"`: режим лише спостереження без моста відповіді голосом. -- `realtime.provider: "openai"`: резервна сумісність, що використовується, коли - наведені нижче поля провайдера в області дії не задані. +- `mode: "agent"`: стандартний режим talk-back. Мовлення учасників транскрибується + налаштованим провайдером транскрибування в реальному часі, надсилається налаштованому + агенту OpenClaw в окремій sub-agent сесії для кожної зустрічі та озвучується через + звичайний runtime TTS OpenClaw. +- `mode: "bidi"`: резервний прямий двонапрямний режим моделі в реальному часі. Провайдер + голосу в реальному часі відповідає на мовлення учасників напряму й може викликати + `openclaw_agent_consult` для глибших/підкріплених інструментами відповідей. +- `mode: "transcribe"`: режим лише спостереження без talk-back bridge. +- `realtime.provider: "openai"`: резервний варіант сумісності, що використовується, коли наведені нижче + scoped provider fields не встановлено. - `realtime.transcriptionProvider: "openai"`: ідентифікатор провайдера, який режим `agent` - використовує для транскрипції в реальному часі. -- `realtime.voiceProvider`: ідентифікатор провайдера, який режим `bidi` використовує для прямого - голосу в реальному часі. Установіть це на `"google"`, щоб використовувати Gemini Live, - зберігаючи транскрипцію режиму агента на OpenAI. + використовує для транскрибування в реальному часі. +- `realtime.voiceProvider`: ідентифікатор провайдера, який режим `bidi` використовує для прямого голосу + в реальному часі. Установіть його на `"google"`, щоб використовувати Gemini Live, залишаючи + транскрибування agent-режиму на OpenAI. - `realtime.toolPolicy: "safe-read-only"` -- `realtime.instructions`: короткі усні відповіді, з +- `realtime.instructions`: короткі усні відповіді з `openclaw_agent_consult` для глибших відповідей -- `realtime.introMessage`: коротка усна перевірка готовності, коли міст реального часу - підключається; установіть значення `""`, щоб приєднатися мовчки +- `realtime.introMessage`: коротка усна перевірка готовності, коли realtime bridge + підключається; установіть значення `""`, щоб приєднатися беззвучно - `realtime.agentId`: необов’язковий ідентифікатор агента OpenClaw для - `openclaw_agent_consult`; стандартне значення — `main` + `openclaw_agent_consult`; стандартно `main` Необов’язкові перевизначення: @@ -1054,6 +1137,50 @@ export GEMINI_API_KEY=... } ``` +ElevenLabs для прослуховування й мовлення в agent-режимі: + +```json5 +{ + messages: { + tts: { + provider: "elevenlabs", + providers: { + elevenlabs: { + modelId: "eleven_v3", + voiceId: "pMsXgVXv3BLzUgSXRplE", + }, + }, + }, + }, + plugins: { + entries: { + "google-meet": { + config: { + realtime: { + transcriptionProvider: "elevenlabs", + providers: { + elevenlabs: { + modelId: "scribe_v2_realtime", + audioFormat: "ulaw_8000", + sampleRate: 8000, + commitStrategy: "vad", + }, + }, + }, + }, + }, + }, + }, +} +``` + +Постійний голос Meet береться з +`messages.tts.providers.elevenlabs.voiceId`. Відповіді агента також можуть використовувати +директиви per-reply `[[tts:voiceId=... model=eleven_v3]]`, коли перевизначення моделі TTS +увімкнені, але конфігурація є детермінованим стандартом для зустрічей. +Після приєднання журнали мають показувати `transcriptionProvider=elevenlabs`, а кожна +озвучена відповідь має логувати `provider=elevenlabs model=eleven_v3 voice=`. + Конфігурація лише для Twilio: ```json5 @@ -1069,12 +1196,12 @@ export GEMINI_API_KEY=... } ``` -`voiceCall.enabled` за замовчуванням має значення `true`; з транспортом Twilio він делегує -фактичний виклик PSTN, DTMF і вступне привітання Plugin Voice Call. Voice Call -відтворює послідовність DTMF перед відкриттям медіапотоку реального часу, а потім використовує -збережений вступний текст як початкове привітання реального часу. Якщо `voice-call` не -ввімкнено, Google Meet усе ще може перевірити й записати план набору, але не може -здійснити виклик Twilio. +`voiceCall.enabled` за замовчуванням дорівнює `true`; з транспортом Twilio він делегує +фактичний PSTN-виклик, DTMF і вступне привітання Plugin Voice Call. Voice Call +відтворює послідовність DTMF перед відкриттям медіапотоку в реальному часі, а потім використовує +збережений вступний текст як початкове привітання в реальному часі. Якщо `voice-call` не +увімкнено, Google Meet усе ще може перевірити й записати план набору, але не може +здійснити Twilio-виклик. ## Інструмент @@ -1090,45 +1217,45 @@ export GEMINI_API_KEY=... ``` Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. Використовуйте -`transport: "chrome-node"`, коли Chrome працює на спареному вузлі, наприклад VM Parallels. -В обох випадках провайдери моделей і `openclaw_agent_consult` працюють на хості -Gateway, тому облікові дані моделей залишаються там. Зі стандартним `mode: "agent"` -провайдер транскрипції в реальному часі виконує прослуховування, налаштований агент OpenClaw -створює відповідь, а звичайний OpenClaw TTS промовляє її в Meet. Використовуйте -`mode: "bidi"`, коли потрібно, щоб голосова модель реального часу відповідала напряму. -Сире `mode: "realtime"` і надалі приймається як застарілий псевдонім сумісності для -`mode: "agent"`, але більше не рекламується в схемі інструментів агента. -Журнали режиму агента містять визначені провайдера/модель транскрипції під час запуску -моста, а також провайдера TTS, модель, голос, вихідний формат і частоту дискретизації після +`transport: "chrome-node"`, коли Chrome працює на спареному Node, наприклад Parallels +VM. В обох випадках провайдери моделей і `openclaw_agent_consult` працюють на +хості Gateway, тож облікові дані моделей залишаються там. Зі стандартним `mode: "agent"` +провайдер транскрибування в реальному часі обробляє прослуховування, налаштований агент OpenClaw +створює відповідь, а звичайний TTS OpenClaw озвучує її в Meet. Використовуйте +`mode: "bidi"`, коли хочете, щоб голосова модель у реальному часі відповідала напряму. +Сире `mode: "realtime"` досі приймається як застарілий псевдонім сумісності для +`mode: "agent"`, але більше не рекламується в схемі інструмента агента. +Журнали agent-режиму містять визначений провайдер/модель транскрибування під час запуску +bridge, а також провайдер TTS, модель, голос, формат виводу й частоту дискретизації після кожної синтезованої відповіді. -Використовуйте `action: "status"`, щоб перелічити активні сеанси або перевірити ID сеансу. Використовуйте -`action: "speak"` із `sessionId` і `message`, щоб агент реального часу -негайно заговорив. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сеанс, +Використовуйте `action: "status"`, щоб перелічити активні сесії або переглянути ідентифікатор сесії. Використовуйте +`action: "speak"` з `sessionId` і `message`, щоб агент у реальному часі +заговорив негайно. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сесію, запустити відому фразу й повернути стан `inCall`, коли хост Chrome може -повідомити його. `test_speech` завжди примусово встановлює `mode: "agent"` і завершується помилкою, якщо його просять -запуститися в `mode: "transcribe"`, оскільки сеанси лише спостереження навмисно не можуть -виводити мовлення. Його результат `speechOutputVerified` ґрунтується на збільшенні байтів аудіовиходу -реального часу під час цього тестового виклику, тому повторно використаний сеанс зі старішим аудіо -не вважається свіжою успішною перевіркою мовлення. Використовуйте `action: "leave"`, щоб позначити -сеанс завершеним. +про нього повідомити. `test_speech` завжди примусово встановлює `mode: "agent"` і завершується помилкою, якщо його просять +працювати в `mode: "transcribe"`, бо сесії лише спостереження навмисно не можуть +видавати мовлення. Результат `speechOutputVerified` базується на збільшенні байтів аудіовиходу +в реальному часі під час цього тестового виклику, тому повторно використана сесія зі старішим аудіо +не рахується як свіжа успішна перевірка мовлення. Використовуйте `action: "leave"`, щоб позначити +сесію завершеною. -`status` містить стан Chrome, коли він доступний: +`status` містить стан Chrome, коли доступно: -- `inCall`: схоже, Chrome перебуває всередині виклику Meet +- `inCall`: Chrome, схоже, перебуває всередині виклику Meet - `micMuted`: best-effort стан мікрофона Meet - `manualActionRequired` / `manualActionReason` / `manualActionMessage`: профілю - браузера потрібні ручний вхід, допуск хостом Meet, дозволи або - відновлення керування браузером, перш ніж мовлення зможе працювати + браузера потрібен ручний вхід, допуск хостом Meet, дозволи або + виправлення browser-control, перш ніж мовлення зможе працювати - `speechReady` / `speechBlockedReason` / `speechBlockedMessage`: чи - кероване мовлення Chrome дозволене зараз. `speechReady: false` означає, що OpenClaw не - надіслав вступну/тестову фразу в аудіоміст. -- `providerConnected` / `realtimeReady`: стан голосового моста реального часу -- `lastInputAt` / `lastOutputAt`: останнє аудіо, побачене з моста або надіслане до нього -- `audioOutputRouted` / `audioOutputDeviceLabel`: чи медіавихід вкладки Meet - був активно маршрутизований до пристрою BlackHole, який використовує міст -- `lastSuppressedInputAt` / `suppressedInputBytes`: вхід local loopback, проігнорований, поки - активне відтворення асистента + кероване мовлення Chrome дозволено зараз. `speechReady: false` означає, що OpenClaw не + надіслав вступну/тестову фразу в audio bridge. +- `providerConnected` / `realtimeReady`: стан realtime voice bridge +- `lastInputAt` / `lastOutputAt`: останнє аудіо, отримане з bridge або надіслане до нього +- `audioOutputRouted` / `audioOutputDeviceLabel`: чи медіавивід вкладки Meet + було активно спрямовано на пристрій BlackHole, який використовується bridge +- `lastSuppressedInputAt` / `suppressedInputBytes`: loopback-вхід, проігнорований, поки + відтворення асистента активне ```json { @@ -1138,60 +1265,48 @@ Gateway, тому облікові дані моделей залишаютьс } ``` -## Режими агента та Bidi +## Режими Agent і Bidi -Режим Chrome `agent` оптимізований для поведінки «мій агент присутній на зустрічі». Провайдер -транскрипції в реальному часі чує аудіо зустрічі, фінальні транскрипти учасників +Режим Chrome `agent` оптимізований для поведінки "мій агент у зустрічі". Провайдер +транскрибування в реальному часі чує аудіо зустрічі, фінальні транскрипти учасників маршрутизуються через налаштованого агента OpenClaw, а відповідь -озвучується через звичайне середовище виконання OpenClaw TTS. Установіть `mode: "bidi"`, коли хочете, -щоб голосова модель реального часу відповідала напряму. -Близькі фінальні фрагменти транскрипту об’єднуються перед консультацією, щоб один усний -хід не створював кілька застарілих часткових відповідей. Вхід реального часу також -приглушується, поки аудіо асистента в черзі ще відтворюється, -а недавні схожі на асистента відлуння транскрипту ігноруються перед консультацією агента, -щоб local loopback BlackHole не змушував агента відповідати на власне мовлення. +озвучується через звичайний runtime TTS OpenClaw. Установіть `mode: "bidi"`, коли хочете, +щоб голосова модель у реальному часі відповідала напряму. +Близькі фінальні фрагменти транскрипту об’єднуються перед consult, щоб один усний +хід не створював кілька застарілих часткових відповідей. Вхід у реальному часі також +приглушується, поки поставлене в чергу аудіо асистента ще відтворюється, +а нещодавні схожі на асистента луни транскрипту ігноруються перед consult агента, +щоб BlackHole loopback не змусив агента відповідати на власне мовлення. -| Режим | Хто визначає відповідь | Шлях мовного виводу | Коли використовувати | -| ------- | ----------------------------- | --------------------------------------- | ------------------------------------------------------ | -| `agent` | Налаштований агент OpenClaw | Звичайне середовище виконання OpenClaw TTS | Потрібна поведінка «мій агент присутній на зустрічі» | -| `bidi` | Голосова модель реального часу | Аудіовідповідь провайдера голосу реального часу | Потрібен голосовий діалоговий цикл із найнижчою затримкою | +| Режим | Хто визначає відповідь | Шлях виводу мовлення | Коли використовувати | +| ------- | ----------------------------- | -------------------------------------- | ----------------------------------------------------- | +| `agent` | Налаштований агент OpenClaw | Звичайний runtime TTS OpenClaw | Потрібна поведінка "мій агент у зустрічі" | +| `bidi` | Голосова модель у реальному часі | Аудіовідповідь провайдера голосу в реальному часі | Потрібен голосовий розмовний цикл із найнижчою затримкою | -У режимі `bidi`, коли моделі реального часу потрібні глибші міркування, поточна +У режимі `bidi`, коли моделі в реальному часі потрібні глибші міркування, актуальна інформація або звичайні інструменти OpenClaw, вона може викликати `openclaw_agent_consult`. -Інструмент консультації запускає звичайного агента OpenClaw у фоновому режимі з нещодавнім -контекстом транскрипту зустрічі й повертає стислу усну відповідь. У режимі `agent` -OpenClaw надсилає цю відповідь безпосередньо до середовища виконання TTS; у режимі `bidi` -голосова модель реального часу може промовити результат консультації назад у зустріч. Він використовує -той самий спільний механізм консультацій, що й Voice Call. +Інструмент consult запускає звичайного агента OpenClaw у фоновому режимі з контекстом нещодавньої стенограми зустрічі й повертає стислу усну відповідь. У режимі `agent` OpenClaw надсилає цю відповідь безпосередньо до середовища виконання TTS; у режимі `bidi` голосова модель реального часу може озвучити результат consult назад у зустріч. Він використовує той самий спільний механізм consult, що й Voice Call. -За замовчуванням консультації виконуються для агента `main`. Установіть `realtime.agentId`, коли -лінія Meet має консультуватися зі спеціальним робочим простором агента OpenClaw, стандартними значеннями моделі, -політикою інструментів, пам’яттю та історією сеансів. +За замовчуванням consult-запити виконуються для агента `main`. Установіть `realtime.agentId`, коли Meet-смуга має звертатися до окремого робочого простору агента OpenClaw, типових налаштувань моделі, політики інструментів, пам’яті та історії сесій. -Консультації в режимі агента використовують ключ сеансу `agent::subagent:google-meet:` -для конкретної зустрічі, щоб подальші запитання зберігали контекст зустрічі, успадковуючи звичайну -політику агента від налаштованого агента. +Consult-запити в режимі агента використовують ключ сесії для кожної зустрічі `agent::subagent:google-meet:`, щоб уточнювальні запитання зберігали контекст зустрічі, успадковуючи звичайну політику агента від налаштованого агента. -`realtime.toolPolicy` керує запуском консультації: +`realtime.toolPolicy` керує виконанням consult: -- `safe-read-only`: відкрити інструмент консультації та обмежити звичайного агента до - `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і - `memory_get`. -- `owner`: відкрити інструмент консультації та дозволити звичайному агенту використовувати звичайну - політику інструментів агента. -- `none`: не відкривати інструмент консультації для голосової моделі реального часу. +- `safe-read-only`: надати інструмент consult і обмежити звичайного агента до `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і `memory_get`. +- `owner`: надати інструмент consult і дозволити звичайному агенту використовувати звичайну політику інструментів агента. +- `none`: не надавати інструмент consult голосовій моделі реального часу. -Ключ консультаційного сеансу має область дії в межах одного сеансу Meet, тож подальші консультаційні виклики -можуть повторно використовувати попередній консультаційний контекст під час тієї самої зустрічі. +Ключ сесії consult обмежений окремою сесією Meet, тому подальші виклики consult можуть повторно використовувати попередній контекст consult під час тієї самої зустрічі. -Щоб примусово виконати голосову перевірку готовності після того, як Chrome повністю приєднався до виклику: +Щоб примусово виконати усну перевірку готовності після того, як Chrome повністю приєднався до дзвінка: ```bash openclaw googlemeet speak meet_... "Say exactly: I'm here and listening." ``` -Для повної перевірки приєднання з промовлянням: +Для повного join-and-speak smoke: ```bash openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ @@ -1199,9 +1314,9 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ --message "Say exactly: I'm here and listening." ``` -## Контрольний список live-тесту +## Чекліст live-тесту -Використайте цю послідовність перед передаванням зустрічі автономному агенту: +Використовуйте цю послідовність перед передаванням зустрічі агенту без нагляду: ```bash openclaw googlemeet setup @@ -1214,15 +1329,12 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ Очікуваний стан Chrome-node: - `googlemeet setup` повністю зелений. -- `googlemeet setup` містить `chrome-node-connected`, коли Chrome-node є - типовим транспортом або node закріплено. -- `nodes status` показує, що вибраний node підключено. -- Вибраний node оголошує і `googlemeet.chrome`, і `browser.proxy`. -- Вкладка Meet приєднується до виклику, а `test-speech` повертає стан Chrome із - `inCall: true`. +- `googlemeet setup` містить `chrome-node-connected`, коли Chrome-node є типовим транспортом або закріплено Node. +- `nodes status` показує, що вибраний Node підключено. +- Вибраний Node оголошує і `googlemeet.chrome`, і `browser.proxy`. +- Вкладка Meet приєднується до дзвінка, а `test-speech` повертає стан Chrome з `inCall: true`. -Для віддаленого хоста Chrome, наприклад Parallels macOS VM, це найкоротша -безпечна перевірка після оновлення Gateway або VM: +Для віддаленого хоста Chrome, наприклад Parallels macOS VM, це найкоротша безпечна перевірка після оновлення Gateway або VM: ```bash openclaw googlemeet setup @@ -1233,11 +1345,9 @@ openclaw nodes invoke \ --params '{"action":"setup"}' ``` -Це підтверджує, що Gateway Plugin завантажено, node VM підключено з -поточним токеном, а аудіоміст Meet доступний до того, як агент відкриє -справжню вкладку зустрічі. +Це доводить, що Plugin Gateway завантажено, VM Node підключено з поточним токеном, а аудіоміст Meet доступний до того, як агент відкриє вкладку справжньої зустрічі. -Для перевірки Twilio використовуйте зустріч, яка показує дані телефонного дозвону: +Для Twilio smoke використовуйте зустріч, яка надає дані телефонного підключення: ```bash openclaw googlemeet setup @@ -1249,12 +1359,10 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ Очікуваний стан Twilio: -- `googlemeet setup` містить зелені перевірки `twilio-voice-call-plugin`, - `twilio-voice-call-credentials` і `twilio-voice-call-webhook`. +- `googlemeet setup` містить зелені перевірки `twilio-voice-call-plugin`, `twilio-voice-call-credentials` і `twilio-voice-call-webhook`. - `voicecall` доступний у CLI після перезавантаження Gateway. -- Повернений сеанс має `transport: "twilio"` і `twilio.voiceCallId`. -- `openclaw logs --follow` показує, що DTMF TwiML було віддано перед realtime TwiML, а потім - realtime-міст із початковим привітанням у черзі. +- Повернена сесія має `transport: "twilio"` і `twilio.voiceCallId`. +- `openclaw logs --follow` показує, що DTMF TwiML було віддано перед realtime TwiML, а потім міст реального часу з поставленим у чергу початковим привітанням. - `googlemeet leave ` завершує делегований голосовий виклик. ## Усунення несправностей @@ -1268,18 +1376,13 @@ openclaw plugins list | grep google-meet openclaw googlemeet setup ``` -Якщо ви щойно відредагували `plugins.entries.google-meet`, перезапустіть або перезавантажте Gateway. -Запущений агент бачить лише інструменти Plugin, зареєстровані поточним процесом Gateway. +Якщо ви щойно відредагували `plugins.entries.google-meet`, перезапустіть або перезавантажте Gateway. Запущений агент бачить лише інструменти Plugin, зареєстровані поточним процесом Gateway. -На хостах Gateway не з macOS інструмент `google_meet`, видимий агенту, залишається доступним, -але локальні дії зворотного мовлення Chrome блокуються до потрапляння в аудіоміст. -Локальне аудіо зворотного мовлення Chrome наразі залежить від macOS `BlackHole 2ch`, тому -агентам Linux слід використовувати `mode: "transcribe"`, дозвін Twilio або хост macOS -`chrome-node` замість типового локального шляху агента Chrome. +На хостах Gateway не під macOS інструмент `google_meet`, доступний агенту, лишається видимим, але локальні дії Chrome talk-back блокуються до потрапляння в аудіоміст. Локальний звук Chrome talk-back наразі залежить від macOS `BlackHole 2ch`, тому Linux-агенти мають використовувати `mode: "transcribe"`, телефонне підключення Twilio або macOS-хост `chrome-node` замість типового шляху локального Chrome-агента. -### Немає підключеного node з підтримкою Google Meet +### Немає підключеного Node з підтримкою Google Meet -На хості node виконайте: +На хості Node виконайте: ```bash openclaw plugins enable google-meet @@ -1288,7 +1391,7 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host --port 18789 --display-name parallels-macos ``` -На хості Gateway схваліть node і перевірте команди: +На хості Gateway схваліть Node і перевірте команди: ```bash openclaw devices list @@ -1296,8 +1399,7 @@ openclaw devices approve openclaw nodes status ``` -Node має бути підключений і перелічувати `googlemeet.chrome` плюс `browser.proxy`. -Конфігурація Gateway має дозволяти ці команди node: +Node має бути підключений і показувати `googlemeet.chrome` разом із `browser.proxy`. Конфігурація Gateway має дозволяти ці команди Node: ```json5 { @@ -1309,9 +1411,7 @@ Node має бути підключений і перелічувати `googlem } ``` -Якщо `googlemeet setup` не проходить `chrome-node-connected` або журнал Gateway повідомляє -`gateway token mismatch`, перевстановіть або перезапустіть node з поточним токеном Gateway. -Для LAN Gateway це зазвичай означає: +Якщо `googlemeet setup` не проходить `chrome-node-connected` або журнал Gateway повідомляє `gateway token mismatch`, перевстановіть або перезапустіть Node з поточним токеном Gateway. Для LAN Gateway це зазвичай означає: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ @@ -1322,7 +1422,7 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ --force ``` -Потім перезавантажте службу node і повторно виконайте: +Потім перезавантажте сервіс Node і повторно виконайте: ```bash openclaw googlemeet setup @@ -1331,119 +1431,65 @@ openclaw nodes status --connected ### Браузер відкривається, але агент не може приєднатися -Запустіть `googlemeet test-listen` для приєднань лише для спостереження або `googlemeet test-speech` -для realtime-приєднань, а потім перегляньте повернений стан Chrome. Якщо будь-яка перевірка -повідомляє `manualActionRequired: true`, покажіть оператору `manualActionMessage` -і припиніть повторні спроби, доки дію в браузері не буде завершено. +Запустіть `googlemeet test-listen` для приєднань лише для спостереження або `googlemeet test-speech` для приєднань у реальному часі, потім перегляньте повернений стан Chrome. Якщо будь-яка перевірка повідомляє `manualActionRequired: true`, покажіть оператору `manualActionMessage` і припиніть повторні спроби, доки дію в браузері не буде завершено. -Типові ручні дії: +Поширені ручні дії: -- Увійдіть у профіль Chrome. -- Допустіть гостя з облікового запису хоста Meet. -- Надайте Chrome дозволи на мікрофон/камеру, коли з’явиться нативний запит дозволу Chrome. -- Закрийте або виправте завислий діалог дозволів Meet. +- Увійти в профіль Chrome. +- Допустити гостя з облікового запису хоста Meet. +- Надати Chrome дозволи на мікрофон/камеру, коли з’явиться нативний запит дозволу Chrome. +- Закрити або виправити завислий діалог дозволів Meet. -Не повідомляйте "не виконано вхід" лише тому, що Meet показує "Do you want people to -hear you in the meeting?" Це проміжний екран вибору аудіо Meet; OpenClaw -натискає **Use microphone** через автоматизацію браузера, коли це доступно, і продовжує -очікувати на справжній стан зустрічі. Для резервного створення лише через браузер OpenClaw -може натиснути **Continue without microphone**, оскільки створення URL не потребує -realtime-аудіошляху. +Не повідомляйте «not signed in» лише тому, що Meet показує «Do you want people to hear you in the meeting?» Це проміжний екран вибору аудіо Meet; OpenClaw натискає **Use microphone** через автоматизацію браузера, коли це доступно, і продовжує чекати на справжній стан зустрічі. Для резервного створення лише через браузер OpenClaw може натиснути **Continue without microphone**, бо створення URL не потребує аудіошляху реального часу. -### Не вдається створити зустріч +### Створення зустрічі не вдається -`googlemeet create` спочатку використовує endpoint `spaces.create` API Google Meet, -коли облікові дані OAuth налаштовано. Без облікових даних OAuth він переходить до -резервного браузера закріпленого Chrome node. Підтвердьте: +`googlemeet create` спочатку використовує endpoint Google Meet API `spaces.create`, коли OAuth-облікові дані налаштовані. Без OAuth-облікових даних він переходить до резервного браузера закріпленого Chrome Node. Підтвердьте: -- Для створення через API: налаштовано `oauth.clientId` і `oauth.refreshToken`, - або наявні відповідні змінні середовища `OPENCLAW_GOOGLE_MEET_*`. -- Для створення через API: refresh token було випущено після додавання підтримки створення. - Старішим токенам може бракувати scope `meetings.space.created`; повторно виконайте - `openclaw googlemeet auth login --json` і оновіть конфігурацію Plugin. -- Для резервного браузера: `defaultTransport: "chrome-node"` і - `chromeNode.node` вказують на підключений node із `browser.proxy` і - `googlemeet.chrome`. -- Для резервного браузера: профіль Chrome OpenClaw на цьому node увійшов - у 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`. +- Для створення через API: `oauth.clientId` і `oauth.refreshToken` налаштовані або наявні відповідні змінні середовища `OPENCLAW_GOOGLE_MEET_*`. +- Для створення через API: refresh token було видано після додавання підтримки створення. Старіші токени можуть не мати scope `meetings.space.created`; повторно виконайте `openclaw googlemeet auth login --json` і оновіть конфігурацію Plugin. +- Для резервного браузера: `defaultTransport: "chrome-node"` і `chromeNode.node` вказують на підключений Node з `browser.proxy` і `googlemeet.chrome`. +- Для резервного браузера: профіль OpenClaw Chrome на цьому Node увійшов у 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-шлях: +Перевірте шлях реального часу: ```bash openclaw googlemeet setup openclaw googlemeet doctor ``` -Використовуйте `mode: "agent"` для нормального шляху STT -> агент OpenClaw -> TTS-зворотне мовлення, -або `mode: "bidi"` для прямого резервного realtime-голосу. `mode: "transcribe"` -навмисно не запускає міст зворотного мовлення. Для налагодження лише спостереження -виконайте `openclaw googlemeet status --json ` після того, як учасники заговорять, -і перевірте `captioning`, `transcriptLines` і `lastCaptionText`. Якщо `inCall` має -значення true, але `transcriptLines` залишається `0`, субтитри Meet можуть бути вимкнені, ніхто -не говорив після встановлення спостерігача, інтерфейс Meet змінився або live-субтитри -недоступні для мови/облікового запису зустрічі. +Використовуйте `mode: "agent"` для звичайного шляху STT -> агент OpenClaw -> TTS talk-back або `mode: "bidi"` для прямого резервного голосового шляху реального часу. `mode: "transcribe"` навмисно не запускає міст talk-back. Для налагодження лише спостереження запустіть `openclaw googlemeet status --json ` після того, як учасники заговорять, і перевірте `captioning`, `transcriptLines` та `lastCaptionText`. Якщо `inCall` дорівнює true, але `transcriptLines` лишається `0`, субтитри Meet можуть бути вимкнені, ніхто не говорив після встановлення спостерігача, інтерфейс Meet змінився або live-субтитри недоступні для мови/облікового запису зустрічі. -`googlemeet test-speech` завжди перевіряє realtime-шлях і повідомляє, чи -байти виводу моста було помічено для цього виклику. Якщо `speechOutputVerified` має значення false, а -`speechOutputTimedOut` має значення true, realtime-провайдер міг прийняти -висловлювання, але OpenClaw не побачив, щоб нові байти виводу дійшли до аудіомоста -Chrome. +`googlemeet test-speech` завжди перевіряє шлях реального часу й повідомляє, чи було зафіксовано вихідні байти мосту для цього виклику. Якщо `speechOutputVerified` дорівнює false, а `speechOutputTimedOut` дорівнює true, realtime-провайдер міг прийняти висловлювання, але OpenClaw не побачив, щоб нові вихідні байти дійшли до аудіомоста Chrome. Також перевірте: -- На хості Gateway доступний ключ realtime-провайдера, наприклад - `OPENAI_API_KEY` або `GEMINI_API_KEY`. -- `BlackHole 2ch` видимий на хості Chrome. +- Ключ realtime-провайдера доступний на хості Gateway, наприклад `OPENAI_API_KEY` або `GEMINI_API_KEY`. +- `BlackHole 2ch` видно на хості Chrome. - `sox` існує на хості Chrome. -- Мікрофон і динамік Meet спрямовано через віртуальний аудіошлях, який використовує - OpenClaw. `doctor` має показати `meet output routed: yes` для локальних realtime-приєднань Chrome. +- Мікрофон і динамік Meet маршрутизуються через віртуальний аудіошлях, який використовує OpenClaw. `doctor` має показувати `meet output routed: yes` для локальних Chrome-приєднань у реальному часі. -`googlemeet doctor [session-id]` друкує сеанс, node, стан у виклику, -причину ручної дії, підключення realtime-провайдера, `realtimeReady`, активність -аудіовходу/аудіовиходу, останні аудіомітки часу, лічильники байтів і URL браузера. -Використовуйте `googlemeet status [session-id] --json`, коли потрібен сирий JSON. Використовуйте -`googlemeet doctor --oauth`, коли потрібно перевірити оновлення OAuth Google Meet -без розкриття токенів; додайте `--meeting` або `--create-space`, коли також потрібне -підтвердження API Google Meet. +`googlemeet doctor [session-id]` друкує сесію, Node, стан у дзвінку, причину ручної дії, підключення realtime-провайдера, `realtimeReady`, активність аудіовходу/аудіовиходу, останні аудіомітки часу, лічильники байтів і URL браузера. Використовуйте `googlemeet status [session-id] --json`, коли потрібен сирий JSON. Використовуйте `googlemeet doctor --oauth`, коли потрібно перевірити оновлення Google Meet OAuth без розкриття токенів; додайте `--meeting` або `--create-space`, коли також потрібен доказ Google Meet API. -Якщо в агента стався тайм-аут і ви бачите вже відкриту вкладку Meet, огляньте цю вкладку -без відкриття іншої: +Якщо час очікування агента сплив і ви бачите вже відкриту вкладку Meet, огляньте цю вкладку без відкриття ще однієї: ```bash openclaw googlemeet recover-tab openclaw googlemeet recover-tab https://meet.google.com/abc-defg-hij ``` -Еквівалентна дія інструмента — `recover_current_tab`. Вона фокусує й оглядає -наявну вкладку Meet для вибраного транспорту. З `chrome` вона використовує локальне -керування браузером через Gateway; з `chrome-node` вона використовує налаштований -Chrome node. Вона не відкриває нову вкладку й не створює новий сеанс; вона повідомляє -поточний блокер, наприклад вхід, допуск, дозволи або стан вибору аудіо. -Команда CLI звертається до налаштованого Gateway, тому Gateway має бути запущений; -`chrome-node` також потребує підключеного Chrome node. +Відповідна дія інструмента — `recover_current_tab`. Вона фокусується на наявній вкладці Meet і оглядає її для вибраного транспорту. З `chrome` вона використовує локальне керування браузером через Gateway; з `chrome-node` вона використовує налаштований Chrome Node. Вона не відкриває нову вкладку й не створює нову сесію; вона повідомляє поточний блокер, наприклад стан входу, допуску, дозволів або вибору аудіо. Команда CLI звертається до налаштованого Gateway, тому Gateway має бути запущений; `chrome-node` також потребує підключеного Chrome Node. -### Не проходять перевірки налаштування Twilio +### Перевірки налаштування 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` не проходить, коли backend Twilio не має account -SID, auth token або caller number. Встановіть їх на хості Gateway: +`twilio-voice-call-credentials` не проходить, коли в бекенді Twilio бракує account SID, auth token або номера відправника. Установіть їх на хості Gateway: ```bash export TWILIO_ACCOUNT_SID=AC... @@ -1451,14 +1497,9 @@ export TWILIO_AUTH_TOKEN=... export TWILIO_FROM_NUMBER=+15550001234 ``` -`twilio-voice-call-webhook` не проходить, коли `voice-call` не має публічного -доступу Webhook або коли `publicUrl` вказує на loopback чи простір приватної мережі. -Встановіть `plugins.entries.voice-call.config.publicUrl` на публічний URL провайдера або -налаштуйте tunnel/Tailscale-доступ для `voice-call`. +`twilio-voice-call-webhook` не проходить, коли `voice-call` не має публічного Webhook-доступу або коли `publicUrl` вказує на loopback чи приватний мережевий простір. Установіть `plugins.entries.voice-call.config.publicUrl` на URL публічного провайдера або налаштуйте тунель/Tailscale-доступ для `voice-call`. -Loopback і приватні URL не є дійсними для callback від операторів. Не використовуйте -`localhost`, `127.0.0.1`, `0.0.0.0`, `10.x`, `172.16.x`-`172.31.x`, -`192.168.x`, `169.254.x`, `fc00::/7` або `fd00::/8` як `publicUrl`. +Loopback і приватні URL недійсні для callback-викликів операторів зв’язку. Не використовуйте `localhost`, `127.0.0.1`, `0.0.0.0`, `10.x`, `172.16.x`-`172.31.x`, `192.168.x`, `169.254.x`, `fc00::/7` або `fd00::/8` як `publicUrl`. Для стабільного публічного URL: @@ -1479,8 +1520,8 @@ Loopback і приватні URL не є дійсними для callback від } ``` -Для локальної розробки використовуйте tunnel або Tailscale-доступ замість URL приватного -хоста: +Для локальної розробки використовуйте тунель або експонування через Tailscale замість приватної +URL-адреси хоста: ```json5 { @@ -1506,14 +1547,14 @@ openclaw voicecall setup openclaw voicecall smoke ``` -`voicecall smoke` типово лише перевіряє готовність. Щоб виконати пробний запуск для конкретного номера: +`voicecall smoke` за замовчуванням лише перевіряє готовність. Щоб виконати пробний запуск для певного номера: ```bash openclaw voicecall smoke --to "+15555550123" ``` -Додавайте `--yes` лише тоді, коли навмисно хочете здійснити справжній вихідний -сповіщувальний виклик: +Додавайте `--yes` лише тоді, коли навмисно хочете здійснити реальний вихідний сповіщувальний +дзвінок: ```bash openclaw voicecall smoke --to "+15555550123" --yes @@ -1521,7 +1562,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 \ @@ -1530,38 +1572,78 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --dtmf-sequence ww123456# ``` -Використовуйте початкові `w` або коми в `--dtmf-sequence`, якщо провайдеру потрібна пауза перед введенням PIN. +Використовуйте початкові `w` або коми в `--dtmf-sequence`, якщо провайдеру потрібна пауза +перед введенням PIN. -Якщо телефонний виклик створено, але список учасників Meet ніколи не показує учасника з телефонним підключенням: +Якщо телефонний виклик створено, але в списку учасників Meet не з’являється +учасник через телефонне підключення: -- Запустіть `openclaw googlemeet doctor `, щоб підтвердити делегований Twilio ID виклику, чи було поставлено DTMF у чергу та чи було запитано вступне привітання. -- Запустіть `openclaw voicecall status --call-id ` і підтвердьте, що виклик досі активний. -- Запустіть `openclaw voicecall tail` і перевірте, що webhooks Twilio надходять до Gateway. -- Запустіть `openclaw logs --follow` і знайдіть послідовність Twilio Meet: Google Meet делегує приєднання, Voice Call запускає телефонну ділянку, Google Meet чекає `voiceCall.dtmfDelayMs`, надсилає DTMF через `voicecall.dtmf`, чекає `voiceCall.postDtmfSpeechDelayMs`, а потім запитує вступне мовлення через `voicecall.speak`. -- Повторно запустіть `openclaw googlemeet setup --transport twilio`; успішна перевірка налаштування обов’язкова, але вона не доводить, що послідовність PIN для зустрічі правильна. -- Переконайтеся, що номер для телефонного підключення належить до того самого запрошення Meet і регіону, що й PIN. -- Збільште `voiceCall.dtmfDelayMs`, якщо Meet відповідає повільно або транскрипт виклику досі показує запит на введення PIN після надсилання DTMF. -- Якщо учасник приєднується, але ви не чуєте привітання, перевірте `openclaw logs --follow` на наявність post-DTMF запиту `voicecall.speak` і відтворення TTS через медіапотік або резервний варіант Twilio ``. Якщо транскрипт виклику досі містить "enter the meeting PIN", телефонна ділянка ще не приєдналася до кімнати Meet, тож учасники зустрічі не почують мовлення. +- Виконайте `openclaw googlemeet doctor `, щоб підтвердити делегований ідентифікатор + виклику Twilio, чи було поставлено DTMF у чергу та чи було запитано вступове привітання. +- Виконайте `openclaw voicecall status --call-id ` і переконайтеся, що виклик досі + активний. +- Виконайте `openclaw voicecall tail` і перевірте, що Webhook-и Twilio надходять до + Gateway. +- Виконайте `openclaw logs --follow` і знайдіть послідовність Twilio Meet: Google + Meet делегує приєднання, Voice Call запускає телефонну частину, Google Meet очікує + `voiceCall.dtmfDelayMs`, надсилає DTMF через `voicecall.dtmf`, очікує + `voiceCall.postDtmfSpeechDelayMs`, а потім запитує вступове мовлення через + `voicecall.speak`. +- Повторно виконайте `openclaw googlemeet setup --transport twilio`; успішна перевірка налаштування + потрібна, але вона не доводить, що послідовність PIN для зустрічі правильна. +- Переконайтеся, що номер для набору належить до того самого запрошення Meet і регіону, що й + PIN. +- Збільште `voiceCall.dtmfDelayMs`, якщо Meet відповідає повільно або транскрипт виклику + досі показує запит на введення PIN після надсилання DTMF. +- Якщо учасник приєднується, але ви не чуєте привітання, перевірте + `openclaw logs --follow` на наявність post-DTMF-запиту `voicecall.speak` і + або відтворення TTS через медіапотік, або резервний варіант Twilio ``. Якщо транскрипт виклику + досі містить "enter the meeting PIN", телефонна частина ще не приєдналася + до кімнати Meet, тому учасники зустрічі не почують мовлення. -Якщо webhooks не надходять, спочатку налагодьте Plugin Voice Call: провайдер має дістатися до `plugins.entries.voice-call.config.publicUrl` або налаштованого тунелю. Див. [усунення несправностей Voice call](/uk/plugins/voice-call#troubleshooting). +Якщо Webhook-и не надходять, спочатку налагодьте Plugin Voice Call: провайдер має +досягати `plugins.entries.voice-call.config.publicUrl` або налаштованого тунелю. +Дивіться [усунення несправностей голосових викликів](/uk/plugins/voice-call#troubleshooting). ## Примітки -Офіційний медіа API Google Meet орієнтований на приймання, тож для мовлення в виклик Meet усе одно потрібен шлях учасника. Цей Plugin робить цю межу видимою: Chrome обробляє участь через браузер і локальну маршрутизацію аудіо; Twilio обробляє участь через телефонне підключення. +Офіційний медіа API Google Meet орієнтований на отримання, тому для мовлення в +дзвінку Meet усе ще потрібен шлях учасника. Цей Plugin залишає цю межу видимою: +Chrome обробляє участь через браузер і локальну маршрутизацію аудіо; Twilio обробляє +участь через телефонне підключення. -Режими talk-back у Chrome потребують `BlackHole 2ch` плюс один із варіантів: +Режими зворотного мовлення Chrome потребують `BlackHole 2ch` і одного з таких варіантів: -- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw керує мостом і передає аудіо у форматі `chrome.audioFormat` між цими командами та вибраним провайдером. Режим агента використовує транскрипцію в реальному часі плюс звичайний TTS; режим bidi використовує голосового провайдера реального часу. Стандартний шлях Chrome — 24 kHz PCM16 з `chrome.audioBufferBytes: 4096`; 8 kHz G.711 mu-law залишається доступним для застарілих пар команд. -- `chrome.audioBridgeCommand`: зовнішня команда мосту керує всім локальним аудіошляхом і має завершитися після запуску або перевірки свого демона. Це припустимо лише для `bidi`, оскільки режим `agent` потребує прямого доступу до пари команд для TTS. +- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw керує + мостом і передає аудіо у форматі `chrome.audioFormat` між цими командами та + вибраним провайдером. Режим агента використовує транскрипцію в реальному часі плюс звичайний TTS; + двонапрямний режим використовує голосового провайдера реального часу. Стандартний шлях Chrome — 24 кГц + PCM16 з `chrome.audioBufferBytes: 4096`; 8 кГц G.711 mu-law залишається + доступним для застарілих пар команд. +- `chrome.audioBridgeCommand`: зовнішня команда моста керує всім локальним + аудіошляхом і має завершитися після запуску або перевірки свого демона. Це дійсно лише + для `bidi`, тому що режим `agent` потребує прямого доступу до пари команд для TTS. -Для чистого дуплексного аудіо маршрутизуйте вихід Meet і мікрофон Meet через окремі віртуальні пристрої або граф віртуальних пристроїв у стилі Loopback. Один спільний пристрій BlackHole може повертати звук інших учасників назад у виклик. +Для чистого дуплексного аудіо маршрутизуйте вихід Meet і мікрофон Meet через окремі +віртуальні пристрої або граф віртуальних пристроїв у стилі Loopback. Один спільний +пристрій BlackHole може повертати інших учасників назад у дзвінок як ехо. -З Chrome-мостом на парі команд `chrome.bargeInInputCommand` може слухати окремий локальний мікрофон і очищати відтворення асистента, коли людина починає говорити. Це зберігає людське мовлення попереду виводу асистента, навіть коли спільний вхід BlackHole loopback тимчасово приглушено під час відтворення асистента. Як і `chrome.audioInputCommand` та `chrome.audioOutputCommand`, це налаштована оператором локальна команда. Використовуйте явний довірений шлях команди або список аргументів і не спрямовуйте її на скрипти з недовірених розташувань. +З мостом Chrome на основі пари команд `chrome.bargeInInputCommand` може слухати +окремий локальний мікрофон і очищати відтворення асистента, коли людина починає +говорити. Це утримує мовлення людини попереду виводу асистента навіть тоді, коли спільний +вхід BlackHole loopback тимчасово приглушено під час відтворення асистента. +Як і `chrome.audioInputCommand` та `chrome.audioOutputCommand`, це локальна команда, +налаштована оператором. Використовуйте явний довірений шлях до команди або +список аргументів і не спрямовуйте її на скрипти з недовірених розташувань. -`googlemeet speak` запускає активний talk-back аудіоміст для сесії Chrome. `googlemeet leave` зупиняє цей міст. Для сесій Twilio, делегованих через Plugin Voice Call, `leave` також завершує базовий голосовий виклик. Використовуйте `googlemeet end-active-conference`, коли також потрібно закрити активну конференцію Google Meet для простору, керованого API. +`googlemeet speak` запускає активний аудіоміст зворотного мовлення для сесії Chrome. +`googlemeet leave` зупиняє цей міст. Для сесій Twilio, делегованих +через Plugin Voice Call, `leave` також завершує базовий голосовий виклик. +Використовуйте `googlemeet end-active-conference`, коли також потрібно закрити активну +конференцію Google Meet для простору, керованого API. -## Пов’язане +## Пов’язано -- [Plugin Voice call](/uk/plugins/voice-call) +- [Plugin голосових викликів](/uk/plugins/voice-call) - [Режим розмови](/uk/nodes/talk) -- [Створення plugins](/uk/plugins/building-plugins) +- [Створення Plugin-ів](/uk/plugins/building-plugins) diff --git a/docs/uk/providers/elevenlabs.md b/docs/uk/providers/elevenlabs.md index 99db87e43..bc65e84cb 100644 --- a/docs/uk/providers/elevenlabs.md +++ b/docs/uk/providers/elevenlabs.md @@ -1,31 +1,31 @@ --- read_when: - - Ви хочете текст-у-мовлення ElevenLabs в OpenClaw - - Ви хочете перетворення мовлення на текст ElevenLabs Scribe для аудіовкладень - - Ви хочете транскрипцію ElevenLabs у реальному часі для Voice Call + - Вам потрібне перетворення тексту на мовлення ElevenLabs в OpenClaw + - Вам потрібен ElevenLabs Scribe для перетворення мовлення на текст в аудіовкладеннях + - Вам потрібна транскрипція в реальному часі ElevenLabs для голосового виклику або Google Meet summary: Використовуйте мовлення ElevenLabs, Scribe STT і транскрипцію в реальному часі з OpenClaw title: ElevenLabs x-i18n: - generated_at: "2026-04-25T09:09:40Z" - model: gpt-5.4 + generated_at: "2026-05-04T06:21:53Z" + model: gpt-5.5 provider: openai - source_hash: 1f858a344228c6355cd5fdc3775cddac39e0075f2e9fcf7683271f11be03a31a + source_hash: 4c880bf9dcab01ef70779c74576c70ea5d0203b96b5f739291842fafcb4bdb4b source_path: providers/elevenlabs.md - workflow: 15 + workflow: 16 --- -OpenClaw використовує ElevenLabs для перетворення тексту на мовлення, пакетного перетворення мовлення на текст із Scribe -v2 і потокового STT Voice Call із Scribe v2 Realtime. +OpenClaw використовує ElevenLabs для перетворення тексту на мовлення, пакетного перетворення мовлення на текст за допомогою Scribe +v2 і потокового STT за допомогою Scribe v2 Realtime. -| Можливість | Поверхня OpenClaw | За замовчуванням | -| ------------------------ | ---------------------------------------------- | ------------------------ | -| Перетворення тексту на мовлення | `messages.tts` / `talk` | `eleven_multilingual_v2` | -| Пакетне перетворення мовлення на текст | `tools.media.audio` | `scribe_v2` | -| Потокове перетворення мовлення на текст | Voice Call `streaming.provider: "elevenlabs"` | `scribe_v2_realtime` | +| Можливість | Поверхня OpenClaw | За замовчуванням | +| ----------------------- | -------------------------------------------------------------------- | ----------------------- | +| Перетворення тексту на мовлення | `messages.tts` / `talk` | `eleven_multilingual_v2` | +| Пакетне перетворення мовлення на текст | `tools.media.audio` | `scribe_v2` | +| Потокове перетворення мовлення на текст | потокова передача Voice Call або Google Meet `realtime.transcriptionProvider` | `scribe_v2_realtime` | ## Автентифікація -Установіть `ELEVENLABS_API_KEY` у середовищі. `XI_API_KEY` також підтримується для +Задайте `ELEVENLABS_API_KEY` у середовищі. `XI_API_KEY` також приймається для сумісності з наявними інструментами ElevenLabs. ```bash @@ -50,8 +50,8 @@ export ELEVENLABS_API_KEY="..." } ``` -Установіть `modelId` на `eleven_v3`, щоб використовувати ElevenLabs v3 TTS. OpenClaw зберігає -`eleven_multilingual_v2` як значення за замовчуванням для наявних інсталяцій. +Задайте `modelId` як `eleven_v3`, щоб використовувати ElevenLabs v3 TTS. OpenClaw залишає +`eleven_multilingual_v2` типовим значенням для наявних інсталяцій. ## Перетворення мовлення на текст @@ -71,21 +71,21 @@ export ELEVENLABS_API_KEY="..." ``` OpenClaw надсилає multipart-аудіо до ElevenLabs `/v1/speech-to-text` з -`model_id: "scribe_v2"`. Підказки мови зіставляються з `language_code`, якщо вони задані. +`model_id: "scribe_v2"`. Мовні підказки зіставляються з `language_code`, якщо вони наявні. -## Потокове STT Voice Call +## Потокове STT -Вбудований Plugin `elevenlabs` реєструє Scribe v2 Realtime для потокової -транскрипції Voice Call. +Вбудований Plugin `elevenlabs` реєструє Scribe v2 Realtime для потокової транскрипції Voice Call і +режиму агента Google Meet. -| Налаштування | Шлях конфігурації | За замовчуванням | -| -------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------- | -| API-ключ | `plugins.entries.voice-call.config.streaming.providers.elevenlabs.apiKey` | Резервно використовує `ELEVENLABS_API_KEY` / `XI_API_KEY` | -| Модель | `...elevenlabs.modelId` | `scribe_v2_realtime` | -| Формат аудіо | `...elevenlabs.audioFormat` | `ulaw_8000` | -| Частота дискретизації | `...elevenlabs.sampleRate` | `8000` | -| Стратегія коміту | `...elevenlabs.commitStrategy` | `vad` | -| Мова | `...elevenlabs.languageCode` | (не задано) | +| Налаштування | Шлях конфігурації | За замовчуванням | +| -------------- | ---------------------------------------------------------------------- | ------------------------------------------------ | +| Ключ API | `plugins.entries.voice-call.config.streaming.providers.elevenlabs.apiKey` | Повертається до `ELEVENLABS_API_KEY` / `XI_API_KEY` | +| Модель | `...elevenlabs.modelId` | `scribe_v2_realtime` | +| Формат аудіо | `...elevenlabs.audioFormat` | `ulaw_8000` | +| Частота дискретизації | `...elevenlabs.sampleRate` | `8000` | +| Стратегія фіксації | `...elevenlabs.commitStrategy` | `vad` | +| Мова | `...elevenlabs.languageCode` | (не задано) | ```json5 { @@ -113,12 +113,18 @@ OpenClaw надсилає multipart-аудіо до ElevenLabs `/v1/speech-to-te ``` -Voice Call отримує медіапотік Twilio як 8 кГц G.711 u-law. Провайдер ElevenLabs realtime -за замовчуванням використовує `ulaw_8000`, тому телекомунікаційні фрейми можна пересилати без +Voice Call отримує медіа Twilio як 8 кГц G.711 u-law. Провайдер ElevenLabs realtime +за замовчуванням використовує `ulaw_8000`, тому телефонні кадри можна пересилати без транскодування. +Для режиму агента Google Meet задайте +`plugins.entries.google-meet.config.realtime.transcriptionProvider` як +`"elevenlabs"` і налаштуйте той самий блок провайдера в +`plugins.entries.google-meet.config.realtime.providers.elevenlabs`. + ## Пов’язане - [Перетворення тексту на мовлення](/uk/tools/tts) +- [Google Meet](/uk/plugins/google-meet) - [Вибір моделі](/uk/concepts/model-providers)