diff --git a/docs/uk/plugins/google-meet.md b/docs/uk/plugins/google-meet.md index 24b8e4f45..d5900bccf 100644 --- a/docs/uk/plugins/google-meet.md +++ b/docs/uk/plugins/google-meet.md @@ -2,54 +2,54 @@ read_when: - Ви хочете, щоб агент OpenClaw приєднався до дзвінка Google Meet - Ви хочете, щоб агент OpenClaw створив новий дзвінок Google Meet - - Ви налаштовуєте Chrome, вузол Chrome або Twilio як транспорт Google Meet -summary: 'Google Meet Plugin: приєднання за явними URL-адресами Meet через Chrome або Twilio зі стандартними налаштуваннями зворотного мовлення агента' -title: Google Meet Plugin + - Ви налаштовуєте Chrome, вузол Chrome або Twilio як транспорт для Google Meet +summary: 'Google Meet Plugin: приєднання за явними URL-адресами Meet через Chrome або Twilio зі стандартними налаштуваннями відповіді агента' +title: Plugin Google Meet x-i18n: - generated_at: "2026-05-04T02:43:13Z" + generated_at: "2026-05-04T03:12:39Z" model: gpt-5.5 provider: openai - source_hash: 79d04eb50b157863cce9b03f1195ae01628f21966267485df1e489c843e55826 + source_hash: a7c35884f9fff49561e884050e1d94099621b1a4acd8a035e82ca8cb0f5a06ff source_path: plugins/google-meet.md workflow: 16 --- -Підтримка учасника Google Meet для OpenClaw — plugin навмисно є явним за задумом: +Підтримка учасника Google Meet для OpenClaw — Plugin навмисно є явним за дизайном: - Він приєднується лише до явної URL-адреси `https://meet.google.com/...`. - Він може створити новий простір Meet через Google Meet API, а потім приєднатися до поверненої URL-адреси. -- `agent` є типовим режимом зворотного мовлення: транскрибування в реальному часі слухає, +- `agent` — стандартний режим відповіді голосом: транскрипція в реальному часі слухає, налаштований агент OpenClaw відповідає, а звичайний OpenClaw TTS говорить у Meet. - `bidi` залишається доступним як резервний режим прямої голосової моделі реального часу. - Агенти вибирають поведінку приєднання за допомогою `mode`: використовуйте `agent` для живого - прослуховування/зворотного мовлення, `bidi` для прямого резервного голосового режиму реального часу або `transcribe` - для приєднання/керування браузером без моста зворотного мовлення. -- Автентифікація починається як особистий Google OAuth або вже виконаний вхід у профілі Chrome. + прослуховування/відповіді голосом, `bidi` для прямого резервного голосового режиму реального часу або `transcribe` + для приєднання/керування браузером без мосту відповіді голосом. +- Автентифікація починається як особистий Google OAuth або вже виконаний вхід у профіль Chrome. - Автоматичного оголошення згоди немає. -- Типовий аудіобекенд Chrome — `BlackHole 2ch`. -- Chrome може працювати локально або на спареному Node-хості. -- Twilio приймає номер для дозвону плюс необов'язковий PIN або DTMF-послідовність; він - не може напряму набирати URL Meet. -- Команда CLI — `googlemeet`; `meet` зарезервовано для ширших - робочих процесів агентських телеконференцій. +- Стандартний аудіобекенд Chrome — `BlackHole 2ch`. +- Chrome може працювати локально або на спареному вузловому хості. +- Twilio приймає номер для дозвону плюс необов’язковий PIN або DTMF-послідовність; він + не може набирати URL-адресу Meet напряму. +- Команда CLI — `googlemeet`; `meet` зарезервовано для ширших агентних + телеконференційних робочих процесів. ## Швидкий старт -Установіть локальні аудіозалежності та налаштуйте провайдера транскрибування в реальному часі -плюс звичайний OpenClaw TTS. OpenAI є типовим провайдером транскрибування; -Google Gemini Live також працює з `realtime.provider: "google"` для -режиму `bidi`: +Установіть локальні аудіозалежності й налаштуйте провайдера транскрипції в реальному часі +плюс звичайний OpenClaw TTS. OpenAI є стандартним провайдером транскрипції; +Google Gemini Live також працює як окремий резервний голосовий режим `bidi` з +`realtime.voiceProvider: "google"`: ```bash brew install blackhole-2ch sox export OPENAI_API_KEY=sk-... -# or +# only needed when realtime.voiceProvider is "google" for bidi mode export GEMINI_API_KEY=... ``` -`blackhole-2ch` установлює віртуальний аудіопристрій `BlackHole 2ch`. Інсталятор Homebrew -потребує перезавантаження, перш ніж macOS покаже пристрій: +`blackhole-2ch` установлює віртуальний аудіопристрій `BlackHole 2ch`. Інсталятор +Homebrew потребує перезавантаження, перш ніж macOS покаже пристрій: ```bash sudo reboot @@ -62,7 +62,7 @@ system_profiler SPAudioDataType | grep -i BlackHole command -v sox ``` -Увімкніть plugin: +Увімкніть Plugin: ```json5 { @@ -84,34 +84,34 @@ openclaw googlemeet setup ``` Вивід налаштування призначений бути читабельним для агента й обізнаним про режим. Він повідомляє про профіль Chrome, -закріплення Node, а для приєднань Chrome у реальному часі — про аудіоміст +закріплення вузла, а для приєднань Chrome у реальному часі — міст аудіо BlackHole/SoX і відкладені перевірки вступу в реальному часі. Для приєднань лише для спостереження перевірте той самий -транспорт за допомогою `--mode transcribe`; цей режим пропускає передумови аудіо реального часу, -бо він не слухає через міст і не говорить через нього: +транспорт із `--mode transcribe`; цей режим пропускає аудіопередумови реального часу, +оскільки він не слухає через міст і не говорить через нього: ```bash openclaw googlemeet setup --transport chrome-node --mode transcribe ``` Коли налаштовано делегування Twilio, налаштування також повідомляє, чи готові -plugin `voice-call`, облікові дані Twilio та публічна доступність Webhook. -Вважайте будь-яку перевірку `ok: false` блокером для перевірених транспорту й режиму -перед тим, як просити агента приєднатися. Використовуйте `openclaw googlemeet setup --json` для +Plugin `voice-call`, облікові дані Twilio і публічне відкриття Webhook. +Сприймайте будь-яку перевірку `ok: false` як блокер для перевіреного транспорту й режиму, +перш ніж просити агента приєднатися. Використовуйте `openclaw googlemeet setup --json` для скриптів або машинозчитуваного виводу. Використовуйте `--transport chrome`, `--transport chrome-node` або `--transport twilio`, щоб попередньо перевірити конкретний -транспорт перед спробою агента. +транспорт до того, як агент спробує його використати. -Для Twilio завжди явно попередньо перевіряйте транспорт, коли типовим транспортом +Для Twilio завжди явно попередньо перевіряйте транспорт, коли стандартним транспортом є Chrome: ```bash openclaw googlemeet setup --transport twilio ``` -Це виявляє відсутнє з'єднання з `voice-call`, облікові дані Twilio або недосяжну -публічну доступність Webhook до того, як агент спробує набрати зустріч. +Це виявляє відсутню проводку `voice-call`, облікові дані Twilio або недосяжне +відкриття Webhook до того, як агент спробує набрати зустріч. -Приєднатися до зустрічі: +Приєднайтеся до зустрічі: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij @@ -128,37 +128,37 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij } ``` -Інструмент `google_meet` для агентів залишається доступним на хостах не з macOS для -артефактів, календаря, налаштування, транскрибування, Twilio та потоків `chrome-node`. Дії локального -зворотного мовлення Chrome там заблоковані, бо вбудований аудіошлях Chrome -наразі залежить від macOS `BlackHole 2ch`. У Linux використовуйте `mode: "transcribe"`, -дозвін Twilio або macOS `chrome-node`-хост для участі Chrome зі зворотним мовленням. +Орієнтований на агента інструмент `google_meet` залишається доступним на хостах не macOS для +артефактів, календаря, налаштування, транскрибування, Twilio і потоків `chrome-node`. Локальні +дії відповіді голосом у Chrome там заблоковані, оскільки вбудований аудіошлях Chrome +наразі залежить від macOS `BlackHole 2ch`. На Linux використовуйте `mode: "transcribe"`, +дозвон Twilio або macOS-хост `chrome-node` для участі Chrome з відповіддю голосом. -Створити нову зустріч і приєднатися до неї: +Створіть нову зустріч і приєднайтеся до неї: ```bash openclaw googlemeet create --transport chrome-node --mode agent ``` -Для кімнат, створених API, використовуйте Google Meet `SpaceConfig.accessType`, коли хочете, -щоб політика кімнати без стуку була явною, а не успадкованою з типових налаштувань +Для кімнат, створених через API, використовуйте Google Meet `SpaceConfig.accessType`, коли хочете, +щоб політика входу без запиту для кімнати була явною, а не успадкованою зі стандартних налаштувань облікового запису Google: ```bash openclaw googlemeet create --access-type OPEN --transport chrome-node --mode agent ``` -`OPEN` дозволяє будь-кому з URL Meet приєднатися без стуку. `TRUSTED` дозволяє +`OPEN` дозволяє будь-кому з URL-адресою Meet приєднатися без запиту. `TRUSTED` дозволяє довіреним користувачам організації хоста, запрошеним зовнішнім користувачам і користувачам -дозвону приєднуватися без стуку. `RESTRICTED` обмежує вхід без стуку запрошеними. Ці -налаштування застосовуються лише до офіційного шляху створення Google Meet API, тому облікові дані -OAuth мають бути налаштовані. +дозвону приєднуватися без запиту. `RESTRICTED` обмежує вхід без запиту лише запрошеними. +Ці налаштування застосовуються лише до офіційного шляху створення Google Meet API, тому +облікові дані OAuth мають бути налаштовані. -Якщо ви автентифікували Google Meet до появи цієї опції, повторно запустіть -`openclaw googlemeet auth login --json` після додавання області -`meetings.space.settings` на екран згоди Google OAuth. +Якщо ви автентифікували Google Meet до того, як ця опція стала доступною, повторно запустіть +`openclaw googlemeet auth login --json` після додавання scope +`meetings.space.settings` до екрана згоди Google OAuth. -Створити лише URL без приєднання: +Створіть лише URL-адресу без приєднання: ```bash openclaw googlemeet create --no-join @@ -167,25 +167,25 @@ openclaw googlemeet create --no-join `googlemeet create` має два шляхи: - Створення через API: використовується, коли налаштовано облікові дані Google Meet OAuth. Це - найбільш детермінований шлях, який не залежить від стану інтерфейсу браузера. + найдетермінованіший шлях, який не залежить від стану UI браузера. - Резервний браузерний шлях: використовується, коли облікові дані OAuth відсутні. OpenClaw використовує - закріплений Chrome Node, відкриває `https://meet.google.com/new`, чекає, доки Google - перенаправить на справжню URL-адресу з кодом зустрічі, а потім повертає цю URL-адресу. Цей шлях потребує, - щоб у профілі Chrome OpenClaw на Node вже був виконаний вхід у Google. - Браузерна автоматизація обробляє власний запит Meet першого запуску для мікрофона; цей запит - не вважається помилкою входу в Google. - Потоки приєднання та створення також намагаються повторно використати наявну вкладку Meet перед відкриттям - нової. Зіставлення ігнорує нешкідливі рядки запиту URL, як-от `authuser`, тож + закріплений вузол Chrome, відкриває `https://meet.google.com/new`, чекає, доки Google + переспрямує на справжню URL-адресу з кодом зустрічі, а потім повертає цю URL-адресу. Цей шлях потребує, + щоб профіль OpenClaw Chrome на вузлі вже мав виконаний вхід у Google. + Браузерна автоматизація обробляє власний початковий запит Meet на мікрофон; цей запит + не вважається помилкою входу Google. + Потоки приєднання та створення також намагаються повторно використати наявну вкладку Meet, перш ніж відкривати + нову. Зіставлення ігнорує нешкідливі рядки запиту URL, як-от `authuser`, тому повторна спроба агента має сфокусувати вже відкриту зустріч замість створення другої вкладки Chrome. Вивід команди/інструмента містить поле `source` (`api` або `browser`), щоб агенти -могли пояснити, який шлях було використано. `create` типово приєднується до нової зустрічі та -повертає `joined: true` плюс сесію приєднання. Щоб лише створити URL, -використовуйте `create --no-join` у CLI або передайте `"join": false` в інструмент. +могли пояснити, який шлях було використано. `create` стандартно приєднується до нової зустрічі й +повертає `joined: true` плюс сесію приєднання. Щоб лише створити URL-адресу, використовуйте +`create --no-join` у CLI або передайте `"join": false` інструменту. -Або скажіть агенту: "Створи Google Meet, приєднайся до нього в режимі зворотного мовлення агента -та надішли мені посилання." Агент має викликати `google_meet` з +Або скажіть агенту: "Створи Google Meet, приєднайся до нього в режимі відповіді голосом агента +і надішли мені посилання." Агент має викликати `google_meet` з `action: "create"`, а потім поділитися поверненим `meetingUri`. ```json @@ -196,53 +196,53 @@ openclaw googlemeet create --no-join } ``` -Для приєднання лише для спостереження/керування браузером задайте `"mode": "transcribe"`. Це -не запускає дуплексний голосовий міст реального часу, не потребує BlackHole або SoX -і не говоритиме у відповідь у зустрічі. Приєднання Chrome у цьому режимі також уникають -надання дозволу OpenClaw на мікрофон/камеру та уникають шляху Meet **Use -microphone**. Якщо Meet показує проміжний екран вибору аудіо, автоматизація намагається -обрати шлях без мікрофона, а інакше повідомляє про ручну дію замість відкриття -локального мікрофона. У режимі transcribe керовані транспорти Chrome також установлюють +Для приєднання лише для спостереження/керування браузером установіть `"mode": "transcribe"`. Це не +запускає дуплексний голосовий міст реального часу, не потребує BlackHole або SoX +і не відповідатиме голосом у зустріч. Приєднання Chrome у цьому режимі також уникають +надання OpenClaw дозволу на мікрофон/камеру й уникають шляху Meet **Use +microphone**. Якщо Meet показує проміжний екран вибору аудіо, автоматизація пробує +шлях без мікрофона, а інакше повідомляє про ручну дію замість відкриття +локального мікрофона. У режимі транскрибування керовані транспорти Chrome також установлюють best-effort спостерігач субтитрів Meet. `googlemeet status --json` і `googlemeet doctor` показують `captioning`, `captionsEnabledAttempted`, -`transcriptLines`, `lastCaptionAt`, `lastCaptionSpeaker`, `lastCaptionText`, -і короткий хвіст `recentTranscript`, щоб оператори могли зрозуміти, чи браузер -приєднався до дзвінка та чи субтитри Meet створюють текст. +`transcriptLines`, `lastCaptionAt`, `lastCaptionSpeaker`, `lastCaptionText` +і короткий хвіст `recentTranscript`, щоб оператори могли визначити, чи браузер +приєднався до виклику і чи субтитри Meet створюють текст. Використовуйте `openclaw googlemeet test-listen --transport chrome-node`, коли -потрібна перевірка так/ні: він приєднується в режимі transcribe, чекає на новий рух субтитрів або -транскрипту та повертає `listenVerified`, `listenTimedOut`, поля ручної +вам потрібна перевірка так/ні: він приєднується в режимі транскрибування, чекає на свіжий рух субтитрів або +транскрипту й повертає `listenVerified`, `listenTimedOut`, поля ручної дії та останній стан субтитрів. Під час сесій реального часу статус `google_meet` містить стан браузера й аудіомоста, -як-от `inCall`, `manualActionRequired`, `providerConnected`, -`realtimeReady`, `audioInputActive`, `audioOutputActive`, останні часові мітки вводу/виводу, -лічильники байтів і стан закриття моста. Якщо з'являється безпечний запит сторінки Meet, -браузерна автоматизація обробляє його, коли може. Вхід, допуск хостом і -запити дозволів браузера/ОС повідомляються як ручна дія з причиною та -повідомленням, яке агент має передати. Керовані сесії Chrome відтворюють вступну або -тестову фразу лише після того, як стан браузера повідомляє `inCall: true`; інакше статус повідомляє -`speechReady: false`, а спроба мовлення блокується замість удавання, ніби +зокрема `inCall`, `manualActionRequired`, `providerConnected`, +`realtimeReady`, `audioInputActive`, `audioOutputActive`, останні часові позначки +вводу/виводу, лічильники байтів і закритий стан мосту. Якщо з’являється безпечний запит сторінки Meet, +браузерна автоматизація обробляє його, коли може. Запити входу, допуску хостом і +дозволів браузера/OS повідомляються як ручна дія з причиною та +повідомленням, яке агент має передати. Керовані сесії Chrome видають вступну або +тестову фразу лише після того, як стан браузера повідомить `inCall: true`; інакше статус повідомляє +`speechReady: false`, а спроба мовлення блокується замість удавання, що агент говорив у зустріч. Локальні приєднання Chrome проходять через профіль браузера OpenClaw із виконаним входом. Режим реального часу потребує `BlackHole 2ch` для шляху мікрофона/динаміка, який використовує OpenClaw. Для -чистого дуплексного аудіо використовуйте окремі віртуальні пристрої або граф у стилі Loopback; одного -пристрою BlackHole достатньо для першого smoke-тесту, але він може давати відлуння. +чистого дуплексного аудіо використовуйте окремі віртуальні пристрої або граф на кшталт Loopback; одного +пристрою BlackHole достатньо для першого smoke test, але він може давати відлуння. -### Локальний Gateway + Chrome у Parallels +### Локальний Gateway + Parallels Chrome Вам **не** потрібен повний OpenClaw Gateway або ключ API моделі всередині macOS VM лише для того, щоб VM володіла Chrome. Запустіть Gateway і агента локально, а потім запустіть -Node-хост у VM. Увімкніть вбудований plugin у VM один раз, щоб Node +вузловий хост у VM. Один раз увімкніть вбудований Plugin на VM, щоб вузол оголошував команду Chrome: Що де працює: -- Gateway-хост: OpenClaw Gateway, робоча область агента, ключі моделі/API, провайдер реального часу - і конфігурація Google Meet plugin. -- Parallels macOS VM: OpenClaw CLI/Node-хост, Google Chrome, SoX, BlackHole 2ch +- Хост Gateway: OpenClaw Gateway, робочий простір агента, ключі моделі/API, провайдер + реального часу й конфігурація Plugin Google Meet. +- Parallels macOS VM: OpenClaw CLI/вузловий хост, Google Chrome, SoX, BlackHole 2ch і профіль Chrome із виконаним входом у Google. -- Не потрібно у VM: сервіс Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування +- Не потрібно у VM: служба Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування провайдера моделі. Установіть залежності VM: @@ -264,27 +264,27 @@ system_profiler SPAudioDataType | grep -i BlackHole command -v sox ``` -Установіть або оновіть OpenClaw у VM, а потім увімкніть там вбудований plugin: +Установіть або оновіть OpenClaw у VM, а потім увімкніть там вбудований Plugin: ```bash openclaw plugins enable google-meet ``` -Запустіть Node-хост у VM: +Запустіть вузловий хост у VM: ```bash openclaw node run --host --port 18789 --display-name parallels-macos ``` -Якщо `` є LAN IP і ви не використовуєте TLS, Node відмовляє -незашифрованому WebSocket, якщо ви явно не погодитеся для цієї довіреної приватної мережі: +Якщо `` — LAN IP і ви не використовуєте TLS, вузол відмовляється від +відкритого WebSocket, якщо ви явно не погодитеся на це для цієї довіреної приватної мережі: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host --port 18789 --display-name parallels-macos ``` -Використовуйте ту саму змінну середовища під час встановлення Node як LaunchAgent: +Використовуйте ту саму змінну середовища під час встановлення вузла як LaunchAgent: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ @@ -296,21 +296,21 @@ openclaw node restart `openclaw.json`. `openclaw node install` зберігає його в середовищі LaunchAgent, коли воно присутнє в команді встановлення. -Схваліть Node з Gateway-хоста: +Схваліть вузол із хоста Gateway: ```bash openclaw devices list openclaw devices approve ``` -Підтвердьте, що Gateway бачить Node і що він оголошує як `googlemeet.chrome`, +Підтвердьте, що Gateway бачить вузол і що він оголошує як `googlemeet.chrome`, так і можливість браузера/`browser.proxy`: ```bash openclaw nodes status ``` -Спрямуйте Meet через цей Node на Gateway-хості: +Спрямуйте Meet через цей вузол на хості Gateway: ```json5 { @@ -340,7 +340,7 @@ openclaw nodes status } ``` -Тепер приєднуйтеся звичайно з Gateway-хоста: +Тепер приєднайтеся звичайно з хоста Gateway: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij @@ -348,84 +348,83 @@ 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 ``` -Під час realtime-приєднання браузерна автоматизація OpenClaw заповнює ім’я гостя, натискає -Приєднатися/Попросити приєднатися та приймає вибір першого запуску Meet "Використовувати мікрофон", коли така -підказка з’являється. Під час приєднання лише для спостереження або створення зустрічі лише через браузер вона +Під час приєднання в реальному часі автоматизація браузера OpenClaw заповнює ім’я гостя, натискає +Join/Ask to join і приймає вибір першого запуску Meet "Use microphone", коли ця +підказка з’являється. Під час приєднання лише для спостереження або створення зустрічі лише в браузері вона проходить ту саму підказку без мікрофона, коли такий вибір доступний. -Якщо браузерний профіль не ввійшов в обліковий запис, Meet очікує допуску від організатора, -Chrome потребує дозволу на мікрофон/камеру для realtime-приєднання, або Meet застряг -на підказці, яку автоматизація не змогла обробити, результат join/test-speech повідомляє +Якщо профіль браузера не ввійшов в обліковий запис, Meet очікує допуску від організатора, +Chrome потребує дозволу на мікрофон/камеру для приєднання в реальному часі, або Meet застряг +на підказці, яку автоматизація не змогла вирішити, результат join/test-speech повідомляє `manualActionRequired: true` з `manualActionReason` і -`manualActionMessage`. Агенти мають припинити повторювати приєднання, повідомити це точне -повідомлення разом із поточними `browserUrl`/`browserTitle` і повторити спробу лише після завершення -ручної дії у браузері. +`manualActionMessage`. Агенти мають припинити повторні спроби приєднання, повідомити саме це +повідомлення плюс поточні `browserUrl`/`browserTitle` і повторювати спробу лише після завершення +ручної дії в браузері. Якщо `chromeNode.node` пропущено, OpenClaw автоматично вибирає лише тоді, коли рівно один -підключений Node оголошує і `googlemeet.chrome`, і керування браузером. Якщо -підключено кілька придатних Node, задайте `chromeNode.node` як id Node, +підключений вузол оголошує і `googlemeet.chrome`, і керування браузером. Якщо +підключено кілька придатних вузлів, задайте `chromeNode.node` як ідентифікатор вузла, відображуване ім’я або віддалену IP-адресу. -Типові перевірки помилок: +Поширені перевірки збоїв: -- `Configured Google Meet node ... is not usable: offline`: закріплений Node - відомий Gateway, але недоступний. Агенти мають трактувати цей Node як - діагностичний стан, а не як придатний хост Chrome, і повідомляти блокер налаштування - замість переходу на інший транспорт, якщо користувач цього не просив. +- `Configured Google Meet node ... is not usable: offline`: закріплений вузол + відомий Gateway, але недоступний. Агенти мають розглядати цей вузол як + діагностичний стан, а не як придатний Chrome-хост, і повідомляти про блокер налаштування + замість переходу на інший транспорт, якщо користувач не попросив про це. - `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM, - схваліть сполучення та переконайтеся, що у VM виконано - `openclaw plugins enable google-meet` і - `openclaw plugins enable browser`. Також підтвердьте, що хост - Gateway дозволяє обидві команди Node через + схваліть pairing і переконайтеся, що `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` +- `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 відкривається, але не може приєднатися: увійдіть у профіль браузера всередині VM або залиште `chrome.guestName` заданим для гостьового приєднання. Гостьове автоприєднання використовує - браузерну автоматизацію OpenClaw через браузерний проксі Node; переконайтеся, що конфігурація браузера - Node вказує на потрібний профіль, наприклад - `browser.defaultProfile: "user"` або іменований профіль наявного сеансу. -- Дубльовані вкладки Meet: залиште `chrome.reuseExistingTab: true` увімкненим. OpenClaw + автоматизацію браузера OpenClaw через браузерний проксі вузла; переконайтеся, що конфігурація браузера + вузла вказує на потрібний профіль, наприклад + `browser.defaultProfile: "user"` або іменований профіль існуючого сеансу. +- Дублікати вкладок Meet: залиште `chrome.reuseExistingTab: true` увімкненим. OpenClaw активує наявну вкладку для того самого URL Meet перед відкриттям нової, а - браузерне створення зустрічі повторно використовує вкладку з незавершеним `https://meet.google.com/new` - або підказкою облікового запису Google перед відкриттям іншої. -- Немає аудіо: у Meet спрямуйте мікрофон/динамік через шлях віртуального аудіопристрою, - який використовує OpenClaw; використовуйте окремі віртуальні пристрої або маршрутизацію в стилі Loopback - для чистого дуплексного аудіо. + створення зустрічі в браузері повторно використовує поточну вкладку `https://meet.google.com/new` + або вкладку підказки облікового запису Google перед відкриттям ще однієї. +- Немає аудіо: у Meet спрямуйте аудіо мікрофона/динаміка через шлях віртуального аудіопристрою, + який використовує OpenClaw; використовуйте окремі віртуальні пристрої або маршрутизацію на кшталт Loopback + для чистого двостороннього аудіо. ## Нотатки щодо встановлення Типове зворотне мовлення Chrome використовує два зовнішні інструменти: -- `sox`: аудіоутиліта командного рядка. Plugin використовує явні команди пристроїв CoreAudio - для типового аудіомоста 24 кГц PCM16. +- `sox`: утиліта аудіо командного рядка. Плагін використовує явні команди пристрою CoreAudio + для типового аудіомоста 24 kHz PCM16. - `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій `BlackHole 2ch`, - через який Chrome/Meet може маршрутизувати аудіо. + через який 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. +інсталятор або appliance, який комплектує BlackHole з OpenClaw, перегляньте умови +ліцензування upstream BlackHole або отримайте окрему ліцензію від Existential Audio. ## Транспорти ### Chrome Транспорт Chrome відкриває URL Meet через керування браузером OpenClaw і приєднується -як браузерний профіль OpenClaw, що ввійшов в обліковий запис. На macOS Plugin перевіряє наявність +як профіль браузера OpenClaw, що ввійшов в обліковий запис. На macOS плагін перевіряє наявність `BlackHole 2ch` перед запуском. Якщо налаштовано, він також запускає команду перевірки стану -аудіомоста та команду запуску перед відкриттям Chrome. Використовуйте `chrome`, коли +аудіомоста і команду запуску перед відкриттям Chrome. Використовуйте `chrome`, коли Chrome/аудіо працюють на хості Gateway; використовуйте `chrome-node`, коли Chrome/аудіо працюють -на сполученому Node, як-от Parallels macOS VM. Для локального Chrome виберіть +на спареному вузлі, наприклад Parallels macOS VM. Для локального Chrome виберіть профіль через `browser.defaultProfile`; `chrome.browserProfile` передається хостам `chrome-node`. @@ -436,18 +435,18 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome Спрямуйте аудіо мікрофона й динаміка Chrome через локальний аудіоміст OpenClaw. Якщо `BlackHole 2ch` не встановлено, приєднання завершується помилкою налаштування -замість мовчазного приєднання без аудіошляху. +замість тихого приєднання без аудіошляху. ### Twilio -Транспорт Twilio — це строгий план набору, делегований Plugin Voice Call. Він +Транспорт Twilio — це строгий план набору, делегований плагіну Voice Call. Він не аналізує сторінки Meet для пошуку телефонних номерів. Використовуйте це, коли участь через Chrome недоступна або потрібен резервний варіант -телефонного дозвону. Google Meet має надати номер телефонного дозвону та PIN для +телефонного дозвону. Google Meet має надати телефонний номер дозвону й PIN для зустрічі; OpenClaw не виявляє їх зі сторінки Meet. -Увімкніть Plugin Voice Call на хості Gateway, а не на Node Chrome: +Увімкніть плагін Voice Call на хості Gateway, а не на вузлі Chrome: ```json5 { @@ -472,7 +471,7 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome } ``` -Надайте облікові дані Twilio через середовище або конфігурацію. Середовище утримує +Надайте облікові дані Twilio через середовище або конфігурацію. Середовище тримає секрети поза `openclaw.json`: ```bash @@ -481,7 +480,7 @@ export TWILIO_AUTH_TOKEN=... export TWILIO_FROM_NUMBER=+15550001234 ``` -Перезапустіть або перезавантажте Gateway після ввімкнення `voice-call`; зміни конфігурації Plugin +Перезапустіть або перезавантажте Gateway після ввімкнення `voice-call`; зміни конфігурації плагіна не з’являються в уже запущеному процесі Gateway, доки він не перезавантажиться. Потім перевірте: @@ -512,32 +511,32 @@ 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, коли потрібне створення через офіційний API, +розв’язання space або preflight-перевірки Meet Media API. Доступ до Google Meet API використовує користувацький OAuth: створіть OAuth-клієнт Google Cloud, -запросіть потрібні scopes, авторизуйте обліковий запис Google, потім збережіть -отриманий refresh token у конфігурації Plugin Google Meet або надайте -змінні середовища `OPENCLAW_GOOGLE_MEET_*`. +запросіть потрібні scopes, авторизуйте обліковий запис Google, а потім збережіть +отриманий refresh token у конфігурації плагіна Google Meet або надайте змінні середовища +`OPENCLAW_GOOGLE_MEET_*`. OAuth не замінює шлях приєднання Chrome. Транспорти Chrome і Chrome-node -так само приєднуються через профіль Chrome, що ввійшов в обліковий запис, BlackHole/SoX і підключений -Node, коли ви використовуєте браузерну участь. OAuth призначений лише для офіційного -шляху Google Meet API: створення просторів зустрічей, розв’язання просторів і виконання -попередніх перевірок Meet Media API. +і далі приєднуються через профіль Chrome, що ввійшов в обліковий запис, BlackHole/SoX і підключений +вузол, коли ви використовуєте участь через браузер. OAuth призначений лише для офіційного +шляху Google Meet API: створення meeting spaces, розв’язання spaces і запуску preflight-перевірок +Meet Media API. -### Створіть облікові дані Google +### Створення облікових даних Google У Google Cloud Console: 1. Створіть або виберіть проєкт Google Cloud. 2. Увімкніть **Google Meet REST API** для цього проєкту. 3. Налаштуйте екран згоди OAuth. - - **Internal** — найпростіший варіант для організації Google Workspace. - - **External** працює для особистих/тестових налаштувань; поки застосунок у Testing, + - **Internal** — найпростіше для організації Google Workspace. + - **External** працює для персональних/тестових налаштувань; поки застосунок у Testing, додайте кожен обліковий запис Google, який авторизуватиме застосунок, як тестового користувача. 4. Додайте scopes, які запитує OpenClaw: - `https://www.googleapis.com/auth/meetings.space.created` @@ -555,23 +554,23 @@ Node, коли ви використовуєте браузерну участь 6. Скопіюйте client ID і client secret. `meetings.space.created` потрібен Google Meet `spaces.create`. -`meetings.space.readonly` дає OpenClaw змогу розв’язувати URL/коди Meet у простори. -`meetings.space.settings` дає OpenClaw змогу передавати параметри `SpaceConfig`, як-от +`meetings.space.readonly` дає OpenClaw змогу розв’язувати URL/коди Meet у spaces. +`meetings.space.settings` дає OpenClaw змогу передавати налаштування `SpaceConfig`, наприклад `accessType`, під час створення кімнати через API. -`meetings.conference.media.readonly` призначено для попередньої перевірки Meet Media API та медіароботи; -Google може вимагати реєстрації в Developer Preview для фактичного використання Media API. -Якщо вам потрібні лише браузерні приєднання Chrome, повністю пропустіть OAuth. +`meetings.conference.media.readonly` призначений для preflight Meet Media API і роботи з медіа; +Google може вимагати участі в Developer Preview для фактичного використання Media API. +Якщо вам потрібні лише приєднання Chrome на основі браузера, повністю пропустіть OAuth. -### Випустіть refresh token +### Створення refresh token -Налаштуйте `oauth.clientId` і, за потреби, `oauth.clientSecret`, або передайте їх як -змінні середовища, потім виконайте: +Налаштуйте `oauth.clientId` і необов’язково `oauth.clientSecret` або передайте їх як +змінні середовища, а потім запустіть: ```bash openclaw googlemeet auth login --json ``` -Команда друкує конфігураційний блок `oauth` із refresh token. Вона використовує PKCE, +Команда друкує блок конфігурації `oauth` з refresh token. Вона використовує PKCE, localhost callback на `http://localhost:8085/oauth2callback` і ручний потік копіювання/вставлення з `--manual`. @@ -606,7 +605,7 @@ JSON-вивід містить: } ``` -Збережіть об’єкт `oauth` у конфігурації Plugin Google Meet: +Збережіть об’єкт `oauth` у конфігурації плагіна Google Meet: ```json5 { @@ -627,16 +626,16 @@ JSON-вивід містить: } ``` -Надавайте перевагу змінним середовища, коли не хочете зберігати refresh token у конфігурації. -Якщо присутні і значення конфігурації, і значення середовища, Plugin спершу використовує конфігурацію, -а потім fallback до середовища. +Віддавайте перевагу змінним середовища, коли не хочете зберігати refresh token у конфігурації. +Якщо наявні і значення конфігурації, і значення середовища, плагін спершу бере конфігурацію, +а потім fallback із середовища. -Згода OAuth охоплює створення просторів Meet, доступ на читання до просторів Meet і доступ -на читання до медіа конференцій Meet. Якщо ви автентифікувалися до появи підтримки -створення зустрічей, повторно виконайте `openclaw googlemeet auth login --json`, щоб refresh -token мав scope `meetings.space.created`. +Згода OAuth включає створення Meet space, доступ на читання Meet space і доступ на читання +медіа конференції Meet. Якщо ви автентифікувалися до появи підтримки створення зустрічей, +повторно запустіть `openclaw googlemeet auth login --json`, щоб refresh token мав scope +`meetings.space.created`. -### Перевірте OAuth через doctor +### Перевірка OAuth через doctor Запустіть OAuth doctor, коли потрібна швидка перевірка стану без секретів: @@ -644,22 +643,22 @@ token мав scope `meetings.space.created`. openclaw googlemeet doctor --oauth --json ``` -Це не завантажує runtime Chrome і не вимагає підключеного Node Chrome. Команда -перевіряє, що конфігурація OAuth існує і що refresh token може випустити access -token. JSON-звіт містить лише поля стану, як-от `ok`, `configured`, -`tokenSource`, `expiresAt`, і повідомлення перевірок; він не друкує access +Це не завантажує 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` або кешований access token. | -| `oauth-token` | Кешований access token ще дійсний, або refresh token випустив новий access token. | -| `meet-spaces-get` | Необов’язкова перевірка `--meeting` розв’язала наявний простір Meet. | -| `meet-spaces-create` | Необов’язкова перевірка `--create-space` створила новий простір Meet. | +| `oauth-token` | Кешований access token і досі дійсний або refresh token створив новий access token. | +| `meet-spaces-get` | Необов’язкова перевірка `--meeting` розв’язала наявний Meet space. | +| `meet-spaces-create` | Необов’язкова перевірка `--create-space` створила новий Meet space. | -Щоб також підтвердити ввімкнення Google Meet API і scope `spaces.create`, запустіть +Щоб також довести ввімкнення Google Meet API і scope `spaces.create`, запустіть перевірку створення з побічним ефектом: ```bash @@ -667,9 +666,9 @@ openclaw googlemeet doctor --oauth --create-space --json openclaw googlemeet create --no-join --json ``` -`--create-space` створює одноразову URL-адресу Meet. Використовуйте його, коли потрібно підтвердити, +`--create-space` створює тимчасовий URL Meet. Використовуйте його, коли потрібно підтвердити, що в проєкті Google Cloud увімкнено Meet API і що авторизований -обліковий запис має область доступу `meetings.space.created`. +обліковий запис має scope `meetings.space.created`. Щоб підтвердити доступ на читання для наявного простору зустрічі: @@ -679,17 +678,17 @@ openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij ``` `doctor --oauth --meeting` і `resolve-space` підтверджують доступ на читання до наявного -простору, до якого авторизований обліковий запис Google має доступ. `403` від цих перевірок -зазвичай означає, що Google Meet REST API вимкнено, узгодженому токену оновлення -бракує потрібної області доступу або обліковий запис Google не має доступу до цього простору -Meet. Помилка токена оновлення означає, що потрібно повторно виконати `openclaw googlemeet auth login +простору, до якого має доступ авторизований обліковий запис Google. `403` від цих перевірок +зазвичай означає, що REST API Google Meet вимкнено, погодженому refresh token +бракує потрібного scope або обліковий запис Google не має доступу до цього простору +Meet. Помилка refresh-token означає, що потрібно повторно виконати `openclaw googlemeet auth login --json` і зберегти новий блок `oauth`. -Для резервного варіанта через браузер облікові дані OAuth не потрібні. У цьому режимі автентифікація Google +Для резервного браузерного режиму облікові дані OAuth не потрібні. У цьому режимі автентифікація Google надходить із профілю Chrome, у який виконано вхід на вибраному вузлі, а не з конфігурації OpenClaw. -Ці змінні середовища приймаються як резервні значення: +Ці змінні середовища приймаються як резервні: - `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID` - `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` або `GOOGLE_MEET_CLIENT_SECRET` @@ -700,7 +699,7 @@ Meet. Помилка токена оновлення означає, що пот - `OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING` або `GOOGLE_MEET_DEFAULT_MEETING` - `OPENCLAW_GOOGLE_MEET_PREVIEW_ACK` або `GOOGLE_MEET_PREVIEW_ACK` -Розв’яжіть URL-адресу Meet, код або `spaces/{id}` через `spaces.get`: +Розв’яжіть URL Meet, код або `spaces/{id}` через `spaces.get`: ```bash openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij @@ -712,7 +711,7 @@ openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij ``` -Перелічіть артефакти зустрічі та відвідуваність після того, як Meet створить записи конференції: +Виведіть артефакти зустрічі та відвідуваність після того, як Meet створить записи конференції: ```bash openclaw googlemeet artifacts --meeting https://meet.google.com/abc-defg-hij @@ -724,7 +723,7 @@ openclaw googlemeet export --meeting https://meet.google.com/abc-defg-hij --outp Передайте `--all-conference-records`, коли потрібні всі збережені записи для цієї зустрічі. -Пошук у календарі може визначити URL-адресу зустрічі з Google Calendar перед читанням +Пошук у календарі може визначити URL зустрічі з Google Calendar перед читанням артефактів Meet: ```bash @@ -734,14 +733,14 @@ openclaw googlemeet artifacts --event "Weekly sync" openclaw googlemeet attendance --today --format csv --output attendance.csv ``` -`--today` шукає в сьогоднішньому календарі `primary` подію Calendar з -посиланням Google Meet. Використовуйте `--event ` для пошуку відповідного тексту події та +`--today` шукає в сьогоднішньому календарі `primary` подію Calendar із посиланням +Google Meet. Використовуйте `--event `, щоб шукати відповідний текст події, і `--calendar ` для неосновного календаря. Пошук у календарі потребує нового -входу OAuth, який включає область доступу лише для читання подій Calendar. +входу OAuth, який включає readonly scope для подій Calendar. `calendar-events` попередньо показує відповідні події Meet і позначає подію, яку -вибере `latest`, `artifacts`, `attendance` або `export`. +виберуть `latest`, `artifacts`, `attendance` або `export`. -Якщо ви вже знаєте ідентифікатор запису конференції, зверніться до нього напряму: +Якщо ви вже знаєте id запису конференції, зверніться до нього напряму: ```bash openclaw googlemeet latest --meeting https://meet.google.com/abc-defg-hij @@ -756,12 +755,12 @@ openclaw googlemeet attendance --conference-record conferenceRecords/abc123 --js openclaw googlemeet end-active-conference https://meet.google.com/abc-defg-hij ``` -Це викликає Google Meet `spaces.endActiveConference` і потребує OAuth з -областю доступу `meetings.space.created` для простору, яким авторизований обліковий запис може керувати. -OpenClaw приймає URL-адресу Meet, код зустрічі або вхід `spaces/{id}` і розв’язує його +Це викликає Google Meet `spaces.endActiveConference` і потребує OAuth зі +scope `meetings.space.created` для простору, яким авторизований обліковий запис може керувати. +OpenClaw приймає URL Meet, код зустрічі або вхідні дані `spaces/{id}` і розв’язує їх до ресурсу простору API перед завершенням активної конференції. -Це окремо від `googlemeet leave`: `leave` зупиняє локальну/сеансову -участь OpenClaw, а `end-active-conference` просить Google Meet завершити активну +Це окремо від `googlemeet leave`: `leave` зупиняє локальну/сесійну +участь OpenClaw, тоді як `end-active-conference` просить Google Meet завершити активну конференцію для простору. Запишіть читабельний звіт: @@ -779,34 +778,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`, щоб налаштувати виявлення запізнень, і +рядки сесій учасників із часом першої/останньої появи, загальною тривалістю сесії, +позначками запізнення/раннього виходу та дубльованими ресурсами учасників, об’єднаними за користувачем, +який увійшов у систему, або відображуваним іменем. Передайте `--no-merge-duplicates`, щоб залишити необроблені ресурси +учасників окремо, `--late-after-minutes`, щоб налаштувати виявлення запізнення, і `--early-before-minutes`, щоб налаштувати виявлення раннього виходу. `export` записує папку, що містить `summary.md`, `attendance.csv`, `transcript.md`, `artifacts.json`, `attendance.json` і `manifest.json`. -`manifest.json` фіксує вибраний вхід, параметри експорту, записи конференції, +`manifest.json` фіксує вибрані вхідні дані, параметри експорту, записи конференції, вихідні файли, лічильники, джерело токена, подію Calendar, якщо її було використано, і будь-які -попередження про часткове отримання. Передайте `--zip`, щоб також записати портативний архів поряд -із папкою. Передайте `--include-doc-bodies`, щоб експортувати текст пов’язаних транскриптів і +попередження про часткове отримання. Передайте `--zip`, щоб також записати переносний архів поруч +із папкою. Передайте `--include-doc-bodies`, щоб експортувати пов’язаний текст транскриптів і розумних нотаток Google Docs через Google Drive `files.export`; для цього потрібен -новий вхід OAuth, який включає область доступу Drive Meet лише для читання. Без +новий вхід OAuth, який включає Drive Meet readonly scope. Без `--include-doc-bodies` експорт містить лише метадані Meet і структуровані записи транскрипту. -Якщо Google повертає часткову помилку артефакту, як-от помилку списку розумних нотаток, -запису транскрипту або тіла документа Drive, зведення та +Якщо Google повертає часткову помилку артефакту, наприклад помилку списку розумних нотаток, +запису транскрипту або тіла документа Drive, зведення й маніфест зберігають попередження замість того, щоб провалити весь експорт. Використовуйте `--dry-run`, щоб отримати ті самі дані артефактів/відвідуваності та надрукувати -JSON маніфесту без створення папки чи ZIP. Це корисно перед записом +JSON маніфесту без створення папки або ZIP. Це корисно перед записом великого експорту або коли агенту потрібні лише лічильники, вибрані записи та попередження. -Агенти також можуть створити той самий пакет через інструмент `google_meet`: +Агенти також можуть створити той самий bundle через інструмент `google_meet`: ```json { @@ -818,9 +817,9 @@ JSON маніфесту без створення папки чи ZIP. Це ко } ``` -Установіть `"dryRun": true`, щоб повернути лише маніфест експорту та пропустити запис файлів. +Установіть `"dryRun": true`, щоб повернути лише маніфест експорту й пропустити запис файлів. -Агенти також можуть створити кімнату з підтримкою API з явною політикою доступу: +Агенти також можуть створити кімнату на основі API з явною політикою доступу: ```json { @@ -840,7 +839,7 @@ JSON маніфесту без створення папки чи ZIP. Це ко } ``` -Для перевірки з пріоритетом прослуховування агенти мають використовувати `test_listen`, перш ніж заявляти, що +Для перевірки з пріоритетом прослуховування агенти мають використовувати `test_listen`, перш ніж стверджувати, що зустріч корисна: ```json @@ -860,33 +859,33 @@ OPENCLAW_GOOGLE_MEET_LIVE_MEETING=https://meet.google.com/abc-defg-hij \ pnpm test:live -- extensions/google-meet/google-meet.live.test.ts ``` -Запустіть live браузерну перевірку з пріоритетом прослуховування проти зустрічі, де хтось -говоритиме з доступними субтитрами Meet: +Запустіть live browser probe з пріоритетом прослуховування проти зустрічі, де хтось буде +говорити з доступними субтитрами 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 environment: -- `OPENCLAW_LIVE_TEST=1` вмикає захищені live тести. -- `OPENCLAW_GOOGLE_MEET_LIVE_MEETING` вказує на збережену URL-адресу Meet, код або +- `OPENCLAW_LIVE_TEST=1` вмикає захищені live tests. +- `OPENCLAW_GOOGLE_MEET_LIVE_MEETING` вказує на збережений URL Meet, код або `spaces/{id}`. -- `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID` надає - ідентифікатор клієнта OAuth. +- `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID` надає OAuth + client id. - `OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN` або `GOOGLE_MEET_REFRESH_TOKEN` надає - токен оновлення. + refresh token. - Необов’язково: `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET`, `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN` і `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` використовують ті самі резервні назви без префікса `OPENCLAW_`. -Базовий live smoke для артефактів/відвідуваності потребує +Базовому live smoke для артефактів/відвідуваності потрібні `https://www.googleapis.com/auth/meetings.space.readonly` і -`https://www.googleapis.com/auth/meetings.conference.media.readonly`. Пошук у календарі -потребує `https://www.googleapis.com/auth/calendar.events.readonly`. Експорт -тіла документа Drive потребує +`https://www.googleapis.com/auth/meetings.conference.media.readonly`. Пошуку в Calendar +потрібен `https://www.googleapis.com/auth/calendar.events.readonly`. Експорту +тіла документа Drive потрібен `https://www.googleapis.com/auth/drive.meet.readonly`. Створіть новий простір Meet: @@ -895,13 +894,13 @@ Live smoke середовище: openclaw googlemeet create ``` -Команда друкує нові `meeting uri`, джерело та сеанс приєднання. З обліковими даними OAuth +Команда друкує новий `meeting uri`, джерело та сесію приєднання. З обліковими даними OAuth вона використовує офіційний Google Meet API. Без облікових даних OAuth вона -використовує профіль браузера з виконаним входом закріпленого вузла Chrome як резервний варіант. Агенти можуть +використовує профіль браузера Chrome закріпленого вузла, у який виконано вхід, як резервний варіант. Агенти можуть використовувати інструмент `google_meet` з `action: "create"`, щоб створити й приєднатися за один крок. Для створення лише URL передайте `"join": false`. -Приклад JSON-виводу з резервного варіанта через браузер: +Приклад JSON-виводу з резервного браузерного режиму: ```json { @@ -921,9 +920,9 @@ openclaw googlemeet create } ``` -Якщо резервний варіант через браузер натрапляє на вхід Google або блокування дозволів Meet до того, як -зможе створити URL-адресу, метод Gateway повертає невдалу відповідь, а -інструмент `google_meet` повертає структуровані подробиці замість простого рядка: +Якщо резервний браузерний режим наштовхується на вхід Google або блокування дозволів Meet, перш ніж +зможе створити URL, метод Gateway повертає невдалу відповідь, а інструмент +`google_meet` повертає структуровані деталі замість простого рядка: ```json { @@ -942,10 +941,10 @@ openclaw googlemeet create ``` Коли агент бачить `manualActionRequired: true`, він має повідомити -`manualActionMessage` разом із контекстом вузла/вкладки браузера та припинити відкривати нові -вкладки Meet, доки оператор не завершить крок у браузері. +`manualActionMessage` разом із контекстом вузла/вкладки браузера й припинити відкривати нові +вкладки Meet, доки оператор не завершить браузерний крок. -Приклад JSON-виводу зі створення через API: +Приклад JSON-виводу створення через API: ```json { @@ -966,22 +965,23 @@ openclaw googlemeet create } ``` -Створення Meet за замовчуванням приєднує до зустрічі. Транспорт Chrome або Chrome-node все одно -потребує профілю Google Chrome з виконаним входом, щоб приєднатися через браузер. Якщо +Створення Meet за замовчуванням приєднує до зустрічі. Транспорт Chrome або Chrome-node все ще +потребує профілю Google Chrome, у який виконано вхід, щоб приєднатися через браузер. Якщо з профілю виконано вихід, OpenClaw повідомляє `manualActionRequired: true` або -помилку резервного варіанта через браузер і просить оператора завершити вхід Google перед +помилку резервного браузерного режиму й просить оператора завершити вхід Google перед повторною спробою. Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud -проєкт, суб’єкт OAuth і учасники зустрічі зареєстровані в Google +project, OAuth principal і учасники зустрічі зареєстровані в Google Workspace Developer Preview Program для Meet media APIs. ## Конфігурація -Загальний шлях агента Chrome потребує лише ввімкненого plugin, BlackHole, SoX, -ключа провайдера транскрипції в реальному часі та налаштованого провайдера TTS OpenClaw. -OpenAI є провайдером транскрипції за замовчуванням; установіть `realtime.provider: "google"`, -щоб використовувати Google Gemini Live для режиму `bidi`: +Звичайний шлях агента Chrome потребує лише увімкненого plugin, BlackHole, SoX, ключа +провайдера транскрипції в реальному часі та налаштованого провайдера TTS OpenClaw. +OpenAI є стандартним провайдером транскрипції; установіть `realtime.voiceProvider` на +`"google"` і `realtime.model`, щоб використовувати Google Gemini Live для режиму `bidi` +без зміни стандартного провайдера транскрипції режиму агента: ```bash brew install blackhole-2ch sox @@ -990,7 +990,7 @@ export OPENAI_API_KEY=sk-... export GEMINI_API_KEY=... ``` -Налаштуйте конфігурацію plugin у `plugins.entries.google-meet.config`: +Задайте конфігурацію plugin у `plugins.entries.google-meet.config`: ```json5 { @@ -1005,59 +1005,65 @@ export GEMINI_API_KEY=... } ``` -Типові значення: +Стандартні значення: - `defaultTransport: "chrome"` - `defaultMode: "agent"` (`"realtime"` приймається лише як застарілий сумісний псевдонім для `"agent"`; нові виклики інструментів мають указувати `"agent"`) -- `chromeNode.node`: необов’язковий id/ім’я/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`: заповнення імені гостя та натискання Join Now у режимі + найкращого зусилля через браузерну автоматизацію OpenClaw на `chrome-node` - `chrome.reuseExistingTab: true`: активувати наявну вкладку Meet замість відкриття дублікатів -- `chrome.waitForInCallMs: 20000`: чекати, доки вкладка Meet повідомить, що вона у виклику, - перш ніж буде запущено вступну фразу зворотного мовлення +- `chrome.waitForInCallMs: 20000`: чекати, доки вкладка Meet повідомить, що + вона у виклику, перед запуском вступного голосового зворотного зв’язку - `chrome.audioFormat: "pcm16-24khz"`: аудіоформат пари команд. Використовуйте - `"g711-ulaw-8khz"` лише для застарілих/користувацьких пар команд, які досі видають - телефонний звук. + `"g711-ulaw-8khz"` лише для застарілих/користувацьких пар команд, які все ще + видають телефонне аудіо. - `chrome.audioBufferBytes: 4096`: буфер обробки SoX для згенерованих аудіокоманд - пари команд Chrome. Це половина стандартного буфера SoX у 8192 байти, - що зменшує типову затримку каналу, залишаючи можливість збільшити її на зайнятих хостах. - Значення нижче мінімуму SoX обмежуються 17 байтами. + пари команд Chrome. Це половина стандартного буфера SoX у 8192 байти, що + зменшує стандартну затримку каналу, залишаючи можливість збільшити її на + завантажених хостах. Значення нижче мінімуму SoX обмежуються 17 байтами. - `chrome.audioInputCommand`: команда SoX, що читає з CoreAudio `BlackHole 2ch` і записує аудіо у `chrome.audioFormat` - `chrome.audioOutputCommand`: команда SoX, що читає аудіо у `chrome.audioFormat` і записує в CoreAudio `BlackHole 2ch` -- `chrome.bargeInInputCommand`: необов’язкова команда локального мікрофона, яка записує - 16-бітний little-endian моно PCM зі знаком для виявлення втручання людини, поки - активне відтворення асистента. Наразі це застосовується до розміщеного на Gateway - мосту пари команд `chrome`. -- `chrome.bargeInRmsThreshold: 650`: RMS-рівень, що вважається людським - перериванням на `chrome.bargeInInputCommand` -- `chrome.bargeInPeakThreshold: 2500`: піковий рівень, що вважається людським - перериванням на `chrome.bargeInInputCommand` +- `chrome.bargeInInputCommand`: необов’язкова команда локального мікрофона, яка + записує знаковий 16-бітний little-endian моно PCM для виявлення людського + втручання, доки активне відтворення асистента. Наразі це застосовується до + розміщеного в Gateway моста пари команд `chrome`. +- `chrome.bargeInRmsThreshold: 650`: рівень RMS, який рахується як людське + переривання на `chrome.bargeInInputCommand` +- `chrome.bargeInPeakThreshold: 2500`: піковий рівень, який рахується як людське + переривання на `chrome.bargeInInputCommand` - `chrome.bargeInCooldownMs: 900`: мінімальна затримка між повторними очищеннями - людського переривання -- `mode: "agent"`: типовий режим зворотного мовлення. Мовлення учасника транскрибується - налаштованим провайдером realtime-транскрипції, надсилається налаштованому - агенту OpenClaw у сесії підагентa для окремої зустрічі й озвучується через - звичайний runtime OpenClaw TTS. -- `mode: "bidi"`: резервний прямий двонапрямний режим realtime-моделі. Провайдер - realtime-голосу відповідає на мовлення учасника напряму й може викликати - `openclaw_agent_consult` для глибших відповідей або відповідей із підтримкою інструментів. -- `mode: "transcribe"`: режим лише спостереження без мосту зворотного мовлення. -- `realtime.provider: "openai"`: id провайдера, який режим `agent` використовує для realtime - транскрипції, а режим `bidi` — для realtime-голосу. + людських переривань +- `mode: "agent"`: стандартний режим голосового зворотного зв’язку. Мовлення + учасників транскрибується налаштованим провайдером транскрипції в реальному + часі, надсилається налаштованому агенту OpenClaw у сеансі підагента для + конкретної зустрічі та озвучується через звичайне середовище виконання TTS OpenClaw. +- `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`: короткі усні відповіді, з +- `realtime.instructions`: короткі усні відповіді з `openclaw_agent_consult` для глибших відповідей -- `realtime.introMessage`: коротка усна перевірка готовності, коли realtime-міст - підключається; установіть `""`, щоб приєднатися мовчки -- `realtime.agentId`: необов’язковий id агента OpenClaw для - `openclaw_agent_consult`; типово `main` +- `realtime.introMessage`: коротка усна перевірка готовності під час підключення + моста реального часу; задайте `""`, щоб приєднуватися без звуку +- `realtime.agentId`: необов’язковий ідентифікатор агента OpenClaw для + `openclaw_agent_consult`; стандартно `main` Необов’язкові перевизначення: @@ -1096,13 +1102,15 @@ export GEMINI_API_KEY=... }, defaultMode: "agent", realtime: { - provider: "google", + provider: "openai", + transcriptionProvider: "openai", + voiceProvider: "google", + model: "gemini-2.5-flash-native-audio-preview-12-2025", agentId: "jay", toolPolicy: "owner", introMessage: "Say exactly: I'm here.", providers: { google: { - model: "gemini-2.5-flash-native-audio-preview-12-2025", voice: "Kore", }, }, @@ -1125,12 +1133,12 @@ export GEMINI_API_KEY=... } ``` -`voiceCall.enabled` типово має значення `true`; з транспортом Twilio він делегує -фактичний виклик PSTN, DTMF і вступне привітання Plugin Voice Call. Voice Call -відтворює послідовність DTMF перед відкриттям realtime медіапотоку, а потім використовує -збережений вступний текст як початкове realtime привітання. Якщо `voice-call` не -увімкнено, Google Meet усе ще може перевірити й записати план набору, але не може -здійснити виклик Twilio. +`voiceCall.enabled` стандартно дорівнює `true`; з транспортом Twilio він делегує +фактичний PSTN-виклик, DTMF і вступне привітання plugin Voice Call. Voice Call +відтворює послідовність DTMF перед відкриттям медіапотоку реального часу, а потім +використовує збережений вступний текст як початкове привітання в реальному часі. +Якщо `voice-call` не увімкнено, Google Meet усе ще може перевірити та записати +план набору, але не може здійснити виклик Twilio. ## Інструмент @@ -1145,43 +1153,45 @@ export GEMINI_API_KEY=... } ``` -Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. Використовуйте -`transport: "chrome-node"`, коли Chrome працює на спареному Node, наприклад у Parallels -VM. В обох випадках провайдери моделей і `openclaw_agent_consult` працюють на -хості Gateway, тож облікові дані моделей залишаються там. Із типовим `mode: "agent"` -провайдер realtime-транскрипції відповідає за прослуховування, налаштований агент OpenClaw -створює відповідь, а звичайний OpenClaw TTS озвучує її в Meet. Використовуйте -`mode: "bidi"`, коли потрібно, щоб realtime-голосова модель відповідала напряму. -Сире `mode: "realtime"` і далі приймається як застарілий сумісний псевдонім для -`mode: "agent"`, але більше не рекламується в схемі інструмента агента. +Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. +Використовуйте `transport: "chrome-node"`, коли Chrome працює на спареному вузлі, +наприклад VM Parallels. В обох випадках провайдери моделей і `openclaw_agent_consult` +працюють на хості Gateway, тож облікові дані моделей залишаються там. Зі +стандартним `mode: "agent"` провайдер транскрипції в реальному часі обробляє +прослуховування, налаштований агент OpenClaw створює відповідь, а звичайний +TTS OpenClaw озвучує її в Meet. Використовуйте `mode: "bidi"`, коли хочете, щоб +голосова модель реального часу відповідала напряму. Сирий `mode: "realtime"` +досі приймається як застарілий сумісний псевдонім для `mode: "agent"`, але +більше не рекламується у схемі інструмента агента. -Використовуйте `action: "status"`, щоб перелічити активні сесії або переглянути ID сесії. Використовуйте -`action: "speak"` із `sessionId` і `message`, щоб realtime-агент -заговорив негайно. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сесію, -запустити відому фразу й повернути стан `inCall`, коли хост Chrome може -про нього повідомити. `test_speech` завжди примусово встановлює `mode: "agent"` і завершується помилкою, якщо його просять -працювати в `mode: "transcribe"`, бо сесії лише спостереження навмисно не можуть -видавати мовлення. Його результат `speechOutputVerified` базується на збільшенні байтів realtime аудіовиходу -під час цього тестового виклику, тому повторно використана сесія зі старішим аудіо -не зараховується як свіжа успішна перевірка мовлення. Використовуйте `action: "leave"`, щоб позначити -сесію завершеною. +Використовуйте `action: "status"`, щоб перелічити активні сеанси або перевірити +ідентифікатор сеансу. Використовуйте `action: "speak"` із `sessionId` і `message`, +щоб агент реального часу негайно заговорив. Використовуйте `action: "test_speech"`, +щоб створити або повторно використати сеанс, запустити відому фразу та повернути +стан `inCall`, коли хост Chrome може його повідомити. `test_speech` завжди +примусово встановлює `mode: "agent"` і завершується помилкою, якщо його просять +працювати в `mode: "transcribe"`, оскільки сеанси лише спостереження навмисно не +можуть видавати мовлення. Його результат `speechOutputVerified` базується на +збільшенні байтів аудіовиходу в реальному часі під час цього тестового виклику, +тому повторно використаний сеанс зі старішим аудіо не рахується як свіжа успішна +перевірка мовлення. Використовуйте `action: "leave"`, щоб позначити сеанс як завершений. -`status` містить стан Chrome, коли він доступний: +`status` включає стан Chrome, коли він доступний: -- `inCall`: схоже, Chrome перебуває всередині виклику Meet -- `micMuted`: найкраща спроба визначити стан мікрофона Meet +- `inCall`: Chrome, схоже, перебуває у виклику Meet +- `micMuted`: стан мікрофона Meet у режимі найкращого зусилля - `manualActionRequired` / `manualActionReason` / `manualActionMessage`: профілю - браузера потрібні ручний вхід, допуск хостом Meet, дозволи або - відновлення керування браузером, перш ніж мовлення зможе працювати -- `speechReady` / `speechBlockedReason` / `speechBlockedMessage`: чи - дозволено кероване мовлення Chrome зараз. `speechReady: false` означає, що OpenClaw не + браузера потрібні ручний вхід, допуск хостом Meet, дозволи або виправлення + керування браузером, перш ніж мовлення зможе працювати +- `speechReady` / `speechBlockedReason` / `speechBlockedMessage`: чи дозволене + кероване мовлення Chrome зараз. `speechReady: false` означає, що OpenClaw не надіслав вступну/тестову фразу в аудіоміст. -- `providerConnected` / `realtimeReady`: стан realtime голосового мосту -- `lastInputAt` / `lastOutputAt`: останнє аудіо, отримане з мосту або надіслане до нього -- `audioOutputRouted` / `audioOutputDeviceLabel`: чи медіавивід вкладки Meet - був активно спрямований на пристрій BlackHole, який використовує міст -- `lastSuppressedInputAt` / `suppressedInputBytes`: local loopback вхід, проігнорований під час - активного відтворення асистента +- `providerConnected` / `realtimeReady`: стан голосового моста реального часу +- `lastInputAt` / `lastOutputAt`: останнє аудіо, побачене мостом або надіслане до нього +- `audioOutputRouted` / `audioOutputDeviceLabel`: чи медіавихід вкладки Meet було + активно спрямовано на пристрій BlackHole, який використовує міст +- `lastSuppressedInputAt` / `suppressedInputBytes`: вхід local loopback, + проігнорований, доки активне відтворення асистента ```json { @@ -1193,58 +1203,64 @@ VM. В обох випадках провайдери моделей і `opencla ## Режими Agent і Bidi -Режим Chrome `agent` оптимізовано для поведінки «мій агент присутній на зустрічі». Провайдер -realtime-транскрипції чує аудіо зустрічі, фінальні транскрипти учасників -спрямовуються через налаштованого агента OpenClaw, а відповідь -озвучується через звичайний runtime OpenClaw TTS. Установіть `mode: "bidi"`, коли потрібно, -щоб realtime-голосова модель відповідала напряму. -Сусідні фінальні фрагменти транскрипта об’єднуються перед консультацією, щоб один усний -хід не створював кілька застарілих часткових відповідей. Realtime вхід також -приглушується, поки поставлене в чергу аудіо асистента ще відтворюється, -а нещодавні схожі на асистентські відлуння транскрипта ігноруються перед консультацією агента, -щоб local loopback BlackHole не змушував агента відповідати на власне мовлення. +Режим Chrome `agent` оптимізований для поведінки "мій агент перебуває на зустрічі". +Провайдер транскрипції в реальному часі чує аудіо зустрічі, фінальні транскрипти +учасників маршрутизуються через налаштованого агента OpenClaw, а відповідь +озвучується через звичайне середовище виконання TTS OpenClaw. Установіть +`mode: "bidi"`, коли хочете, щоб голосова модель реального часу відповідала напряму. +Сусідні фінальні фрагменти транскрипту об’єднуються перед консультацією, щоб один +усний хід не створював кілька застарілих часткових відповідей. Вхід реального +часу також пригнічується, доки аудіо асистента в черзі ще відтворюється, а +недавні схожі на асистента відлуння транскрипту ігноруються перед консультацією +агента, щоб local loopback BlackHole не змушував агента відповідати на власне мовлення. -| Режим | Хто визначає відповідь | Шлях виводу мовлення | Коли використовувати | -| ------- | ----------------------------- | -------------------------------------- | ----------------------------------------------------- | -| `agent` | Налаштований агент OpenClaw | Звичайний runtime OpenClaw TTS | Потрібна поведінка «мій агент присутній на зустрічі» | -| `bidi` | Realtime-голосова модель | Аудіовідповідь realtime-голосового провайдера | Потрібен голосовий діалоговий цикл із найнижчою затримкою | +| Режим | Хто визначає відповідь | Шлях виведення мовлення | Коли використовувати | +| ------- | ------------------------------- | --------------------------------------- | ----------------------------------------------------- | +| `agent` | Налаштований агент OpenClaw | Звичайне середовище виконання TTS OpenClaw | Ви хочете поведінку "мій агент перебуває на зустрічі" | +| `bidi` | Голосова модель реального часу | Аудіовідповідь провайдера голосу реального часу | Ви хочете голосовий цикл розмови з найнижчою затримкою | -У режимі `bidi`, коли realtime-моделі потрібні глибше міркування, актуальна -інформація або звичайні інструменти OpenClaw, вона може викликати `openclaw_agent_consult`. +У режимі `bidi`, коли моделі реального часу потрібні глибше міркування, актуальна +інформація або звичайні інструменти OpenClaw, вона може викликати +`openclaw_agent_consult`. -Інструмент консультації запускає звичайного агента OpenClaw за лаштунками з контекстом -нещодавнього транскрипта зустрічі й повертає стислу усну відповідь. У режимі `agent` -OpenClaw надсилає цю відповідь напряму в runtime TTS; у режимі `bidi` -realtime-голосова модель може озвучити результат консультації назад у зустріч. Він використовує -той самий спільний механізм консультації, що й Voice Call. +Інструмент консультації запускає звичайного агента OpenClaw за лаштунками з +контекстом останніх транскриптів зустрічі та повертає стислу усну відповідь. У +режимі `agent` OpenClaw надсилає цю відповідь напряму в середовище виконання TTS; +у режимі `bidi` голосова модель реального часу може озвучити результат +консультації назад у зустріч. Він використовує той самий спільний механізм +консультацій, що й Voice Call. -Типово консультації виконуються для агента `main`. Установіть `realtime.agentId`, коли -доріжка Meet має консультуватися з виділеним робочим простором агента OpenClaw, типовими налаштуваннями моделі, -політикою інструментів, пам’яттю та історією сесії. +Стандартно консультації виконуються для агента `main`. Установіть +`realtime.agentId`, коли канал Meet має консультувати спеціальний робочий простір +агента OpenClaw, стандартні параметри моделі, політику інструментів, пам’ять та +історію сеансу. -Консультації в режимі агента використовують ключ сесії `agent::subagent:google-meet:` -для кожної зустрічі, щоб подальші запитання зберігали контекст зустрічі й водночас успадковували звичайну -політику агента від налаштованого агента. +Консультації режиму агента використовують ключ сеансу +`agent::subagent:google-meet:` для конкретної зустрічі, щоб додаткові +запитання зберігали контекст зустрічі, успадковуючи звичайну політику агента від +налаштованого агента. `realtime.toolPolicy` керує запуском консультації: -- `safe-read-only`: надати інструмент консультації й обмежити звичайного агента - `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і +- `safe-read-only`: показати інструмент консультації та обмежити звичайного агента + до `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і `memory_get`. -- `owner`: надати інструмент консультації й дозволити звичайному агенту використовувати звичайну - політику інструментів агента. -- `none`: не надавати інструмент консультації realtime-голосовій моделі. +- `owner`: показати інструмент консультації та дозволити звичайному агенту + використовувати звичайну політику інструментів агента. +- `none`: не показувати інструмент консультації голосовій моделі реального часу. -Ключ сесії консультації обмежено сесією Meet, тому подальші виклики консультації -можуть повторно використовувати попередній контекст консультації під час тієї самої зустрічі. +Ключ сеансу консультації обмежений кожним сеансом Meet, тому подальші виклики +консультації можуть повторно використовувати попередній контекст консультації +під час тієї самої зустрічі. -Щоб примусово запустити усну перевірку готовності після того, як Chrome повністю приєднався до виклику: +Щоб примусово виконати усну перевірку готовності після того, як Chrome повністю +приєднався до виклику: ```bash openclaw googlemeet speak meet_... "Say exactly: I'm here and listening." ``` -Для повної smoke-перевірки приєднання й мовлення: +Для повної димової перевірки приєднання й мовлення: ```bash openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ @@ -1254,7 +1270,7 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ ## Контрольний список live-тесту -Використовуйте цю послідовність перед передаванням зустрічі автономному агенту: +Використовуйте цю послідовність перед переданням зустрічі автономному агенту: ```bash openclaw googlemeet setup @@ -1266,12 +1282,12 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ Очікуваний стан Chrome-node: -- `googlemeet setup` повністю зелений. +- `googlemeet setup` увесь зелений. - `googlemeet setup` містить `chrome-node-connected`, коли Chrome-node є - типовим транспортом або Node закріплено. -- `nodes status` показує, що вибраний Node підключено. -- Вибраний Node оголошує і `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, це найкоротша @@ -1286,11 +1302,12 @@ openclaw nodes invoke \ --params '{"action":"setup"}' ``` -Це доводить, що Plugin Gateway завантажено, Node VM підключено з -поточним токеном, а аудіоміст Meet доступний до того, як агент відкриє -вкладку справжньої зустрічі. +Це підтверджує, що Plugin Gateway завантажено, node VM підключено з поточним +токеном, а аудіоміст Meet доступний до того, як агент відкриє вкладку реальної +зустрічі. -Для smoke-перевірки Twilio використовуйте зустріч, яка надає дані телефонного дозвону: +Для smoke-перевірки Twilio використовуйте зустріч, яка надає дані телефонного +підключення: ```bash openclaw googlemeet setup @@ -1306,11 +1323,11 @@ 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-міст із поставленим у чергу початковим привітанням. -- `googlemeet leave ` завершує делегований голосовий виклик. +- `openclaw logs --follow` показує, що DTMF TwiML було віддано перед realtime TwiML, а потім + realtime-міст із початковим привітанням у черзі. +- `googlemeet leave ` завершує делегований голосовий дзвінок. -## Усунення несправностей +## Усунення неполадок ### Агент не бачить інструмент Google Meet @@ -1321,19 +1338,19 @@ openclaw plugins list | grep google-meet openclaw googlemeet setup ``` -Якщо ви щойно відредагували `plugins.entries.google-meet`, перезапустіть або перезавантажте Gateway. +Якщо ви щойно редагували `plugins.entries.google-meet`, перезапустіть або перезавантажте Gateway. Запущений агент бачить лише інструменти Plugin, зареєстровані поточним процесом Gateway. -На хостах Gateway не з macOS інструмент `google_meet`, видимий агенту, залишається доступним, -але локальні дії Chrome talk-back блокуються до потрапляння в аудіоміст. -Локальний Chrome talk-back audio наразі залежить від macOS `BlackHole 2ch`, тому -агенти Linux мають використовувати `mode: "transcribe"`, Twilio dial-in або хост macOS -`chrome-node` замість стандартного шляху локального агента Chrome. +На хостах Gateway не з macOS інструмент `google_meet`, видимий агенту, залишається видимим, +але локальні дії відповіді голосом Chrome блокуються до потрапляння в аудіоміст. +Локальний Chrome-аудіо talk-back наразі залежить від macOS `BlackHole 2ch`, тому +агенти Linux мають використовувати `mode: "transcribe"`, телефонне підключення Twilio або хост macOS +`chrome-node` замість стандартного локального шляху агента Chrome. -### Немає підключеного Node із підтримкою Google Meet +### Немає підключеного node із підтримкою Google Meet -На хості Node виконайте: +На хості node виконайте: ```bash openclaw plugins enable google-meet @@ -1342,7 +1359,7 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host --port 18789 --display-name parallels-macos ``` -На хості Gateway схваліть Node і перевірте команди: +На хості Gateway схваліть node і перевірте команди: ```bash openclaw devices list @@ -1350,8 +1367,8 @@ openclaw devices approve openclaw nodes status ``` -Node має бути підключений і показувати `googlemeet.chrome` разом із `browser.proxy`. -Конфігурація Gateway має дозволяти ці команди Node: +Node має бути підключений і перелічувати `googlemeet.chrome` разом із `browser.proxy`. +Конфігурація Gateway має дозволяти ці команди node: ```json5 { @@ -1364,7 +1381,7 @@ Node має бути підключений і показувати `googlemeet. ``` Якщо `googlemeet setup` не проходить `chrome-node-connected` або журнал Gateway повідомляє -`gateway token mismatch`, перевстановіть або перезапустіть Node з поточним токеном Gateway. +`gateway token mismatch`, перевстановіть або перезапустіть node з поточним токеном Gateway. Для LAN Gateway це зазвичай означає: ```bash @@ -1376,7 +1393,7 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ --force ``` -Потім перезавантажте сервіс Node і повторно виконайте: +Потім перезавантажте службу node і повторно виконайте: ```bash openclaw googlemeet setup @@ -1385,54 +1402,53 @@ openclaw nodes status --connected ### Браузер відкривається, але агент не може приєднатися -Запустіть `googlemeet test-listen` для приєднань лише для спостереження або `googlemeet test-speech` -для realtime-приєднань, а потім перевірте повернений стан Chrome. Якщо будь-яка перевірка +Виконайте `googlemeet test-listen` для підключень лише для спостереження або `googlemeet test-speech` +для realtime-підключень, а потім перегляньте повернений стан Chrome. Якщо будь-яка проба повідомляє `manualActionRequired: true`, покажіть `manualActionMessage` оператору -і припиніть повторні спроби, доки дія в браузері не буде завершена. +і припиніть повтори, доки дія в браузері не буде завершена. -Типові ручні дії: +Поширені ручні дії: - Увійти в профіль Chrome. - Допустити гостя з облікового запису хоста Meet. -- Надати Chrome дозволи на мікрофон/камеру, коли з’явиться нативний запит дозволів - Chrome. +- Надати Chrome дозволи на мікрофон/камеру, коли з’явиться нативний запит дозволу Chrome. - Закрити або виправити завислий діалог дозволів Meet. -Не повідомляйте "not signed in" лише тому, що Meet показує "Do you want people to +Не повідомляйте "not signed in" лише через те, що Meet показує "Do you want people to hear you in the meeting?" Це проміжний екран вибору аудіо Meet; OpenClaw натискає **Use microphone** через автоматизацію браузера, коли це доступно, і продовжує -чекати на справжній стан зустрічі. Для резервного варіанта браузера лише для створення OpenClaw -може натиснути **Continue without microphone**, оскільки створення URL не потребує +чекати реального стану зустрічі. Для browser fallback лише для створення OpenClaw +може натиснути **Continue without microphone**, бо створення URL не потребує realtime-аудіошляху. -### Не вдається створити зустріч +### Створення зустрічі не вдається `googlemeet create` спочатку використовує endpoint Google Meet API `spaces.create`, -коли налаштовано облікові дані OAuth. Без облікових даних OAuth він переходить до -резервного браузера закріпленого Chrome Node. Підтвердьте: +коли налаштовано облікові дані OAuth. Без облікових даних OAuth він переходить +до pinned Chrome node browser. Підтвердьте: -- Для створення через API: налаштовано `oauth.clientId` і `oauth.refreshToken`, - або наявні відповідні змінні середовища `OPENCLAW_GOOGLE_MEET_*`. -- Для створення через API: refresh token було створено після додавання підтримки - створення. Старішим токенам може бракувати scope `meetings.space.created`; повторно виконайте +- Для створення через API: `oauth.clientId` і `oauth.refreshToken` налаштовано, + або присутні відповідні змінні середовища `OPENCLAW_GOOGLE_MEET_*`. +- Для створення через API: refresh token було створено після додавання підтримки створення. + У старіших токенах може бракувати scope `meetings.space.created`; повторно виконайте `openclaw googlemeet auth login --json` і оновіть конфігурацію Plugin. -- Для резервного варіанта браузера: `defaultTransport: "chrome-node"` і - `chromeNode.node` вказують на підключений Node із `browser.proxy` і +- Для browser fallback: `defaultTransport: "chrome-node"` і + `chromeNode.node` вказують на підключений node з `browser.proxy` і `googlemeet.chrome`. -- Для резервного варіанта браузера: профіль OpenClaw Chrome на цьому Node увійшов +- Для browser fallback: профіль OpenClaw Chrome на цьому node увійшов у Google і може відкрити `https://meet.google.com/new`. -- Для резервного варіанта браузера: повторні спроби повторно використовують наявну вкладку - `https://meet.google.com/new` або вкладку запиту облікового запису Google перед відкриттям нової вкладки. Якщо агент отримує timeout, - повторіть виклик інструмента, а не відкривайте вручну іншу вкладку Meet. -- Для резервного варіанта браузера: якщо інструмент повертає `manualActionRequired: true`, використовуйте +- Для browser fallback: повтори використовують наявну вкладку `https://meet.google.com/new` + або вкладку запиту облікового запису Google перед відкриттям нової вкладки. Якщо агент вичерпує час очікування, + повторіть виклик інструмента замість ручного відкриття іншої вкладки Meet. +- Для browser fallback: якщо інструмент повертає `manualActionRequired: true`, використовуйте повернені `browser.nodeId`, `browser.targetId`, `browserUrl` і - `manualActionMessage`, щоб зорієнтувати оператора. Не повторюйте спроби в циклі, доки цю - дію не завершено. -- Для резервного варіанта браузера: якщо Meet показує "Do you want people to hear you in the + `manualActionMessage`, щоб скерувати оператора. Не повторюйте в циклі, доки ця + дія не буде завершена. +- Для browser fallback: якщо 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`. + create-only fallback, **Continue without microphone** через автоматизацію браузера + і продовжити чекати згенерований URL Meet. Якщо він не може, помилка має згадувати + `meet-audio-choice-required`, а не `google-login-required`. ### Агент приєднується, але не говорить @@ -1443,41 +1459,41 @@ openclaw googlemeet setup openclaw googlemeet doctor ``` -Використовуйте `mode: "agent"` для звичайного шляху STT -> агент OpenClaw -> TTS talk-back, +Використовуйте `mode: "agent"` для нормального шляху STT -> агент OpenClaw -> TTS talk-back, або `mode: "bidi"` для прямого резервного realtime-голосу. `mode: "transcribe"` -навмисно не запускає міст talk-back. Для налагодження лише спостереження -запустіть `openclaw googlemeet status --json ` після того, як учасники заговорять, +навмисно не запускає міст talk-back. Для налагодження лише зі спостереженням +виконайте `openclaw googlemeet status --json ` після того, як учасники заговорять, і перевірте `captioning`, `transcriptLines` і `lastCaptionText`. Якщо `inCall` дорівнює true, але `transcriptLines` залишається `0`, субтитри Meet можуть бути вимкнені, ніхто не говорив після встановлення спостерігача, UI Meet змінився або живі субтитри недоступні для мови/облікового запису зустрічі. `googlemeet test-speech` завжди перевіряє realtime-шлях і повідомляє, чи -було помічено вихідні байти мосту для цього виклику. Якщо `speechOutputVerified` дорівнює false і +було зафіксовано вихідні байти мосту для цього виклику. Якщо `speechOutputVerified` дорівнює false, а `speechOutputTimedOut` дорівнює true, realtime-провайдер міг прийняти -висловлювання, але OpenClaw не побачив, щоб нові вихідні байти дійшли до аудіомоста +фразу, але OpenClaw не побачив, щоб нові вихідні байти дійшли до аудіомоста Chrome. Також перевірте: - На хості Gateway доступний ключ realtime-провайдера, наприклад `OPENAI_API_KEY` або `GEMINI_API_KEY`. -- `BlackHole 2ch` видимий на хості Chrome. +- `BlackHole 2ch` видно на хості Chrome. - `sox` існує на хості Chrome. -- Мікрофон і динамік Meet маршрутизуються через віртуальний аудіошлях, який використовує - OpenClaw. `doctor` має показувати `meet output routed: yes` для локальних realtime-приєднань - Chrome. +- Мікрофон і динамік Meet спрямовано через віртуальний аудіошлях, який використовує + OpenClaw. `doctor` має показати `meet output routed: yes` для локальних Chrome + realtime-підключень. -`googlemeet doctor [session-id]` виводить сеанс, Node, стан у виклику, -причину ручної дії, підключення realtime-провайдера, `realtimeReady`, активність -аудіовходу/виходу, останні часові мітки аудіо, лічильники байтів і URL браузера. +`googlemeet doctor [session-id]` виводить сеанс, node, стан перебування в дзвінку, +причину ручної дії, з’єднання realtime-провайдера, `realtimeReady`, активність +аудіовходу/аудіовиходу, останні аудіо timestamps, лічильники байтів і URL браузера. Використовуйте `googlemeet status [session-id] --json`, коли потрібен сирий JSON. Використовуйте -`googlemeet doctor --oauth`, коли потрібно перевірити Google Meet OAuth refresh -без розкриття токенів; додайте `--meeting` або `--create-space`, коли також потрібен -доказ Google Meet API. +`googlemeet doctor --oauth`, коли потрібно перевірити refresh Google Meet OAuth +без розкриття токенів; додайте `--meeting` або `--create-space`, коли також потрібне +підтвердження Google Meet API. -Якщо агент отримав timeout і ви бачите вже відкриту вкладку Meet, перевірте цю вкладку -без відкриття іншої: +Якщо час очікування агента вичерпався і ви бачите вже відкриту вкладку Meet, перегляньте цю вкладку +без відкриття ще однієї: ```bash openclaw googlemeet recover-tab @@ -1487,18 +1503,18 @@ openclaw googlemeet recover-tab https://meet.google.com/abc-defg-hij Еквівалентна дія інструмента — `recover_current_tab`. Вона фокусує та перевіряє наявну вкладку Meet для вибраного транспорту. З `chrome` вона використовує локальне керування браузером через Gateway; з `chrome-node` вона використовує налаштований -Chrome Node. Вона не відкриває нову вкладку і не створює новий сеанс; вона повідомляє -поточний блокер, наприклад вхід, допуск, дозволи або стан вибору аудіо. +Chrome node. Вона не відкриває нову вкладку і не створює новий сеанс; вона повідомляє +поточний блокер, наприклад стан входу, допуску, дозволів або вибору аудіо. Команда CLI звертається до налаштованого Gateway, тому Gateway має бути запущений; -`chrome-node` також вимагає, щоб Chrome Node був підключений. +`chrome-node` також потребує підключеного Chrome node. -### Не проходять перевірки налаштування Twilio +### Перевірки налаштування Twilio не проходять `twilio-voice-call-plugin` не проходить, коли `voice-call` не дозволено або не ввімкнено. Додайте його до `plugins.allow`, увімкніть `plugins.entries.voice-call` і перезавантажте Gateway. -`twilio-voice-call-credentials` не проходить, коли backend Twilio не має account +`twilio-voice-call-credentials` не проходить, коли бекенду Twilio бракує account SID, auth token або caller number. Задайте їх на хості Gateway: ```bash @@ -1507,12 +1523,12 @@ export TWILIO_AUTH_TOKEN=... export TWILIO_FROM_NUMBER=+15550001234 ``` -`twilio-voice-call-webhook` не проходить, коли `voice-call` не має публічного Webhook -exposure або коли `publicUrl` вказує на local loopback чи приватний мережевий простір. -Задайте `plugins.entries.voice-call.config.publicUrl` як URL публічного провайдера або -налаштуйте tunnel/Tailscale exposure для `voice-call`. +`twilio-voice-call-webhook` не проходить, коли `voice-call` не має публічної Webhook +експозиції або коли `publicUrl` вказує на loopback чи простір приватної мережі. +Задайте `plugins.entries.voice-call.config.publicUrl` як публічний URL провайдера або +налаштуйте тунель/Tailscale експозицію `voice-call`. -Loopback і приватні URL не є дійсними для carrier callbacks. Не використовуйте +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`. @@ -1535,8 +1551,8 @@ Loopback і приватні URL не є дійсними для carrier callbac } ``` -Для локальної розробки використовуйте tunnel або Tailscale exposure замість приватного -URL хоста: +Для локальної розробки використовуйте тунель або Tailscale експозицію замість URL приватного +хоста: ```json5 { @@ -1562,23 +1578,23 @@ openclaw voicecall setup openclaw voicecall smoke ``` -`voicecall smoke` за замовчуванням перевіряє лише готовність. Щоб dry-run для конкретного номера: +`voicecall smoke` за замовчуванням перевіряє лише готовність. Щоб dry-run конкретний номер: ```bash openclaw voicecall smoke --to "+15555550123" ``` Додавайте `--yes` лише тоді, коли навмисно хочете здійснити живий outbound notify -call: +дзвінок: ```bash openclaw voicecall smoke --to "+15555550123" --yes ``` -### Виклик Twilio починається, але ніколи не входить у зустріч +### Дзвінок Twilio починається, але ніколи не входить у зустріч -Підтвердьте, що подія Meet надає дані телефонного dial-in. Передайте точний dial-in -номер і PIN або власну послідовність DTMF: +Підтвердьте, що подія Meet надає дані телефонного підключення. Передайте точний номер +підключення і PIN або спеціальну DTMF-послідовність: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij \ @@ -1590,37 +1606,79 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ Використовуйте початкові `w` або коми в `--dtmf-sequence`, якщо провайдеру потрібна пауза перед введенням PIN. -Якщо телефонний виклик створено, але список учасників Meet ніколи не показує dial-in -учасника: +Якщо телефонний дзвінок створено, але roster Meet ніколи не показує учасника +dial-in: -- Виконайте `openclaw googlemeet doctor `, щоб підтвердити делегований ID виклику Twilio, чи було поставлено DTMF у чергу та чи було запитано вступне привітання. -- Виконайте `openclaw voicecall status --call-id ` і підтвердьте, що виклик усе ще активний. -- Виконайте `openclaw voicecall tail` і перевірте, що webhooks Twilio надходять до Gateway. -- Виконайте `openclaw logs --follow` і знайдіть послідовність Twilio Meet: Google Meet делегує приєднання, Voice Call запускає телефонну гілку, Google Meet очікує `voiceCall.dtmfDelayMs`, надсилає DTMF через `voicecall.dtmf`, очікує `voiceCall.postDtmfSpeechDelayMs`, а потім запитує вступне мовлення через `voicecall.speak`. -- Повторно виконайте `openclaw googlemeet setup --transport twilio`; успішна перевірка налаштування обов’язкова, але вона не доводить, що послідовність PIN зустрічі правильна. -- Підтвердьте, що номер для телефонного підключення належить до того самого запрошення Meet і регіону, що й PIN. -- Збільште `voiceCall.dtmfDelayMs`, якщо Meet відповідає повільно або транскрипт виклику все ще показує запит на введення PIN після надсилання DTMF. -- Якщо учасник приєднується, але ви не чуєте привітання, перевірте `openclaw logs --follow` на наявність post-DTMF запиту `voicecall.speak` і або відтворення TTS через медіапотік, або резервний Twilio ``. Якщо транскрипт виклику все ще містить "enter the meeting PIN", телефонна гілка ще не приєдналася до кімнати Meet, тому учасники зустрічі не почують мовлення. +- Запустіть `openclaw googlemeet doctor `, щоб підтвердити делегований + ідентифікатор виклику Twilio, чи було DTMF поставлено в чергу та чи було + запитано вступне привітання. +- Запустіть `openclaw voicecall status --call-id ` і підтвердьте, що виклик + усе ще активний. +- Запустіть `openclaw voicecall tail` і перевірте, що Webhook-и Twilio надходять + до Gateway. +- Запустіть `openclaw logs --follow` і знайдіть послідовність Twilio Meet: Google + Meet делегує приєднання, Voice Call запускає телефонну гілку, Google Meet + очікує `voiceCall.dtmfDelayMs`, надсилає DTMF за допомогою `voicecall.dtmf`, + очікує `voiceCall.postDtmfSpeechDelayMs`, а потім запитує вступне мовлення за + допомогою `voicecall.speak`. +- Повторно запустіть `openclaw googlemeet setup --transport twilio`; потрібна + зелена перевірка налаштування, але вона не доводить, що послідовність PIN + зустрічі правильна. +- Підтвердьте, що номер для дозвону належить до того самого запрошення Meet і + регіону, що й PIN. +- Збільште `voiceCall.dtmfDelayMs`, якщо Meet відповідає повільно або транскрипт + виклику все ще показує підказку з проханням ввести PIN після надсилання DTMF. +- Якщо учасник приєднується, але ви не чуєте привітання, перевірте + `openclaw logs --follow` на наявність post-DTMF запиту `voicecall.speak` і + або відтворення TTS через медіапотік, або резервний варіант Twilio ``. + Якщо транскрипт виклику все ще містить "enter the meeting PIN", телефонна гілка + ще не приєдналася до кімнати Meet, тож учасники зустрічі не почують мовлення. -Якщо webhooks не надходять, спершу діагностуйте плагін Voice Call: провайдер має досягати `plugins.entries.voice-call.config.publicUrl` або налаштованого тунелю. Див. [усунення несправностей голосових викликів](/uk/plugins/voice-call#troubleshooting). +Якщо Webhook-и не надходять, спершу налагодьте Plugin Voice Call: провайдер має +досягати `plugins.entries.voice-call.config.publicUrl` або налаштованого тунелю. +Див. [Усунення несправностей голосового виклику](/uk/plugins/voice-call#troubleshooting). -## Примітки +## Нотатки -Офіційний медіа-API Google Meet орієнтований на отримання, тому мовлення в виклик Meet усе ще потребує шляху учасника. Цей плагін робить цю межу видимою: Chrome обробляє участь через браузер і маршрутизацію локального аудіо; Twilio обробляє участь через телефонне підключення. +Офіційний медіа-API Google Meet орієнтований на отримання, тому для мовлення у +виклик Meet все ще потрібен шлях учасника. Цей Plugin робить цю межу видимою: +Chrome обробляє участь у браузері та локальну маршрутизацію аудіо; Twilio +обробляє участь через телефонний дозвін. -Режими talk-back Chrome потребують `BlackHole 2ch` плюс один із варіантів: +Режими зворотного мовлення Chrome потребують `BlackHole 2ch` плюс одне з такого: -- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw володіє мостом і передає аудіо у форматі `chrome.audioFormat` між цими командами та вибраним провайдером. Режим агента використовує транскрипцію в реальному часі плюс звичайний TTS; режим bidi використовує голосового провайдера в реальному часі. Стандартний шлях Chrome — 24 kHz PCM16 із `chrome.audioBufferBytes: 4096`; 8 kHz G.711 mu-law залишається доступним для застарілих пар команд. -- `chrome.audioBridgeCommand`: зовнішня команда моста володіє всім локальним аудіошляхом і має завершитися після запуску або перевірки свого демона. Це допустимо лише для `bidi`, оскільки режим `agent` потребує прямого доступу до пари команд для TTS. +- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw володіє + мостом і передає аудіо у `chrome.audioFormat` між цими командами та вибраним + провайдером. Режим агента використовує транскрипцію в реальному часі плюс + звичайний TTS; режим bidi використовує провайдера голосу в реальному часі. + Типовий шлях Chrome — 24 кГц PCM16 з `chrome.audioBufferBytes: 4096`; 8 кГц + G.711 mu-law залишається доступним для застарілих пар команд. +- `chrome.audioBridgeCommand`: зовнішня команда мосту володіє всім локальним + аудіошляхом і має завершитися після запуску або перевірки свого демона. Це + дійсно лише для `bidi`, оскільки режим `agent` потребує прямого доступу до + пари команд для TTS. -Для чистого дуплексного аудіо маршрутизуйте вихід Meet і мікрофон Meet через окремі віртуальні пристрої або граф віртуальних пристроїв у стилі Loopback. Один спільний пристрій BlackHole може повертати аудіо інших учасників назад у виклик. +Для чистого дуплексного аудіо маршрутизуйте вихід Meet і мікрофон Meet через +окремі віртуальні пристрої або граф віртуальних пристроїв у стилі Loopback. Один +спільний пристрій BlackHole може відлунювати інших учасників назад у виклик. -З командно-парним мостом Chrome `chrome.bargeInInputCommand` може слухати окремий локальний мікрофон і очищати відтворення асистента, коли людина починає говорити. Це утримує людське мовлення попереду виводу асистента, навіть коли спільний вхід loopback BlackHole тимчасово приглушений під час відтворення асистента. Як і `chrome.audioInputCommand` та `chrome.audioOutputCommand`, це локальна команда, налаштована оператором. Використовуйте явний довірений шлях до команди або список аргументів і не спрямовуйте її на скрипти з недовірених розташувань. +З командно-парним мостом Chrome `chrome.bargeInInputCommand` може прослуховувати +окремий локальний мікрофон і очищати відтворення асистента, коли людина починає +говорити. Це утримує людське мовлення попереду виводу асистента, навіть коли +спільний вхід BlackHole loopback тимчасово приглушено під час відтворення +асистента. Як і `chrome.audioInputCommand` та `chrome.audioOutputCommand`, це +налаштована оператором локальна команда. Використовуйте явний довірений шлях +команди або список аргументів і не спрямовуйте її на скрипти з недовірених +розташувань. -`googlemeet speak` запускає активний аудіоміст talk-back для сеансу Chrome. `googlemeet leave` зупиняє цей міст. Для сеансів Twilio, делегованих через плагін Voice Call, `leave` також завершує базовий голосовий виклик. Використовуйте `googlemeet end-active-conference`, коли також потрібно закрити активну конференцію Google Meet для простору, керованого API. +`googlemeet speak` запускає активний аудіоміст зворотного мовлення для сесії +Chrome. `googlemeet leave` зупиняє цей міст. Для сесій Twilio, делегованих через +Plugin Voice Call, `leave` також завершує базовий голосовий виклик. Використовуйте +`googlemeet end-active-conference`, коли також потрібно закрити активну конференцію +Google Meet для простору, керованого API. ## Пов’язане -- [Плагін голосових викликів](/uk/plugins/voice-call) +- [Plugin голосового виклику](/uk/plugins/voice-call) - [Режим розмови](/uk/nodes/talk) -- [Створення плагінів](/uk/plugins/building-plugins) +- [Створення Plugins](/uk/plugins/building-plugins)