diff --git a/docs/uk/plugins/google-meet.md b/docs/uk/plugins/google-meet.md index e74d79ce6..8c0b1efe9 100644 --- a/docs/uk/plugins/google-meet.md +++ b/docs/uk/plugins/google-meet.md @@ -2,43 +2,43 @@ read_when: - Ви хочете, щоб агент OpenClaw приєднався до дзвінка Google Meet - Ви хочете, щоб агент OpenClaw створив новий дзвінок Google Meet - - Ви налаштовуєте Chrome, вузол Chrome або Twilio як транспорт для Google Meet -summary: 'Plugin Google Meet: приєднання до явних URL-адрес Meet через Chrome або Twilio зі стандартними налаштуваннями відповіді агента' + - Ви налаштовуєте Chrome, вузол Chrome або Twilio як транспорт Google Meet +summary: 'Plugin Google Meet: приєднання за чітко вказаними URL Meet через Chrome або Twilio зі стандартними налаштуваннями голосової відповіді агента' title: Plugin Google Meet x-i18n: - generated_at: "2026-05-04T04:47:25Z" + generated_at: "2026-05-04T05:46:10Z" model: gpt-5.5 provider: openai - source_hash: 9caeb2d4540b833c75cd0f3b5f61a99f0a6bb16ca71a96011d25e4ea103a4601 + source_hash: ad2117a42a91f9b494e8c48cc4cfd7439c8bd7b32fd8b97a139fb9b8bbde40a1 source_path: plugins/google-meet.md workflow: 16 --- -Підтримка учасника Google Meet для OpenClaw — Plugin навмисно явний за дизайном: +Підтримка учасника Google Meet для OpenClaw — плагін навмисно працює явно: - Він приєднується лише до явної URL-адреси `https://meet.google.com/...`. -- Він може створити новий простір Meet через Google Meet API, а потім приєднатися за - поверненою URL-адресою. -- `agent` — типовий режим відповіді голосом: транскрибування в реальному часі слухає, +- Він може створити новий простір Meet через Google Meet API, а потім приєднатися до + повернутої URL-адреси. +- `agent` — типовий режим відповіді голосом: транскрипція в реальному часі слухає, налаштований агент OpenClaw відповідає, а звичайний OpenClaw TTS говорить у Meet. -- `bidi` залишається доступним як резервний режим прямої голосової моделі в реальному часі. +- `bidi` залишається доступним як резервний режим прямої голосової моделі реального часу. - Агенти вибирають поведінку приєднання через `mode`: використовуйте `agent` для живого - прослуховування/відповіді голосом, `bidi` для прямого резервного голосового режиму в реальному часі або `transcribe` + прослуховування/відповіді голосом, `bidi` для прямого резервного голосу в реальному часі або `transcribe` для приєднання/керування браузером без моста відповіді голосом. -- Автентифікація починається як особистий Google OAuth або вже авторизований профіль Chrome. +- Автентифікація починається з особистого Google OAuth або вже виконаного входу в профіль Chrome. - Автоматичного оголошення згоди немає. - Типовий аудіобекенд Chrome — `BlackHole 2ch`. - Chrome може працювати локально або на спареному вузловому хості. -- Twilio приймає номер для дзвінка плюс необов’язковий PIN або послідовність DTMF; він - не може напряму набрати URL Meet. +- Twilio приймає номер для дозвону плюс необов'язковий PIN або послідовність DTMF; він + не може напряму набрати URL-адресу Meet. - Команда CLI — `googlemeet`; `meet` зарезервовано для ширших агентських - телеконференційних робочих процесів. + телеконференц-процесів. ## Швидкий старт -Установіть локальні аудіозалежності та налаштуйте постачальника транскрибування в реальному часі -плюс звичайний OpenClaw TTS. OpenAI є типовим постачальником транскрибування; -Google Gemini Live також працює як окремий резервний голосовий режим `bidi` з +Установіть локальні аудіозалежності й налаштуйте постачальника транскрипції в реальному часі +плюс звичайний OpenClaw TTS. OpenAI є типовим постачальником транскрипції; +Google Gemini Live також працює як окремий резервний голос `bidi` з `realtime.voiceProvider: "google"`: ```bash @@ -48,7 +48,7 @@ export OPENAI_API_KEY=sk-... export GEMINI_API_KEY=... ``` -`blackhole-2ch` установлює віртуальний аудіопристрій `BlackHole 2ch`. Інсталятор +`blackhole-2ch` встановлює віртуальний аудіопристрій `BlackHole 2ch`. Інсталятор Homebrew потребує перезавантаження, перш ніж macOS покаже пристрій: ```bash @@ -62,7 +62,7 @@ system_profiler SPAudioDataType | grep -i BlackHole command -v sox ``` -Увімкніть Plugin: +Увімкніть плагін: ```json5 { @@ -83,33 +83,33 @@ command -v sox openclaw googlemeet setup ``` -Вивід налаштування призначений бути читабельним для агента та залежним від режиму. Він повідомляє профіль Chrome, -закріплення вузла та, для приєднань Chrome у реальному часі, аудіоміст BlackHole/SoX -і відкладені перевірки вступу в реальному часі. Для приєднань лише для спостереження перевіряйте той самий -транспорт із `--mode transcribe`; цей режим пропускає аудіопередумови реального часу, -оскільки він не слухає через міст і не говорить через нього: +Вивід налаштування призначений для читання агентом і враховує режим. Він повідомляє про профіль Chrome, +закріплення вузла, а для приєднань Chrome у реальному часі — про аудіоміст +BlackHole/SoX і відкладені перевірки вступу в реальному часі. Для приєднань лише для спостереження перевірте той самий +транспорт із `--mode transcribe`; цей режим пропускає передумови аудіо в реальному часі, +бо він не слухає й не говорить через міст: ```bash openclaw googlemeet setup --transport chrome-node --mode transcribe ``` Коли налаштовано делегування Twilio, налаштування також повідомляє, чи готові -Plugin `voice-call`, облікові дані Twilio та публічна доступність Webhook. +плагін `voice-call`, облікові дані Twilio і публічна доступність Webhook. Сприймайте будь-яку перевірку `ok: false` як блокер для перевіреного транспорту й режиму перед тим, як просити агента приєднатися. Використовуйте `openclaw googlemeet setup --json` для скриптів або машинозчитуваного виводу. Використовуйте `--transport chrome`, `--transport chrome-node` або `--transport twilio`, щоб попередньо перевірити конкретний транспорт до того, як агент спробує його використати. -Для Twilio завжди явно попередньо перевіряйте транспорт, коли типовий транспорт -— Chrome: +Для Twilio завжди явно перевіряйте транспорт, коли типовий транспорт — +Chrome: ```bash openclaw googlemeet setup --transport twilio ``` -Це виявляє відсутнє підключення `voice-call`, облікові дані Twilio або недосяжну -публічну доступність Webhook до того, як агент спробує набрати зустріч. +Це виявляє відсутню прив'язку `voice-call`, облікові дані Twilio або недоступну +публічну Webhook-адресу до того, як агент спробує набрати зустріч. Приєднайтеся до зустрічі: @@ -128,11 +128,11 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij } ``` -Агентський інструмент `google_meet` залишається доступним на хостах не macOS для -потоків артефактів, календаря, налаштування, транскрибування, Twilio та `chrome-node`. Локальні -дії відповіді голосом Chrome там заблоковані, оскільки вбудований аудіошлях Chrome -наразі залежить від 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 з відповіддю голосом. Створіть нову зустріч і приєднайтеся до неї: @@ -141,23 +141,24 @@ openclaw googlemeet create --transport chrome-node --mode agent ``` Для кімнат, створених через API, використовуйте Google Meet `SpaceConfig.accessType`, коли хочете, -щоб політика кімнати без запиту на допуск була явною, а не успадкованою від типових значень облікового запису Google: +щоб політика входу без стуку для кімнати була явною, а не успадкованою з типових значень +облікового запису Google: ```bash openclaw googlemeet create --access-type OPEN --transport chrome-node --mode agent ``` -`OPEN` дозволяє будь-кому з URL Meet приєднатися без запиту на допуск. `TRUSTED` дозволяє -довіреним користувачам організації хоста, запрошеним зовнішнім користувачам і користувачам, -що дзвонять телефоном, приєднуватися без запиту на допуск. `RESTRICTED` обмежує вхід без запиту на допуск -запрошеними. Ці налаштування застосовуються лише до офіційного шляху створення Google Meet API, -тож облікові дані OAuth мають бути налаштовані. +`OPEN` дозволяє будь-кому з URL-адресою Meet приєднатися без стуку. `TRUSTED` дозволяє +довіреним користувачам організації хоста, запрошеним зовнішнім користувачам і користувачам із дозвоном +приєднуватися без стуку. `RESTRICTED` обмежує вхід без стуку лише запрошеними. Ці +налаштування застосовуються лише до офіційного шляху створення через Google Meet API, тому облікові дані +OAuth мають бути налаштовані. -Якщо ви автентифікували Google Meet до появи цієї опції, повторно виконайте +Якщо ви автентифікували 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 @@ -170,22 +171,22 @@ openclaw googlemeet create --no-join - Резервний браузерний шлях: використовується, коли облікових даних OAuth немає. OpenClaw використовує закріплений вузол Chrome, відкриває `https://meet.google.com/new`, чекає, доки Google перенаправить на справжню URL-адресу з кодом зустрічі, а потім повертає цю URL-адресу. Цей шлях потребує, - щоб профіль Chrome OpenClaw на вузлі вже був авторизований у Google. - Браузерна автоматизація обробляє власний початковий запит Meet щодо мікрофона; цей запит - не вважається помилкою входу в Google. - Потоки приєднання та створення також намагаються повторно використати наявну вкладку Meet перед відкриттям - нової. Зіставлення ігнорує нешкідливі рядки запиту URL, як-от `authuser`, тож - повторна спроба агента має сфокусувати вже відкриту зустріч замість створення другої + щоб профіль OpenClaw Chrome на вузлі вже був залогінений у Google. + Браузерна автоматизація обробляє власний первинний запит Meet на мікрофон; цей запит + не вважається помилкою входу Google. + Потоки приєднання й створення також намагаються повторно використати наявну вкладку Meet перед відкриттям + нової. Зіставлення ігнорує безпечні рядки запиту URL, як-от `authuser`, тому повторна спроба + агента має сфокусувати вже відкриту зустріч замість створення другої вкладки Chrome. Вивід команди/інструмента містить поле `source` (`api` або `browser`), щоб агенти -могли пояснити, який шлях було використано. `create` типово приєднується до нової зустрічі та -повертає `joined: true` плюс сесію приєднання. Щоб лише створити URL, використовуйте +могли пояснити, який шлях було використано. `create` типово приєднується до нової зустрічі й +повертає `joined: true` плюс сесію приєднання. Щоб лише створити URL-адресу, використовуйте `create --no-join` у CLI або передайте `"join": false` інструменту. Або скажіть агенту: "Створи Google Meet, приєднайся до нього в режимі відповіді голосом агента і надішли мені посилання." Агент має викликати `google_meet` з -`action: "create"`, а потім поділитися поверненим `meetingUri`. +`action: "create"`, а потім поширити повернуте `meetingUri`. ```json { @@ -195,54 +196,54 @@ openclaw googlemeet create --no-join } ``` -Для приєднання лише для спостереження/керування браузером задайте `"mode": "transcribe"`. Це -не запускає двонапрямний голосовий міст у реальному часі, не потребує BlackHole або SoX +Для приєднання лише для спостереження/керування браузером установіть `"mode": "transcribe"`. Це не +запускає дуплексний голосовий міст реального часу, не потребує BlackHole або SoX і не відповідатиме голосом у зустріч. Приєднання Chrome у цьому режимі також уникають -надання OpenClaw дозволу на мікрофон/камеру та уникають шляху Meet **Use -microphone**. Якщо Meet показує проміжний екран вибору аудіо, автоматизація пробує -шлях без мікрофона, а інакше повідомляє про ручну дію замість відкриття -локального мікрофона. У режимі транскрибування керовані транспорти Chrome також встановлюють -найкращий можливий спостерігач субтитрів Meet. `googlemeet status --json` і +надання дозволів 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`, коли -потрібна перевірка так/ні: він приєднується в режимі транскрибування, чекає на нові субтитри або -рух транскрипту й повертає `listenVerified`, `listenTimedOut`, поля ручних -дій і найновіший стан субтитрів. +потрібна перевірка так/ні: вона приєднується в режимі transcribe, чекає на новий рух субтитрів або +транскрипту і повертає `listenVerified`, `listenTimedOut`, поля ручних +дій і останній стан субтитрів. -Під час сесій у реальному часі статус `google_meet` містить стан браузера й аудіомоста, +Під час сесій реального часу статус `google_meet` містить стан браузера та аудіомоста, зокрема `inCall`, `manualActionRequired`, `providerConnected`, -`realtimeReady`, `audioInputActive`, `audioOutputActive`, часові мітки останнього вводу/виводу, -лічильники байтів і стан закриття моста. Якщо з’являється безпечний запит сторінки Meet, +`realtimeReady`, `audioInputActive`, `audioOutputActive`, останні часові мітки вводу/виводу, +лічильники байтів і стан закриття моста. Якщо з'являється безпечний запит сторінки Meet, браузерна автоматизація обробляє його, коли може. Вхід, допуск хостом і запити дозволів браузера/ОС повідомляються як ручна дія з причиною та -повідомленням, яке агент має передати. Керовані сесії Chrome надсилають вступ або -тестову фразу лише після того, як стан браузера повідомляє `inCall: true`; інакше статус повідомляє -`speechReady: false`, а спроба мовлення блокується замість удавання, що -агент сказав щось у зустріч. +повідомленням, яке агент має передати. Керовані сесії Chrome відтворюють вступну або +тестову фразу лише після того, як стан браузера повідомить `inCall: true`; інакше статус повідомляє +`speechReady: false`, а спробу мовлення блокують замість удавання, що +агент говорив у зустріч. -Локальні приєднання Chrome проходять через авторизований браузерний профіль OpenClaw. Режим реального часу -потребує `BlackHole 2ch` для шляху мікрофон/динамік, який використовує OpenClaw. Для -чистого двонапрямного аудіо використовуйте окремі віртуальні пристрої або граф у стилі Loopback; одного -пристрою BlackHole достатньо для першого smoke-тесту, але він може давати відлуння. +Локальні приєднання Chrome використовують залогінений профіль браузера OpenClaw. Режим реального часу +потребує `BlackHole 2ch` для шляху мікрофона/динаміка, який використовує OpenClaw. Для +чистого дуплексного аудіо використовуйте окремі віртуальні пристрої або граф у стилі Loopback; одного +пристрою BlackHole достатньо для першого smoke test, але він може давати луну. ### Локальний Gateway + Parallels Chrome Вам **не** потрібен повний OpenClaw Gateway або ключ API моделі всередині macOS VM лише для того, щоб VM володіла Chrome. Запустіть Gateway і агента локально, а потім запустіть -вузловий хост у VM. Увімкніть вбудований Plugin на VM один раз, щоб вузол -оголошував команду Chrome: +вузловий хост у VM. Увімкніть вбудований плагін на VM один раз, щоб вузол +оголосив команду Chrome: -Що де працює: +Що де запускається: -- Хост Gateway: OpenClaw Gateway, робочий простір агента, ключі моделі/API, постачальник реального часу - і конфігурація Plugin Google Meet. +- Хост Gateway: OpenClaw Gateway, робоча область агента, ключі моделі/API, постачальник реального часу + і конфіг плагіна Google Meet. - Parallels macOS VM: OpenClaw CLI/вузловий хост, Google Chrome, SoX, BlackHole 2ch - і профіль Chrome, авторизований у Google. -- Не потрібно у VM: служба Gateway, конфігурація агента, ключ OpenAI/GPT або - налаштування постачальника моделі. + і профіль Chrome, залогінений у Google. +- Не потрібно у VM: сервіс Gateway, конфіг агента, ключ OpenAI/GPT або налаштування + постачальника моделі. Установіть залежності VM: @@ -263,7 +264,7 @@ system_profiler SPAudioDataType | grep -i BlackHole command -v sox ``` -Установіть або оновіть OpenClaw у VM, а потім увімкніть там вбудований Plugin: +Установіть або оновіть OpenClaw у VM, а потім увімкніть там вбудований плагін: ```bash openclaw plugins enable google-meet @@ -275,8 +276,8 @@ openclaw plugins enable google-meet openclaw node run --host --port 18789 --display-name parallels-macos ``` -Якщо `` — LAN IP і ви не використовуєте TLS, вузол відмовиться від -відкритого WebSocket, якщо ви явно не погодитеся на це для цієї довіреної приватної мережі: +Якщо `` — це LAN IP і ви не використовуєте TLS, вузол відхилить +незашифрований WebSocket, якщо ви явно не дозволите його для цієї довіреної приватної мережі: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ @@ -302,8 +303,8 @@ openclaw devices list openclaw devices approve ``` -Підтвердьте, що Gateway бачить вузол і що він оголошує як `googlemeet.chrome`, -так і можливість браузера/`browser.proxy`: +Підтвердьте, що Gateway бачить вузол і що він оголошує і `googlemeet.chrome`, +і можливість браузера/`browser.proxy`: ```bash openclaw nodes status @@ -339,7 +340,7 @@ openclaw nodes status } ``` -Тепер приєднуйтеся звичайно з хоста Gateway: +Тепер приєднайтеся звичайно з хоста Gateway: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij @@ -347,105 +348,56 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij або попросіть агента використати інструмент `google_meet` з `transport: "chrome-node"`. -Для smoke-тесту однією командою, який створює або повторно використовує сесію, промовляє відому -фразу й друкує стан сесії: +Для smoke test однією командою, який створює або повторно використовує сесію, промовляє відому +фразу і друкує стан сесії: ```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` і повторювати спробу лише після -завершення ручної дії в браузері. +Під час приєднання в реальному часі браузерна автоматизація OpenClaw заповнює ім’я гостя, натискає Приєднатися/Попросити приєднатися та приймає перший вибір Meet «Використовувати мікрофон», коли з’являється цей запит. Під час приєднання лише для спостереження або створення зустрічі лише в браузері вона проходить повз той самий запит без мікрофона, коли такий вибір доступний. Якщо профіль браузера не ввійшов в обліковий запис, Meet очікує допуску від організатора, Chrome потребує дозволу на мікрофон/камеру для приєднання в реальному часі або Meet застряг на запиті, який автоматизація не змогла розв’язати, результат join/test-speech повідомляє `manualActionRequired: true` з `manualActionReason` і `manualActionMessage`. Агенти мають припинити повторювати приєднання, повідомити це точне повідомлення разом із поточними `browserUrl`/`browserTitle` і повторювати спробу лише після завершення ручної дії в браузері. -Якщо `chromeNode.node` пропущено, OpenClaw автоматично вибирає лише тоді, коли рівно один -підключений вузол оголошує і `googlemeet.chrome`, і керування браузером. Якщо -підключено кілька придатних вузлів, задайте `chromeNode.node` як ідентифікатор вузла, -відображуване ім'я або віддалену IP-адресу. +Якщо `chromeNode.node` пропущено, OpenClaw автоматично вибирає лише тоді, коли рівно один підключений вузол оголошує і `googlemeet.chrome`, і керування браузером. Якщо підключено кілька придатних вузлів, задайте `chromeNode.node` як ідентифікатор вузла, відображуване ім’я або віддалену IP-адресу. -Типові перевірки збоїв: +Поширені перевірки помилок: -- `Configured Google Meet node ... is not usable: offline`: закріплений вузол - відомий Gateway, але недоступний. Агенти мають трактувати цей вузол як - діагностичний стан, а не як придатний хост Chrome, і повідомляти про блокер - налаштування замість резервного переходу на інший транспорт, якщо користувач цього не просив. -- `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM, - схваліть сполучення й переконайтеся, що `openclaw plugins enable google-meet` і - `openclaw plugins enable browser` були виконані у VM. Також підтвердьте, що - хост Gateway дозволяє обидві команди вузла через - `gateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"]`. -- `BlackHole 2ch audio device not found`: установіть `blackhole-2ch` на хості, - який перевіряється, і перезавантажтеся перед використанням локального аудіо Chrome. -- `BlackHole 2ch audio device not found on the node`: установіть `blackhole-2ch` - у VM і перезавантажте VM. -- Chrome відкривається, але не може приєднатися: увійдіть у профіль браузера всередині VM або - залиште `chrome.guestName` заданим для гостьового підключення. Автоматичне підключення гостя використовує - автоматизацію браузера OpenClaw через браузерний проксі вузла; переконайтеся, що конфігурація браузера - вузла вказує на потрібний профіль, наприклад - `browser.defaultProfile: "user"` або іменований профіль наявного сеансу. -- Дублікати вкладок Meet: залиште `chrome.reuseExistingTab: true` увімкненим. OpenClaw - активує наявну вкладку для тієї самої URL-адреси Meet перед відкриттям нової, а - створення зустрічі в браузері повторно використовує вкладку `https://meet.google.com/new` - у процесі або вкладку запиту облікового запису Google перед відкриттям іншої. -- Немає аудіо: у Meet спрямуйте мікрофон/динамік через шлях віртуального аудіопристрою, - який використовує OpenClaw; використовуйте окремі віртуальні пристрої або маршрутизацію у стилі Loopback - для чистого двостороннього аудіо. +- `Configured Google Meet node ... is not usable: offline`: закріплений вузол відомий Gateway, але недоступний. Агенти мають розглядати цей вузол як діагностичний стан, а не як придатний хост Chrome, і повідомляти про блокер налаштування замість переходу до іншого транспорту, якщо користувач не просив цього. +- `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM, підтвердьте спарювання та переконайтеся, що `openclaw plugins enable google-meet` і `openclaw plugins enable browser` були запущені у VM. Також підтвердьте, що хост Gateway дозволяє обидві команди вузла через `gateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"]`. +- `BlackHole 2ch audio device not found`: установіть `blackhole-2ch` на хості, який перевіряється, і перезавантажтеся перед використанням локального аудіо Chrome. +- `BlackHole 2ch audio device not found on the node`: установіть `blackhole-2ch` у VM і перезавантажте VM. +- Chrome відкривається, але не може приєднатися: увійдіть у профіль браузера всередині VM або залиште `chrome.guestName` заданим для гостьового приєднання. Автоматичне гостьове приєднання використовує браузерну автоматизацію OpenClaw через браузерний проксі вузла; переконайтеся, що конфігурація браузера вузла вказує на потрібний профіль, наприклад `browser.defaultProfile: "user"` або іменований профіль наявного сеансу. +- Дубльовані вкладки Meet: залиште `chrome.reuseExistingTab: true` увімкненим. OpenClaw активує наявну вкладку для тієї самої URL-адреси Meet перед відкриттям нової, а створення зустрічі в браузері повторно використовує незавершену вкладку `https://meet.google.com/new` або вкладку запиту облікового запису Google перед відкриттям іншої. +- Немає аудіо: у Meet спрямуйте аудіо мікрофона/динаміка через шлях віртуального аудіопристрою, який використовує OpenClaw; використовуйте окремі віртуальні пристрої або маршрутизацію в стилі Loopback для чистого дуплексного аудіо. -## Нотатки щодо встановлення +## Примітки щодо встановлення -Стандартне налаштування зворотного відтворення Chrome використовує два зовнішні інструменти: +Типове зворотне аудіо Chrome використовує два зовнішні інструменти: -- `sox`: утиліта командного рядка для аудіо. Plugin використовує явні команди пристроїв CoreAudio - для стандартного 24 кГц PCM16 аудіомоста. -- `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій `BlackHole 2ch`, - через який Chrome/Meet можуть маршрутизувати аудіо. +- `sox`: аудіоутиліта командного рядка. Plugin використовує явні команди пристрою CoreAudio для типового аудіомоста 24 кГц PCM16. +- `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій `BlackHole 2ch`, через який Chrome/Meet може маршрутизувати аудіо. -OpenClaw не пакує й не розповсюджує жоден із цих пакетів. Документація просить користувачів -установити їх як залежності хоста через Homebrew. SoX ліцензовано як -`LGPL-2.0-only AND GPL-2.0-only`; BlackHole має ліцензію GPL-3.0. Якщо ви створюєте -інсталятор або appliance, який пакує BlackHole разом з OpenClaw, перегляньте умови -ліцензування BlackHole upstream або отримайте окрему ліцензію від Existential Audio. +OpenClaw не комплектує й не розповсюджує жоден із цих пакетів. Документація просить користувачів установлювати їх як залежності хоста через Homebrew. SoX ліцензовано як `LGPL-2.0-only AND GPL-2.0-only`; BlackHole має ліцензію GPL-3.0. Якщо ви створюєте інсталятор або appliance, що комплектує BlackHole з OpenClaw, перегляньте умови ліцензування upstream BlackHole або отримайте окрему ліцензію від 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/аудіо працюють на спареному вузлі, наприклад VM Parallels macOS. Для локального Chrome виберіть профіль через `browser.defaultProfile`; `chrome.browserProfile` передається хостам `chrome-node`. ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome-node ``` -Спрямуйте аудіо мікрофона й динаміка Chrome через локальний аудіоміст OpenClaw. -Якщо `BlackHole 2ch` не встановлено, підключення завершується помилкою налаштування -замість тихого приєднання без аудіошляху. +Спрямуйте аудіо мікрофона й динаміка Chrome через локальний аудіоміст OpenClaw. Якщо `BlackHole 2ch` не встановлено, приєднання завершується помилкою налаштування замість тихого приєднання без аудіошляху. ### Twilio -Транспорт Twilio — це строгий план набору, делегований 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, а не на вузлі Chrome: ```json5 { @@ -486,8 +438,7 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome } ``` -Надайте облікові дані Twilio через середовище або конфігурацію. Середовище тримає -секрети поза `openclaw.json`: +Надайте облікові дані Twilio через середовище або конфігурацію. Середовище тримає секрети поза `openclaw.json`: ```bash export TWILIO_ACCOUNT_SID=AC... @@ -496,11 +447,9 @@ export TWILIO_FROM_NUMBER=+15550001234 export GEMINI_API_KEY=... ``` -Натомість використовуйте `realtime.provider: "openai"` з OpenAI provider plugin і -`OPENAI_API_KEY`, якщо це ваш провайдер голосу в реальному часі. +Натомість використовуйте `realtime.provider: "openai"` з Plugin провайдера OpenAI і `OPENAI_API_KEY`, якщо це ваш провайдер голосу в реальному часі. -Перезапустіть або перезавантажте Gateway після ввімкнення `voice-call`; зміни конфігурації plugin -не з'являються у вже запущеному процесі Gateway, доки він не перезавантажиться. +Перезапустіть або перезавантажте Gateway після ввімкнення `voice-call`; зміни конфігурації Plugin не з’являються в уже запущеному процесі Gateway, доки він не перезавантажиться. Потім перевірте: @@ -510,9 +459,7 @@ 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 \ @@ -530,22 +477,13 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --dtmf-sequence ww123456# ``` -## OAuth і попередня перевірка +## OAuth і preflight -OAuth необов'язковий для створення посилання Meet, тому що `googlemeet create` може -використати резервну автоматизацію браузера. Налаштовуйте OAuth, коли потрібне офіційне створення через API, -розв'язання простору або попередні перевірки Meet Media API. +OAuth необов’язковий для створення посилання Meet, оскільки `googlemeet create` може відступити до браузерної автоматизації. Налаштуйте OAuth, коли потрібні офіційне створення через API, розв’язання простору або перевірки preflight Meet Media API. -Доступ до Google Meet API використовує користувацький OAuth: створіть OAuth-клієнт Google Cloud, -запросіть потрібні області доступу, авторизуйте обліковий запис Google, а потім збережіть -отриманий refresh token у конфігурації Google Meet plugin або надайте -змінні середовища `OPENCLAW_GOOGLE_MEET_*`. +Доступ до Google Meet API використовує користувацький OAuth: створіть клієнт Google Cloud OAuth, запитайте потрібні scopes, авторизуйте обліковий запис Google, а потім збережіть отриманий refresh token у конфігурації Plugin Google Meet або надайте змінні середовища `OPENCLAW_GOOGLE_MEET_*`. -OAuth не замінює шлях підключення через Chrome. Транспорти Chrome і Chrome-node -далі приєднуються через профіль Chrome із виконаним входом, BlackHole/SoX і підключений -вузол, коли ви використовуєте участь через браузер. OAuth призначений лише для офіційного шляху -Google Meet API: створення просторів зустрічей, розв'язання просторів і виконання попередніх -перевірок Meet Media API. +OAuth не замінює шлях приєднання Chrome. Транспорти Chrome і Chrome-node усе ще приєднуються через профіль Chrome, що ввійшов в обліковий запис, BlackHole/SoX і підключений вузол, коли ви використовуєте участь через браузер. OAuth призначений лише для офіційного шляху Google Meet API: створення просторів зустрічей, розв’язання просторів і виконання перевірок preflight Meet Media API. ### Створення облікових даних Google @@ -554,17 +492,16 @@ Google Meet API: створення просторів зустрічей, ро 1. Створіть або виберіть проєкт Google Cloud. 2. Увімкніть **Google Meet REST API** для цього проєкту. 3. Налаштуйте екран згоди OAuth. - - **Internal** найпростіший для організації Google Workspace. - - **External** працює для особистих/тестових налаштувань; доки застосунок перебуває в Testing, - додайте кожен обліковий запис Google, який авторизуватиме застосунок, як тестового користувача. -4. Додайте області доступу, які запитує OpenClaw: + - **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` - `https://www.googleapis.com/auth/meetings.space.settings` - `https://www.googleapis.com/auth/meetings.conference.media.readonly` 5. Створіть OAuth client ID. - Тип застосунку: **Web application**. - - Авторизований URI перенаправлення: + - Авторизована URI перенаправлення: ```text http://localhost:8085/oauth2callback @@ -572,26 +509,17 @@ Google Meet API: створення просторів зустрічей, ро 6. Скопіюйте client ID і client secret. -`meetings.space.created` потрібен Google Meet `spaces.create`. -`meetings.space.readonly` дає OpenClaw змогу розв'язувати URL-адреси/коди Meet у простори. -`meetings.space.settings` дає OpenClaw змогу передавати налаштування `SpaceConfig`, як-от -`accessType`, під час створення кімнати через API. -`meetings.conference.media.readonly` призначено для попередньої перевірки Meet Media API і роботи з медіа; -Google може вимагати реєстрацію в Developer Preview для фактичного використання Media API. -Якщо вам потрібні лише підключення Chrome на основі браузера, повністю пропустіть OAuth. +`meetings.space.created` потрібен Google Meet `spaces.create`. `meetings.space.readonly` дає OpenClaw змогу розв’язувати URL-адреси/коди Meet у простори. `meetings.space.settings` дає OpenClaw змогу передавати налаштування `SpaceConfig`, як-от `accessType`, під час створення кімнати через API. `meetings.conference.media.readonly` призначений для preflight Meet Media API і роботи з медіа; Google може вимагати участі в Developer Preview для фактичного використання Media API. Якщо вам потрібні лише приєднання Chrome на основі браузера, повністю пропустіть OAuth. ### Випуск refresh token -Налаштуйте `oauth.clientId` і, за потреби, `oauth.clientSecret`, або передайте їх як -змінні середовища, а потім виконайте: +Налаштуйте `oauth.clientId` і, за потреби, `oauth.clientSecret`, або передайте їх як змінні середовища, а потім запустіть: ```bash openclaw googlemeet auth login --json ``` -Команда друкує конфігураційний блок `oauth` із refresh token. Вона використовує PKCE, -локальний callback на `http://localhost:8085/oauth2callback` і ручний -потік копіювання/вставлення з `--manual`. +Команда виводить конфігураційний блок `oauth` з refresh token. Вона використовує PKCE, localhost callback на `http://localhost:8085/oauth2callback` і ручний потік копіювання/вставлення з `--manual`. Приклади: @@ -601,7 +529,7 @@ OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \ openclaw googlemeet auth login --json ``` -Використовуйте ручний режим, коли браузер не може досягти локального callback: +Використовуйте ручний режим, коли браузер не може дістатися локального callback: ```bash OPENCLAW_GOOGLE_MEET_CLIENT_ID="your-client-id" \ @@ -609,7 +537,7 @@ OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \ openclaw googlemeet auth login --json --manual ``` -Вивід JSON містить: +JSON-вивід містить: ```json { @@ -624,7 +552,7 @@ openclaw googlemeet auth login --json --manual } ``` -Збережіть об'єкт `oauth` у конфігурації Google Meet plugin: +Збережіть об’єкт `oauth` у конфігурації Plugin Google Meet: ```json5 { @@ -645,14 +573,9 @@ openclaw googlemeet auth login --json --manual } ``` -Надавайте перевагу змінним середовища, коли не хочете мати refresh token у конфігурації. -Якщо присутні і значення конфігурації, і значення середовища, Plugin спершу використовує конфігурацію, -а потім резервно звертається до середовища. +Віддавайте перевагу змінним середовища, коли не хочете зберігати refresh token у конфігурації. Якщо наявні і конфігурація, і значення середовища, Plugin спершу використовує конфігурацію, а потім fallback до середовища. -Згода OAuth включає створення простору Meet, доступ до читання простору Meet і доступ -до читання медіа конференції Meet. Якщо ви автентифікувалися до появи підтримки -створення зустрічей, повторно виконайте `openclaw googlemeet auth login --json`, щоб refresh -token мав область доступу `meetings.space.created`. +Згода OAuth включає створення просторів Meet, доступ на читання просторів Meet і доступ на читання медіа конференції Meet. Якщо ви автентифікувалися до появи підтримки створення зустрічей, повторно запустіть `openclaw googlemeet auth login --json`, щоб refresh token мав scope `meetings.space.created`. ### Перевірка OAuth через doctor @@ -662,22 +585,18 @@ token мав область доступу `meetings.space.created`. openclaw googlemeet doctor --oauth --json ``` -Це не завантажує runtime Chrome і не потребує підключеного вузла Chrome. Воно -перевіряє, що конфігурація OAuth існує і що refresh token може випустити access -token. Звіт JSON містить лише поля стану, як-от `ok`, `configured`, -`tokenSource`, `expiresAt`, і повідомлення перевірок; він не друкує access -token, refresh token або client secret. +Це не завантажує runtime Chrome і не потребує підключеного вузла Chrome. Воно перевіряє, що конфігурація OAuth існує і що refresh token може видати access token. JSON-звіт містить лише поля стану, як-от `ok`, `configured`, `tokenSource`, `expiresAt`, і повідомлення перевірок; він не друкує access token, refresh token або client secret. -Типові результати: +Поширені результати: | Перевірка | Значення | | -------------------- | --------------------------------------------------------------------------------------- | -| `oauth-config` | Наявні `oauth.clientId` плюс `oauth.refreshToken` або кешований токен доступу. | -| `oauth-token` | Кешований токен доступу досі чинний, або токен оновлення створив новий токен доступу. | -| `meet-spaces-get` | Необов’язкова перевірка `--meeting` знайшла наявний простір Meet. | -| `meet-spaces-create` | Необов’язкова перевірка `--create-space` створила новий простір Meet. | +| `oauth-config` | Наявні `oauth.clientId` плюс `oauth.refreshToken` або кешований маркер доступу. | +| `oauth-token` | Кешований маркер доступу досі чинний або маркер оновлення створив новий маркер доступу. | +| `meet-spaces-get` | Необов’язкова перевірка `--meeting` визначила наявний простір Meet. | +| `meet-spaces-create` | Необов’язкова перевірка `--create-space` створила новий простір Meet. | -Щоб також підтвердити ввімкнення Google Meet API і scope `spaces.create`, виконайте +Щоб також підтвердити ввімкнення Google Meet API та область `spaces.create`, запустіть перевірку створення з побічним ефектом: ```bash @@ -685,26 +604,26 @@ openclaw googlemeet doctor --oauth --create-space --json openclaw googlemeet create --no-join --json ``` -`--create-space` створює одноразову URL-адресу Meet. Використовуйте це, коли потрібно підтвердити, +`--create-space` створює тимчасовий Meet URL. Використовуйте це, коли потрібно підтвердити, що в проєкті 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 openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij ``` -`doctor --oauth --meeting` і `resolve-space` підтверджують доступ на читання до наявного -простору, до якого авторизований обліковий запис Google має доступ. `403` від цих перевірок -зазвичай означає, що Google Meet REST API вимкнено, погодженому токену оновлення -бракує потрібного scope або обліковий запис Google не має доступу до цього простору Meet. -Помилка токена оновлення означає, що потрібно повторно виконати `openclaw googlemeet auth login +`doctor --oauth --meeting` і `resolve-space` підтверджують доступ для читання до наявного +простору, до якого має доступ авторизований обліковий запис Google. `403` від цих перевірок +зазвичай означає, що Google Meet REST API вимкнено, погодженому маркеру оновлення +бракує потрібної області або обліковий запис Google не має доступу до цього простору Meet. +Помилка маркера оновлення означає, що потрібно повторно виконати `openclaw googlemeet auth login --json` і зберегти новий блок `oauth`. -Для резервного режиму браузера облікові дані OAuth не потрібні. У цьому режимі автентифікація Google -береться з профілю Chrome з виконаним входом на вибраному Node, а не з +Для резервного браузерного режиму облікові дані OAuth не потрібні. У цьому режимі автентифікація Google +надходить із профілю Chrome, у який виконано вхід, на вибраному вузлі, а не з конфігурації OpenClaw. Ці змінні середовища приймаються як резервні значення: @@ -718,13 +637,13 @@ openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij - `OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING` або `GOOGLE_MEET_DEFAULT_MEETING` - `OPENCLAW_GOOGLE_MEET_PREVIEW_ACK` або `GOOGLE_MEET_PREVIEW_ACK` -Розв’яжіть URL-адресу Meet, код або `spaces/{id}` через `spaces.get`: +Визначте Meet URL, код або `spaces/{id}` через `spaces.get`: ```bash openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij ``` -Виконайте попередню перевірку перед роботою з медіа: +Запустіть попередню перевірку перед роботою з медіа: ```bash openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij @@ -738,11 +657,11 @@ openclaw googlemeet attendance --meeting https://meet.google.com/abc-defg-hij openclaw googlemeet export --meeting https://meet.google.com/abc-defg-hij --output ./meet-export ``` -З `--meeting`, `artifacts` і `attendance` за замовчуванням використовують найновіший запис конференції. -Передайте `--all-conference-records`, якщо потрібні всі збережені записи +З `--meeting` команди `artifacts` і `attendance` типово використовують найновіший запис конференції. +Передайте `--all-conference-records`, коли потрібні всі збережені записи для цієї зустрічі. -Пошук у календарі може знайти URL-адресу зустрічі з Google Calendar перед читанням +Пошук у календарі може визначити URL зустрічі з Google Calendar перед читанням артефактів Meet: ```bash @@ -752,14 +671,14 @@ openclaw googlemeet artifacts --event "Weekly sync" openclaw googlemeet attendance --today --format csv --output attendance.csv ``` -`--today` шукає в сьогоднішньому календарі `primary` подію Calendar з +`--today` шукає в сьогоднішньому календарі `primary` подію Calendar із посиланням Google Meet. Використовуйте `--event ` для пошуку відповідного тексту події та -`--calendar ` для неосновного календаря. Пошук у календарі потребує нового -входу OAuth, який включає scope лише для читання подій Calendar. +`--calendar ` для неосновного календаря. Пошук у календарі потребує свіжого +входу OAuth, який включає область лише для читання подій Calendar. `calendar-events` попередньо показує відповідні події Meet і позначає подію, яку -вибере `latest`, `artifacts`, `attendance` або `export`. +виберуть `latest`, `artifacts`, `attendance` або `export`. -Якщо ви вже знаєте ідентифікатор запису конференції, зверніться до нього напряму: +Якщо ви вже знаєте ідентифікатор запису конференції, звертайтеся до нього напряму: ```bash openclaw googlemeet latest --meeting https://meet.google.com/abc-defg-hij @@ -774,10 +693,10 @@ openclaw googlemeet attendance --conference-record conferenceRecords/abc123 --js openclaw googlemeet end-active-conference https://meet.google.com/abc-defg-hij ``` -Це викликає Google Meet `spaces.endActiveConference` і потребує OAuth зі -scope `meetings.space.created` для простору, яким авторизований обліковий запис може керувати. -OpenClaw приймає URL-адресу Meet, код зустрічі або вхідні дані `spaces/{id}` і перетворює їх -на ресурс простору API перед завершенням активної конференції. +Це викликає Google Meet `spaces.endActiveConference` і потребує OAuth з областю +`meetings.space.created` для простору, яким може керувати авторизований обліковий запис. +OpenClaw приймає Meet URL, код зустрічі або вхідні дані `spaces/{id}` і визначає їх +як ресурс простору API перед завершенням активної конференції. Це окремо від `googlemeet leave`: `leave` зупиняє локальну/сеансову участь OpenClaw, тоді як `end-active-conference` просить Google Meet завершити активну конференцію для простору. @@ -797,34 +716,34 @@ openclaw googlemeet export --conference-record conferenceRecords/abc123 \ --include-doc-bodies --dry-run ``` -`artifacts` повертає метадані запису конференції, а також метадані ресурсів учасників, записів, -транскриптів, структурованих записів транскрипту та розумних нотаток, коли +`artifacts` повертає метадані запису конференції плюс метадані ресурсів учасників, записів, +транскрипта, структурованих записів транскрипта та розумних нотаток, коли Google надає їх для зустрічі. Використовуйте `--no-transcript-entries`, щоб пропустити пошук записів для великих зустрічей. `attendance` розгортає учасників у рядки сеансів учасників із часом першої/останньої появи, загальною тривалістю сеансу, -позначками запізнення/раннього виходу та об’єднанням дубльованих ресурсів учасників за користувачем -із виконаним входом або відображуваним іменем. Передайте `--no-merge-duplicates`, щоб залишити сирі ресурси учасників -окремими, `--late-after-minutes` для налаштування виявлення запізнення та -`--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` фіксує вибрані вхідні дані, параметри експорту, записи конференцій, -вихідні файли, кількості, джерело токена, подію Calendar, якщо вона використовувалася, і будь-які -попередження про часткове отримання. Передайте `--zip`, щоб також записати переносний архів поруч -із папкою. Передайте `--include-doc-bodies`, щоб експортувати пов’язаний транскрипт і -текст розумних нотаток Google Docs через Google Drive `files.export`; для цього потрібен -новий вхід OAuth, який включає scope лише для читання Drive Meet. Без -`--include-doc-bodies` експорт містить лише метадані Meet і структуровані записи транскрипту. -Якщо Google повертає часткову помилку артефакту, наприклад помилку списку розумних нотаток, -запису транскрипту або тіла документа Drive, підсумок і -маніфест зберігають попередження замість того, щоб провалити весь експорт. -Використовуйте `--dry-run`, щоб отримати ті самі дані артефактів/відвідуваності та надрукувати +`manifest.json` фіксує вибрані вхідні дані, параметри експорту, записи конференції, +вихідні файли, лічильники, джерело маркера, подію Calendar, якщо її було використано, і будь-які +попередження про часткове отримання. Передайте `--zip`, щоб також записати переносний архів поряд +із папкою. Передайте `--include-doc-bodies`, щоб експортувати текст пов’язаних транскриптів і +розумних нотаток Google Docs через Google Drive `files.export`; для цього потрібен +свіжий вхід OAuth, який включає область лише для читання Drive Meet. Без +`--include-doc-bodies` експорти включають лише метадані Meet і структуровані записи транскрипта. +Якщо Google повертає часткову помилку артефакта, як-от помилку переліку розумних нотаток, +запису транскрипта або тіла документа Drive, підсумок і +маніфест зберігають попередження замість того, щоб зірвати весь експорт. +Використовуйте `--dry-run`, щоб отримати ті самі дані артефактів/відвідуваності та вивести JSON маніфесту без створення папки або ZIP. Це корисно перед записом -великого експорту або коли агенту потрібні лише кількості, вибрані записи та +великого експорту або коли агенту потрібні лише лічильники, вибрані записи та попередження. -Агенти також можуть створити такий самий пакет через інструмент `google_meet`: +Агенти також можуть створити той самий пакет через інструмент `google_meet`: ```json { @@ -836,9 +755,9 @@ JSON маніфесту без створення папки або ZIP. Це к } ``` -Установіть `"dryRun": true`, щоб повернути лише маніфест експорту й пропустити запис файлів. +Установіть `"dryRun": true`, щоб повернути лише маніфест експорту та пропустити запис файлів. -Агенти також можуть створити кімнату на базі API з явною політикою доступу: +Агенти також можуть створити кімнату на основі API з явною політикою доступу: ```json { @@ -858,7 +777,7 @@ JSON маніфесту без створення папки або ZIP. Це к } ``` -Для перевірки з пріоритетом прослуховування агенти мають використовувати `test_listen`, перш ніж стверджувати, що +Для перевірки спершу з прослуховуванням агенти мають використовувати `test_listen`, перш ніж стверджувати, що зустріч корисна: ```json @@ -870,7 +789,7 @@ JSON маніфесту без створення папки або ZIP. Це к } ``` -Запустіть захищений live smoke для реальної збереженої зустрічі: +Запустіть захищену live smoke-перевірку на реальній збереженій зустрічі: ```bash OPENCLAW_LIVE_TEST=1 \ @@ -878,47 +797,47 @@ OPENCLAW_GOOGLE_MEET_LIVE_MEETING=https://meet.google.com/abc-defg-hij \ pnpm test:live -- extensions/google-meet/google-meet.live.test.ts ``` -Запустіть live-браузерну перевірку з пріоритетом прослуховування для зустрічі, де хтось -говоритиме з доступними субтитрами Meet: +Запустіть live браузерну пробу з прослуховуванням спочатку на зустрічі, де хтось буде +говорити за наявності субтитрів Meet: ```bash openclaw googlemeet setup --transport chrome-node --mode transcribe openclaw googlemeet test-listen https://meet.google.com/abc-defg-hij --transport chrome-node --timeout-ms 30000 ``` -Середовище live smoke: +Середовище live smoke-перевірки: - `OPENCLAW_LIVE_TEST=1` вмикає захищені live-тести. -- `OPENCLAW_GOOGLE_MEET_LIVE_MEETING` вказує на збережену URL-адресу Meet, код або +- `OPENCLAW_GOOGLE_MEET_LIVE_MEETING` вказує на збережений Meet URL, код або `spaces/{id}`. - `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID` надає ідентифікатор клієнта OAuth. - `OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN` або `GOOGLE_MEET_REFRESH_TOKEN` надає - токен оновлення. + маркер оновлення. - Необов’язково: `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET`, `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN` і - `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` використовують ті самі резервні назви + `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` використовують ті самі резервні імена без префікса `OPENCLAW_`. -Базовий live smoke для артефактів/відвідуваності потребує +Базова live smoke-перевірка артефактів/відвідуваності потребує `https://www.googleapis.com/auth/meetings.space.readonly` і `https://www.googleapis.com/auth/meetings.conference.media.readonly`. Пошук у Calendar потребує `https://www.googleapis.com/auth/calendar.events.readonly`. Експорт тіла документа Drive потребує `https://www.googleapis.com/auth/drive.meet.readonly`. -Створіть новий простір Meet: +Створіть свіжий простір Meet: ```bash openclaw googlemeet create ``` -Команда друкує новий `meeting uri`, джерело та сеанс приєднання. З обліковими даними OAuth +Команда виводить новий `meeting uri`, джерело та сеанс приєднання. З обліковими даними OAuth вона використовує офіційний Google Meet API. Без облікових даних OAuth вона -використовує профіль браузера з виконаним входом закріпленого Chrome Node як резервний варіант. Агенти можуть +використовує як резервний варіант профіль браузера закріпленого вузла Chrome, у який виконано вхід. Агенти можуть використовувати інструмент `google_meet` з `action: "create"`, щоб створити й приєднатися за один -крок. Для створення лише URL-адреси передайте `"join": false`. +крок. Для створення лише URL передайте `"join": false`. -Приклад JSON-виводу з резервного режиму браузера: +Приклад JSON-виводу з резервного браузерного режиму: ```json { @@ -938,9 +857,9 @@ openclaw googlemeet create } ``` -Якщо резервний режим браузера натрапляє на вхід у Google або блокування дозволу Meet до того, як -зможе створити URL-адресу, метод Gateway повертає невдалу відповідь, а -інструмент `google_meet` повертає структуровані деталі замість простого рядка: +Якщо резервний браузерний режим стикається з входом Google або блокуванням дозволів Meet до того, як +зможе створити URL, метод Gateway повертає невдалу відповідь, а інструмент +`google_meet` повертає структуровані деталі замість звичайного рядка: ```json { @@ -959,8 +878,8 @@ openclaw googlemeet create ``` Коли агент бачить `manualActionRequired: true`, він має повідомити -`manualActionMessage` разом із контекстом Node/вкладки браузера та припинити відкривати нові -вкладки Meet, доки оператор не виконає крок у браузері. +`manualActionMessage` разом із контекстом вузла/вкладки браузера та припинити відкривати нові +вкладки Meet, доки оператор не завершить крок у браузері. Приклад JSON-виводу зі створення через API: @@ -985,21 +904,21 @@ openclaw googlemeet create Створення Meet за замовчуванням приєднує до зустрічі. Транспорт Chrome або Chrome-node все ще потребує профілю Google Chrome із виконаним входом, щоб приєднатися через браузер. Якщо -профіль вийшов із системи, OpenClaw повідомляє `manualActionRequired: true` або -помилку резервного браузерного варіанта й просить оператора завершити вхід у Google перед +з профілю виконано вихід, OpenClaw повідомляє `manualActionRequired: true` або +помилку резервного браузерного режиму й просить оператора завершити вхід у Google перед повторною спробою. Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud -project, OAuth principal і учасники зустрічі зареєстровані в Google +проєкт, OAuth-принципал і учасники зустрічі зареєстровані в Google Workspace Developer Preview Program для Meet media APIs. ## Конфігурація -Спільному шляху агента Chrome потрібні лише ввімкнений Plugin, BlackHole, SoX, ключ -провайдера транскрипції в реальному часі та налаштований провайдер TTS OpenClaw. -OpenAI є провайдером транскрипції за замовчуванням; установіть `realtime.voiceProvider` на +Спільному шляху агента Chrome потрібні лише ввімкнений Plugin, BlackHole, SoX, +ключ провайдера транскрипції в реальному часі та налаштований провайдер TTS OpenClaw. +OpenAI є стандартним провайдером транскрипції; установіть `realtime.voiceProvider` на `"google"` і `realtime.model`, щоб використовувати Google Gemini Live для режиму `bidi` -без зміни провайдера транскрипції за замовчуванням для agent-mode: +без зміни стандартного провайдера транскрипції для режиму агента: ```bash brew install blackhole-2ch sox @@ -1008,7 +927,7 @@ export OPENAI_API_KEY=sk-... export GEMINI_API_KEY=... ``` -Установіть конфігурацію Plugin у `plugins.entries.google-meet.config`: +Задайте конфігурацію Plugin у `plugins.entries.google-meet.config`: ```json5 { @@ -1023,64 +942,64 @@ export GEMINI_API_KEY=... } ``` -Значення за замовчуванням: +Типові значення: - `defaultTransport: "chrome"` - `defaultMode: "agent"` (`"realtime"` приймається лише як застарілий псевдонім сумісності для `"agent"`; нові виклики інструментів мають указувати `"agent"`) -- `chromeNode.node`: необов’язковий id/name/IP Node для `chrome-node` +- `chromeNode.node`: необов’язковий ідентифікатор/назва/IP вузла для `chrome-node` - `chrome.audioBackend: "blackhole-2ch"` -- `chrome.guestName: "OpenClaw Agent"`: ім’я, що використовується на екрані гостя Meet - без виконаного входу -- `chrome.autoJoin: true`: заповнення імені гостя та натискання Join Now за принципом - найкращого зусилля через браузерну автоматизацію OpenClaw на `chrome-node` +- `chrome.guestName: "OpenClaw Agent"`: ім’я, що використовується на гостьовому + екрані Meet без виконаного входу +- `chrome.autoJoin: true`: best-effort заповнення гостьового імені та натискання Join Now + через браузерну автоматизацію OpenClaw на `chrome-node` - `chrome.reuseExistingTab: true`: активувати наявну вкладку Meet замість - відкриття дублікатів -- `chrome.waitForInCallMs: 20000`: чекати, доки вкладка Meet повідомить, що вона в дзвінку, - перш ніж спрацює вступний talk-back + відкривання дублікатів +- `chrome.waitForInCallMs: 20000`: чекати, доки вкладка Meet повідомить про стан у дзвінку, + перш ніж запускати вступ для відповіді голосом - `chrome.audioFormat: "pcm16-24khz"`: аудіоформат пари команд. Використовуйте - `"g711-ulaw-8khz"` лише для застарілих/кастомних пар команд, які все ще видають - телефонне аудіо. -- `chrome.audioBufferBytes: 4096`: буфер обробки SoX для згенерованих команд аудіо - пари команд Chrome. Це половина стандартного 8192-байтового буфера SoX, - що зменшує стандартну затримку каналу, залишаючи можливість збільшити його на завантажених хостах. - Значення нижче мінімуму SoX обмежуються до 17 байтів. + `"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` + і записує аудіо у форматі `chrome.audioFormat` +- `chrome.audioOutputCommand`: команда SoX, що читає аудіо у форматі `chrome.audioFormat` і записує в CoreAudio `BlackHole 2ch` -- `chrome.bargeInInputCommand`: необов’язкова команда локального мікрофона, яка записує - підписаний 16-бітний little-endian mono PCM для виявлення втручання людини, доки - відтворення асистента активне. Наразі це застосовується до розміщеного на Gateway - мосту пари команд `chrome`. -- `chrome.bargeInRmsThreshold: 650`: рівень RMS, що рахується як людське - переривання на `chrome.bargeInInputCommand` -- `chrome.bargeInPeakThreshold: 2500`: піковий рівень, що рахується як людське - переривання на `chrome.bargeInInputCommand` +- `chrome.bargeInInputCommand`: необов’язкова команда локального мікрофона, що записує + signed 16-bit little-endian mono PCM для виявлення людського втручання, поки + активне відтворення асистента. Наразі це застосовується до розміщеного на Gateway + моста пари команд `chrome`. +- `chrome.bargeInRmsThreshold: 650`: рівень RMS, що вважається людським + перериванням на `chrome.bargeInInputCommand` +- `chrome.bargeInPeakThreshold: 2500`: піковий рівень, що вважається людським + перериванням на `chrome.bargeInInputCommand` - `chrome.bargeInCooldownMs: 900`: мінімальна затримка між повторними очищеннями - людського переривання -- `mode: "agent"`: стандартний режим talk-back. Мовлення учасників транскрибується + людських переривань +- `mode: "agent"`: стандартний режим відповіді голосом. Мовлення учасників транскрибується налаштованим провайдером транскрипції в реальному часі, надсилається налаштованому - агенту OpenClaw у сесії під-агента для окремої зустрічі та озвучується через - звичайне середовище виконання TTS OpenClaw. -- `mode: "bidi"`: резервний прямий двонапрямний режим моделі реального часу. Провайдер - голосу в реальному часі відповідає безпосередньо на мовлення учасників і може викликати - `openclaw_agent_consult` для глибших/підкріплених інструментами відповідей. -- `mode: "transcribe"`: режим лише спостереження без моста talk-back. -- `realtime.provider: "openai"`: резерв сумісності, який використовується, коли наведені нижче - поля провайдера з областю дії не задані. -- `realtime.transcriptionProvider: "openai"`: id провайдера, який режим `agent` використовує - для транскрипції в реальному часі. -- `realtime.voiceProvider`: id провайдера, який режим `bidi` використовує для прямого голосу - в реальному часі. Установіть це на `"google"`, щоб використовувати Gemini Live, залишаючи - транскрипцію agent-mode на OpenAI. + агенту OpenClaw у сеансі субагента для конкретної зустрічі та озвучується через + звичайне середовище виконання OpenClaw TTS. +- `mode: "bidi"`: резервний прямий двоспрямований режим моделі реального часу. Провайдер + голосу реального часу відповідає безпосередньо на мовлення учасників і може викликати + `openclaw_agent_consult` для глибших відповідей із підтримкою інструментів. +- `mode: "transcribe"`: режим лише спостереження без моста відповіді голосом. +- `realtime.provider: "openai"`: резервна сумісність, що використовується, коли + наведені нижче поля провайдера в області дії не задані. +- `realtime.transcriptionProvider: "openai"`: ідентифікатор провайдера, який режим `agent` + використовує для транскрипції в реальному часі. +- `realtime.voiceProvider`: ідентифікатор провайдера, який режим `bidi` використовує для прямого + голосу в реальному часі. Установіть це на `"google"`, щоб використовувати Gemini Live, + зберігаючи транскрипцію режиму агента на OpenAI. - `realtime.toolPolicy: "safe-read-only"` - `realtime.instructions`: короткі усні відповіді, з `openclaw_agent_consult` для глибших відповідей - `realtime.introMessage`: коротка усна перевірка готовності, коли міст реального часу - підключається; установіть її на `""`, щоб приєднуватися мовчки -- `realtime.agentId`: необов’язковий id агента OpenClaw для - `openclaw_agent_consult`; за замовчуванням `main` + підключається; установіть значення `""`, щоб приєднатися мовчки +- `realtime.agentId`: необов’язковий ідентифікатор агента OpenClaw для + `openclaw_agent_consult`; стандартне значення — `main` Необов’язкові перевизначення: @@ -1151,11 +1070,11 @@ export GEMINI_API_KEY=... ``` `voiceCall.enabled` за замовчуванням має значення `true`; з транспортом Twilio він делегує -фактичний PSTN-дзвінок, DTMF і вступне привітання Plugin Voice Call. Voice Call +фактичний виклик PSTN, DTMF і вступне привітання Plugin Voice Call. Voice Call відтворює послідовність DTMF перед відкриттям медіапотоку реального часу, а потім використовує -збережений вступний текст як початкове привітання в реальному часі. Якщо `voice-call` не -ввімкнено, Google Meet усе ще може перевіряти й записувати план набору, але не може -здійснити дзвінок Twilio. +збережений вступний текст як початкове привітання реального часу. Якщо `voice-call` не +ввімкнено, Google Meet усе ще може перевірити й записати план набору, але не може +здійснити виклик Twilio. ## Інструмент @@ -1171,42 +1090,45 @@ export GEMINI_API_KEY=... ``` Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. Використовуйте -`transport: "chrome-node"`, коли Chrome працює на спареному Node, наприклад VM Parallels. -В обох випадках провайдери моделей і `openclaw_agent_consult` виконуються на хості -Gateway, тому облікові дані моделей залишаються там. З типовим `mode: "agent"` -провайдер транскрипції в реальному часі відповідає за прослуховування, налаштований агент OpenClaw -створює відповідь, а звичайний TTS OpenClaw промовляє її в Meet. Використовуйте -`mode: "bidi"`, коли хочете, щоб голосова модель реального часу відповідала безпосередньо. +`transport: "chrome-node"`, коли Chrome працює на спареному вузлі, наприклад VM Parallels. +В обох випадках провайдери моделей і `openclaw_agent_consult` працюють на хості +Gateway, тому облікові дані моделей залишаються там. Зі стандартним `mode: "agent"` +провайдер транскрипції в реальному часі виконує прослуховування, налаштований агент OpenClaw +створює відповідь, а звичайний OpenClaw TTS промовляє її в Meet. Використовуйте +`mode: "bidi"`, коли потрібно, щоб голосова модель реального часу відповідала напряму. Сире `mode: "realtime"` і надалі приймається як застарілий псевдонім сумісності для -`mode: "agent"`, але більше не рекламується у схемі інструментів агента. +`mode: "agent"`, але більше не рекламується в схемі інструментів агента. +Журнали режиму агента містять визначені провайдера/модель транскрипції під час запуску +моста, а також провайдера TTS, модель, голос, вихідний формат і частоту дискретизації після +кожної синтезованої відповіді. -Використовуйте `action: "status"`, щоб перелічити активні сесії або перевірити ID сесії. Використовуйте -`action: "speak"` з `sessionId` і `message`, щоб агент реального часу -заговорив негайно. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сесію, +Використовуйте `action: "status"`, щоб перелічити активні сеанси або перевірити ID сеансу. Використовуйте +`action: "speak"` із `sessionId` і `message`, щоб агент реального часу +негайно заговорив. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сеанс, запустити відому фразу й повернути стан `inCall`, коли хост Chrome може -про це повідомити. `test_speech` завжди примусово встановлює `mode: "agent"` і завершується помилкою, якщо його просять -працювати в `mode: "transcribe"`, оскільки сесії лише спостереження навмисно не можуть -видавати мовлення. Його результат `speechOutputVerified` базується на збільшенні байтів аудіовиходу -в реальному часі під час цього тестового виклику, тому повторно використана сесія зі старішим аудіо -не рахується як нова успішна перевірка мовлення. Використовуйте `action: "leave"`, щоб позначити -сесію завершеною. +повідомити його. `test_speech` завжди примусово встановлює `mode: "agent"` і завершується помилкою, якщо його просять +запуститися в `mode: "transcribe"`, оскільки сеанси лише спостереження навмисно не можуть +виводити мовлення. Його результат `speechOutputVerified` ґрунтується на збільшенні байтів аудіовиходу +реального часу під час цього тестового виклику, тому повторно використаний сеанс зі старішим аудіо +не вважається свіжою успішною перевіркою мовлення. Використовуйте `action: "leave"`, щоб позначити +сеанс завершеним. `status` містить стан Chrome, коли він доступний: -- `inCall`: Chrome, схоже, перебуває всередині дзвінка Meet -- `micMuted`: стан мікрофона Meet за принципом найкращого зусилля +- `inCall`: схоже, Chrome перебуває всередині виклику Meet +- `micMuted`: best-effort стан мікрофона Meet - `manualActionRequired` / `manualActionReason` / `manualActionMessage`: профілю браузера потрібні ручний вхід, допуск хостом Meet, дозволи або - ремонт керування браузером, перш ніж мовлення зможе працювати + відновлення керування браузером, перш ніж мовлення зможе працювати - `speechReady` / `speechBlockedReason` / `speechBlockedMessage`: чи кероване мовлення Chrome дозволене зараз. `speechReady: false` означає, що OpenClaw не надіслав вступну/тестову фразу в аудіоміст. - `providerConnected` / `realtimeReady`: стан голосового моста реального часу - `lastInputAt` / `lastOutputAt`: останнє аудіо, побачене з моста або надіслане до нього -- `audioOutputRouted` / `audioOutputDeviceLabel`: чи було медіавиведення вкладки Meet - активно скеровано на пристрій BlackHole, який використовує міст -- `lastSuppressedInputAt` / `suppressedInputBytes`: вхід local loopback, проігнорований, доки - відтворення асистента активне +- `audioOutputRouted` / `audioOutputDeviceLabel`: чи медіавихід вкладки Meet + був активно маршрутизований до пристрою BlackHole, який використовує міст +- `lastSuppressedInputAt` / `suppressedInputBytes`: вхід local loopback, проігнорований, поки + активне відтворення асистента ```json { @@ -1216,60 +1138,60 @@ Gateway, тому облікові дані моделей залишаютьс } ``` -## Режими Agent і Bidi +## Режими агента та Bidi -Режим Chrome `agent` оптимізований для поведінки «мій агент перебуває на зустрічі». Провайдер +Режим Chrome `agent` оптимізований для поведінки «мій агент присутній на зустрічі». Провайдер транскрипції в реальному часі чує аудіо зустрічі, фінальні транскрипти учасників -спрямовуються через налаштованого агента OpenClaw, а відповідь промовляється через -звичайне середовище виконання TTS OpenClaw. Установіть `mode: "bidi"`, коли хочете, -щоб голосова модель реального часу відповідала безпосередньо. -Близькі фінальні фрагменти транскрипту об’єднуються перед consult, щоб один усний +маршрутизуються через налаштованого агента OpenClaw, а відповідь +озвучується через звичайне середовище виконання OpenClaw TTS. Установіть `mode: "bidi"`, коли хочете, +щоб голосова модель реального часу відповідала напряму. +Близькі фінальні фрагменти транскрипту об’єднуються перед консультацією, щоб один усний хід не створював кілька застарілих часткових відповідей. Вхід реального часу також -пригнічується, доки поставлене в чергу аудіо асистента все ще відтворюється, -а нещодавні схожі на асистента відлуння транскрипту ігноруються перед agent consult, +приглушується, поки аудіо асистента в черзі ще відтворюється, +а недавні схожі на асистента відлуння транскрипту ігноруються перед консультацією агента, щоб local loopback BlackHole не змушував агента відповідати на власне мовлення. -| Режим | Хто вирішує відповідь | Шлях виведення мовлення | Коли використовувати | -| ------- | ----------------------------- | -------------------------------------- | ----------------------------------------------------- | -| `agent` | Налаштований агент OpenClaw | Звичайне середовище виконання TTS OpenClaw | Потрібна поведінка «мій агент перебуває на зустрічі» | -| `bidi` | Голосова модель реального часу | Аудіовідповідь провайдера голосу реального часу | Потрібен розмовний голосовий цикл із найменшою затримкою | +| Режим | Хто визначає відповідь | Шлях мовного виводу | Коли використовувати | +| ------- | ----------------------------- | --------------------------------------- | ------------------------------------------------------ | +| `agent` | Налаштований агент OpenClaw | Звичайне середовище виконання OpenClaw TTS | Потрібна поведінка «мій агент присутній на зустрічі» | +| `bidi` | Голосова модель реального часу | Аудіовідповідь провайдера голосу реального часу | Потрібен голосовий діалоговий цикл із найнижчою затримкою | -У режимі `bidi`, коли моделі реального часу потрібні глибше міркування, поточна +У режимі `bidi`, коли моделі реального часу потрібні глибші міркування, поточна інформація або звичайні інструменти OpenClaw, вона може викликати `openclaw_agent_consult`. -Інструмент consult запускає звичайного агента OpenClaw за лаштунками з контекстом -нещодавнього транскрипту зустрічі й повертає стислу усну відповідь. У режимі `agent` +Інструмент консультації запускає звичайного агента OpenClaw у фоновому режимі з нещодавнім +контекстом транскрипту зустрічі й повертає стислу усну відповідь. У режимі `agent` OpenClaw надсилає цю відповідь безпосередньо до середовища виконання TTS; у режимі `bidi` -голосова модель реального часу може промовити результат consult назад у зустріч. Він використовує -той самий спільний механізм consult, що й Voice Call. +голосова модель реального часу може промовити результат консультації назад у зустріч. Він використовує +той самий спільний механізм консультацій, що й Voice Call. -За замовчуванням consult виконуються для агента `main`. Установіть `realtime.agentId`, коли -лінія Meet має консультуватися з окремим робочим простором агента OpenClaw, стандартними моделями, -політикою інструментів, пам’яттю та історією сесії. +За замовчуванням консультації виконуються для агента `main`. Установіть `realtime.agentId`, коли +лінія Meet має консультуватися зі спеціальним робочим простором агента OpenClaw, стандартними значеннями моделі, +політикою інструментів, пам’яттю та історією сеансів. -Consult у режимі agent-mode використовують ключ сесії `agent::subagent:google-meet:` -для окремої зустрічі, щоб подальші запитання зберігали контекст зустрічі, успадковуючи звичайну +Консультації в режимі агента використовують ключ сеансу `agent::subagent:google-meet:` +для конкретної зустрічі, щоб подальші запитання зберігали контекст зустрічі, успадковуючи звичайну політику агента від налаштованого агента. -`realtime.toolPolicy` керує запуском consult: +`realtime.toolPolicy` керує запуском консультації: -- `safe-read-only`: відкрити інструмент consult і обмежити звичайного агента до +- `safe-read-only`: відкрити інструмент консультації та обмежити звичайного агента до `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і `memory_get`. -- `owner`: відкрити інструмент consult і дозволити звичайному агенту використовувати звичайну +- `owner`: відкрити інструмент консультації та дозволити звичайному агенту використовувати звичайну політику інструментів агента. -- `none`: не відкривати інструмент consult для голосової моделі реального часу. +- `none`: не відкривати інструмент консультації для голосової моделі реального часу. -Ключ сесії consult має область дії в межах сесії Meet, тому наступні виклики consult -можуть повторно використовувати попередній контекст consult під час тієї самої зустрічі. +Ключ консультаційного сеансу має область дії в межах одного сеансу Meet, тож подальші консультаційні виклики +можуть повторно використовувати попередній консультаційний контекст під час тієї самої зустрічі. -Щоб примусово виконати усну перевірку готовності після повного приєднання Chrome до дзвінка: +Щоб примусово виконати голосову перевірку готовності після того, як Chrome повністю приєднався до виклику: ```bash openclaw googlemeet speak meet_... "Say exactly: I'm here and listening." ``` -Для повної smoke-перевірки приєднання й мовлення: +Для повної перевірки приєднання з промовлянням: ```bash openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ @@ -1279,7 +1201,7 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ ## Контрольний список live-тесту -Використовуйте цю послідовність, перш ніж передавати зустріч автономному агенту: +Використайте цю послідовність перед передаванням зустрічі автономному агенту: ```bash openclaw googlemeet setup @@ -1293,10 +1215,10 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ - `googlemeet setup` повністю зелений. - `googlemeet setup` містить `chrome-node-connected`, коли Chrome-node є - типовим транспортом або вузол закріплено. -- `nodes status` показує, що вибраний вузол підключено. -- Вибраний вузол оголошує і `googlemeet.chrome`, і `browser.proxy`. -- Вкладка Meet приєднується до виклику, а `test-speech` повертає стан Chrome з + типовим транспортом або node закріплено. +- `nodes status` показує, що вибраний node підключено. +- Вибраний node оголошує і `googlemeet.chrome`, і `browser.proxy`. +- Вкладка Meet приєднується до виклику, а `test-speech` повертає стан Chrome із `inCall: true`. Для віддаленого хоста Chrome, наприклад Parallels macOS VM, це найкоротша @@ -1311,12 +1233,11 @@ openclaw nodes invoke \ --params '{"action":"setup"}' ``` -Це підтверджує, що Plugin Gateway завантажено, вузол VM підключено з поточним -токеном, а аудіоміст Meet доступний до того, як агент відкриє вкладку реальної -зустрічі. +Це підтверджує, що Gateway Plugin завантажено, node VM підключено з +поточним токеном, а аудіоміст Meet доступний до того, як агент відкриє +справжню вкладку зустрічі. -Для smoke-перевірки Twilio використовуйте зустріч, яка надає дані телефонного -дозвону: +Для перевірки Twilio використовуйте зустріч, яка показує дані телефонного дозвону: ```bash openclaw googlemeet setup @@ -1332,8 +1253,8 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ `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 ` завершує делегований голосовий виклик. ## Усунення несправностей @@ -1347,20 +1268,18 @@ openclaw plugins list | grep google-meet openclaw googlemeet setup ``` -Якщо ви щойно редагували `plugins.entries.google-meet`, перезапустіть або -перезавантажте Gateway. Запущений агент бачить лише інструменти Plugin, -зареєстровані поточним процесом Gateway. +Якщо ви щойно відредагували `plugins.entries.google-meet`, перезапустіть або перезавантажте Gateway. +Запущений агент бачить лише інструменти Plugin, зареєстровані поточним процесом Gateway. -На хостах Gateway не macOS інструмент `google_meet`, видимий агенту, залишається -доступним, але локальні дії Chrome talk-back блокуються до потрапляння в -аудіоміст. Локальний звук Chrome talk-back наразі залежить від macOS -`BlackHole 2ch`, тому агенти Linux мають використовувати `mode: "transcribe"`, -дозвін Twilio або хост macOS `chrome-node` замість типового шляху локального -агента Chrome. +На хостах Gateway не з macOS інструмент `google_meet`, видимий агенту, залишається доступним, +але локальні дії зворотного мовлення Chrome блокуються до потрапляння в аудіоміст. +Локальне аудіо зворотного мовлення Chrome наразі залежить від macOS `BlackHole 2ch`, тому +агентам Linux слід використовувати `mode: "transcribe"`, дозвін Twilio або хост macOS +`chrome-node` замість типового локального шляху агента Chrome. -### Немає підключеного вузла з підтримкою Google Meet +### Немає підключеного node з підтримкою Google Meet -На хості вузла виконайте: +На хості node виконайте: ```bash openclaw plugins enable google-meet @@ -1369,7 +1288,7 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host --port 18789 --display-name parallels-macos ``` -На хості Gateway схваліть вузол і перевірте команди: +На хості Gateway схваліть node і перевірте команди: ```bash openclaw devices list @@ -1377,8 +1296,8 @@ openclaw devices approve openclaw nodes status ``` -Вузол має бути підключений і вказувати `googlemeet.chrome` разом із -`browser.proxy`. Конфігурація Gateway має дозволяти ці команди вузла: +Node має бути підключений і перелічувати `googlemeet.chrome` плюс `browser.proxy`. +Конфігурація Gateway має дозволяти ці команди node: ```json5 { @@ -1390,9 +1309,9 @@ openclaw nodes status } ``` -Якщо `googlemeet setup` не проходить `chrome-node-connected` або журнал Gateway -повідомляє `gateway token mismatch`, перевстановіть або перезапустіть вузол із -поточним токеном Gateway. Для LAN Gateway це зазвичай означає: +Якщо `googlemeet setup` не проходить `chrome-node-connected` або журнал Gateway повідомляє +`gateway token mismatch`, перевстановіть або перезапустіть node з поточним токеном Gateway. +Для LAN Gateway це зазвичай означає: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ @@ -1403,7 +1322,7 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ --force ``` -Потім перезавантажте службу вузла й повторно виконайте: +Потім перезавантажте службу node і повторно виконайте: ```bash openclaw googlemeet setup @@ -1412,58 +1331,53 @@ openclaw nodes status --connected ### Браузер відкривається, але агент не може приєднатися -Запустіть `googlemeet test-listen` для приєднань лише для спостереження або -`googlemeet test-speech` для realtime-приєднань, а потім перевірте повернений -стан Chrome. Якщо будь-яка з перевірок повідомляє `manualActionRequired: true`, -покажіть `manualActionMessage` оператору й припиніть повторні спроби, доки дію в -браузері не буде завершено. +Запустіть `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 +Не повідомляйте "не виконано вхід" лише тому, що Meet показує "Do you want people to hear you in the meeting?" Це проміжний екран вибору аудіо Meet; OpenClaw -натискає **Use microphone** через автоматизацію браузера, коли це доступно, і -продовжує чекати на реальний стан зустрічі. Для резервного створення лише через -браузер OpenClaw може натиснути **Continue without microphone**, оскільки для -створення URL не потрібен realtime-аудіошлях. +натискає **Use microphone** через автоматизацію браузера, коли це доступно, і продовжує +очікувати на справжній стан зустрічі. Для резервного створення лише через браузер OpenClaw +може натиснути **Continue without microphone**, оскільки створення URL не потребує +realtime-аудіошляху. ### Не вдається створити зустріч -`googlemeet create` спочатку використовує endpoint Google Meet API -`spaces.create`, коли облікові дані OAuth налаштовано. Без облікових даних OAuth -він переходить до резервного браузера закріпленого вузла Chrome. Підтвердьте: +`googlemeet create` спочатку використовує endpoint `spaces.create` API Google Meet, +коли облікові дані OAuth налаштовано. Без облікових даних OAuth він переходить до +резервного браузера закріпленого Chrome node. Підтвердьте: -- Для створення через API: `oauth.clientId` і `oauth.refreshToken` налаштовано, - або присутні відповідні змінні середовища `OPENCLAW_GOOGLE_MEET_*`. -- Для створення через API: refresh token було видано після додавання підтримки - створення. Старішим токенам може бракувати scope `meetings.space.created`; - повторно виконайте `openclaw googlemeet auth login --json` і оновіть - конфігурацію Plugin. +- Для створення через API: налаштовано `oauth.clientId` і `oauth.refreshToken`, + або наявні відповідні змінні середовища `OPENCLAW_GOOGLE_MEET_*`. +- Для створення через API: refresh token було випущено після додавання підтримки створення. + Старішим токенам може бракувати scope `meetings.space.created`; повторно виконайте + `openclaw googlemeet auth login --json` і оновіть конфігурацію Plugin. - Для резервного браузера: `defaultTransport: "chrome-node"` і - `chromeNode.node` вказують на підключений вузол із `browser.proxy` і + `chromeNode.node` вказують на підключений node із `browser.proxy` і `googlemeet.chrome`. -- Для резервного браузера: профіль Chrome OpenClaw на цьому вузлі виконано вхід +- Для резервного браузера: профіль Chrome OpenClaw на цьому node увійшов у Google і може відкрити `https://meet.google.com/new`. -- Для резервного браузера: повторні спроби повторно використовують наявну - вкладку `https://meet.google.com/new` або вкладку запиту облікового запису - Google перед відкриттям нової вкладки. Якщо агенту вичерпано час очікування, - повторіть виклик інструмента замість ручного відкриття ще однієї вкладки Meet. -- Для резервного браузера: якщо інструмент повертає `manualActionRequired: true`, - використовуйте повернені `browser.nodeId`, `browser.targetId`, `browserUrl` і - `manualActionMessage`, щоб скерувати оператора. Не повторюйте спроби в циклі, - доки цю дію не буде завершено. +- Для резервного браузера: повторні спроби повторно використовують наявну вкладку `https://meet.google.com/new` + або вкладку запиту облікового запису Google перед відкриттям нової вкладки. Якщо в агента стається тайм-аут, + повторіть виклик інструмента, а не відкривайте іншу вкладку Meet вручну. +- Для резервного браузера: якщо інструмент повертає `manualActionRequired: true`, використайте + повернені `browser.nodeId`, `browser.targetId`, `browserUrl` і + `manualActionMessage`, щоб скерувати оператора. Не повторюйте спроби в циклі, доки цю + дію не буде завершено. - Для резервного браузера: якщо Meet показує "Do you want people to hear you in the - meeting?", залиште вкладку відкритою. OpenClaw має натиснути **Use microphone** - або, для резервного створення лише через браузер, **Continue without microphone** - через автоматизацію браузера й продовжити чекати на згенерований URL Meet. - Якщо це неможливо, помилка має згадувати `meet-audio-choice-required`, а не - `google-login-required`. + meeting?", залиште вкладку відкритою. OpenClaw має натиснути **Use microphone** або, для + резервного створення лише через браузер, **Continue without microphone** через автоматизацію браузера + і продовжити чекати на згенерований URL Meet. Якщо це не вдається, у + помилці має згадуватися `meet-audio-choice-required`, а не `google-login-required`. ### Агент приєднується, але не говорить @@ -1474,64 +1388,62 @@ openclaw googlemeet setup openclaw googlemeet doctor ``` -Використовуйте `mode: "agent"` для звичайного шляху STT -> агент OpenClaw -> -TTS talk-back або `mode: "bidi"` для прямого резервного realtime-голосу. -`mode: "transcribe"` навмисно не запускає міст talk-back. Для налагодження лише -спостереження запустіть `openclaw googlemeet status --json ` після -того, як учасники говоритимуть, і перевірте `captioning`, `transcriptLines` і -`lastCaptionText`. Якщо `inCall` дорівнює true, але `transcriptLines` залишається -`0`, субтитри Meet можуть бути вимкнені, ніхто не говорив після встановлення -спостерігача, інтерфейс Meet змінився або live-субтитри недоступні для мови чи -облікового запису зустрічі. +Використовуйте `mode: "agent"` для нормального шляху STT -> агент OpenClaw -> TTS-зворотне мовлення, +або `mode: "bidi"` для прямого резервного realtime-голосу. `mode: "transcribe"` +навмисно не запускає міст зворотного мовлення. Для налагодження лише спостереження +виконайте `openclaw googlemeet status --json ` після того, як учасники заговорять, +і перевірте `captioning`, `transcriptLines` і `lastCaptionText`. Якщо `inCall` має +значення true, але `transcriptLines` залишається `0`, субтитри Meet можуть бути вимкнені, ніхто +не говорив після встановлення спостерігача, інтерфейс Meet змінився або live-субтитри +недоступні для мови/облікового запису зустрічі. -`googlemeet test-speech` завжди перевіряє realtime-шлях і повідомляє, чи були -спостережені байти виходу моста для цього виклику. Якщо `speechOutputVerified` дорівнює false, а -`speechOutputTimedOut` дорівнює true, realtime-провайдер міг прийняти -висловлювання, але OpenClaw не побачив, щоб нові вихідні байти дійшли до -аудіомоста Chrome. +`googlemeet test-speech` завжди перевіряє realtime-шлях і повідомляє, чи +байти виводу моста було помічено для цього виклику. Якщо `speechOutputVerified` має значення false, а +`speechOutputTimedOut` має значення true, realtime-провайдер міг прийняти +висловлювання, але OpenClaw не побачив, щоб нові байти виводу дійшли до аудіомоста +Chrome. Також перевірте: -- Ключ realtime-провайдера доступний на хості Gateway, наприклад +- На хості Gateway доступний ключ realtime-провайдера, наприклад `OPENAI_API_KEY` або `GEMINI_API_KEY`. - `BlackHole 2ch` видимий на хості Chrome. - `sox` існує на хості Chrome. -- Мікрофон і динамік Meet маршрутизовано через віртуальний аудіошлях, який - використовує OpenClaw. `doctor` має показати `meet output routed: yes` для - локальних realtime-приєднань Chrome. +- Мікрофон і динамік Meet спрямовано через віртуальний аудіошлях, який використовує + OpenClaw. `doctor` має показати `meet output routed: yes` для локальних realtime-приєднань Chrome. -`googlemeet doctor [session-id]` виводить сеанс, вузол, стан у виклику, причину -ручної дії, підключення realtime-провайдера, `realtimeReady`, активність -аудіовходу/виходу, останні аудіомітки часу, лічильники байтів і URL браузера. -Використовуйте `googlemeet status [session-id] --json`, коли потрібен сирий -JSON. Використовуйте `googlemeet doctor --oauth`, коли потрібно перевірити -оновлення Google Meet OAuth без розкриття токенів; додайте `--meeting` або -`--create-space`, коли також потрібне підтвердження Google Meet API. +`googlemeet doctor [session-id]` друкує сеанс, node, стан у виклику, +причину ручної дії, підключення realtime-провайдера, `realtimeReady`, активність +аудіовходу/аудіовиходу, останні аудіомітки часу, лічильники байтів і URL браузера. +Використовуйте `googlemeet status [session-id] --json`, коли потрібен сирий JSON. Використовуйте +`googlemeet doctor --oauth`, коли потрібно перевірити оновлення OAuth Google Meet +без розкриття токенів; додайте `--meeting` або `--create-space`, коли також потрібне +підтвердження API Google Meet. -Якщо агенту вичерпано час очікування і ви бачите вже відкриту вкладку Meet, -перевірте цю вкладку, не відкриваючи іншу: +Якщо в агента стався тайм-аут і ви бачите вже відкриту вкладку Meet, огляньте цю вкладку +без відкриття іншої: ```bash openclaw googlemeet recover-tab openclaw googlemeet recover-tab https://meet.google.com/abc-defg-hij ``` -Еквівалентна дія інструмента — `recover_current_tab`. Вона фокусує та перевіряє -наявну вкладку Meet для вибраного транспорту. З `chrome` вона використовує -локальне керування браузером через Gateway; з `chrome-node` вона використовує -налаштований вузол Chrome. Вона не відкриває нову вкладку й не створює новий -сеанс; вона повідомляє поточний блокер, наприклад вхід, допуск, дозволи або стан -вибору аудіо. Команда CLI звертається до налаштованого Gateway, тому Gateway має -працювати; `chrome-node` також вимагає, щоб вузол Chrome було підключено. +Еквівалентна дія інструмента — `recover_current_tab`. Вона фокусує й оглядає +наявну вкладку Meet для вибраного транспорту. З `chrome` вона використовує локальне +керування браузером через Gateway; з `chrome-node` вона використовує налаштований +Chrome node. Вона не відкриває нову вкладку й не створює новий сеанс; вона повідомляє +поточний блокер, наприклад вхід, допуск, дозволи або стан вибору аудіо. +Команда CLI звертається до налаштованого Gateway, тому Gateway має бути запущений; +`chrome-node` також потребує підключеного Chrome node. -### Перевірки налаштування Twilio не проходять +### Не проходять перевірки налаштування Twilio -`twilio-voice-call-plugin` не проходить, коли `voice-call` не дозволено або не -увімкнено. Додайте його до `plugins.allow`, увімкніть -`plugins.entries.voice-call` і перезавантажте Gateway. +`twilio-voice-call-plugin` не проходить, коли `voice-call` не дозволено або не ввімкнено. +Додайте його до `plugins.allow`, увімкніть `plugins.entries.voice-call` і перезавантажте +Gateway. -`twilio-voice-call-credentials` не проходить, коли бекенду Twilio бракує account -SID, auth token або номера абонента. Задайте їх на хості Gateway: +`twilio-voice-call-credentials` не проходить, коли backend Twilio не має account +SID, auth token або caller number. Встановіть їх на хості Gateway: ```bash export TWILIO_ACCOUNT_SID=AC... @@ -1539,14 +1451,13 @@ 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 провайдера або налаштуйте тунель/експозицію Tailscale для -`voice-call`. +`twilio-voice-call-webhook` не проходить, коли `voice-call` не має публічного +доступу Webhook або коли `publicUrl` вказує на loopback чи простір приватної мережі. +Встановіть `plugins.entries.voice-call.config.publicUrl` на публічний URL провайдера або +налаштуйте tunnel/Tailscale-доступ для `voice-call`. -Loopback і приватні URL недійсні для callback-ів операторів зв’язку. Не -використовуйте `localhost`, `127.0.0.1`, `0.0.0.0`, `10.x`, `172.16.x`-`172.31.x`, +Loopback і приватні URL не є дійсними для callback від операторів. Не використовуйте +`localhost`, `127.0.0.1`, `0.0.0.0`, `10.x`, `172.16.x`-`172.31.x`, `192.168.x`, `169.254.x`, `fc00::/7` або `fd00::/8` як `publicUrl`. Для стабільного публічного URL: @@ -1568,8 +1479,8 @@ Loopback і приватні URL недійсні для callback-ів опер } ``` -Для локальної розробки використовуйте тунель або експозицію Tailscale замість -приватного URL хоста: +Для локальної розробки використовуйте tunnel або Tailscale-доступ замість URL приватного +хоста: ```json5 { @@ -1595,14 +1506,13 @@ openclaw voicecall setup openclaw voicecall smoke ``` -`voicecall smoke` за замовчуванням лише перевіряє готовність. Щоб виконати dry-run -для конкретного номера: +`voicecall smoke` типово лише перевіряє готовність. Щоб виконати пробний запуск для конкретного номера: ```bash openclaw voicecall smoke --to "+15555550123" ``` -Додавайте `--yes` лише тоді, коли навмисно хочете здійснити live вихідний +Додавайте `--yes` лише тоді, коли навмисно хочете здійснити справжній вихідний сповіщувальний виклик: ```bash @@ -1611,8 +1521,7 @@ openclaw voicecall smoke --to "+15555550123" --yes ### Виклик Twilio починається, але ніколи не входить у зустріч -Підтвердьте, що подія Meet надає дані телефонного дозвону. Передайте точний -номер дозвону та PIN або власну DTMF-послідовність: +Переконайтеся, що подія Meet надає подробиці телефонного підключення. Передайте точний номер для набору та PIN або власну послідовність DTMF: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij \ @@ -1621,81 +1530,38 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --dtmf-sequence ww123456# ``` -Використовуйте початкові `w` або коми в `--dtmf-sequence`, якщо провайдеру потрібна пауза -перед введенням PIN-коду. +Використовуйте початкові `w` або коми в `--dtmf-sequence`, якщо провайдеру потрібна пауза перед введенням PIN. -Якщо телефонний виклик створено, але в списку учасників Meet так і не зʼявляється -учасник, що приєднався через телефонний набір: +Якщо телефонний виклик створено, але список учасників Meet ніколи не показує учасника з телефонним підключенням: -- Запустіть `openclaw googlemeet doctor `, щоб підтвердити делегований Twilio - ID виклику, чи DTMF було поставлено в чергу, і чи було запитано вступне привітання. -- Запустіть `openclaw voicecall status --call-id ` і підтвердьте, що виклик усе ще - активний. -- Запустіть `openclaw voicecall tail` і перевірте, що Webhook-и Twilio надходять до - Gateway. -- Запустіть `openclaw logs --follow` і знайдіть послідовність Twilio Meet: Google - Meet делегує приєднання, Voice Call запускає телефонну гілку, Google Meet очікує - `voiceCall.dtmfDelayMs`, надсилає DTMF через `voicecall.dtmf`, очікує - `voiceCall.postDtmfSpeechDelayMs`, а потім запитує вступне мовлення через - `voicecall.speak`. -- Повторно запустіть `openclaw googlemeet setup --transport twilio`; успішна перевірка - налаштування потрібна, але вона не доводить, що послідовність PIN-коду зустрічі - правильна. -- Підтвердьте, що номер для телефонного підключення належить до того самого запрошення - Meet і регіону, що й PIN-код. -- Збільште `voiceCall.dtmfDelayMs`, якщо Meet відповідає повільно або транскрипт виклику - все ще показує запит на введення PIN-коду після надсилання DTMF. -- Якщо учасник приєднується, але ви не чуєте привітання, перевірте - `openclaw logs --follow` на наявність post-DTMF запиту `voicecall.speak` і - або відтворення TTS через медіапотік, або резервний варіант Twilio ``. Якщо - транскрипт виклику все ще містить "enter the meeting PIN", телефонна гілка ще не - приєдналася до кімнати Meet, тому учасники зустрічі не почують мовлення. +- Запустіть `openclaw googlemeet doctor `, щоб підтвердити делегований Twilio ID виклику, чи було поставлено DTMF у чергу та чи було запитано вступне привітання. +- Запустіть `openclaw voicecall status --call-id ` і підтвердьте, що виклик досі активний. +- Запустіть `openclaw voicecall tail` і перевірте, що webhooks Twilio надходять до Gateway. +- Запустіть `openclaw logs --follow` і знайдіть послідовність Twilio Meet: Google Meet делегує приєднання, Voice Call запускає телефонну ділянку, Google Meet чекає `voiceCall.dtmfDelayMs`, надсилає DTMF через `voicecall.dtmf`, чекає `voiceCall.postDtmfSpeechDelayMs`, а потім запитує вступне мовлення через `voicecall.speak`. +- Повторно запустіть `openclaw googlemeet setup --transport twilio`; успішна перевірка налаштування обов’язкова, але вона не доводить, що послідовність PIN для зустрічі правильна. +- Переконайтеся, що номер для телефонного підключення належить до того самого запрошення Meet і регіону, що й PIN. +- Збільште `voiceCall.dtmfDelayMs`, якщо Meet відповідає повільно або транскрипт виклику досі показує запит на введення PIN після надсилання DTMF. +- Якщо учасник приєднується, але ви не чуєте привітання, перевірте `openclaw logs --follow` на наявність post-DTMF запиту `voicecall.speak` і відтворення TTS через медіапотік або резервний варіант Twilio ``. Якщо транскрипт виклику досі містить "enter the meeting PIN", телефонна ділянка ще не приєдналася до кімнати Meet, тож учасники зустрічі не почують мовлення. -Якщо Webhook-и не надходять, спершу налагодьте Plugin Voice Call: провайдер має -досягати `plugins.entries.voice-call.config.publicUrl` або налаштованого тунелю. -Див. [усунення проблем із голосовими викликами](/uk/plugins/voice-call#troubleshooting). +Якщо webhooks не надходять, спочатку налагодьте Plugin Voice Call: провайдер має дістатися до `plugins.entries.voice-call.config.publicUrl` або налаштованого тунелю. Див. [усунення несправностей Voice call](/uk/plugins/voice-call#troubleshooting). -## Нотатки +## Примітки -Офіційний медіа-API Google Meet орієнтований на приймання, тому для мовлення в -виклику Meet усе ще потрібен шлях учасника. Цей Plugin робить цю межу видимою: -Chrome обробляє участь через браузер і маршрутизацію локального аудіо; Twilio -обробляє участь через телефонне підключення. +Офіційний медіа API Google Meet орієнтований на приймання, тож для мовлення в виклик Meet усе одно потрібен шлях учасника. Цей Plugin робить цю межу видимою: Chrome обробляє участь через браузер і локальну маршрутизацію аудіо; Twilio обробляє участь через телефонне підключення. -Режими зворотного мовлення Chrome потребують `BlackHole 2ch` плюс одне з такого: +Режими talk-back у Chrome потребують `BlackHole 2ch` плюс один із варіантів: -- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw володіє - мостом і передає аудіо у форматі `chrome.audioFormat` між цими командами та - вибраним провайдером. Режим агента використовує транскрипцію в реальному часі - плюс звичайний TTS; режим bidi використовує голосового провайдера реального часу. - Стандартний шлях Chrome — 24 кГц PCM16 з `chrome.audioBufferBytes: 4096`; 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` може слухати -окремий локальний мікрофон і очищати відтворення асистента, коли людина починає -говорити. Це зберігає мовлення людини попереду виводу асистента навіть тоді, коли -спільний вхід loopback BlackHole тимчасово приглушено під час відтворення -асистента. Як і `chrome.audioInputCommand` та `chrome.audioOutputCommand`, це -налаштована оператором локальна команда. Використовуйте явний довірений шлях до -команди або список аргументів і не спрямовуйте її на скрипти з недовірених -розташувань. +З Chrome-мостом на парі команд `chrome.bargeInInputCommand` може слухати окремий локальний мікрофон і очищати відтворення асистента, коли людина починає говорити. Це зберігає людське мовлення попереду виводу асистента, навіть коли спільний вхід BlackHole loopback тимчасово приглушено під час відтворення асистента. Як і `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, делегованих через Plugin Voice Call, `leave` також завершує базовий голосовий виклик. Використовуйте `googlemeet end-active-conference`, коли також потрібно закрити активну конференцію Google Meet для простору, керованого API. -## Повʼязане +## Пов’язане -- [Plugin голосових викликів](/uk/plugins/voice-call) +- [Plugin Voice call](/uk/plugins/voice-call) - [Режим розмови](/uk/nodes/talk) - [Створення plugins](/uk/plugins/building-plugins)