From 24c647793e086d491c62100f615a5b3fd28979eb Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Mon, 4 May 2026 02:46:37 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/plugins/google-meet.md | 964 ++++++++++++++++++--------------- 1 file changed, 514 insertions(+), 450 deletions(-) diff --git a/docs/uk/plugins/google-meet.md b/docs/uk/plugins/google-meet.md index f4dd2ad79..24b8e4f45 100644 --- a/docs/uk/plugins/google-meet.md +++ b/docs/uk/plugins/google-meet.md @@ -2,42 +2,42 @@ read_when: - Ви хочете, щоб агент OpenClaw приєднався до дзвінка Google Meet - Ви хочете, щоб агент OpenClaw створив новий дзвінок Google Meet - - Ви налаштовуєте Chrome, Chrome Node або Twilio як транспорт Google Meet -summary: 'Plugin Google Meet: приєднання до явних URL Meet через Chrome або Twilio з типовими налаштуваннями голосових відповідей агента' -title: Plugin Google Meet + - Ви налаштовуєте Chrome, вузол Chrome або Twilio як транспорт Google Meet +summary: 'Google Meet Plugin: приєднання за явними URL-адресами Meet через Chrome або Twilio зі стандартними налаштуваннями зворотного мовлення агента' +title: Google Meet Plugin x-i18n: - generated_at: "2026-05-04T02:26:47Z" + generated_at: "2026-05-04T02:43:13Z" model: gpt-5.5 provider: openai - source_hash: f26cfd51988f97228d7e45813683c247b29571f3168e0c29c739d512979c8fc9 + source_hash: 79d04eb50b157863cce9b03f1195ae01628f21966267485df1e489c843e55826 source_path: plugins/google-meet.md workflow: 16 --- -Підтримка учасника Google Meet для OpenClaw — plugin навмисно працює явно: +Підтримка учасника Google Meet для OpenClaw — plugin навмисно є явним за задумом: - Він приєднується лише до явної URL-адреси `https://meet.google.com/...`. -- Він може створити новий простір Meet через Google Meet API, а потім приєднатися за - поверненою URL-адресою. -- `agent` — стандартний режим відповіді голосом: транскрипція в реальному часі слухає, - налаштований агент OpenClaw відповідає, а звичайний TTS OpenClaw говорить у Meet. -- `bidi` залишається доступним як резервний режим прямої голосової моделі в реальному часі. +- Він може створити новий простір Meet через Google Meet API, а потім приєднатися до + поверненої URL-адреси. +- `agent` є типовим режимом зворотного мовлення: транскрибування в реальному часі слухає, + налаштований агент OpenClaw відповідає, а звичайний OpenClaw TTS говорить у Meet. +- `bidi` залишається доступним як резервний режим прямої голосової моделі реального часу. - Агенти вибирають поведінку приєднання за допомогою `mode`: використовуйте `agent` для живого - прослуховування/відповіді голосом, `bidi` для прямого резервного голосу в реальному часі або `transcribe`, - щоб приєднатися/керувати браузером без мосту відповіді голосом. -- Автентифікація починається як персональний Google OAuth або вже авторизований профіль Chrome. + прослуховування/зворотного мовлення, `bidi` для прямого резервного голосового режиму реального часу або `transcribe` + для приєднання/керування браузером без моста зворотного мовлення. +- Автентифікація починається як особистий Google OAuth або вже виконаний вхід у профілі Chrome. - Автоматичного оголошення згоди немає. -- Стандартний аудіобекенд Chrome — `BlackHole 2ch`. -- Chrome може працювати локально або на спареному вузловому хості. -- Twilio приймає номер для дозвону плюс необов’язковий PIN або послідовність DTMF; він - не може набирати URL Meet напряму. -- Команда CLI — `googlemeet`; `meet` зарезервовано для ширших агентських - робочих процесів телеконференцій. +- Типовий аудіобекенд Chrome — `BlackHole 2ch`. +- Chrome може працювати локально або на спареному Node-хості. +- Twilio приймає номер для дозвону плюс необов'язковий PIN або DTMF-послідовність; він + не може напряму набирати URL Meet. +- Команда CLI — `googlemeet`; `meet` зарезервовано для ширших + робочих процесів агентських телеконференцій. ## Швидкий старт -Установіть локальні аудіозалежності та налаштуйте постачальника транскрипції в реальному часі -плюс звичайний TTS OpenClaw. OpenAI є стандартним постачальником транскрипції; +Установіть локальні аудіозалежності та налаштуйте провайдера транскрибування в реальному часі +плюс звичайний OpenClaw TTS. OpenAI є типовим провайдером транскрибування; Google Gemini Live також працює з `realtime.provider: "google"` для режиму `bidi`: @@ -48,8 +48,8 @@ export OPENAI_API_KEY=sk-... export GEMINI_API_KEY=... ``` -`blackhole-2ch` установлює віртуальний аудіопристрій `BlackHole 2ch`. Інсталятор -Homebrew потребує перезавантаження, перш ніж macOS покаже пристрій: +`blackhole-2ch` установлює віртуальний аудіопристрій `BlackHole 2ch`. Інсталятор Homebrew +потребує перезавантаження, перш ніж macOS покаже пристрій: ```bash sudo reboot @@ -83,34 +83,35 @@ command -v sox openclaw googlemeet setup ``` -Вивід налаштування призначений бути читабельним для агента та враховувати режим. Він повідомляє про профіль Chrome, -прив’язування вузла, а для приєднань Chrome у реальному часі — про аудіоміст +Вивід налаштування призначений бути читабельним для агента й обізнаним про режим. Він повідомляє про профіль Chrome, +закріплення Node, а для приєднань Chrome у реальному часі — про аудіоміст BlackHole/SoX і відкладені перевірки вступу в реальному часі. Для приєднань лише для спостереження перевірте той самий -транспорт за допомогою `--mode transcribe`; цей режим пропускає передумови аудіо в реальному часі, -оскільки він не слухає через міст і не говорить через нього: +транспорт за допомогою `--mode transcribe`; цей режим пропускає передумови аудіо реального часу, +бо він не слухає через міст і не говорить через нього: ```bash openclaw googlemeet setup --transport chrome-node --mode transcribe ``` Коли налаштовано делегування Twilio, налаштування також повідомляє, чи готові -plugin `voice-call`, облікові дані Twilio і публічне відкриття Webhook. -Вважайте будь-яку перевірку `ok: false` блокером для перевіреного транспорту й режиму +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 до того, як агент спробує набрати зустріч. -Приєднайтеся до зустрічі: +Приєднатися до зустрічі: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij @@ -127,36 +128,37 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij } ``` -Агентський інструмент `google_meet` залишається доступним на хостах не-macOS для -артефактів, календаря, налаштування, транскрибування, Twilio і потоків `chrome-node`. Локальні -дії відповіді голосом Chrome там заблоковані, оскільки вбудований аудіошлях Chrome -наразі залежить від macOS `BlackHole 2ch`. На Linux використовуйте `mode: "transcribe"`, -дозвін Twilio або хост macOS `chrome-node` для участі Chrome з відповіддю голосом. +Інструмент `google_meet` для агентів залишається доступним на хостах не з macOS для +артефактів, календаря, налаштування, транскрибування, Twilio та потоків `chrome-node`. Дії локального +зворотного мовлення Chrome там заблоковані, бо вбудований аудіошлях Chrome +наразі залежить від macOS `BlackHole 2ch`. У Linux використовуйте `mode: "transcribe"`, +дозвін Twilio або macOS `chrome-node`-хост для участі Chrome зі зворотним мовленням. -Створіть нову зустріч і приєднайтеся до неї: +Створити нову зустріч і приєднатися до неї: ```bash openclaw googlemeet create --transport chrome-node --mode agent ``` -Для кімнат, створених через API, використовуйте Google Meet `SpaceConfig.accessType`, коли хочете, -щоб політика кімнати без стуку була явною, а не успадкованою зі стандартних налаштувань облікового запису Google: +Для кімнат, створених API, використовуйте Google Meet `SpaceConfig.accessType`, коли хочете, +щоб політика кімнати без стуку була явною, а не успадкованою з типових налаштувань +облікового запису Google: ```bash openclaw googlemeet create --access-type OPEN --transport chrome-node --mode agent ``` -`OPEN` дозволяє будь-кому з URL Meet приєднуватися без стуку. `TRUSTED` дозволяє -довіреним користувачам організації хоста, запрошеним зовнішнім користувачам і користувачам дозвону -приєднуватися без стуку. `RESTRICTED` обмежує вхід без стуку запрошеними. Ці +`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 @@ -167,23 +169,23 @@ openclaw googlemeet create --no-join - Створення через API: використовується, коли налаштовано облікові дані Google Meet OAuth. Це найбільш детермінований шлях, який не залежить від стану інтерфейсу браузера. - Резервний браузерний шлях: використовується, коли облікові дані OAuth відсутні. OpenClaw використовує - закріплений вузол Chrome, відкриває `https://meet.google.com/new`, чекає, доки Google - переспрямує на справжню URL-адресу з кодом зустрічі, а потім повертає цю URL-адресу. Цей шлях потребує, - щоб профіль OpenClaw Chrome на вузлі вже був авторизований у Google. - Автоматизація браузера обробляє власний перший запит Meet на мікрофон; цей запит - не вважається помилкою входу Google. - Потоки приєднання і створення також намагаються повторно використати наявну вкладку Meet перед відкриттям - нової. Зіставлення ігнорує нешкідливі рядки запиту URL, такі як `authuser`, тому - повторна спроба агента має сфокусувати вже відкриту зустріч, а не створювати другу - вкладку Chrome. + закріплений Chrome Node, відкриває `https://meet.google.com/new`, чекає, доки Google + перенаправить на справжню URL-адресу з кодом зустрічі, а потім повертає цю URL-адресу. Цей шлях потребує, + щоб у профілі Chrome OpenClaw на Node вже був виконаний вхід у 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` з +Або скажіть агенту: "Створи Google Meet, приєднайся до нього в режимі зворотного мовлення агента +та надішли мені посилання." Агент має викликати `google_meet` з `action: "create"`, а потім поділитися поверненим `meetingUri`. ```json @@ -195,53 +197,53 @@ openclaw googlemeet create --no-join ``` Для приєднання лише для спостереження/керування браузером задайте `"mode": "transcribe"`. Це -не запускає дуплексний голосовий міст у реальному часі, не потребує BlackHole або SoX -і не відповідатиме голосом у зустріч. Приєднання Chrome у цьому режимі також уникають -надання OpenClaw дозволів на мікрофон/камеру та обходять шлях Meet **Використати -мікрофон**. Якщо Meet показує проміжний екран вибору аудіо, автоматизація пробує -шлях без мікрофона, а в іншому разі повідомляє про ручну дію замість відкриття -локального мікрофона. У режимі транскрибування керовані транспорти Chrome також установлюють +не запускає дуплексний голосовий міст реального часу, не потребує BlackHole або SoX +і не говоритиме у відповідь у зустрічі. Приєднання Chrome у цьому режимі також уникають +надання дозволу OpenClaw на мікрофон/камеру та уникають шляху Meet **Use +microphone**. Якщо Meet показує проміжний екран вибору аудіо, автоматизація намагається +обрати шлях без мікрофона, а інакше повідомляє про ручну дію замість відкриття +локального мікрофона. У режимі transcribe керовані транспорти Chrome також установлюють best-effort спостерігач субтитрів Meet. `googlemeet status --json` і `googlemeet doctor` показують `captioning`, `captionsEnabledAttempted`, -`transcriptLines`, `lastCaptionAt`, `lastCaptionSpeaker`, `lastCaptionText` +`transcriptLines`, `lastCaptionAt`, `lastCaptionSpeaker`, `lastCaptionText`, і короткий хвіст `recentTranscript`, щоб оператори могли зрозуміти, чи браузер -приєднався до виклику і чи субтитри Meet створюють текст. +приєднався до дзвінка та чи субтитри Meet створюють текст. Використовуйте `openclaw googlemeet test-listen --transport chrome-node`, коли -потрібна перевірка так/ні: вона приєднується в режимі транскрибування, чекає на свіжий рух субтитрів або +потрібна перевірка так/ні: він приєднується в режимі transcribe, чекає на новий рух субтитрів або транскрипту та повертає `listenVerified`, `listenTimedOut`, поля ручної -дії і найновіший стан субтитрів. +дії та останній стан субтитрів. -Під час сеансів у реальному часі статус `google_meet` містить стан браузера та аудіомоста, -зокрема `inCall`, `manualActionRequired`, `providerConnected`, -`realtimeReady`, `audioInputActive`, `audioOutputActive`, останні часові позначки вводу/виводу, -лічильники байтів і стан закриття моста. Якщо з’являється безпечний запит сторінки Meet, -автоматизація браузера обробляє його, коли може. Вхід, допуск хостом і +Під час сесій реального часу статус `google_meet` містить стан браузера й аудіомоста, +як-от `inCall`, `manualActionRequired`, `providerConnected`, +`realtimeReady`, `audioInputActive`, `audioOutputActive`, останні часові мітки вводу/виводу, +лічильники байтів і стан закриття моста. Якщо з'являється безпечний запит сторінки Meet, +браузерна автоматизація обробляє його, коли може. Вхід, допуск хостом і запити дозволів браузера/ОС повідомляються як ручна дія з причиною та -повідомленням, яке агент має передати. Керовані сеанси Chrome видають вступ або +повідомленням, яке агент має передати. Керовані сесії Chrome відтворюють вступну або тестову фразу лише після того, як стан браузера повідомляє `inCall: true`; інакше статус повідомляє -`speechReady: false`, а спроба мовлення блокується замість імітації, ніби +`speechReady: false`, а спроба мовлення блокується замість удавання, ніби агент говорив у зустріч. -Локальні приєднання Chrome відбуваються через авторизований браузерний профіль OpenClaw. Режим реального часу +Локальні приєднання Chrome проходять через профіль браузера OpenClaw із виконаним входом. Режим реального часу потребує `BlackHole 2ch` для шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого дуплексного аудіо використовуйте окремі віртуальні пристрої або граф у стилі Loopback; одного -пристрою BlackHole достатньо для першого smoke-тесту, але він може створювати відлуння. +пристрою BlackHole достатньо для першого smoke-тесту, але він може давати відлуння. -### Локальний Gateway + Parallels Chrome +### Локальний Gateway + Chrome у Parallels Вам **не** потрібен повний OpenClaw Gateway або ключ API моделі всередині macOS VM лише для того, щоб VM володіла Chrome. Запустіть Gateway і агента локально, а потім запустіть -вузловий хост у VM. Увімкніть вбудований plugin на VM один раз, щоб вузол +Node-хост у VM. Увімкніть вбудований plugin у VM один раз, щоб Node оголошував команду Chrome: Що де працює: -- Хост Gateway: OpenClaw Gateway, робочий простір агента, ключі моделі/API, постачальник - реального часу і конфігурація Google Meet plugin. -- Parallels macOS VM: OpenClaw CLI/вузловий хост, Google Chrome, SoX, BlackHole 2ch, - і профіль Chrome, авторизований у Google. +- Gateway-хост: OpenClaw Gateway, робоча область агента, ключі моделі/API, провайдер реального часу + і конфігурація Google Meet plugin. +- Parallels macOS VM: OpenClaw CLI/Node-хост, Google Chrome, SoX, BlackHole 2ch + і профіль Chrome із виконаним входом у Google. - Не потрібно у VM: сервіс Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування - постачальника моделі. + провайдера моделі. Установіть залежності VM: @@ -268,21 +270,21 @@ command -v sox openclaw plugins enable google-meet ``` -Запустіть вузловий хост у VM: +Запустіть Node-хост у VM: ```bash openclaw node run --host --port 18789 --display-name parallels-macos ``` -Якщо `` — LAN IP і ви не використовуєте TLS, вузол відмовляється від -plaintext WebSocket, якщо ви явно не дозволите це для цієї довіреної приватної мережі: +Якщо `` є LAN IP і ви не використовуєте TLS, Node відмовляє +незашифрованому WebSocket, якщо ви явно не погодитеся для цієї довіреної приватної мережі: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host --port 18789 --display-name parallels-macos ``` -Використовуйте ту саму змінну середовища під час установлення вузла як LaunchAgent: +Використовуйте ту саму змінну середовища під час встановлення Node як LaunchAgent: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ @@ -294,21 +296,21 @@ openclaw node restart `openclaw.json`. `openclaw node install` зберігає його в середовищі LaunchAgent, коли воно присутнє в команді встановлення. -Схваліть вузол із хоста Gateway: +Схваліть Node з Gateway-хоста: ```bash openclaw devices list openclaw devices approve ``` -Підтвердьте, що Gateway бачить вузол і що він оголошує і `googlemeet.chrome`, -і можливість браузера/`browser.proxy`: +Підтвердьте, що Gateway бачить Node і що він оголошує як `googlemeet.chrome`, +так і можливість браузера/`browser.proxy`: ```bash openclaw nodes status ``` -Спрямуйте Meet через цей вузол на хості Gateway: +Спрямуйте Meet через цей Node на Gateway-хості: ```json5 { @@ -338,7 +340,7 @@ openclaw nodes status } ``` -Тепер приєднуйтеся звичайно з хоста Gateway: +Тепер приєднуйтеся звичайно з Gateway-хоста: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij @@ -346,56 +348,106 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij або попросіть агента використати інструмент `google_meet` з `transport: "chrome-node"`. -Для smoke-тесту однією командою, який створює або повторно використовує сеанс, вимовляє відому -фразу і друкує стан сеансу: +Для smoke-тесту однією командою, який створює або повторно використовує сесію, вимовляє відому +фразу та друкує стан сесії: ```bash openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij ``` -Під час приєднання в реальному часі автоматизація браузера OpenClaw заповнює ім’я гостя, натискає Join/Ask to join і приймає перший вибір Meet "Use microphone", коли з’являється цей запит. Під час приєднання лише для спостереження або створення зустрічі лише через браузер вона продовжує після того самого запиту без мікрофона, коли такий вибір доступний. Якщо профіль браузера не ввійшов в обліковий запис, Meet очікує допуску від організатора, Chrome потребує дозволу на мікрофон/камеру для приєднання в реальному часі або Meet застряг на запиті, який автоматизація не змогла обробити, результат join/test-speech повідомляє `manualActionRequired: true` з `manualActionReason` і `manualActionMessage`. Агенти мають припинити повторні спроби приєднання, повідомити це точне повідомлення разом із поточними `browserUrl`/`browserTitle` і повторювати спробу лише після завершення ручної дії в браузері. +Під час realtime-приєднання браузерна автоматизація OpenClaw заповнює ім’я гостя, натискає +Приєднатися/Попросити приєднатися та приймає вибір першого запуску Meet "Використовувати мікрофон", коли така +підказка з’являється. Під час приєднання лише для спостереження або створення зустрічі лише через браузер вона +проходить ту саму підказку без мікрофона, коли такий вибір доступний. +Якщо браузерний профіль не ввійшов в обліковий запис, Meet очікує допуску від організатора, +Chrome потребує дозволу на мікрофон/камеру для realtime-приєднання, або Meet застряг +на підказці, яку автоматизація не змогла обробити, результат join/test-speech повідомляє +`manualActionRequired: true` з `manualActionReason` і +`manualActionMessage`. Агенти мають припинити повторювати приєднання, повідомити це точне +повідомлення разом із поточними `browserUrl`/`browserTitle` і повторити спробу лише після завершення +ручної дії у браузері. -Якщо `chromeNode.node` пропущено, OpenClaw вибирає автоматично лише тоді, коли рівно один підключений вузол оголошує і `googlemeet.chrome`, і керування браузером. Якщо підключено кілька придатних вузлів, задайте `chromeNode.node` як id вузла, відображуване ім’я або віддалену IP-адресу. +Якщо `chromeNode.node` пропущено, OpenClaw автоматично вибирає лише тоді, коли рівно один +підключений Node оголошує і `googlemeet.chrome`, і керування браузером. Якщо +підключено кілька придатних Node, задайте `chromeNode.node` як id Node, +відображуване ім’я або віддалену 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`: закріплений Node + відомий Gateway, але недоступний. Агенти мають трактувати цей Node як + діагностичний стан, а не як придатний хост Chrome, і повідомляти блокер налаштування + замість переходу на інший транспорт, якщо користувач цього не просив. +- `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM, + схваліть сполучення та переконайтеся, що у VM виконано + `openclaw plugins enable google-meet` і + `openclaw plugins enable browser`. Також підтвердьте, що хост + Gateway дозволяє обидві команди Node через + `gateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"]`. +- `BlackHole 2ch audio device not found`: установіть `blackhole-2ch` на хості, + що перевіряється, і перезавантажтеся перед використанням локального аудіо Chrome. +- `BlackHole 2ch audio device not found on the node`: установіть `blackhole-2ch` + у VM і перезавантажте VM. +- Chrome відкривається, але не може приєднатися: увійдіть у браузерний профіль усередині VM або + залиште `chrome.guestName` заданим для гостьового приєднання. Гостьове автоприєднання використовує + браузерну автоматизацію OpenClaw через браузерний проксі Node; переконайтеся, що конфігурація браузера + Node вказує на потрібний профіль, наприклад + `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 kHz 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/аудіо працюють на спареному вузлі, наприклад Parallels macOS VM. Для локального Chrome виберіть профіль через `browser.defaultProfile`; `chrome.browserProfile` передається хостам `chrome-node`. +Транспорт Chrome відкриває URL Meet через керування браузером OpenClaw і приєднується +як браузерний профіль OpenClaw, що ввійшов в обліковий запис. На macOS Plugin перевіряє наявність +`BlackHole 2ch` перед запуском. Якщо налаштовано, він також запускає команду перевірки стану +аудіомоста та команду запуску перед відкриттям Chrome. Використовуйте `chrome`, коли +Chrome/аудіо працюють на хості Gateway; використовуйте `chrome-node`, коли Chrome/аудіо працюють +на сполученому Node, як-от Parallels macOS VM. Для локального 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 — це суворий план набору, делегований Voice Call Plugin. Він не аналізує сторінки Meet для пошуку телефонних номерів. +Транспорт Twilio — це строгий план набору, делегований Plugin Voice Call. Він +не аналізує сторінки Meet для пошуку телефонних номерів. -Використовуйте це, коли участь через Chrome недоступна або потрібен резервний телефонний набір. Google Meet має надавати телефонний номер для набору та PIN для зустрічі; OpenClaw не виявляє їх зі сторінки Meet. +Використовуйте це, коли участь через Chrome недоступна або потрібен резервний варіант +телефонного дозвону. Google Meet має надати номер телефонного дозвону та PIN для +зустрічі; OpenClaw не виявляє їх зі сторінки Meet. -Увімкніть Voice Call Plugin на хості Gateway, а не на вузлі Chrome: +Увімкніть Plugin Voice Call на хості Gateway, а не на Node Chrome: ```json5 { @@ -420,7 +472,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... @@ -428,7 +481,8 @@ export TWILIO_AUTH_TOKEN=... export TWILIO_FROM_NUMBER=+15550001234 ``` -Перезапустіть або перезавантажте Gateway після ввімкнення `voice-call`; зміни конфігурації Plugin не з’являються в уже запущеному процесі Gateway, доки він не перезавантажиться. +Перезапустіть або перезавантажте Gateway після ввімкнення `voice-call`; зміни конфігурації Plugin +не з’являються в уже запущеному процесі Gateway, доки він не перезавантажиться. Потім перевірте: @@ -438,7 +492,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 \ @@ -456,23 +512,33 @@ 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: створіть OAuth-клієнт Google Cloud, запросіть потрібні scopes, авторизуйте обліковий запис Google, а потім збережіть отриманий refresh token у конфігурації Google Meet Plugin або надайте змінні середовища `OPENCLAW_GOOGLE_MEET_*`. +Доступ до Google Meet API використовує користувацький OAuth: створіть OAuth-клієнт Google Cloud, +запросіть потрібні scopes, авторизуйте обліковий запис 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 і підключений +Node, коли ви використовуєте браузерну участь. 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, який авторизуватиме застосунок, як тестового користувача. + - **Internal** — найпростіший варіант для організації Google Workspace. + - **External** працює для особистих/тестових налаштувань; поки застосунок у Testing, + додайте кожен обліковий запис Google, який авторизуватиме застосунок, як тестового користувача. 4. Додайте scopes, які запитує OpenClaw: - `https://www.googleapis.com/auth/meetings.space.created` - `https://www.googleapis.com/auth/meetings.space.readonly` @@ -480,7 +546,7 @@ OAuth не замінює шлях приєднання через Chrome. Тр - `https://www.googleapis.com/auth/meetings.conference.media.readonly` 5. Створіть OAuth client ID. - Тип застосунку: **Web application**. - - Авторизований URI переспрямування: + - Авторизований URI перенаправлення: ```text http://localhost:8085/oauth2callback @@ -490,18 +556,24 @@ OAuth не замінює шлях приєднання через Chrome. Тр `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.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, callback localhost на `http://localhost:8085/oauth2callback` і ручний потік копіювання/вставлення з `--manual`. +Команда друкує конфігураційний блок `oauth` із refresh token. Вона використовує PKCE, +localhost callback на `http://localhost:8085/oauth2callback` і ручний +потік копіювання/вставлення з `--manual`. Приклади: @@ -519,7 +591,7 @@ OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \ openclaw googlemeet auth login --json --manual ``` -Вивід JSON містить: +JSON-вивід містить: ```json { @@ -534,7 +606,7 @@ openclaw googlemeet auth login --json --manual } ``` -Збережіть об’єкт `oauth` у конфігурації Google Meet Plugin: +Збережіть об’єкт `oauth` у конфігурації Plugin Google Meet: ```json5 { @@ -555,11 +627,16 @@ openclaw googlemeet auth login --json --manual } ``` -Віддавайте перевагу змінним середовища, коли не хочете зберігати refresh token у конфігурації. Якщо присутні і значення конфігурації, і значення середовища, Plugin спочатку розв’язує конфігурацію, а потім fallback середовища. +Надавайте перевагу змінним середовища, коли не хочете зберігати refresh token у конфігурації. +Якщо присутні і значення конфігурації, і значення середовища, Plugin спершу використовує конфігурацію, +а потім fallback до середовища. -Згода 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 мав scope `meetings.space.created`. -### Перевірка OAuth через doctor +### Перевірте OAuth через doctor Запустіть OAuth doctor, коли потрібна швидка перевірка стану без секретів: @@ -567,29 +644,34 @@ openclaw googlemeet auth login --json --manual 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 і не вимагає підключеного Node Chrome. Команда +перевіряє, що конфігурація OAuth існує і що refresh token може випустити access +token. JSON-звіт містить лише поля стану, як-от `ok`, `configured`, +`tokenSource`, `expiresAt`, і повідомлення перевірок; він не друкує access +token, refresh token або client secret. -Поширені результати: +Типові результати: | Перевірка | Значення | | -------------------- | --------------------------------------------------------------------------------------- | -| `oauth-config` | `oauth.clientId` плюс `oauth.refreshToken` або кешований access token присутні. | -| `oauth-token` | Кешований access token усе ще дійсний або refresh token випустив новий access token. | +| `oauth-config` | Наявний `oauth.clientId` плюс `oauth.refreshToken` або кешований access token. | +| `oauth-token` | Кешований access token ще дійсний, або refresh token випустив новий access token. | | `meet-spaces-get` | Необов’язкова перевірка `--meeting` розв’язала наявний простір Meet. | -| `meet-spaces-create` | Необов’язкова перевірка `--create-space` створила новий простір Meet. | +| `meet-spaces-create` | Необов’язкова перевірка `--create-space` створила новий простір Meet. | -Щоб також підтвердити ввімкнення Google Meet API та scope `spaces.create`, виконайте перевірку створення з побічним ефектом: +Щоб також підтвердити ввімкнення Google Meet API і scope `spaces.create`, запустіть +перевірку створення з побічним ефектом: ```bash openclaw googlemeet doctor --oauth --create-space --json openclaw googlemeet create --no-join --json ``` -`--create-space` створює одноразову URL-адресу Meet. Використовуйте це, коли потрібно підтвердити, +`--create-space` створює одноразову URL-адресу Meet. Використовуйте його, коли потрібно підтвердити, що в проєкті Google Cloud увімкнено Meet API і що авторизований -обліковий запис має scope `meetings.space.created`. +обліковий запис має область доступу `meetings.space.created`. -Щоб підтвердити доступ на читання до наявного простору зустрічі: +Щоб підтвердити доступ на читання для наявного простору зустрічі: ```bash openclaw googlemeet doctor --oauth --meeting https://meet.google.com/abc-defg-hij --json @@ -597,17 +679,17 @@ openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij ``` `doctor --oauth --meeting` і `resolve-space` підтверджують доступ на читання до наявного -простору, до якого має доступ авторизований обліковий запис Google. `403` від цих перевірок -зазвичай означає, що Google Meet REST API вимкнено, узгоджений refresh token -не має потрібного scope, або обліковий запис Google не може отримати доступ до цього простору -Meet. Помилка refresh-token означає, що потрібно повторно виконати `openclaw googlemeet auth login +простору, до якого авторизований обліковий запис Google має доступ. `403` від цих перевірок +зазвичай означає, що Google Meet REST API вимкнено, узгодженому токену оновлення +бракує потрібної області доступу або обліковий запис Google не має доступу до цього простору +Meet. Помилка токена оновлення означає, що потрібно повторно виконати `openclaw googlemeet auth login --json` і зберегти новий блок `oauth`. -Для браузерного fallback облікові дані OAuth не потрібні. У цьому режимі авторизація Google -надходить із профілю Chrome, у який виконано вхід, на вибраному Node, а не з +Для резервного варіанта через браузер облікові дані OAuth не потрібні. У цьому режимі автентифікація Google +надходить із профілю Chrome, у який виконано вхід на вибраному вузлі, а не з конфігурації OpenClaw. -Ці змінні середовища приймаються як fallback: +Ці змінні середовища приймаються як резервні значення: - `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID` - `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` або `GOOGLE_MEET_CLIENT_SECRET` @@ -618,13 +700,13 @@ Meet. Помилка refresh-token означає, що потрібно пов - `OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING` або `GOOGLE_MEET_DEFAULT_MEETING` - `OPENCLAW_GOOGLE_MEET_PREVIEW_ACK` або `GOOGLE_MEET_PREVIEW_ACK` -Визначте URL-адресу Meet, код або `spaces/{id}` через `spaces.get`: +Розв’яжіть URL-адресу Meet, код або `spaces/{id}` через `spaces.get`: ```bash openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij ``` -Запустіть preflight перед роботою з медіа: +Запустіть попередню перевірку перед роботою з медіа: ```bash openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij @@ -653,13 +735,13 @@ openclaw googlemeet attendance --today --format csv --output attendance.csv ``` `--today` шукає в сьогоднішньому календарі `primary` подію Calendar з -посиланням Google Meet. Використовуйте `--event `, щоб шукати відповідний текст події, і +посиланням Google Meet. Використовуйте `--event ` для пошуку відповідного тексту події та `--calendar ` для неосновного календаря. Пошук у календарі потребує нового -входу OAuth, який включає readonly scope для подій Calendar. +входу OAuth, який включає область доступу лише для читання подій Calendar. `calendar-events` попередньо показує відповідні події Meet і позначає подію, яку вибере `latest`, `artifacts`, `attendance` або `export`. -Якщо ви вже знаєте ідентифікатор запису конференції, звертайтеся до нього напряму: +Якщо ви вже знаєте ідентифікатор запису конференції, зверніться до нього напряму: ```bash openclaw googlemeet latest --meeting https://meet.google.com/abc-defg-hij @@ -667,19 +749,19 @@ openclaw googlemeet artifacts --conference-record conferenceRecords/abc123 --jso openclaw googlemeet attendance --conference-record conferenceRecords/abc123 --json ``` -Завершіть активну конференцію для простору, створеного API, коли потрібно закрити +Завершіть активну конференцію для простору, створеного через API, коли потрібно закрити кімнату після дзвінка: ```bash openclaw googlemeet end-active-conference https://meet.google.com/abc-defg-hij ``` -Це викликає Google Meet `spaces.endActiveConference` і потребує OAuth зі -scope `meetings.space.created` для простору, яким авторизований обліковий запис може керувати. -OpenClaw приймає URL-адресу Meet, код зустрічі або вхідні дані `spaces/{id}` і визначає їх -як ресурс простору API перед завершенням активної конференції. -Це окремо від `googlemeet leave`: `leave` зупиняє локальну/сесійну -участь OpenClaw, тоді як `end-active-conference` просить Google Meet завершити активну +Це викликає Google Meet `spaces.endActiveConference` і потребує OAuth з +областю доступу `meetings.space.created` для простору, яким авторизований обліковий запис може керувати. +OpenClaw приймає URL-адресу Meet, код зустрічі або вхід `spaces/{id}` і розв’язує його +до ресурсу простору API перед завершенням активної конференції. +Це окремо від `googlemeet leave`: `leave` зупиняє локальну/сеансову +участь OpenClaw, а `end-active-conference` просить Google Meet завершити активну конференцію для простору. Запишіть читабельний звіт: @@ -698,33 +780,33 @@ openclaw googlemeet export --conference-record conferenceRecords/abc123 \ ``` `artifacts` повертає метадані запису конференції, а також метадані ресурсів учасників, записів, -транскрипту, структурованих записів транскрипту та smart-note, коли +транскриптів, структурованих записів транскрипту та розумних нотаток, коли Google надає їх для зустрічі. Використовуйте `--no-transcript-entries`, щоб пропустити пошук записів для великих зустрічей. `attendance` розгортає учасників у -рядки сесій учасників із часом першої/останньої появи, загальною тривалістю сесії, +рядки сеансів учасників із часом першої/останньої появи, загальною тривалістю сеансу, прапорцями запізнення/раннього виходу та дубльованими ресурсами учасників, об’єднаними за користувачем, -який увійшов у систему, або відображуваним іменем. Передайте `--no-merge-duplicates`, щоб залишити сирі ресурси учасників -окремо, `--late-after-minutes`, щоб налаштувати визначення запізнення, і -`--early-before-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` записує вибрані вхідні дані, параметри експорту, записи конференції, +`manifest.json` фіксує вибраний вхід, параметри експорту, записи конференції, вихідні файли, лічильники, джерело токена, подію Calendar, якщо її було використано, і будь-які -попередження про часткове отримання. Передайте `--zip`, щоб також записати переносний архів поруч -із папкою. Передайте `--include-doc-bodies`, щоб експортувати пов’язаний транскрипт і -текст smart-note Google Docs через Google Drive `files.export`; для цього потрібен -новий вхід OAuth, який включає readonly scope Drive Meet. Без -`--include-doc-bodies` експорти включають лише метадані Meet і структуровані записи транскрипту. -Якщо Google повертає часткову помилку артефакту, наприклад помилку списку smart-note, -запису транскрипту або тіла документа Drive, summary і -manifest зберігають попередження замість збою всього експорту. +попередження про часткове отримання. Передайте `--zip`, щоб також записати портативний архів поряд +із папкою. Передайте `--include-doc-bodies`, щоб експортувати текст пов’язаних транскриптів і +розумних нотаток Google Docs через Google Drive `files.export`; для цього потрібен +новий вхід OAuth, який включає область доступу Drive Meet лише для читання. Без +`--include-doc-bodies` експорт містить лише метадані Meet і структуровані записи транскрипту. +Якщо Google повертає часткову помилку артефакту, як-от помилку списку розумних нотаток, +запису транскрипту або тіла документа Drive, зведення та +маніфест зберігають попередження замість того, щоб провалити весь експорт. Використовуйте `--dry-run`, щоб отримати ті самі дані артефактів/відвідуваності та надрукувати -JSON manifest без створення папки або ZIP. Це корисно перед записом +JSON маніфесту без створення папки чи ZIP. Це корисно перед записом великого експорту або коли агенту потрібні лише лічильники, вибрані записи та попередження. -Агенти також можуть створити той самий bundle через інструмент `google_meet`: +Агенти також можуть створити той самий пакет через інструмент `google_meet`: ```json { @@ -736,9 +818,9 @@ JSON manifest без створення папки або ZIP. Це корисн } ``` -Задайте `"dryRun": true`, щоб повернути лише export manifest і пропустити запис файлів. +Установіть `"dryRun": true`, щоб повернути лише маніфест експорту та пропустити запис файлів. -Агенти також можуть створити кімнату на основі API з явною політикою доступу: +Агенти також можуть створити кімнату з підтримкою API з явною політикою доступу: ```json { @@ -758,7 +840,7 @@ JSON manifest без створення папки або ZIP. Це корисн } ``` -Для валідації listen-first агенти повинні використовувати `test_listen`, перш ніж стверджувати, що +Для перевірки з пріоритетом прослуховування агенти мають використовувати `test_listen`, перш ніж заявляти, що зустріч корисна: ```json @@ -770,7 +852,7 @@ JSON manifest без створення папки або ZIP. Це корисн } ``` -Запустіть захищений live smoke для реальної збереженої зустрічі: +Запустіть захищений live smoke проти реальної збереженої зустрічі: ```bash OPENCLAW_LIVE_TEST=1 \ @@ -778,31 +860,33 @@ OPENCLAW_GOOGLE_MEET_LIVE_MEETING=https://meet.google.com/abc-defg-hij \ pnpm test:live -- extensions/google-meet/google-meet.live.test.ts ``` -Запустіть live browser probe у режимі listen-first для зустрічі, де хтось -говоритиме за доступних субтитрів 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_LIVE_TEST=1` вмикає захищені live тести. - `OPENCLAW_GOOGLE_MEET_LIVE_MEETING` вказує на збережену URL-адресу Meet, код або `spaces/{id}`. -- `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID` надає OAuth - client id. +- `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID` надає + ідентифікатор клієнта OAuth. - `OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN` або `GOOGLE_MEET_REFRESH_TOKEN` надає - refresh token. + токен оновлення. - Необов’язково: `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET`, `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN` і - `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` використовують ті самі fallback-назви + `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`. Пошуку в календарі потрібен `https://www.googleapis.com/auth/calendar.events.readonly`. Експорту тіла документа Drive потрібен +`https://www.googleapis.com/auth/meetings.conference.media.readonly`. Пошук у календарі +потребує `https://www.googleapis.com/auth/calendar.events.readonly`. Експорт +тіла документа Drive потребує `https://www.googleapis.com/auth/drive.meet.readonly`. Створіть новий простір Meet: @@ -811,13 +895,13 @@ openclaw googlemeet test-listen https://meet.google.com/abc-defg-hij --transport openclaw googlemeet create ``` -Команда друкує новий `meeting uri`, джерело та join session. З обліковими даними OAuth +Команда друкує нові `meeting uri`, джерело та сеанс приєднання. З обліковими даними OAuth вона використовує офіційний Google Meet API. Без облікових даних OAuth вона -використовує профіль браузера закріпленого Chrome Node, у який виконано вхід, як fallback. Агенти можуть +використовує профіль браузера з виконаним входом закріпленого вузла Chrome як резервний варіант. Агенти можуть використовувати інструмент `google_meet` з `action: "create"`, щоб створити й приєднатися за один -крок. Для створення лише URL-адреси передайте `"join": false`. +крок. Для створення лише URL передайте `"join": false`. -Приклад JSON-виводу з браузерного fallback: +Приклад JSON-виводу з резервного варіанта через браузер: ```json { @@ -837,7 +921,7 @@ openclaw googlemeet create } ``` -Якщо браузерний fallback натрапляє на вхід у Google або блокування дозволів Meet перед тим, як +Якщо резервний варіант через браузер натрапляє на вхід Google або блокування дозволів Meet до того, як зможе створити URL-адресу, метод Gateway повертає невдалу відповідь, а інструмент `google_meet` повертає структуровані подробиці замість простого рядка: @@ -858,10 +942,10 @@ openclaw googlemeet create ``` Коли агент бачить `manualActionRequired: true`, він має повідомити -`manualActionMessage` разом із контекстом browser node/tab і припинити відкривати нові +`manualActionMessage` разом із контекстом вузла/вкладки браузера та припинити відкривати нові вкладки Meet, доки оператор не завершить крок у браузері. -Приклад JSON-виводу з API create: +Приклад JSON-виводу зі створення через API: ```json { @@ -882,21 +966,21 @@ openclaw googlemeet create } ``` -Створення Meet за замовчуванням приєднує до нього. Транспорт Chrome або Chrome-node усе ще -потребує профілю Google Chrome, у який виконано вхід, щоб приєднатися через браузер. Якщо з -профілю виконано вихід, OpenClaw повідомляє `manualActionRequired: true` або -помилку браузерного fallback і просить оператора завершити вхід у Google перед +Створення Meet за замовчуванням приєднує до зустрічі. Транспорт Chrome або Chrome-node все одно +потребує профілю Google Chrome з виконаним входом, щоб приєднатися через браузер. Якщо +з профілю виконано вихід, OpenClaw повідомляє `manualActionRequired: true` або +помилку резервного варіанта через браузер і просить оператора завершити вхід Google перед повторною спробою. -Задавайте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud -project, OAuth principal і учасники зустрічі зареєстровані в Google +Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud +проєкт, суб’єкт OAuth і учасники зустрічі зареєстровані в Google Workspace Developer Preview Program для Meet media APIs. ## Конфігурація -Звичайному шляху агента Chrome потрібні лише увімкнений plugin, BlackHole, SoX, -ключ realtime-провайдера транскрибування та налаштований OpenClaw TTS provider. -OpenAI є стандартним провайдером транскрибування; задайте `realtime.provider: "google"`, +Загальний шлях агента Chrome потребує лише ввімкненого plugin, BlackHole, SoX, +ключа провайдера транскрипції в реальному часі та налаштованого провайдера TTS OpenClaw. +OpenAI є провайдером транскрипції за замовчуванням; установіть `realtime.provider: "google"`, щоб використовувати Google Gemini Live для режиму `bidi`: ```bash @@ -906,7 +990,7 @@ export OPENAI_API_KEY=sk-... export GEMINI_API_KEY=... ``` -Установіть конфігурацію Plugin у `plugins.entries.google-meet.config`: +Налаштуйте конфігурацію plugin у `plugins.entries.google-meet.config`: ```json5 { @@ -921,58 +1005,59 @@ export GEMINI_API_KEY=... } ``` -Стандартні значення: +Типові значення: - `defaultTransport: "chrome"` -- `defaultMode: "agent"` (`"realtime"` приймається лише як застарілий псевдонім - сумісності для `"agent"`; нові виклики інструментів мають указувати `"agent"`) -- `chromeNode.node`: необов’язковий ідентифікатор, назва або IP вузла для `chrome-node` +- `defaultMode: "agent"` (`"realtime"` приймається лише як застарілий + сумісний псевдонім для `"agent"`; нові виклики інструментів мають указувати `"agent"`) +- `chromeNode.node`: необов’язковий id/ім’я/IP Node для `chrome-node` - `chrome.audioBackend: "blackhole-2ch"` - `chrome.guestName: "OpenClaw Agent"`: ім’я, що використовується на екрані гостя Meet без входу в обліковий запис -- `chrome.autoJoin: true`: найкраща можлива автоматична підстановка імені гостя - та натискання Join Now через браузерну автоматизацію OpenClaw на `chrome-node` +- `chrome.autoJoin: true`: найкраща спроба заповнити ім’я гостя й натиснути Join Now + через браузерну автоматизацію OpenClaw на `chrome-node` - `chrome.reuseExistingTab: true`: активувати наявну вкладку Meet замість відкриття дублікатів -- `chrome.waitForInCallMs: 20000`: чекати, доки вкладка Meet повідомить, що - вона у виклику, перед запуском вступного голосового відгуку +- `chrome.waitForInCallMs: 20000`: чекати, доки вкладка Meet повідомить, що вона у виклику, + перш ніж буде запущено вступну фразу зворотного мовлення - `chrome.audioFormat: "pcm16-24khz"`: аудіоформат пари команд. Використовуйте - `"g711-ulaw-8khz"` лише для застарілих або користувацьких пар команд, які все - ще видають телефонний аудіопотік. + `"g711-ulaw-8khz"` лише для застарілих/користувацьких пар команд, які досі видають + телефонний звук. +- `chrome.audioBufferBytes: 4096`: буфер обробки SoX для згенерованих аудіокоманд + пари команд Chrome. Це половина стандартного буфера SoX у 8192 байти, + що зменшує типову затримку каналу, залишаючи можливість збільшити її на зайнятих хостах. + Значення нижче мінімуму SoX обмежуються 17 байтами. - `chrome.audioInputCommand`: команда SoX, що читає з CoreAudio `BlackHole 2ch` - і записує аудіо у форматі `chrome.audioFormat` -- `chrome.audioOutputCommand`: команда SoX, що читає аудіо у форматі - `chrome.audioFormat` і записує до CoreAudio `BlackHole 2ch` -- `chrome.bargeInInputCommand`: необов’язкова команда локального мікрофона, яка - записує підписаний 16-бітний little-endian моно PCM для виявлення втручання - людини, поки активне відтворення асистента. Наразі це застосовується до - розміщеного в Gateway мосту пари команд `chrome`. -- `chrome.bargeInRmsThreshold: 650`: рівень RMS, який вважається людським - перериванням у `chrome.bargeInInputCommand` -- `chrome.bargeInPeakThreshold: 2500`: піковий рівень, який вважається людським - перериванням у `chrome.bargeInInputCommand` + і записує аудіо у `chrome.audioFormat` +- `chrome.audioOutputCommand`: команда SoX, що читає аудіо у `chrome.audioFormat` + і записує в CoreAudio `BlackHole 2ch` +- `chrome.bargeInInputCommand`: необов’язкова команда локального мікрофона, яка записує + 16-бітний little-endian моно PCM зі знаком для виявлення втручання людини, поки + активне відтворення асистента. Наразі це застосовується до розміщеного на Gateway + мосту пари команд `chrome`. +- `chrome.bargeInRmsThreshold: 650`: RMS-рівень, що вважається людським + перериванням на `chrome.bargeInInputCommand` +- `chrome.bargeInPeakThreshold: 2500`: піковий рівень, що вважається людським + перериванням на `chrome.bargeInInputCommand` - `chrome.bargeInCooldownMs: 900`: мінімальна затримка між повторними очищеннями людського переривання -- `mode: "agent"`: стандартний режим голосового відгуку. Мовлення учасників - транскрибується налаштованим провайдером транскрипції в реальному часі, - надсилається налаштованому агенту OpenClaw у сесії під-агента для окремої - зустрічі та озвучується назад через звичайне середовище виконання TTS OpenClaw. -- `mode: "bidi"`: резервний прямий двонапрямний режим моделі реального часу. - Голосовий провайдер реального часу відповідає на мовлення учасників напряму - і може викликати `openclaw_agent_consult` для глибших відповідей із підтримкою - інструментів. -- `mode: "transcribe"`: режим лише спостереження без мосту голосового відгуку. -- `realtime.provider: "openai"`: ідентифікатор провайдера, який режим `agent` - використовує для транскрипції в реальному часі, а режим `bidi` — для голосу - в реальному часі. +- `mode: "agent"`: типовий режим зворотного мовлення. Мовлення учасника транскрибується + налаштованим провайдером realtime-транскрипції, надсилається налаштованому + агенту OpenClaw у сесії підагентa для окремої зустрічі й озвучується через + звичайний runtime OpenClaw TTS. +- `mode: "bidi"`: резервний прямий двонапрямний режим realtime-моделі. Провайдер + realtime-голосу відповідає на мовлення учасника напряму й може викликати + `openclaw_agent_consult` для глибших відповідей або відповідей із підтримкою інструментів. +- `mode: "transcribe"`: режим лише спостереження без мосту зворотного мовлення. +- `realtime.provider: "openai"`: id провайдера, який режим `agent` використовує для realtime + транскрипції, а режим `bidi` — для realtime-голосу. - `realtime.toolPolicy: "safe-read-only"` -- `realtime.instructions`: короткі усні відповіді з використанням +- `realtime.instructions`: короткі усні відповіді, з `openclaw_agent_consult` для глибших відповідей -- `realtime.introMessage`: коротка усна перевірка готовності, коли міст - реального часу підключається; установіть значення `""`, щоб приєднуватися - без звуку -- `realtime.agentId`: необов’язковий ідентифікатор агента OpenClaw для - `openclaw_agent_consult`; стандартне значення — `main` +- `realtime.introMessage`: коротка усна перевірка готовності, коли realtime-міст + підключається; установіть `""`, щоб приєднатися мовчки +- `realtime.agentId`: необов’язковий id агента OpenClaw для + `openclaw_agent_consult`; типово `main` Необов’язкові перевизначення: @@ -1040,12 +1125,12 @@ export GEMINI_API_KEY=... } ``` -Стандартне значення `voiceCall.enabled` — `true`; з транспортом Twilio він -делегує фактичний виклик PSTN, DTMF і вступне привітання до Voice Call Plugin. -Voice Call відтворює послідовність DTMF перед відкриттям медіапотоку реального -часу, а потім використовує збережений вступний текст як початкове привітання -в реальному часі. Якщо `voice-call` не ввімкнено, Google Meet усе ще може -перевірити та записати план набору, але не може здійснити виклик Twilio. +`voiceCall.enabled` типово має значення `true`; з транспортом Twilio він делегує +фактичний виклик PSTN, DTMF і вступне привітання Plugin Voice Call. Voice Call +відтворює послідовність DTMF перед відкриттям realtime медіапотоку, а потім використовує +збережений вступний текст як початкове realtime привітання. Якщо `voice-call` не +увімкнено, Google Meet усе ще може перевірити й записати план набору, але не може +здійснити виклик Twilio. ## Інструмент @@ -1063,40 +1148,40 @@ Voice Call відтворює послідовність DTMF перед від Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. Використовуйте `transport: "chrome-node"`, коли Chrome працює на спареному Node, наприклад у Parallels VM. В обох випадках провайдери моделей і `openclaw_agent_consult` працюють на -хості Gateway, тому облікові дані моделей залишаються там. Із типовим `mode: "agent"` -провайдер транскрипції в реальному часі обробляє прослуховування, налаштований агент OpenClaw +хості Gateway, тож облікові дані моделей залишаються там. Із типовим `mode: "agent"` +провайдер realtime-транскрипції відповідає за прослуховування, налаштований агент OpenClaw створює відповідь, а звичайний OpenClaw TTS озвучує її в Meet. Використовуйте -`mode: "bidi"`, коли хочете, щоб голосова модель реального часу відповідала напряму. -Сире значення `mode: "realtime"` і надалі приймається як застарілий сумісний псевдонім для -`mode: "agent"`, але більше не рекламується в схемі інструментів агента. +`mode: "bidi"`, коли потрібно, щоб realtime-голосова модель відповідала напряму. +Сире `mode: "realtime"` і далі приймається як застарілий сумісний псевдонім для +`mode: "agent"`, але більше не рекламується в схемі інструмента агента. -Використовуйте `action: "status"`, щоб перелічити активні сеанси або перевірити ID сеансу. Використовуйте -`action: "speak"` із `sessionId` і `message`, щоб агент реального часу -негайно заговорив. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сеанс, +Використовуйте `action: "status"`, щоб перелічити активні сесії або переглянути ID сесії. Використовуйте +`action: "speak"` із `sessionId` і `message`, щоб realtime-агент +заговорив негайно. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сесію, запустити відому фразу й повернути стан `inCall`, коли хост Chrome може -повідомити про нього. `test_speech` завжди примусово встановлює `mode: "agent"` і завершується помилкою, якщо його попросити -запуститися в `mode: "transcribe"`, оскільки сеанси лише для спостереження навмисно не можуть -відтворювати мовлення. Його результат `speechOutputVerified` базується на збільшенні байтів аудіовиходу в реальному часі -під час цього тестового виклику, тому повторно використаний сеанс зі старішим аудіо -не зараховується як нова успішна перевірка мовлення. Використовуйте `action: "leave"`, щоб позначити -сеанс завершеним. +про нього повідомити. `test_speech` завжди примусово встановлює `mode: "agent"` і завершується помилкою, якщо його просять +працювати в `mode: "transcribe"`, бо сесії лише спостереження навмисно не можуть +видавати мовлення. Його результат `speechOutputVerified` базується на збільшенні байтів realtime аудіовиходу +під час цього тестового виклику, тому повторно використана сесія зі старішим аудіо +не зараховується як свіжа успішна перевірка мовлення. Використовуйте `action: "leave"`, щоб позначити +сесію завершеною. -`status` включає стан Chrome, коли він доступний: +`status` містить стан Chrome, коли він доступний: -- `inCall`: Chrome, схоже, перебуває всередині виклику Meet -- `micMuted`: приблизний стан мікрофона Meet +- `inCall`: схоже, Chrome перебуває всередині виклику Meet +- `micMuted`: найкраща спроба визначити стан мікрофона Meet - `manualActionRequired` / `manualActionReason` / `manualActionMessage`: профілю браузера потрібні ручний вхід, допуск хостом Meet, дозволи або відновлення керування браузером, перш ніж мовлення зможе працювати - `speechReady` / `speechBlockedReason` / `speechBlockedMessage`: чи - кероване мовлення Chrome зараз дозволене. `speechReady: false` означає, що OpenClaw не + дозволено кероване мовлення Chrome зараз. `speechReady: false` означає, що OpenClaw не надіслав вступну/тестову фразу в аудіоміст. -- `providerConnected` / `realtimeReady`: стан голосового мосту реального часу +- `providerConnected` / `realtimeReady`: стан realtime голосового мосту - `lastInputAt` / `lastOutputAt`: останнє аудіо, отримане з мосту або надіслане до нього - `audioOutputRouted` / `audioOutputDeviceLabel`: чи медіавивід вкладки Meet - було активно спрямовано на пристрій BlackHole, який використовує міст -- `lastSuppressedInputAt` / `suppressedInputBytes`: вхід local loopback, проігнорований під час - активного відтворення помічником + був активно спрямований на пристрій BlackHole, який використовує міст +- `lastSuppressedInputAt` / `suppressedInputBytes`: local loopback вхід, проігнорований під час + активного відтворення асистента ```json { @@ -1108,45 +1193,58 @@ VM. В обох випадках провайдери моделей і `opencla ## Режими Agent і Bidi -Режим Chrome `agent` оптимізований для поведінки "мій агент на зустрічі". Провайдер -транскрипції в реальному часі чує аудіо зустрічі, фінальні транскрипти учасників +Режим Chrome `agent` оптимізовано для поведінки «мій агент присутній на зустрічі». Провайдер +realtime-транскрипції чує аудіо зустрічі, фінальні транскрипти учасників спрямовуються через налаштованого агента OpenClaw, а відповідь -озвучується через звичайне середовище виконання OpenClaw TTS. Установіть `mode: "bidi"`, коли хочете, -щоб голосова модель реального часу відповідала напряму. -Сусідні фінальні фрагменти транскрипту об’єднуються перед консультацією, щоб один усний -хід не створював кілька застарілих часткових відповідей. Вхід реального часу також -пригнічується, поки аудіо помічника в черзі ще відтворюється, -а нещодавні схожі на помічника відлуння транскрипту ігноруються перед консультацією агента, +озвучується через звичайний runtime OpenClaw TTS. Установіть `mode: "bidi"`, коли потрібно, +щоб realtime-голосова модель відповідала напряму. +Сусідні фінальні фрагменти транскрипта об’єднуються перед консультацією, щоб один усний +хід не створював кілька застарілих часткових відповідей. Realtime вхід також +приглушується, поки поставлене в чергу аудіо асистента ще відтворюється, +а нещодавні схожі на асистентські відлуння транскрипта ігноруються перед консультацією агента, щоб local loopback BlackHole не змушував агента відповідати на власне мовлення. -| Режим | Хто визначає відповідь | Шлях мовленнєвого виводу | Коли використовувати | +| Режим | Хто визначає відповідь | Шлях виводу мовлення | Коли використовувати | | ------- | ----------------------------- | -------------------------------------- | ----------------------------------------------------- | -| `agent` | Налаштований агент OpenClaw | Звичайне середовище виконання OpenClaw TTS | Потрібна поведінка "мій агент на зустрічі" | -| `bidi` | Голосова модель реального часу | Аудіовідповідь голосового провайдера реального часу | Потрібен розмовний голосовий цикл із найменшою затримкою | +| `agent` | Налаштований агент OpenClaw | Звичайний runtime OpenClaw TTS | Потрібна поведінка «мій агент присутній на зустрічі» | +| `bidi` | Realtime-голосова модель | Аудіовідповідь realtime-голосового провайдера | Потрібен голосовий діалоговий цикл із найнижчою затримкою | -У режимі `bidi`, коли моделі реального часу потрібні глибші міркування, актуальна інформація або звичайні інструменти OpenClaw, вона може викликати `openclaw_agent_consult`. +У режимі `bidi`, коли realtime-моделі потрібні глибше міркування, актуальна +інформація або звичайні інструменти OpenClaw, вона може викликати `openclaw_agent_consult`. -Інструмент консультації запускає звичайного агента OpenClaw у фоновому режимі з контекстом нещодавнього транскрипту зустрічі та повертає стислу усну відповідь. У режимі `agent` OpenClaw надсилає цю відповідь безпосередньо до середовища виконання TTS; у режимі `bidi` голосова модель реального часу може озвучити результат консультації назад у зустрічі. Він використовує той самий спільний механізм консультацій, що й Голосовий виклик. +Інструмент консультації запускає звичайного агента OpenClaw за лаштунками з контекстом +нещодавнього транскрипта зустрічі й повертає стислу усну відповідь. У режимі `agent` +OpenClaw надсилає цю відповідь напряму в runtime TTS; у режимі `bidi` +realtime-голосова модель може озвучити результат консультації назад у зустріч. Він використовує +той самий спільний механізм консультації, що й Voice Call. -За замовчуванням консультації виконуються для агента `main`. Установіть `realtime.agentId`, коли лінія Meet має консультуватися з виділеним робочим простором агента OpenClaw, типовими параметрами моделі, політикою інструментів, пам’яттю та історією сесій. +Типово консультації виконуються для агента `main`. Установіть `realtime.agentId`, коли +доріжка Meet має консультуватися з виділеним робочим простором агента OpenClaw, типовими налаштуваннями моделі, +політикою інструментів, пам’яттю та історією сесії. -Консультації в режимі агента використовують ключ сесії `agent::subagent:google-meet:` для кожної зустрічі, щоб подальші запитання зберігали контекст зустрічі, успадковуючи звичайну політику агента від налаштованого агента. +Консультації в режимі агента використовують ключ сесії `agent::subagent:google-meet:` +для кожної зустрічі, щоб подальші запитання зберігали контекст зустрічі й водночас успадковували звичайну +політику агента від налаштованого агента. `realtime.toolPolicy` керує запуском консультації: -- `safe-read-only`: відкрити інструмент консультації та обмежити звичайного агента до `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і `memory_get`. -- `owner`: відкрити інструмент консультації та дозволити звичайному агенту використовувати звичайну політику інструментів агента. -- `none`: не відкривати інструмент консультації для голосової моделі реального часу. +- `safe-read-only`: надати інструмент консультації й обмежити звичайного агента + `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і + `memory_get`. +- `owner`: надати інструмент консультації й дозволити звичайному агенту використовувати звичайну + політику інструментів агента. +- `none`: не надавати інструмент консультації realtime-голосовій моделі. -Ключ сесії консультації обмежений окремою сесією Meet, тому подальші виклики консультації можуть повторно використовувати попередній контекст консультації під час тієї самої зустрічі. +Ключ сесії консультації обмежено сесією Meet, тому подальші виклики консультації +можуть повторно використовувати попередній контекст консультації під час тієї самої зустрічі. -Щоб примусово виконати усну перевірку готовності після того, як Chrome повністю приєднався до виклику: +Щоб примусово запустити усну перевірку готовності після того, як Chrome повністю приєднався до виклику: ```bash openclaw googlemeet speak meet_... "Say exactly: I'm here and listening." ``` -Для повної перевірки приєднання й озвучення: +Для повної smoke-перевірки приєднання й мовлення: ```bash openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ @@ -1156,7 +1254,7 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ ## Контрольний список live-тесту -Використовуйте цю послідовність, перш ніж передати зустріч автономному агенту: +Використовуйте цю послідовність перед передаванням зустрічі автономному агенту: ```bash openclaw googlemeet setup @@ -1169,12 +1267,15 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ Очікуваний стан Chrome-node: - `googlemeet setup` повністю зелений. -- `googlemeet setup` містить `chrome-node-connected`, коли Chrome-node є типовим транспортом або вузол закріплено. -- `nodes status` показує вибраний вузол як підключений. -- Вибраний вузол оголошує і `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, наприклад VM Parallels macOS, це найкоротша безпечна перевірка після оновлення Gateway або VM: +Для віддаленого хоста Chrome, наприклад Parallels macOS VM, це найкоротша +безпечна перевірка після оновлення Gateway або VM: ```bash openclaw googlemeet setup @@ -1185,9 +1286,11 @@ openclaw nodes invoke \ --params '{"action":"setup"}' ``` -Це підтверджує, що Plugin Gateway завантажено, вузол VM підключений із поточним токеном, а аудіоміст Meet доступний до того, як агент відкриє реальну вкладку зустрічі. +Це доводить, що Plugin Gateway завантажено, Node VM підключено з +поточним токеном, а аудіоміст Meet доступний до того, як агент відкриє +вкладку справжньої зустрічі. -Для перевірки Twilio використовуйте зустріч, яка надає дані для телефонного підключення: +Для smoke-перевірки Twilio використовуйте зустріч, яка надає дані телефонного дозвону: ```bash openclaw googlemeet setup @@ -1199,19 +1302,19 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ Очікуваний стан Twilio: -- `googlemeet setup` включає зелені перевірки `twilio-voice-call-plugin`, +- `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-міст із початковим привітанням, поставленим у чергу. +- `openclaw logs --follow` показує, що DTMF TwiML віддано перед realtime TwiML, а потім + realtime-міст із поставленим у чергу початковим привітанням. - `googlemeet leave ` завершує делегований голосовий виклик. ## Усунення несправностей ### Агент не бачить інструмент Google Meet -Переконайтеся, що плагін увімкнено в конфігурації Gateway, і перезавантажте Gateway: +Підтвердьте, що Plugin увімкнено в конфігурації Gateway, і перезавантажте Gateway: ```bash openclaw plugins list | grep google-meet @@ -1219,18 +1322,18 @@ openclaw googlemeet setup ``` Якщо ви щойно відредагували `plugins.entries.google-meet`, перезапустіть або перезавантажте Gateway. -Запущений агент бачить лише інструменти плагінів, зареєстровані поточним процесом +Запущений агент бачить лише інструменти Plugin, зареєстровані поточним процесом Gateway. -На хостах Gateway не з macOS агентський інструмент `google_meet` лишається видимим, -але локальні дії talk-back у Chrome блокуються до потрапляння в аудіоміст. -Локальний Chrome talk-back audio зараз залежить від macOS `BlackHole 2ch`, тому -Linux-агентам слід використовувати `mode: "transcribe"`, набір через Twilio або хост macOS -`chrome-node` замість стандартного локального шляху агента Chrome. +На хостах Gateway не з macOS інструмент `google_meet`, видимий агенту, залишається доступним, +але локальні дії Chrome talk-back блокуються до потрапляння в аудіоміст. +Локальний Chrome talk-back audio наразі залежить від macOS `BlackHole 2ch`, тому +агенти Linux мають використовувати `mode: "transcribe"`, Twilio dial-in або хост macOS +`chrome-node` замість стандартного шляху локального агента Chrome. -### Немає підключеного вузла з підтримкою Google Meet +### Немає підключеного Node із підтримкою Google Meet -На хості вузла виконайте: +На хості Node виконайте: ```bash openclaw plugins enable google-meet @@ -1239,7 +1342,7 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host --port 18789 --display-name parallels-macos ``` -На хості Gateway схваліть вузол і перевірте команди: +На хості Gateway схваліть Node і перевірте команди: ```bash openclaw devices list @@ -1247,8 +1350,8 @@ openclaw devices approve openclaw nodes status ``` -Вузол має бути підключений і містити `googlemeet.chrome` разом із `browser.proxy`. -Конфігурація Gateway має дозволяти ці команди вузла: +Node має бути підключений і показувати `googlemeet.chrome` разом із `browser.proxy`. +Конфігурація Gateway має дозволяти ці команди Node: ```json5 { @@ -1261,7 +1364,7 @@ openclaw nodes status ``` Якщо `googlemeet setup` не проходить `chrome-node-connected` або журнал Gateway повідомляє -`gateway token mismatch`, перевстановіть або перезапустіть вузол із поточним токеном Gateway. +`gateway token mismatch`, перевстановіть або перезапустіть Node з поточним токеном Gateway. Для LAN Gateway це зазвичай означає: ```bash @@ -1273,7 +1376,7 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ --force ``` -Потім перезавантажте службу вузла й повторно виконайте: +Потім перезавантажте сервіс Node і повторно виконайте: ```bash openclaw googlemeet setup @@ -1282,53 +1385,54 @@ openclaw nodes status --connected ### Браузер відкривається, але агент не може приєднатися -Виконайте `googlemeet test-listen` для підключень лише для спостереження або `googlemeet test-speech` -для realtime-підключень, а потім перевірте повернений стан Chrome. Якщо будь-яка з перевірок +Запустіть `googlemeet test-listen` для приєднань лише для спостереження або `googlemeet test-speech` +для realtime-приєднань, а потім перевірте повернений стан Chrome. Якщо будь-яка перевірка повідомляє `manualActionRequired: true`, покажіть `manualActionMessage` оператору і припиніть повторні спроби, доки дія в браузері не буде завершена. -Поширені ручні дії: +Типові ручні дії: -- Увійдіть у профіль Chrome. -- Допустіть гостя з облікового запису хоста Meet. -- Надайте Chrome дозволи на мікрофон/камеру, коли з’явиться нативний запит дозволу Chrome. -- Закрийте або виправте завислий діалог дозволів Meet. +- Увійти в профіль Chrome. +- Допустити гостя з облікового запису хоста Meet. +- Надати Chrome дозволи на мікрофон/камеру, коли з’явиться нативний запит дозволів + Chrome. +- Закрити або виправити завислий діалог дозволів Meet. Не повідомляйте "not signed in" лише тому, що Meet показує "Do you want people to hear you in the meeting?" Це проміжний екран вибору аудіо Meet; OpenClaw натискає **Use microphone** через автоматизацію браузера, коли це доступно, і продовжує -очікувати реальний стан зустрічі. Для browser fallback лише для створення OpenClaw -може натиснути **Continue without microphone**, бо створення URL не потребує +чекати на справжній стан зустрічі. Для резервного варіанта браузера лише для створення OpenClaw +може натиснути **Continue without microphone**, оскільки створення URL не потребує realtime-аудіошляху. ### Не вдається створити зустріч -`googlemeet create` спершу використовує endpoint Google Meet API `spaces.create`, -коли налаштовано OAuth-облікові дані. Без OAuth-облікових даних він повертається -до закріпленого браузера Chrome node. Перевірте: +`googlemeet create` спочатку використовує endpoint Google Meet API `spaces.create`, +коли налаштовано облікові дані OAuth. Без облікових даних OAuth він переходить до +резервного браузера закріпленого Chrome Node. Підтвердьте: -- Для створення через API: `oauth.clientId` і `oauth.refreshToken` налаштовані, +- Для створення через API: налаштовано `oauth.clientId` і `oauth.refreshToken`, або наявні відповідні змінні середовища `OPENCLAW_GOOGLE_MEET_*`. -- Для створення через API: refresh token було випущено після додавання підтримки створення. - У старіших токенах може бракувати scope `meetings.space.created`; повторно виконайте - `openclaw googlemeet auth login --json` і оновіть конфігурацію плагіна. -- Для browser fallback: `defaultTransport: "chrome-node"` і - `chromeNode.node` вказують на підключений вузол із `browser.proxy` і +- Для створення через API: refresh token було створено після додавання підтримки + створення. Старішим токенам може бракувати scope `meetings.space.created`; повторно виконайте + `openclaw googlemeet auth login --json` і оновіть конфігурацію Plugin. +- Для резервного варіанта браузера: `defaultTransport: "chrome-node"` і + `chromeNode.node` вказують на підключений Node із `browser.proxy` і `googlemeet.chrome`. -- Для browser fallback: профіль OpenClaw Chrome на цьому вузлі виконано вхід - у Google і він може відкрити `https://meet.google.com/new`. -- Для browser fallback: повторні спроби повторно використовують наявну вкладку `https://meet.google.com/new` - або вкладку запиту облікового запису Google перед відкриттям нової вкладки. Якщо час очікування агента спливає, - повторіть виклик інструмента замість ручного відкриття ще однієї вкладки Meet. -- Для browser fallback: якщо інструмент повертає `manualActionRequired: true`, використовуйте +- Для резервного варіанта браузера: профіль OpenClaw Chrome на цьому Node увійшов + у Google і може відкрити `https://meet.google.com/new`. +- Для резервного варіанта браузера: повторні спроби повторно використовують наявну вкладку + `https://meet.google.com/new` або вкладку запиту облікового запису Google перед відкриттям нової вкладки. Якщо агент отримує timeout, + повторіть виклик інструмента, а не відкривайте вручну іншу вкладку Meet. +- Для резервного варіанта браузера: якщо інструмент повертає `manualActionRequired: true`, використовуйте повернені `browser.nodeId`, `browser.targetId`, `browserUrl` і - `manualActionMessage`, щоб скерувати оператора. Не повторюйте спроби в циклі, доки цю + `manualActionMessage`, щоб зорієнтувати оператора. Не повторюйте спроби в циклі, доки цю дію не завершено. -- Для browser fallback: якщо Meet показує "Do you want people to hear you in the +- Для резервного варіанта браузера: якщо Meet показує "Do you want people to hear you in the meeting?", залиште вкладку відкритою. OpenClaw має натиснути **Use microphone** або, для - fallback лише для створення, **Continue without microphone** через автоматизацію браузера - і продовжити очікування згенерованого URL Meet. Якщо він не може, помилка має згадувати - `meet-audio-choice-required`, а не `google-login-required`. + резервного варіанта лише для створення, **Continue without microphone** через автоматизацію + браузера і продовжити чекати на згенерований URL Meet. Якщо це неможливо, у + помилці має згадуватися `meet-audio-choice-required`, а не `google-login-required`. ### Агент приєднується, але не говорить @@ -1340,18 +1444,19 @@ openclaw googlemeet doctor ``` Використовуйте `mode: "agent"` для звичайного шляху STT -> агент OpenClaw -> TTS talk-back, -або `mode: "bidi"` для прямого запасного варіанту realtime-голосу. `mode: "transcribe"` +або `mode: "bidi"` для прямого резервного realtime-голосу. `mode: "transcribe"` навмисно не запускає міст talk-back. Для налагодження лише спостереження -виконайте `openclaw googlemeet status --json ` після того, як учасники заговорять, +запустіть `openclaw googlemeet status --json ` після того, як учасники заговорять, і перевірте `captioning`, `transcriptLines` і `lastCaptionText`. Якщо `inCall` дорівнює true, але `transcriptLines` залишається `0`, субтитри Meet можуть бути вимкнені, ніхто -не говорив після встановлення спостерігача, UI Meet змінився або live -captions недоступні для мови/облікового запису зустрічі. +не говорив після встановлення спостерігача, UI Meet змінився або живі +субтитри недоступні для мови/облікового запису зустрічі. `googlemeet test-speech` завжди перевіряє realtime-шлях і повідомляє, чи -байти виводу мосту були зафіксовані для цього виклику. Якщо `speechOutputVerified` є false і -`speechOutputTimedOut` є true, realtime-провайдер міг прийняти -висловлювання, але OpenClaw не побачив, що нові байти виводу дійшли до аудіомоста Chrome. +було помічено вихідні байти мосту для цього виклику. Якщо `speechOutputVerified` дорівнює false і +`speechOutputTimedOut` дорівнює true, realtime-провайдер міг прийняти +висловлювання, але OpenClaw не побачив, щоб нові вихідні байти дійшли до аудіомоста +Chrome. Також перевірте: @@ -1359,19 +1464,19 @@ captions недоступні для мови/облікового запису `OPENAI_API_KEY` або `GEMINI_API_KEY`. - `BlackHole 2ch` видимий на хості Chrome. - `sox` існує на хості Chrome. -- Мікрофон і динамік Meet маршрутизовані через віртуальний аудіошлях, який використовує - OpenClaw. `doctor` має показувати `meet output routed: yes` для локальних Chrome - realtime-підключень. +- Мікрофон і динамік Meet маршрутизуються через віртуальний аудіошлях, який використовує + OpenClaw. `doctor` має показувати `meet output routed: yes` для локальних realtime-приєднань + Chrome. -`googlemeet doctor [session-id]` виводить сеанс, вузол, стан перебування у виклику, -причину ручної дії, з’єднання realtime-провайдера, `realtimeReady`, активність -аудіовходу/виходу, останні аудіомітки часу, лічильники байтів і URL браузера. +`googlemeet doctor [session-id]` виводить сеанс, Node, стан у виклику, +причину ручної дії, підключення realtime-провайдера, `realtimeReady`, активність +аудіовходу/виходу, останні часові мітки аудіо, лічильники байтів і URL браузера. Використовуйте `googlemeet status [session-id] --json`, коли потрібен сирий JSON. Використовуйте `googlemeet doctor --oauth`, коли потрібно перевірити Google Meet OAuth refresh -без розкриття токенів; додайте `--meeting` або `--create-space`, коли також потрібне -підтвердження Google Meet API. +без розкриття токенів; додайте `--meeting` або `--create-space`, коли також потрібен +доказ Google Meet API. -Якщо час очікування агента сплив і ви бачите вже відкриту вкладку Meet, перевірте цю вкладку +Якщо агент отримав timeout і ви бачите вже відкриту вкладку Meet, перевірте цю вкладку без відкриття іншої: ```bash @@ -1382,19 +1487,19 @@ 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 був підключений. +Chrome Node. Вона не відкриває нову вкладку і не створює новий сеанс; вона повідомляє +поточний блокер, наприклад вхід, допуск, дозволи або стан вибору аудіо. +Команда CLI звертається до налаштованого Gateway, тому Gateway має бути запущений; +`chrome-node` також вимагає, щоб Chrome Node був підключений. ### Не проходять перевірки налаштування Twilio -`twilio-voice-call-plugin` не проходить, коли `voice-call` не дозволений або не ввімкнений. +`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` не проходить, коли backend Twilio не має account +SID, auth token або caller number. Задайте їх на хості Gateway: ```bash export TWILIO_ACCOUNT_SID=AC... @@ -1402,12 +1507,12 @@ 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 +exposure або коли `publicUrl` вказує на local loopback чи приватний мережевий простір. +Задайте `plugins.entries.voice-call.config.publicUrl` як URL публічного провайдера або +налаштуйте tunnel/Tailscale exposure для `voice-call`. -Loopback і приватні URL не є дійсними для callback-ів оператора. Не використовуйте +Loopback і приватні URL не є дійсними для carrier callbacks. Не використовуйте `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`. @@ -1430,8 +1535,8 @@ Loopback і приватні URL не є дійсними для callback-ів } ``` -Для локальної розробки використовуйте tunnel або експозицію Tailscale замість URL приватного -хоста: +Для локальної розробки використовуйте tunnel або Tailscale exposure замість приватного +URL хоста: ```json5 { @@ -1457,23 +1562,23 @@ openclaw voicecall setup openclaw voicecall smoke ``` -`voicecall smoke` за замовчуванням перевіряє лише готовність. Щоб виконати dry-run для конкретного номера: +`voicecall smoke` за замовчуванням перевіряє лише готовність. Щоб dry-run для конкретного номера: ```bash openclaw voicecall smoke --to "+15555550123" ``` -Додавайте `--yes` лише тоді, коли навмисно хочете здійснити live вихідний notify +Додавайте `--yes` лише тоді, коли навмисно хочете здійснити живий outbound notify call: ```bash openclaw voicecall smoke --to "+15555550123" --yes ``` -### Виклик Twilio починається, але ніколи не потрапляє в зустріч +### Виклик Twilio починається, але ніколи не входить у зустріч -Переконайтеся, що подія Meet містить дані телефонного підключення. Передайте точний dial-in -номер і PIN або власну DTMF-послідовність: +Підтвердьте, що подія Meet надає дані телефонного dial-in. Передайте точний dial-in +номер і PIN або власну послідовність DTMF: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij \ @@ -1488,75 +1593,34 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ Якщо телефонний виклик створено, але список учасників Meet ніколи не показує dial-in учасника: -- Виконайте `openclaw googlemeet doctor `, щоб підтвердити делегований Twilio - call ID, чи було поставлено 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 зустрічі правильна. -- Переконайтеся, що dial-in номер належить до того самого запрошення Meet і регіону, що й - PIN. -- Збільште `voiceCall.dtmfDelayMs`, якщо Meet відповідає повільно або транскрипт виклику - досі показує запит на PIN після надсилання DTMF. -- Якщо учасник приєднується, але ви не чуєте привітання, перевірте - `openclaw logs --follow` на наявність post-DTMF запиту `voicecall.speak` і - або відтворення TTS через media-stream, або запасний варіант Twilio ``. Якщо транскрипт виклику - досі містить "enter the meeting PIN", телефонна лінія ще не приєдналася - до кімнати Meet, тому учасники зустрічі не почують мовлення. +- Виконайте `openclaw googlemeet doctor `, щоб підтвердити делегований ID виклику Twilio, чи було поставлено 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, тому учасники зустрічі не почують мовлення. -Якщо Webhook не надходять, спершу налагодьте Plugin Voice Call: провайдер має -досягати `plugins.entries.voice-call.config.publicUrl` або налаштованого тунелю. -Див. [усунення несправностей голосових викликів](/uk/plugins/voice-call#troubleshooting). +Якщо webhooks не надходять, спершу діагностуйте плагін Voice Call: провайдер має досягати `plugins.entries.voice-call.config.publicUrl` або налаштованого тунелю. Див. [усунення несправностей голосових викликів](/uk/plugins/voice-call#troubleshooting). ## Примітки -Офіційний медіа API Google Meet орієнтований на отримання, тому для мовлення у -виклику Meet усе ще потрібен шлях учасника. Цей Plugin робить цю межу явною: -Chrome обробляє участь у браузері та локальну маршрутизацію аудіо; Twilio -обробляє участь через телефонний дозвін. +Офіційний медіа-API Google Meet орієнтований на отримання, тому мовлення в виклик Meet усе ще потребує шляху учасника. Цей плагін робить цю межу видимою: Chrome обробляє участь через браузер і маршрутизацію локального аудіо; Twilio обробляє участь через телефонне підключення. -Режими зворотного мовлення Chrome потребують `BlackHole 2ch` і одного з таких варіантів: +Режими talk-back Chrome потребують `BlackHole 2ch` плюс один із варіантів: -- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw володіє - мостом і передає аудіо у `chrome.audioFormat` між цими командами та вибраним - провайдером. Режим агента використовує транскрипцію в реальному часі плюс - звичайний TTS; режим bidi використовує голосового провайдера в реальному часі. - Типовий шлях Chrome — 24 кГц PCM16; 8 кГц G.711 mu-law залишається доступним - для застарілих пар команд. -- `chrome.audioBridgeCommand`: зовнішня команда мосту володіє всім локальним - аудіошляхом і має завершитися після запуску або перевірки свого демона. Це - допустимо лише для `bidi`, оскільки режим `agent` потребує прямого доступу до - пари команд для TTS. +- `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. -Для чистого дуплексного аудіо маршрутизуйте вихід Meet і мікрофон Meet через -окремі віртуальні пристрої або граф віртуальних пристроїв у стилі Loopback. -Один спільний пристрій BlackHole може повертати відлуння інших учасників назад -у виклик. +Для чистого дуплексного аудіо маршрутизуйте вихід Meet і мікрофон Meet через окремі віртуальні пристрої або граф віртуальних пристроїв у стилі Loopback. Один спільний пристрій BlackHole може повертати аудіо інших учасників назад у виклик. -З командною парою мосту Chrome `chrome.bargeInInputCommand` може слухати -окремий локальний мікрофон і очищати відтворення асистента, коли людина починає -говорити. Це тримає людське мовлення попереду виводу асистента навіть тоді, -коли спільний вхід BlackHole loopback тимчасово пригнічено під час відтворення -асистента. Як і `chrome.audioInputCommand` та `chrome.audioOutputCommand`, це -локальна команда, налаштована оператором. Використовуйте явний довірений шлях -команди або список аргументів і не спрямовуйте її на скрипти з недовірених -розташувань. +З командно-парним мостом Chrome `chrome.bargeInInputCommand` може слухати окремий локальний мікрофон і очищати відтворення асистента, коли людина починає говорити. Це утримує людське мовлення попереду виводу асистента, навіть коли спільний вхід loopback BlackHole тимчасово приглушений під час відтворення асистента. Як і `chrome.audioInputCommand` та `chrome.audioOutputCommand`, це локальна команда, налаштована оператором. Використовуйте явний довірений шлях до команди або список аргументів і не спрямовуйте її на скрипти з недовірених розташувань. -`googlemeet speak` запускає активний аудіоміст зворотного мовлення для сеансу -Chrome. `googlemeet leave` зупиняє цей міст. Для сеансів Twilio, делегованих -через Plugin Voice Call, `leave` також завершує базовий голосовий виклик. -Використовуйте `googlemeet end-active-conference`, коли також потрібно закрити -активну конференцію Google Meet для простору, керованого API. +`googlemeet speak` запускає активний аудіоміст talk-back для сеансу Chrome. `googlemeet leave` зупиняє цей міст. Для сеансів Twilio, делегованих через плагін Voice Call, `leave` також завершує базовий голосовий виклик. Використовуйте `googlemeet end-active-conference`, коли також потрібно закрити активну конференцію Google Meet для простору, керованого API. ## Пов’язане -- [Plugin голосових викликів](/uk/plugins/voice-call) +- [Плагін голосових викликів](/uk/plugins/voice-call) - [Режим розмови](/uk/nodes/talk) -- [Створення plugins](/uk/plugins/building-plugins) +- [Створення плагінів](/uk/plugins/building-plugins)