diff --git a/docs/uk/plugins/google-meet.md b/docs/uk/plugins/google-meet.md index 2df65ad6c..bd1ad716c 100644 --- a/docs/uk/plugins/google-meet.md +++ b/docs/uk/plugins/google-meet.md @@ -1,42 +1,42 @@ --- read_when: - - Ви хочете, щоб агент OpenClaw приєднався до дзвінка Google Meet + - Ви хочете, щоб агент OpenClaw приєднався до зустрічі Google Meet - Ви хочете, щоб агент OpenClaw створив новий дзвінок Google Meet - - Ви налаштовуєте Chrome, вузол Chrome або Twilio як транспорт для Google Meet -summary: 'Plugin Google Meet: приєднання до явно заданих URL-адрес Meet через Chrome або Twilio зі стандартними параметрами голосу в реальному часі' -title: Plugin Google Meet + - Ви налаштовуєте Chrome, вузол Chrome або Twilio як транспорт Google Meet +summary: 'Plugin Google Meet: приєднання до явно вказаних URL-адрес Meet через Chrome або Twilio з типовими налаштуваннями голосу в реальному часі' +title: Plugin для Google Meet x-i18n: - generated_at: "2026-04-28T11:19:25Z" + generated_at: "2026-04-30T01:50:01Z" model: gpt-5.5 provider: openai - source_hash: 09779496b4aad3c854937dfeb69966372dd1a61eaafcf9da06831fa4bad8f34d + source_hash: 7b989c872fee0dca31680f67559cd26b715303f7c6f4eeda51fc63889bb0383c source_path: plugins/google-meet.md workflow: 16 --- -Підтримка учасника Google Meet для OpenClaw — плагін навмисно працює лише явно: +Підтримка учасника Google Meet для OpenClaw — Plugin навмисно працює явно: - Він приєднується лише до явно вказаної URL-адреси `https://meet.google.com/...`. -- Він може створити новий простір Meet через Google Meet API, а потім приєднатися за - поверненою URL-адресою. -- `realtime` голос є режимом за замовчуванням. -- Realtime-голос може звертатися назад до повного агента OpenClaw, коли потрібні глибше +- Він може створити новий простір Meet через Google Meet API, а потім приєднатися до + поверненої URL-адреси. +- `realtime` voice є режимом за замовчуванням. +- Realtime voice може звертатися назад до повного агента OpenClaw, коли потрібні глибші міркування або інструменти. -- Агенти вибирають поведінку приєднання через `mode`: використовуйте `realtime` для живого - слухання/відповіді голосом або `transcribe`, щоб приєднатися/керувати браузером без - realtime-голосового мосту. -- Автентифікація починається як особистий Google OAuth або вже авторизований профіль Chrome. +- Агенти вибирають поведінку приєднання за допомогою `mode`: використовуйте `realtime` для живого + прослуховування/відповіді голосом або `transcribe`, щоб приєднатися/керувати браузером без + realtime voice bridge. +- Автентифікація починається як особистий Google OAuth або вже виконаний вхід у профіль Chrome. - Автоматичного оголошення згоди немає. -- Типовий аудіобекенд Chrome — `BlackHole 2ch`. -- Chrome може працювати локально або на спареному вузловому хості. +- Стандартний аудіобекенд Chrome — `BlackHole 2ch`. +- Chrome може працювати локально або на спареному хості node. - Twilio приймає номер для дозвону плюс необов’язковий PIN або послідовність DTMF. -- Команда CLI — `googlemeet`; `meet` зарезервовано для ширших workflow телеконференцій - агентів. +- Команда CLI — `googlemeet`; `meet` зарезервовано для ширших агентських + телекомунікаційних робочих процесів. ## Швидкий старт -Установіть локальні аудіозалежності та налаштуйте бекенд-провайдера realtime-голосу. -OpenAI є типовим; Google Gemini Live також працює з +Установіть локальні аудіозалежності та налаштуйте бекенд-провайдера realtime voice. +OpenAI є стандартним; Google Gemini Live також працює з `realtime.provider: "google"`: ```bash @@ -53,14 +53,14 @@ Homebrew потребує перезавантаження, перш ніж macO sudo reboot ``` -Після перезавантаження перевірте обидві частини: +Після перезавантаження перевірте обидва компоненти: ```bash system_profiler SPAudioDataType | grep -i BlackHole command -v sox ``` -Увімкніть плагін: +Увімкніть Plugin: ```json5 { @@ -81,22 +81,22 @@ command -v sox openclaw googlemeet setup ``` -Вивід setup призначений бути придатним для читання агентом і чутливим до режиму. Він -повідомляє про профіль Chrome, прив’язку вузла, а для realtime-приєднань Chrome — -про аудіоміст BlackHole/SoX і перевірки відкладеного realtime-вступу. Для приєднань -лише для спостереження перевірте той самий транспорт із `--mode transcribe`; цей режим -пропускає передумови realtime-аудіо, бо не слухає і не говорить через міст: +Вивід налаштування призначений для читання агентом і враховує режим. Він повідомляє про профіль Chrome, +закріплення node і, для realtime-приєднань Chrome, аудіоміст BlackHole/SoX +та відкладені перевірки realtime-вступу. Для приєднань лише для спостереження перевірте той самий +транспорт за допомогою `--mode transcribe`; цей режим пропускає передумови realtime-аудіо, +бо він не слухає і не говорить через міст: ```bash openclaw googlemeet setup --transport chrome-node --mode transcribe ``` -Коли налаштовано делегування Twilio, setup також повідомляє, чи готові плагін -`voice-call` і облікові дані Twilio. Вважайте будь-яку перевірку `ok: false` -блокером для перевірених транспорту й режиму, перш ніж просити агента приєднатися. -Використовуйте `openclaw googlemeet setup --json` для скриптів або машинозчитуваного +Коли налаштовано делегування Twilio, налаштування також повідомляє, чи готові +Plugin `voice-call` і облікові дані Twilio. Розглядайте будь-яку перевірку `ok: false` +як блокер для перевіреного транспорту й режиму, перш ніж просити агента +приєднатися. Використовуйте `openclaw googlemeet setup --json` для скриптів або машинозчитуваного виводу. Використовуйте `--transport chrome`, `--transport chrome-node` або `--transport twilio`, -щоб попередньо перевірити конкретний транспорт до того, як агент спробує його. +щоб попередньо перевірити конкретний транспорт, перш ніж агент спробує його. Приєднайтеся до зустрічі: @@ -132,24 +132,24 @@ openclaw googlemeet create --no-join - Створення через API: використовується, коли налаштовано облікові дані Google Meet OAuth. Це найдетермінованіший шлях, який не залежить від стану інтерфейсу браузера. - Резервний шлях через браузер: використовується, коли облікових даних OAuth немає. OpenClaw використовує - прив’язаний вузол Chrome, відкриває `https://meet.google.com/new`, чекає, поки Google - перенаправить на справжню URL-адресу з кодом зустрічі, а потім повертає цю URL-адресу. Цей шлях потребує, - щоб профіль OpenClaw Chrome на вузлі вже був авторизований у Google. - Автоматизація браузера обробляє власний перший запит Meet на доступ до мікрофона; цей запит + закріплений Chrome node, відкриває `https://meet.google.com/new`, чекає, поки Google + перенаправить на справжню URL-адресу з кодом зустрічі, а потім повертає цю URL-адресу. Цей шлях вимагає, + щоб у профілі OpenClaw Chrome на node вже було виконано вхід у Google. + Автоматизація браузера обробляє власний початковий запит Meet щодо мікрофона; цей запит не вважається помилкою входу в Google. - Потоки приєднання та створення також намагаються повторно використати наявну вкладку Meet перед відкриттям - нової. Зіставлення ігнорує нешкідливі параметри URL-запиту, як-от `authuser`, тож повторна спроба - агента має сфокусувати вже відкриту зустріч замість створення другої + Потоки приєднання і створення також намагаються повторно використати наявну вкладку Meet перед відкриттям + нової. Зіставлення ігнорує нешкідливі рядки запиту URL, як-от `authuser`, тож повторна спроба агента + має сфокусувати вже відкриту зустріч замість створення другої вкладки Chrome. Вивід команди/інструмента містить поле `source` (`api` або `browser`), щоб агенти могли пояснити, який шлях було використано. `create` за замовчуванням приєднується до нової зустрічі та -повертає `joined: true` плюс сесію приєднання. Щоб лише створити URL, використовуйте +повертає `joined: true` плюс сеанс приєднання. Щоб лише створити URL, використовуйте `create --no-join` у CLI або передайте `"join": false` інструменту. -Або скажіть агенту: "Створи Google Meet, приєднайся до нього з realtime-голосом і надішли -мені посилання." Агент має викликати `google_meet` з `action: "create"`, а потім -поділитися поверненим `meetingUri`. +Або скажіть агенту: «Створи Google Meet, приєднайся до нього з realtime voice і надішли +мені посилання». Агент має викликати `google_meet` з `action: "create"`, а +потім поділитися поверненим `meetingUri`. ```json { @@ -159,40 +159,43 @@ openclaw googlemeet create --no-join } ``` -Для приєднання лише для спостереження/керування браузером задайте `"mode": "transcribe"`. Це +Для приєднання лише для спостереження/керування браузером установіть `"mode": "transcribe"`. Це не запускає дуплексний міст realtime-моделі, не потребує BlackHole або SoX і не відповідатиме голосом у зустрічі. Приєднання Chrome у цьому режимі також уникають -надання OpenClaw дозволу на мікрофон/камеру та уникають шляху Meet **Use -microphone**. Якщо Meet показує проміжний екран вибору аудіо, автоматизація пробує -шлях без мікрофона, а інакше повідомляє про ручну дію замість відкриття +надання OpenClaw дозволу на мікрофон/камеру й обходять шлях Meet **Use +microphone**. Якщо Meet показує проміжний екран вибору аудіо, автоматизація намагається +обрати шлях без мікрофона, а інакше повідомляє про ручну дію замість відкриття локального мікрофона. -Під час realtime-сесій статус `google_meet` містить стан браузера й аудіомоста, -як-от `inCall`, `manualActionRequired`, `providerConnected`, -`realtimeReady`, `audioInputActive`, `audioOutputActive`, останні часові мітки -входу/виходу, лічильники байтів і стан закриття мосту. Якщо з’являється безпечний запит сторінки Meet, -автоматизація браузера обробляє його, коли може. Вхід, допуск організатором і +Під час realtime-сеансів статус `google_meet` містить стан браузера й аудіомоста, +зокрема `inCall`, `manualActionRequired`, `providerConnected`, +`realtimeReady`, `audioInputActive`, `audioOutputActive`, останні часові позначки вводу/виводу, +лічильники байтів і стан закриття моста. Якщо з’являється безпечний запит сторінки Meet, +автоматизація браузера обробляє його, коли може. Вхід, допуск хостом і запити дозволів браузера/ОС повідомляються як ручна дія з причиною та -повідомленням, яке агент має передати. +повідомленням, яке агент має передати. Керовані сеанси Chrome видають вступ або +тестову фразу лише після того, як стан браузера повідомить `inCall: true`; інакше статус повідомляє +`speechReady: false`, а спробу мовлення блокують замість удавання, що +агент говорив у зустрічі. -Локальні приєднання Chrome відбуваються через авторизований профіль браузера OpenClaw. Realtime-режим +Локальні приєднання Chrome використовують профіль браузера OpenClaw, у якому виконано вхід. Realtime-режим потребує `BlackHole 2ch` для шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого дуплексного аудіо використовуйте окремі віртуальні пристрої або граф у стилі Loopback; одного -пристрою BlackHole достатньо для першого smoke-тесту, але він може давати луну. +пристрою BlackHole достатньо для першого smoke test, але він може створювати луну. -### Локальний gateway + Parallels Chrome +### Локальний Gateway + Parallels Chrome -Вам **не** потрібен повний OpenClaw Gateway або ключ API моделі всередині macOS VM -лише для того, щоб VM керувала Chrome. Запустіть Gateway і агента локально, а потім запустіть -вузловий хост у VM. Увімкніть вбудований плагін у VM один раз, щоб вузол +Вам **не** потрібен повний OpenClaw Gateway або ключ API моделі всередині macOS VM, +лише щоб VM володіла Chrome. Запустіть Gateway і агента локально, а потім запустіть +node host у VM. Увімкніть bundled Plugin на VM один раз, щоб node оголошував команду Chrome: -Що де запускається: +Що де працює: - Хост Gateway: OpenClaw Gateway, робочий простір агента, ключі моделі/API, realtime - провайдер і конфігурація плагіна Google Meet. -- Parallels macOS VM: OpenClaw CLI/вузловий хост, Google Chrome, SoX, BlackHole 2ch - і профіль Chrome, авторизований у Google. + provider і конфігурація Plugin Google Meet. +- Parallels macOS VM: OpenClaw CLI/node host, Google Chrome, SoX, BlackHole 2ch, + і профіль Chrome із виконаним входом у Google. - Не потрібно у VM: служба Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування провайдера моделі. @@ -215,27 +218,27 @@ system_profiler SPAudioDataType | grep -i BlackHole command -v sox ``` -Установіть або оновіть OpenClaw у VM, а потім увімкніть там вбудований плагін: +Установіть або оновіть OpenClaw у VM, а потім увімкніть там bundled Plugin: ```bash openclaw plugins enable google-meet ``` -Запустіть вузловий хост у VM: +Запустіть node host у VM: ```bash openclaw node run --host --port 18789 --display-name parallels-macos ``` -Якщо `` є LAN IP і ви не використовуєте TLS, вузол відхиляє -відкритий WebSocket, якщо ви явно не дозволите це для цієї довіреної приватної мережі: +Якщо `` — це LAN IP і ви не використовуєте TLS, node відмовиться від +plaintext WebSocket, якщо ви явно не дозволите це для довіреної приватної мережі: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host --port 18789 --display-name parallels-macos ``` -Використовуйте ту саму змінну середовища, коли встановлюєте вузол як LaunchAgent: +Використовуйте ту саму змінну середовища під час встановлення node як LaunchAgent: ```bash OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ @@ -243,25 +246,25 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node restart ``` -`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` є середовищем процесу, а не налаштуванням +`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` — це середовище процесу, а не налаштування `openclaw.json`. `openclaw node install` зберігає його в середовищі LaunchAgent, коли воно присутнє в команді встановлення. -Схваліть вузол із хоста Gateway: +Схваліть node з хоста Gateway: ```bash openclaw devices list openclaw devices approve ``` -Підтвердьте, що Gateway бачить вузол і що той оголошує як `googlemeet.chrome`, +Підтвердьте, що Gateway бачить node і що він оголошує як `googlemeet.chrome`, так і можливість браузера/`browser.proxy`: ```bash openclaw nodes status ``` -Спрямуйте Meet через цей вузол на хості Gateway: +Маршрутизуйте Meet через цей node на хості Gateway: ```json5 { @@ -299,38 +302,38 @@ 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 заповнює гостьове ім’я, натискає -Join/Ask to join і приймає перший вибір Meet "Use microphone", коли такий -запит з’являється. Під час приєднання лише для спостереження або створення зустрічі лише через браузер вона -проходить повз той самий запит без мікрофона, коли такий вибір доступний. -Якщо профіль браузера не авторизований, Meet очікує допуску організатором, +Під час realtime-приєднання автоматизація браузера OpenClaw заповнює ім’я гостя, натискає +Join/Ask to join і приймає початковий вибір Meet "Use microphone", коли цей +запит з’являється. Під час приєднання лише для спостереження або створення зустрічі лише в браузері вона +проходить далі той самий запит без мікрофона, коли такий вибір доступний. +Якщо в профілі браузера не виконано вхід, Meet очікує допуску хостом, Chrome потребує дозволу на мікрофон/камеру для realtime-приєднання або Meet застряг на запиті, який автоматизація не змогла розв’язати, результат join/test-speech повідомляє `manualActionRequired: true` з `manualActionReason` і -`manualActionMessage`. Агенти мають припинити повторні спроби приєднання, повідомити саме це +`manualActionMessage`. Агенти мають припинити повторні спроби приєднання, повідомити це точне повідомлення плюс поточні `browserUrl`/`browserTitle` і повторювати спробу лише після завершення ручної дії в браузері. Якщо `chromeNode.node` пропущено, OpenClaw автоматично вибирає лише тоді, коли рівно один -підключений вузол оголошує і `googlemeet.chrome`, і керування браузером. Якщо -підключено кілька придатних вузлів, задайте `chromeNode.node` як ідентифікатор вузла, -відображуване ім’я або віддалений IP. +підключений node оголошує як `googlemeet.chrome`, так і керування браузером. Якщо +підключено кілька придатних node, установіть `chromeNode.node` як id node, +відображуване ім’я або віддалену IP-адресу. Поширені перевірки збоїв: -- `Configured Google Meet node ... is not usable: offline`: прив’язаний вузол - відомий Gateway, але недоступний. Агенти мають вважати цей вузол - діагностичним станом, а не придатним хостом Chrome, і повідомляти про блокер setup - замість переходу на інший транспорт, якщо користувач цього не просив. +- `Configured Google Meet node ... is not usable: offline`: закріплений вузол + відомий Gateway, але недоступний. Агенти мають розглядати цей вузол як + діагностичний стан, а не як придатний хост Chrome, і повідомляти про блокер + налаштування замість переходу на інший транспорт, якщо користувач цього не просив. - `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM, - схваліть pairing і переконайтеся, що `openclaw plugins enable google-meet` і + схваліть сполучення та переконайтеся, що `openclaw plugins enable google-meet` і `openclaw plugins enable browser` були виконані у VM. Також підтвердьте, що хост Gateway дозволяє обидві команди вузла через `gateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"]`. @@ -339,62 +342,63 @@ Chrome потребує дозволу на мікрофон/камеру для - `BlackHole 2ch audio device not found on the node`: установіть `blackhole-2ch` у VM і перезавантажте VM. - Chrome відкривається, але не може приєднатися: увійдіть у профіль браузера всередині VM або - залиште `chrome.guestName` заданим для гостьового приєднання. Гостьове автоприєднання використовує - автоматизацію браузера OpenClaw через проксі браузера вузла; переконайтеся, що конфігурація браузера вузла + залиште `chrome.guestName` заданим для гостьового приєднання. Автоматичне гостьове приєднання використовує автоматизацію браузера OpenClaw + через проксі браузера вузла; переконайтеся, що конфігурація браузера вузла вказує на потрібний профіль, наприклад - `browser.defaultProfile: "user"` або іменований профіль наявної сесії. + `browser.defaultProfile: "user"` або іменований профіль наявного сеансу. - Дублікати вкладок Meet: залиште `chrome.reuseExistingTab: true` увімкненим. OpenClaw активує наявну вкладку для тієї самої URL-адреси Meet перед відкриттям нової, а - створення зустрічі через браузер повторно використовує поточну `https://meet.google.com/new` + створення зустрічі в браузері повторно використовує незавершену вкладку `https://meet.google.com/new` або вкладку запиту облікового запису Google перед відкриттям іншої. - Немає аудіо: у Meet спрямуйте мікрофон/динамік через шлях віртуального аудіопристрою, - який використовує OpenClaw; використовуйте окремі віртуальні пристрої або маршрутизацію в стилі Loopback + який використовує OpenClaw; використовуйте окремі віртуальні пристрої або маршрутизацію у стилі Loopback для чистого дуплексного аудіо. -## Примітки зі встановлення +## Примітки щодо встановлення -Стандарт Chrome realtime використовує два зовнішні інструменти: +Стандартне реального часу Chrome використовує два зовнішні інструменти: -- `sox`: аудіоутиліта командного рядка. Plugin використовує явні команди пристроїв CoreAudio - для стандартного аудіомоста PCM16 24 кГц. +- `sox`: утиліта командного рядка для аудіо. Plugin використовує явні команди пристрою CoreAudio + для стандартного 24 кГц PCM16 аудіомоста. - `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій `BlackHole 2ch`, - через який Chrome/Meet може маршрутизувати аудіо. + через який Chrome/Meet можуть маршрутизувати аудіо. -OpenClaw не вбудовує й не розповсюджує жоден із цих пакетів. Документація просить користувачів +OpenClaw не комплектує й не розповсюджує жоден із цих пакетів. Документація просить користувачів установити їх як залежності хоста через Homebrew. SoX ліцензовано як `LGPL-2.0-only AND GPL-2.0-only`; BlackHole має ліцензію GPL-3.0. Якщо ви створюєте -інсталятор або appliance, який вбудовує BlackHole разом з OpenClaw, перегляньте умови -ліцензування upstream BlackHole або отримайте окрему ліцензію від Existential Audio. +інсталятор або appliance, який комплектує BlackHole з OpenClaw, перегляньте умови +ліцензування BlackHole upstream або отримайте окрему ліцензію від Existential Audio. ## Транспорти ### Chrome Транспорт Chrome відкриває URL Meet через керування браузером OpenClaw і приєднується -як браузерний профіль OpenClaw із виконаним входом. У macOS Plugin перед запуском перевіряє -наявність `BlackHole 2ch`. Якщо налаштовано, він також виконує команду перевірки справності -аудіомоста та команду запуску перед відкриттям Chrome. Використовуйте `chrome`, коли +як профіль браузера OpenClaw, у який виконано вхід. На macOS Plugin перевіряє наявність +`BlackHole 2ch` перед запуском. Якщо налаштовано, він також виконує команду перевірки справності аудіомоста +та стартову команду перед відкриттям Chrome. Використовуйте `chrome`, коли Chrome/аудіо працюють на хості Gateway; використовуйте `chrome-node`, коли Chrome/аудіо працюють -на спареному вузлі, наприклад Parallels macOS VM. Для локального Chrome виберіть профіль через -`browser.defaultProfile`; `chrome.browserProfile` передається хостам `chrome-node`. +на сполученому вузлі, наприклад VM Parallels macOS. Для локального Chrome виберіть +профіль через `browser.defaultProfile`; `chrome.browserProfile` передається хостам +`chrome-node`. ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome-node ``` -Маршрутизуйте аудіо мікрофона й динаміка Chrome через локальний аудіоміст OpenClaw. -Якщо `BlackHole 2ch` не встановлено, приєднання завершується помилкою налаштування, -а не тихим приєднанням без аудіошляху. +Спрямуйте аудіо мікрофона й динаміка Chrome через локальний аудіоміст OpenClaw. +Якщо `BlackHole 2ch` не встановлено, приєднання завершується помилкою налаштування +замість тихого приєднання без аудіошляху. ### Twilio -Транспорт Twilio — це суворий план набору, делегований Plugin Voice Call. Він +Транспорт Twilio — це строгий план набору, делегований Plugin Voice Call. Він не аналізує сторінки Meet для пошуку телефонних номерів. -Використовуйте це, коли участь через Chrome недоступна або потрібен резервний -варіант телефонного набору. Google Meet має надати телефонний номер для набору та PIN -для зустрічі; OpenClaw не виявляє їх зі сторінки Meet. +Використовуйте це, коли участь через Chrome недоступна або потрібен резервний варіант телефонного дозвону. +Google Meet має надавати телефонний номер для дозвону та PIN для +зустрічі; OpenClaw не виявляє їх зі сторінки Meet. Увімкніть Plugin Voice Call на хості Gateway, а не на вузлі Chrome: @@ -421,8 +425,8 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome } ``` -Надайте облікові дані Twilio через середовище або конфігурацію. Середовище -не дає секретам потрапити в `openclaw.json`: +Надайте облікові дані Twilio через середовище або конфігурацію. Середовище зберігає +секрети поза `openclaw.json`: ```bash export TWILIO_ACCOUNT_SID=AC... @@ -431,7 +435,7 @@ export TWILIO_FROM_NUMBER=+15550001234 ``` Перезапустіть або перезавантажте Gateway після ввімкнення `voice-call`; зміни конфігурації Plugin -не з’являться в уже запущеному процесі Gateway, доки він не перезавантажиться. +не з’являються в уже запущеному процесі Gateway, доки він не перезавантажиться. Потім перевірте: @@ -441,8 +445,8 @@ openclaw plugins list | grep -E 'google-meet|voice-call' openclaw googlemeet setup ``` -Коли делегування Twilio під’єднано, `googlemeet setup` містить успішні перевірки -`twilio-voice-call-plugin` і `twilio-voice-call-credentials`. +Коли делегування Twilio підключене, `googlemeet setup` містить успішні +перевірки `twilio-voice-call-plugin` і `twilio-voice-call-credentials`. ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij \ @@ -451,7 +455,7 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --pin 123456 ``` -Використовуйте `--dtmf-sequence`, коли зустріч потребує власної послідовності: +Використовуйте `--dtmf-sequence`, коли зустріч потребує спеціальної послідовності: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij \ @@ -462,30 +466,29 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ ## OAuth і попередня перевірка -OAuth необов’язковий для створення посилання Meet, оскільки `googlemeet create` може -повернутися до автоматизації браузера. Налаштуйте OAuth, коли потрібні офіційне створення -через API, розпізнавання простору або попередні перевірки Meet Media API. +OAuth є необов’язковим для створення посилання Meet, оскільки `googlemeet create` може +повертатися до автоматизації браузера. Налаштуйте OAuth, коли вам потрібне офіційне створення через API, +визначення простору або попередні перевірки Meet Media API. -Доступ до Google Meet API використовує користувацький OAuth: створіть OAuth-клієнт Google Cloud, -запросіть потрібні області доступу, авторизуйте обліковий запис Google, а потім збережіть -отриманий refresh token у конфігурації Plugin Google Meet або надайте змінні середовища -`OPENCLAW_GOOGLE_MEET_*`. +Доступ до Google Meet API використовує користувацький OAuth: створіть клієнт Google Cloud OAuth, +запитайте потрібні області доступу, авторизуйте обліковий запис Google, а потім збережіть +отриманий refresh token у конфігурації Plugin Google Meet або надайте +змінні середовища `OPENCLAW_GOOGLE_MEET_*`. -OAuth не замінює шлях приєднання через Chrome. Транспорти Chrome і Chrome-node -і далі приєднуються через профіль Chrome із виконаним входом, BlackHole/SoX і під’єднаний -вузол, коли використовується участь через браузер. OAuth призначений лише для офіційного шляху -Google Meet API: створення просторів зустрічей, розпізнавання просторів і запуск попередніх -перевірок Meet Media API. +OAuth не замінює шлях приєднання Chrome. Транспорти Chrome і Chrome-node +все одно приєднуються через профіль Chrome, у який виконано вхід, BlackHole/SoX і підключений +вузол, коли ви використовуєте участь через браузер. OAuth призначений лише для офіційного шляху +Google Meet API: створення просторів зустрічей, визначення просторів і виконання попередніх перевірок 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. Додайте області доступу, які запитує OpenClaw: - `https://www.googleapis.com/auth/meetings.space.created` @@ -493,7 +496,7 @@ Google Meet API: створення просторів зустрічей, ро - `https://www.googleapis.com/auth/meetings.conference.media.readonly` 5. Створіть OAuth client ID. - Тип застосунку: **Web application**. - - Авторизований URI переспрямування: + - Авторизований URI перенаправлення: ```text http://localhost:8085/oauth2callback @@ -501,24 +504,24 @@ Google Meet API: створення просторів зустрічей, ро 6. Скопіюйте client ID і client secret. -`meetings.space.created` потрібен для Google Meet `spaces.create`. -`meetings.space.readonly` дає OpenClaw змогу розпізнавати URL/коди Meet у простори. -`meetings.conference.media.readonly` призначений для попередньої перевірки Meet Media API і роботи -з медіа; Google може вимагати реєстрації в Developer Preview для фактичного використання Media API. -Якщо вам потрібні лише приєднання через Chrome на базі браузера, повністю пропустіть OAuth. +`meetings.space.created` потрібен Google Meet `spaces.create`. +`meetings.space.readonly` дає OpenClaw змогу визначати URL/коди Meet як простори. +`meetings.conference.media.readonly` призначений для попередньої перевірки Meet Media API та роботи з медіа; +Google може вимагати участі в Developer Preview для фактичного використання Media API. +Якщо вам потрібні лише приєднання Chrome на основі браузера, повністю пропустіть OAuth. -### Видача refresh token +### Створіть refresh token -Налаштуйте `oauth.clientId` і, за бажанням, `oauth.clientSecret`, або передайте їх як +Налаштуйте `oauth.clientId` і, за потреби, `oauth.clientSecret`, або передайте їх як змінні середовища, а потім виконайте: ```bash openclaw googlemeet auth login --json ``` -Команда друкує блок конфігурації `oauth` з refresh token. Вона використовує PKCE, -localhost callback на `http://localhost:8085/oauth2callback` і ручний потік -копіювання/вставлення з `--manual`. +Команда виводить конфігураційний блок `oauth` із refresh token. Вона використовує PKCE, +localhost callback на `http://localhost:8085/oauth2callback` і ручний +потік копіювання/вставлення з `--manual`. Приклади: @@ -528,7 +531,7 @@ OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \ openclaw googlemeet auth login --json ``` -Використовуйте ручний режим, коли браузер не може дістатися локального callback: +Використовуйте ручний режим, коли браузер не може досягти локального callback: ```bash OPENCLAW_GOOGLE_MEET_CLIENT_ID="your-client-id" \ @@ -536,7 +539,7 @@ OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \ openclaw googlemeet auth login --json --manual ``` -JSON-вивід містить: +Вивід JSON містить: ```json { @@ -572,39 +575,39 @@ JSON-вивід містить: } ``` -Надавайте перевагу змінним середовища, якщо не хочете зберігати refresh token у конфігурації. -Якщо присутні і значення конфігурації, і значення середовища, Plugin спочатку використовує -конфігурацію, а потім fallback на середовище. +Надавайте перевагу змінним середовища, коли не хочете зберігати refresh token у конфігурації. +Якщо присутні і значення конфігурації, і значення середовища, Plugin спершу використовує конфігурацію, +а потім резервне значення середовища. -Згода OAuth включає створення просторів Meet, доступ до читання просторів Meet і доступ до читання -медіа конференцій Meet. Якщо ви автентифікувалися до появи підтримки створення зустрічей, -повторно виконайте `openclaw googlemeet auth login --json`, щоб refresh token мав область доступу -`meetings.space.created`. +Згода OAuth включає створення простору Meet, доступ на читання простору Meet і доступ на читання +медіа конференції Meet. Якщо ви автентифікувалися до появи підтримки створення зустрічей, +повторно виконайте `openclaw googlemeet auth login --json`, щоб refresh +token мав область доступу `meetings.space.created`. -### Перевірка OAuth через doctor +### Перевірте OAuth через doctor -Запустіть OAuth doctor, коли потрібна швидка перевірка справності без секретів: +Запустіть doctor OAuth, коли потрібна швидка перевірка справності без секретів: ```bash openclaw googlemeet doctor --oauth --json ``` -Це не завантажує runtime Chrome і не потребує під’єднаного вузла Chrome. Воно -перевіряє, що конфігурація OAuth існує і що refresh token може видати access token. -JSON-звіт містить лише поля стану, такі як `ok`, `configured`, `tokenSource`, -`expiresAt`, і повідомлення перевірок; він не друкує access token, refresh token -або client secret. +Це не завантажує runtime Chrome і не потребує підключеного вузла Chrome. Він +перевіряє, що конфігурація OAuth існує і що refresh token може створити access +token. Звіт JSON містить лише поля стану, як-от `ok`, `configured`, +`tokenSource`, `expiresAt`, і повідомлення перевірок; він не виводить access +token, refresh token або client secret. Поширені результати: -| Перевірка | Значення | -| -------------------- | --------------------------------------------------------------------------------------- | -| `oauth-config` | `oauth.clientId` плюс `oauth.refreshToken`, або кешований access token, присутній. | -| `oauth-token` | Кешований access token досі дійсний, або refresh token видав новий access token. | -| `meet-spaces-get` | Необов’язкова перевірка `--meeting` розпізнала наявний простір Meet. | -| `meet-spaces-create` | Необов’язкова перевірка `--create-space` створила новий простір Meet. | +| Перевірка | Значення | +| -------------------- | ---------------------------------------------------------------------------------------- | +| `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. | -Щоб також підтвердити ввімкнення Google Meet API і область доступу `spaces.create`, запустіть +Щоб також довести ввімкнення Google Meet API і область доступу `spaces.create`, виконайте перевірку створення з побічним ефектом: ```bash @@ -612,38 +615,38 @@ openclaw googlemeet doctor --oauth --create-space --json openclaw googlemeet create --no-join --json ``` -`--create-space` створює одноразовий URL Meet. Використовуйте його, коли потрібно підтвердити, -що в проєкті Google Cloud увімкнено Meet API і що авторизований обліковий запис має область доступу -`meetings.space.created`. +`--create-space` створює одноразову URL-адресу Meet. Використовуйте це, коли потрібно підтвердити, +що в проєкті Google Cloud увімкнено Meet API і що авторизований +обліковий запис має область доступу `meetings.space.created`. -Щоб підтвердити доступ до читання для наявного простору зустрічі: +Щоб довести доступ на читання для наявного простору зустрічі: ```bash openclaw googlemeet doctor --oauth --meeting https://meet.google.com/abc-defg-hij --json openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij ``` -`doctor --oauth --meeting` і `resolve-space` підтверджують доступ до читання наявного +`doctor --oauth --meeting` і `resolve-space` доводять доступ на читання до наявного простору, до якого авторизований обліковий запис Google має доступ. `403` від цих перевірок -зазвичай означає, що Google Meet REST API вимкнено, погодженому refresh token бракує потрібної -області доступу або обліковий запис Google не має доступу до цього простору Meet. +зазвичай означає, що Google Meet REST API вимкнено, погодженому refresh token +бракує потрібної області доступу або обліковий запис Google не може отримати доступ до цього простору Meet. Помилка refresh-token означає, що потрібно повторно виконати `openclaw googlemeet auth login --json` і зберегти новий блок `oauth`. -Для браузерного fallback облікові дані OAuth не потрібні. У цьому режимі автентифікація Google -надходить із профілю Chrome із виконаним входом на вибраному вузлі, а не з конфігурації -OpenClaw. +Облікові дані OAuth не потрібні для резервного режиму браузера. У цьому режимі автентифікація Google +надходить із профілю Chrome, у який виконано вхід на вибраному вузлі, а не з +конфігурації OpenClaw. -Ці змінні середовища приймаються як fallback: +Ці змінні середовища приймаються як резервні: -- `OPENCLAW_GOOGLE_MEET_CLIENT_ID` or `GOOGLE_MEET_CLIENT_ID` -- `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` or `GOOGLE_MEET_CLIENT_SECRET` -- `OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN` or `GOOGLE_MEET_REFRESH_TOKEN` -- `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN` or `GOOGLE_MEET_ACCESS_TOKEN` -- `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` or +- `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID` +- `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` або `GOOGLE_MEET_CLIENT_SECRET` +- `OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN` або `GOOGLE_MEET_REFRESH_TOKEN` +- `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN` або `GOOGLE_MEET_ACCESS_TOKEN` +- `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` або `GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` -- `OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING` or `GOOGLE_MEET_DEFAULT_MEETING` -- `OPENCLAW_GOOGLE_MEET_PREVIEW_ACK` or `GOOGLE_MEET_PREVIEW_ACK` +- `OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING` або `GOOGLE_MEET_DEFAULT_MEETING` +- `OPENCLAW_GOOGLE_MEET_PREVIEW_ACK` або `GOOGLE_MEET_PREVIEW_ACK` Розпізнайте URL Meet, код або `spaces/{id}` через `spaces.get`: @@ -657,7 +660,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 @@ -665,12 +668,9 @@ openclaw googlemeet attendance --meeting https://meet.google.com/abc-defg-hij openclaw googlemeet export --meeting https://meet.google.com/abc-defg-hij --output ./meet-export ``` -З `--meeting`, `artifacts` і `attendance` за замовчуванням використовують найновіший запис -конференції. Передайте `--all-conference-records`, коли потрібні всі збережені записи -для цієї зустрічі. +З `--meeting`, `artifacts` і `attendance` типово використовують найновіший запис конференції. Передайте `--all-conference-records`, коли потрібні всі збережені записи для цієї зустрічі. -Пошук у календарі може розпізнати URL зустрічі з Google Calendar перед читанням -артефактів Meet: +Пошук у календарі може визначити URL зустрічі з Google Calendar перед читанням артефактів Meet: ```bash openclaw googlemeet latest --today @@ -679,10 +679,9 @@ openclaw googlemeet artifacts --event "Weekly sync" openclaw googlemeet attendance --today --format csv --output attendance.csv ``` -`--today` шукає в сьогоднішньому календарі `primary` подію календаря з посиланням Google Meet. Використовуйте `--event ` для пошуку відповідного тексту події, а `--calendar ` — для неосновного календаря. Пошук у календарі потребує свіжого входу OAuth, який включає readonly scope для подій календаря. -`calendar-events` попередньо показує відповідні події Meet і позначає подію, яку вибере `latest`, `artifacts`, `attendance` або `export`. +`--today` шукає в сьогоднішньому календарі `primary` подію Calendar із посиланням Google Meet. Використовуйте `--event ` для пошуку відповідного тексту події, а `--calendar ` для неосновного календаря. Пошук у календарі потребує нового входу OAuth, який містить readonly-область подій Calendar. `calendar-events` попередньо показує відповідні події Meet і позначає подію, яку виберуть `latest`, `artifacts`, `attendance` або `export`. -Якщо ви вже знаєте ідентифікатор запису конференції, звертайтеся до нього напряму: +Якщо ви вже знаєте ідентифікатор запису конференції, зверніться до нього напряму: ```bash openclaw googlemeet latest --meeting https://meet.google.com/abc-defg-hij @@ -705,13 +704,11 @@ openclaw googlemeet export --conference-record conferenceRecords/abc123 \ --include-doc-bodies --dry-run ``` -`artifacts` повертає метадані запису конференції, а також метадані ресурсів учасників, записів, транскриптів, структурованих записів транскрипту й розумних нотаток, коли Google надає їх для зустрічі. Використовуйте `--no-transcript-entries`, щоб пропустити пошук записів для великих зустрічей. `attendance` розгортає учасників у рядки сеансів учасників із часом першої/останньої появи, загальною тривалістю сеансу, прапорцями запізнення/раннього виходу та об’єднанням дубльованих ресурсів учасників за авторизованим користувачем або відображуваним іменем. Передайте `--no-merge-duplicates`, щоб залишити необроблені ресурси учасників окремими, `--late-after-minutes`, щоб налаштувати виявлення запізнення, і `--early-before-minutes`, щоб налаштувати виявлення раннього виходу. +`artifacts` повертає метадані запису конференції, а також метадані ресурсів учасників, записів, транскрипту, структурованих записів транскрипту та розумних нотаток, коли Google надає їх для зустрічі. Використовуйте `--no-transcript-entries`, щоб пропустити пошук записів для великих зустрічей. `attendance` розгортає учасників у рядки сеансів учасників із часом першої/останньої появи, загальною тривалістю сеансу, прапорцями запізнення/раннього виходу та об'єднаними дублікатами ресурсів учасників за користувачем, що ввійшов, або відображуваним ім'ям. Передайте `--no-merge-duplicates`, щоб зберегти необроблені ресурси учасників окремо, `--late-after-minutes`, щоб налаштувати виявлення запізнення, і `--early-before-minutes`, щоб налаштувати виявлення раннього виходу. -`export` записує папку, що містить `summary.md`, `attendance.csv`, `transcript.md`, `artifacts.json`, `attendance.json` і `manifest.json`. -`manifest.json` фіксує вибрані вхідні дані, параметри експорту, записи конференцій, вихідні файли, лічильники, джерело токена, подію календаря, якщо її було використано, і будь-які попередження про часткове отримання. Передайте `--zip`, щоб також записати переносний архів поряд із папкою. Передайте `--include-doc-bodies`, щоб експортувати текст пов’язаних транскриптів і Google Docs розумних нотаток через Google Drive `files.export`; це потребує свіжого входу OAuth, який включає Drive Meet readonly scope. Без `--include-doc-bodies` експорт містить лише метадані Meet і структуровані записи транскрипту. Якщо Google повертає частковий збій артефакту, наприклад помилку списку розумних нотаток, запису транскрипту або тіла документа Drive, зведення й маніфест зберігають попередження замість того, щоб завершити весь експорт помилкою. -Використовуйте `--dry-run`, щоб отримати ті самі дані артефактів/відвідуваності й надрукувати JSON маніфесту без створення папки або ZIP. Це корисно перед записом великого експорту або коли агенту потрібні лише лічильники, вибрані записи й попередження. +`export` записує папку, що містить `summary.md`, `attendance.csv`, `transcript.md`, `artifacts.json`, `attendance.json` і `manifest.json`. `manifest.json` фіксує вибрані вхідні дані, параметри експорту, записи конференції, вихідні файли, кількості, джерело токена, подію Calendar, якщо її використано, і будь-які попередження про часткове отримання. Передайте `--zip`, щоб також записати переносний архів поруч із папкою. Передайте `--include-doc-bodies`, щоб експортувати пов'язані тексти транскриптів і розумних нотаток Google Docs через Google Drive `files.export`; для цього потрібен новий вхід OAuth, що містить readonly-область Drive Meet. Без `--include-doc-bodies` експорти містять лише метадані Meet і структуровані записи транскрипту. Якщо Google повертає частковий збій артефакту, наприклад помилку списку розумних нотаток, запису транскрипту або тіла документа Drive, підсумок і маніфест зберігають попередження замість того, щоб провалити весь експорт. Використовуйте `--dry-run`, щоб отримати ті самі дані артефактів/відвідуваності та надрукувати JSON маніфесту без створення папки або ZIP. Це корисно перед записом великого експорту або коли агенту потрібні лише кількості, вибрані записи та попередження. -Агенти також можуть створити той самий пакет через інструмент `google_meet`: +Агенти також можуть створити такий самий набір через інструмент `google_meet`: ```json { @@ -723,9 +720,9 @@ openclaw googlemeet export --conference-record conferenceRecords/abc123 \ } ``` -Установіть `"dryRun": true`, щоб повернути лише маніфест експорту й пропустити запис файлів. +Установіть `"dryRun": true`, щоб повернути лише маніфест експорту та пропустити запис файлів. -Запустіть захищений live smoke проти реальної збереженої зустрічі: +Запустіть захищений live smoke проти справжньої збереженої зустрічі: ```bash OPENCLAW_LIVE_TEST=1 \ @@ -736,22 +733,28 @@ pnpm test:live -- extensions/google-meet/google-meet.live.test.ts Середовище live smoke: - `OPENCLAW_LIVE_TEST=1` вмикає захищені live-тести. -- `OPENCLAW_GOOGLE_MEET_LIVE_MEETING` вказує на збережену URL-адресу Meet, код або `spaces/{id}`. -- `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID` надає ідентифікатор OAuth-клієнта. -- `OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN` або `GOOGLE_MEET_REFRESH_TOKEN` надає refresh token. -- Необов’язково: `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET`, `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN` і `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` використовують ті самі резервні назви без префікса `OPENCLAW_`. +- `OPENCLAW_GOOGLE_MEET_LIVE_MEETING` указує на збережений URL Meet, код або + `spaces/{id}`. +- `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` використовують ті самі fallback-назви + без префікса `OPENCLAW_`. -Базовий 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/drive.meet.readonly`. +Базовий live smoke для артефактів/відвідуваності потребує `https://www.googleapis.com/auth/meetings.space.readonly` і `https://www.googleapis.com/auth/meetings.conference.media.readonly`. Пошук у Calendar потребує `https://www.googleapis.com/auth/calendar.events.readonly`. Експорт тіла документа Drive потребує `https://www.googleapis.com/auth/drive.meet.readonly`. -Створіть свіжий простір Meet: +Створіть новий простір Meet: ```bash openclaw googlemeet create ``` -Команда друкує новий `meeting uri`, джерело та сеанс приєднання. З OAuth-обліковими даними вона використовує офіційний Google Meet API. Без OAuth-облікових даних вона використовує авторизований профіль браузера закріпленого Chrome node як fallback. Агенти можуть використовувати інструмент `google_meet` з `action: "create"`, щоб створити й приєднатися за один крок. Для створення лише URL передайте `"join": false`. +Команда друкує новий `meeting uri`, джерело та сеанс приєднання. З OAuth-обліковими даними вона використовує офіційний Google Meet API. Без OAuth-облікових даних вона використовує браузерний профіль закріпленого Chrome node, у якому виконано вхід, як fallback. Агенти можуть використовувати інструмент `google_meet` з `action: "create"`, щоб створити й приєднатися за один крок. Для створення лише URL передайте `"join": false`. -Приклад JSON-виводу з browser fallback: +Приклад JSON-виводу з браузерного fallback: ```json { @@ -771,7 +774,7 @@ openclaw googlemeet create } ``` -Якщо browser fallback натрапляє на вхід у Google або блокування дозволів Meet до того, як зможе створити URL, метод Gateway повертає невдалу відповідь, а інструмент `google_meet` повертає структуровані деталі замість простого рядка: +Якщо браузерний fallback наштовхується на вхід Google або блокування дозволів Meet до того, як зможе створити URL, метод Gateway повертає невдалу відповідь, а інструмент `google_meet` повертає структуровані деталі замість звичайного рядка: ```json { @@ -812,9 +815,9 @@ openclaw googlemeet create } ``` -Створення Meet за замовчуванням виконує приєднання. Транспорт Chrome або Chrome-node все одно потребує авторизованого профілю Google Chrome, щоб приєднатися через браузер. Якщо профіль не авторизований, OpenClaw повідомляє `manualActionRequired: true` або помилку browser fallback і просить оператора завершити вхід у Google перед повторною спробою. +Створення Meet типово приєднується до зустрічі. Транспорт Chrome або Chrome-node все ще потребує профілю Google Chrome із виконаним входом, щоб приєднатися через браузер. Якщо з профілю виконано вихід, OpenClaw повідомляє `manualActionRequired: true` або помилку браузерного fallback і просить оператора завершити вхід Google перед повторною спробою. -Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш проєкт Cloud, OAuth-принципал і учасники зустрічі зареєстровані в Google Workspace Developer Preview Program для Meet media APIs. +Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud-проєкт, OAuth-принципал і учасники зустрічі зареєстровані в Google Workspace Developer Preview Program для Meet media APIs. ## Конфігурація @@ -846,22 +849,28 @@ export GEMINI_API_KEY=... - `defaultTransport: "chrome"` - `defaultMode: "realtime"` -- `chromeNode.node`: необов’язковий id/name/IP Node для `chrome-node` +- `chromeNode.node`: необов'язковий ідентифікатор/назва/IP node для `chrome-node` - `chrome.audioBackend: "blackhole-2ch"` -- `chrome.guestName: "OpenClaw Agent"`: ім’я, що використовується на екрані гостя Meet без входу -- `chrome.autoJoin: true`: best-effort заповнення імені гостя й натискання Join Now через автоматизацію браузера OpenClaw на `chrome-node` -- `chrome.reuseExistingTab: true`: активувати наявну вкладку Meet замість відкривання дублікатів -- `chrome.waitForInCallMs: 20000`: чекати, доки вкладка Meet повідомить, що вона в дзвінку, перед запуском realtime-вступу -- `chrome.audioFormat: "pcm16-24khz"`: аудіоформат пари команд. Використовуйте `"g711-ulaw-8khz"` лише для legacy/custom пар команд, які досі виводять телефонний звук. -- `chrome.audioInputCommand`: команда SoX, що читає з CoreAudio `BlackHole 2ch` і записує аудіо у `chrome.audioFormat` -- `chrome.audioOutputCommand`: команда SoX, що читає аудіо у `chrome.audioFormat` і записує в CoreAudio `BlackHole 2ch` +- `chrome.guestName: "OpenClaw Agent"`: ім'я, що використовується на екрані гостя Meet без входу +- `chrome.autoJoin: true`: best-effort заповнення імені гостя та натискання Join Now через браузерну автоматизацію OpenClaw на `chrome-node` +- `chrome.reuseExistingTab: true`: активувати наявну вкладку Meet замість відкриття дублікатів +- `chrome.waitForInCallMs: 20000`: чекати, доки вкладка Meet повідомить, що вона in-call, перш ніж буде запущено realtime-вступ +- `chrome.audioFormat: "pcm16-24khz"`: аудіоформат command-pair. Використовуйте + `"g711-ulaw-8khz"` лише для legacy/custom command pairs, які досі emit + telephony audio. +- `chrome.audioInputCommand`: команда SoX, що читає з CoreAudio `BlackHole 2ch` + і записує аудіо у `chrome.audioFormat` +- `chrome.audioOutputCommand`: команда SoX, що читає аудіо в `chrome.audioFormat` + і записує в CoreAudio `BlackHole 2ch` - `realtime.provider: "openai"` - `realtime.toolPolicy: "safe-read-only"` -- `realtime.instructions`: короткі усні відповіді з `openclaw_agent_consult` для глибших відповідей -- `realtime.introMessage`: коротка усна перевірка готовності, коли realtime-міст підключається; установіть `""`, щоб приєднатися мовчки -- `realtime.agentId`: необов’язковий ідентифікатор агента OpenClaw для `openclaw_agent_consult`; типово `main` +- `realtime.instructions`: короткі усні відповіді, з + `openclaw_agent_consult` для глибших відповідей +- `realtime.introMessage`: коротка усна перевірка готовності, коли під'єднується realtime bridge; установіть її в `""`, щоб приєднатися мовчки +- `realtime.agentId`: необов'язковий ідентифікатор агента OpenClaw для + `openclaw_agent_consult`; типово `main` -Необов’язкові перевизначення: +Необов'язкові перевизначення: ```json5 { @@ -908,7 +917,7 @@ export GEMINI_API_KEY=... } ``` -`voiceCall.enabled` типово дорівнює `true`; з транспортом Twilio він делегує фактичний PSTN-дзвінок і DTMF до Voice Call plugin. Якщо `voice-call` не ввімкнено, Google Meet усе ще може перевірити й записати план набору, але не може здійснити Twilio-дзвінок. +`voiceCall.enabled` типово дорівнює `true`; із транспортом Twilio він делегує фактичний PSTN-виклик і DTMF до Voice Call plugin. Якщо `voice-call` не ввімкнено, Google Meet усе ще може перевірити й записати план набору, але не може здійснити Twilio-виклик. ## Інструмент @@ -923,17 +932,34 @@ export GEMINI_API_KEY=... } ``` -Використовуйте `transport: "chrome"`, коли Chrome працює на Gateway-хості. Використовуйте `transport: "chrome-node"`, коли Chrome працює на спареному Node, наприклад Parallels VM. В обох випадках realtime-модель і `openclaw_agent_consult` працюють на Gateway-хості, тому облікові дані моделі залишаються там. +Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. Використовуйте +`transport: "chrome-node"`, коли Chrome працює на спареному вузлі, наприклад Parallels +VM. В обох випадках realtime-модель і `openclaw_agent_consult` працюють на +хості Gateway, тож облікові дані моделі залишаються там. -Використовуйте `action: "status"`, щоб перелічити активні сеанси або перевірити ідентифікатор сеансу. Використовуйте `action: "speak"` із `sessionId` і `message`, щоб realtime-агент заговорив негайно. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сеанс, запустити відому фразу й повернути стан `inCall`, коли Chrome-хост може його повідомити. `test_speech` завжди примусово встановлює `mode: "realtime"` і завершується помилкою, якщо його просять працювати в `mode: "transcribe"`, оскільки сеанси лише для спостереження навмисно не можуть видавати мовлення. Його результат `speechOutputVerified` базується на збільшенні байтів realtime-аудіовиходу під час цього тестового виклику, тому повторно використаний сеанс зі старішим аудіо не рахується як свіжа успішна перевірка мовлення. Використовуйте `action: "leave"`, щоб позначити сеанс завершеним. +Використовуйте `action: "status"`, щоб перелічити активні сеанси або перевірити ідентифікатор сеансу. Використовуйте +`action: "speak"` із `sessionId` і `message`, щоб realtime-агент +заговорив негайно. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сеанс, +запустити відому фразу й повернути стан `inCall`, коли хост Chrome може +про нього повідомити. `test_speech` завжди примусово встановлює `mode: "realtime"` і завершується помилкою, якщо його просять +працювати в `mode: "transcribe"`, оскільки сеанси лише для спостереження навмисно не можуть +виводити мовлення. Його результат `speechOutputVerified` базується на збільшенні байтів realtime-аудіовиходу +під час цього тестового виклику, тому повторно використаний сеанс зі старішим аудіо +не зараховується як свіжа успішна перевірка мовлення. Використовуйте `action: "leave"`, щоб позначити +сеанс завершеним. -`status` включає стан Chrome, коли доступно: +`status` включає стан Chrome, коли він доступний: -- `inCall`: схоже, Chrome перебуває всередині виклику Meet -- `micMuted`: best-effort стан мікрофона Meet -- `manualActionRequired` / `manualActionReason` / `manualActionMessage`: профіль браузера потребує ручного входу, допуску організатором Meet, дозволів або ремонту керування браузером, перш ніж мовлення зможе працювати -- `providerConnected` / `realtimeReady`: стан realtime voice bridge -- `lastInputAt` / `lastOutputAt`: останній аудіосигнал, побачений із мосту або надісланий до нього +- `inCall`: Chrome, схоже, перебуває всередині виклику Meet +- `micMuted`: найкраща доступна оцінка стану мікрофона Meet +- `manualActionRequired` / `manualActionReason` / `manualActionMessage`: профілю + браузера потрібен ручний вхід, допуск від хоста Meet, дозволи або + відновлення керування браузером, перш ніж мовлення зможе працювати +- `speechReady` / `speechBlockedReason` / `speechBlockedMessage`: чи + кероване мовлення Chrome зараз дозволене. `speechReady: false` означає, що OpenClaw не + надіслав вступну/тестову фразу в аудіоміст. +- `providerConnected` / `realtimeReady`: стан realtime-голосового мосту +- `lastInputAt` / `lastOutputAt`: останнє аудіо, побачене з мосту або надіслане до нього ```json { @@ -943,41 +969,41 @@ export GEMINI_API_KEY=... } ``` -## Консультація агента в реальному часі +## Консультація realtime-агента -Режим Chrome у реальному часі оптимізовано для живого голосового циклу. Голосовий -провайдер реального часу чує аудіо зустрічі та говорить через налаштований аудіоміст. -Коли моделі реального часу потрібні глибші міркування, поточна інформація або звичайні +Realtime-режим Chrome оптимізований для живого голосового циклу. Realtime-голосовий +провайдер чує аудіо зустрічі й говорить через налаштований аудіоміст. +Коли realtime-моделі потрібні глибше міркування, актуальна інформація або звичайні інструменти OpenClaw, вона може викликати `openclaw_agent_consult`. -Інструмент консультації запускає звичайного агента OpenClaw у фоновому режимі з контекстом -нещодавньої стенограми зустрічі та повертає стислу усну відповідь до голосової сесії -реального часу. Потім голосова модель може промовити цю відповідь назад у зустріч. -Він використовує той самий спільний інструмент консультації реального часу, що й Voice Call. +Інструмент консультації запускає звичайного агента OpenClaw у фоновому режимі з нещодавнім +контекстом транскрипту зустрічі й повертає стислу усну відповідь до realtime +голосового сеансу. Потім голосова модель може промовити цю відповідь назад у зустріч. +Він використовує той самий спільний realtime-інструмент консультацій, що й Voice Call. -За замовчуванням консультації виконуються для агента `main`. Установіть `realtime.agentId`, -коли канал Meet має консультуватися зі спеціальним робочим простором агента OpenClaw, -стандартними налаштуваннями моделі, політикою інструментів, пам’яттю та історією сесії. +За замовчуванням консультації виконуються для агента `main`. Встановіть `realtime.agentId`, коли +лінія Meet має консультуватися з виділеним робочим простором агента OpenClaw, типовими параметрами моделі, +політикою інструментів, пам’яттю та історією сеансів. `realtime.toolPolicy` керує запуском консультації: -- `safe-read-only`: надає інструмент консультації та обмежує звичайного агента +- `safe-read-only`: надати інструмент консультації й обмежити звичайного агента `read`, `web_search`, `web_fetch`, `x_search`, `memory_search` і `memory_get`. -- `owner`: надає інструмент консультації та дозволяє звичайному агенту використовувати звичайну +- `owner`: надати інструмент консультації й дозволити звичайному агенту використовувати стандартну політику інструментів агента. -- `none`: не надає інструмент консультації голосовій моделі реального часу. +- `none`: не надавати інструмент консультації realtime-голосовій моделі. -Ключ сесії консультації обмежено окремою сесією Meet, тому подальші виклики консультації +Ключ сеансу консультації обмежений конкретним сеансом Meet, тож подальші виклики консультації можуть повторно використовувати попередній контекст консультації під час тієї самої зустрічі. -Щоб примусово виконати усну перевірку готовності після того, як Chrome повністю приєднався до виклику: +Щоб примусово запустити усну перевірку готовності після повного приєднання Chrome до виклику: ```bash openclaw googlemeet speak meet_... "Say exactly: I'm here and listening." ``` -Для повної перевірки приєднання й мовлення: +Для повної smoke-перевірки приєднання й мовлення: ```bash openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ @@ -985,9 +1011,9 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ --message "Say exactly: I'm here and listening." ``` -## Контрольний список живого тестування +## Контрольний список live-тесту -Використайте цю послідовність перед передаванням зустрічі агенту без нагляду: +Використовуйте цю послідовність перед передаванням зустрічі агенту без нагляду: ```bash openclaw googlemeet setup @@ -1000,14 +1026,14 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ Очікуваний стан Chrome-node: - `googlemeet setup` повністю зелений. -- `googlemeet setup` містить `chrome-node-connected`, коли Chrome-node є - транспортом за замовчуванням або вузол закріплено. -- `nodes status` показує, що вибраний вузол підключено. +- `googlemeet setup` включає `chrome-node-connected`, коли Chrome-node є + типовим транспортом або вузол закріплено. +- `nodes status` показує вибраний вузол як підключений. - Вибраний вузол оголошує і `googlemeet.chrome`, і `browser.proxy`. -- Вкладка Meet приєднується до виклику, а `test-speech` повертає стан Chrome із +- Вкладка Meet приєднується до виклику, а `test-speech` повертає стан Chrome з `inCall: true`. -Для віддаленого хоста Chrome, наприклад macOS VM у Parallels, це найкоротша +Для віддаленого хоста Chrome, наприклад Parallels macOS VM, це найкоротша безпечна перевірка після оновлення Gateway або VM: ```bash @@ -1019,10 +1045,11 @@ openclaw nodes invoke \ --params '{"action":"setup"}' ``` -Це доводить, що Plugin Gateway завантажено, вузол VM підключено з поточним токеном, -а аудіоміст Meet доступний до того, як агент відкриє реальну вкладку зустрічі. +Це доводить, що Plugin Gateway завантажено, вузол VM підключено з +поточним токеном, а аудіоміст Meet доступний, перш ніж агент відкриє +справжню вкладку зустрічі. -Для перевірки Twilio використовуйте зустріч, яка надає дані телефонного дозвону: +Для smoke-перевірки Twilio використовуйте зустріч, яка надає дані телефонного дозвону: ```bash openclaw googlemeet setup @@ -1034,10 +1061,10 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ Очікуваний стан Twilio: -- `googlemeet setup` містить зелені перевірки `twilio-voice-call-plugin` і +- `googlemeet setup` включає зелені перевірки `twilio-voice-call-plugin` і `twilio-voice-call-credentials`. - `voicecall` доступний у CLI після перезавантаження Gateway. -- Повернена сесія має `transport: "twilio"` і `twilio.voiceCallId`. +- Повернений сеанс має `transport: "twilio"` і `twilio.voiceCallId`. - `googlemeet leave ` завершує делегований голосовий виклик. ## Усунення несправностей @@ -1051,7 +1078,7 @@ openclaw plugins list | grep google-meet openclaw googlemeet setup ``` -Якщо ви щойно відредагували `plugins.entries.google-meet`, перезапустіть або перезавантажте Gateway. +Якщо ви щойно редагували `plugins.entries.google-meet`, перезапустіть або перезавантажте Gateway. Запущений агент бачить лише інструменти Plugin, зареєстровані поточним процесом Gateway. ### Немає підключеного вузла з підтримкою Google Meet @@ -1073,7 +1100,7 @@ openclaw devices approve openclaw nodes status ``` -Вузол має бути підключений і показувати `googlemeet.chrome` плюс `browser.proxy`. +Вузол має бути підключений і перелічувати `googlemeet.chrome` плюс `browser.proxy`. Конфігурація Gateway має дозволяти ці команди вузла: ```json5 @@ -1110,55 +1137,54 @@ openclaw nodes status --connected Запустіть `googlemeet test-speech` і перевірте повернений стан Chrome. Якщо він повідомляє `manualActionRequired: true`, покажіть `manualActionMessage` оператору -та припиніть повторні спроби, доки дія в браузері не буде завершена. +й припиніть повторні спроби, доки дія в браузері не буде завершена. -Поширені ручні дії: +Типові ручні дії: - Увійти в профіль Chrome. - Допустити гостя з облікового запису хоста Meet. -- Надати Chrome дозволи на мікрофон/камеру, коли з’явиться нативний запит дозволу - Chrome. -- Закрити або виправити завислий діалог дозволів Meet. +- Надати Chrome дозволи на мікрофон/камеру, коли з’явиться нативний запит дозволів Chrome. +- Закрити або відновити завислий діалог дозволів Meet. Не повідомляйте "not signed in" лише тому, що Meet показує "Do you want people to hear you in the meeting?" Це проміжний екран вибору аудіо Meet; OpenClaw натискає **Use microphone** через автоматизацію браузера, коли це доступно, і продовжує -очікувати справжній стан зустрічі. Для резервного створення лише через браузер OpenClaw +чекати справжнього стану зустрічі. Для браузерного fallback лише для створення OpenClaw може натиснути **Continue without microphone**, оскільки створення URL не потребує -шляху аудіо реального часу. +realtime-аудіошляху. ### Не вдається створити зустріч `googlemeet create` спочатку використовує endpoint Google Meet API `spaces.create`, -коли налаштовано облікові дані OAuth. Без облікових даних OAuth він переходить -до резервного браузера закріпленого вузла Chrome. Підтвердьте: +коли налаштовано облікові дані OAuth. Без облікових даних OAuth він переходить на fallback +до браузера закріпленого вузла Chrome. Підтвердьте: -- Для створення через API: `oauth.clientId` і `oauth.refreshToken` налаштовано, +- Для створення через API: `oauth.clientId` і `oauth.refreshToken` налаштовані, або наявні відповідні змінні середовища `OPENCLAW_GOOGLE_MEET_*`. -- Для створення через API: refresh token було створено після додавання підтримки створення. +- Для створення через API: refresh token було видано після додавання підтримки створення. Старішим токенам може бракувати scope `meetings.space.created`; повторно виконайте `openclaw googlemeet auth login --json` і оновіть конфігурацію Plugin. -- Для резервного браузера: `defaultTransport: "chrome-node"` і +- Для browser fallback: `defaultTransport: "chrome-node"` і `chromeNode.node` вказують на підключений вузол із `browser.proxy` і `googlemeet.chrome`. -- Для резервного браузера: профіль OpenClaw Chrome на цьому вузлі ввійшов +- Для browser fallback: профіль OpenClaw Chrome на цьому вузлі ввійшов у Google і може відкрити `https://meet.google.com/new`. -- Для резервного браузера: повторні спроби повторно використовують наявну вкладку - `https://meet.google.com/new` або вкладку запиту облікового запису Google перед відкриттям нової вкладки. Якщо в агента спливає час очікування, - повторіть виклик інструменту, а не відкривайте іншу вкладку Meet вручну. -- Для резервного браузера: якщо інструмент повертає `manualActionRequired: true`, використайте +- Для browser fallback: повторні спроби повторно використовують наявну вкладку `https://meet.google.com/new` + або вкладку запиту облікового запису Google, перш ніж відкривати нову вкладку. Якщо агент вичікує тайм-аут, + повторіть виклик інструмента замість ручного відкриття ще однієї вкладки Meet. +- Для browser fallback: якщо інструмент повертає `manualActionRequired: true`, використовуйте повернені `browser.nodeId`, `browser.targetId`, `browserUrl` і - `manualActionMessage`, щоб скерувати оператора. Не повторюйте спроби в циклі, доки цю + `manualActionMessage`, щоб спрямувати оператора. Не повторюйте спроби в циклі, доки цю дію не буде завершено. -- Для резервного браузера: якщо Meet показує "Do you want people to hear you in the +- Для browser fallback: якщо Meet показує "Do you want people to hear you in the meeting?", залиште вкладку відкритою. OpenClaw має натиснути **Use microphone** або, для - резервного створення лише URL, **Continue without microphone** через автоматизацію браузера - й продовжити очікування згенерованого URL Meet. Якщо це неможливо, помилка + fallback лише для створення, **Continue without microphone** через автоматизацію браузера + й продовжити чекати згенерований URL Meet. Якщо він не може, помилка має згадувати `meet-audio-choice-required`, а не `google-login-required`. ### Агент приєднується, але не говорить -Перевірте шлях реального часу: +Перевірте realtime-шлях: ```bash openclaw googlemeet setup @@ -1166,54 +1192,53 @@ openclaw googlemeet doctor ``` Використовуйте `mode: "realtime"` для прослуховування/відповіді голосом. `mode: "transcribe"` навмисно -не запускає дуплексний голосовий міст реального часу. `googlemeet test-speech` -завжди перевіряє шлях реального часу й повідомляє, чи було помічено вихідні байти мосту +не запускає дуплексний realtime-голосовий міст. `googlemeet test-speech` +завжди перевіряє realtime-шлях і повідомляє, чи були помічені байти виходу мосту для цього виклику. Якщо `speechOutputVerified` дорівнює false, а -`speechOutputTimedOut` дорівнює true, провайдер реального часу міг прийняти -висловлювання, але OpenClaw не побачив, щоб нові вихідні байти дійшли до аудіомоста -Chrome. +`speechOutputTimedOut` дорівнює true, realtime-провайдер міг прийняти +висловлювання, але OpenClaw не побачив, щоб нові вихідні байти досягли аудіомоста Chrome. Також перевірте: -- Ключ провайдера реального часу доступний на хості Gateway, наприклад +- Ключ realtime-провайдера доступний на хості Gateway, наприклад `OPENAI_API_KEY` або `GEMINI_API_KEY`. - `BlackHole 2ch` видимий на хості Chrome. - `sox` існує на хості Chrome. - Мікрофон і динамік Meet спрямовані через віртуальний аудіошлях, який використовує OpenClaw. -`googlemeet doctor [session-id]` друкує сесію, вузол, стан у виклику, -причину ручної дії, підключення провайдера реального часу, `realtimeReady`, активність -вхідного/вихідного аудіо, останні часові позначки аудіо, лічильники байтів і URL браузера. +`googlemeet doctor [session-id]` друкує сеанс, вузол, стан у виклику, +причину ручної дії, підключення realtime-провайдера, `realtimeReady`, активність +аудіовходу/аудіовиходу, останні аудіочасові мітки, лічильники байтів і URL браузера. Використовуйте `googlemeet status [session-id]`, коли потрібен сирий JSON. Використовуйте -`googlemeet doctor --oauth`, коли потрібно перевірити оновлення OAuth Google Meet -без розкриття токенів; додайте `--meeting` або `--create-space`, коли також потрібен -доказ Google Meet API. +`googlemeet doctor --oauth`, коли потрібно перевірити refresh Google Meet OAuth +без розкриття токенів; додайте `--meeting` або `--create-space`, коли також потрібне +підтвердження Google Meet API. -Якщо в агента сплив час очікування і ви бачите вже відкриту вкладку Meet, перевірте цю вкладку -без відкриття іншої: +Якщо агент дочекався тайм-ауту, а ви бачите вже відкриту вкладку Meet, перевірте цю вкладку +без відкриття ще однієї: ```bash openclaw googlemeet recover-tab openclaw googlemeet recover-tab https://meet.google.com/abc-defg-hij ``` -Еквівалентна дія інструменту — `recover_current_tab`. Вона фокусує та перевіряє +Еквівалентна дія інструмента — `recover_current_tab`. Вона фокусує та перевіряє наявну вкладку Meet для вибраного транспорту. З `chrome` вона використовує локальне керування браузером через Gateway; з `chrome-node` вона використовує налаштований -вузол Chrome. Вона не відкриває нову вкладку й не створює нову сесію; вона повідомляє +вузол Chrome. Вона не відкриває нову вкладку й не створює новий сеанс; вона повідомляє поточний блокер, наприклад вхід, допуск, дозволи або стан вибору аудіо. -Команда CLI звертається до налаштованого Gateway, тому Gateway має бути запущений; -`chrome-node` також вимагає підключеного вузла Chrome. +Команда CLI звертається до налаштованого Gateway, тож Gateway має бути запущений; +`chrome-node` також вимагає, щоб вузол Chrome був підключений. -### Не проходять перевірки налаштування Twilio +### Перевірки налаштування Twilio не проходять -`twilio-voice-call-plugin` не проходить, коли `voice-call` не дозволено або не ввімкнено. +`twilio-voice-call-plugin` завершується помилкою, коли `voice-call` не дозволено або не ввімкнено. Додайте його до `plugins.allow`, увімкніть `plugins.entries.voice-call` і перезавантажте Gateway. -`twilio-voice-call-credentials` не проходить, коли бекенду Twilio бракує account -SID, auth token або номера абонента. Установіть їх на хості Gateway: +`twilio-voice-call-credentials` завершується помилкою, коли бекенд Twilio не має облікового +SID, токена автентифікації або номера абонента-відправника. Налаштуйте їх на хості Gateway: ```bash export TWILIO_ACCOUNT_SID=AC... @@ -1235,8 +1260,8 @@ openclaw voicecall smoke openclaw voicecall smoke --to "+15555550123" ``` -Додавайте `--yes` лише тоді, коли ви навмисно хочете виконати живий вихідний -виклик-сповіщення: +Додавайте `--yes` лише тоді, коли навмисно хочете здійснити реальний вихідний +дзвінок-сповіщення: ```bash openclaw voicecall smoke --to "+15555550123" --yes @@ -1244,8 +1269,8 @@ openclaw voicecall smoke --to "+15555550123" --yes ### Виклик Twilio починається, але ніколи не входить у зустріч -Підтвердьте, що подія Meet надає дані телефонного дозвону. Передайте точний номер дозвону -і PIN або спеціальну DTMF-послідовність: +Переконайтеся, що подія Meet містить дані телефонного підключення. Передайте точний номер +для набору й PIN або власну послідовність DTMF: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij \ @@ -1257,24 +1282,32 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ Використовуйте початкові `w` або коми в `--dtmf-sequence`, якщо провайдеру потрібна пауза перед введенням PIN. -## Примітки +## Нотатки -Офіційний медіа API Google Meet орієнтований на приймання, тому мовлення в виклик Meet -усе одно потребує шляху учасника. Цей Plugin робить цю межу видимою: +Офіційний медіа API Google Meet орієнтований на приймання, тому для мовлення в +дзвінку Meet усе ще потрібен шлях учасника. Цей Plugin робить цю межу видимою: Chrome обробляє участь через браузер і локальну маршрутизацію аудіо; Twilio обробляє -участь через телефонний дозвін. +участь через телефонне підключення. -Режим Chrome у реальному часі потребує `BlackHole 2ch` плюс одне з: +Режим реального часу Chrome потребує `BlackHole 2ch` і одного з таких варіантів: -- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw керує мостом моделі реального часу й передає аудіо у `chrome.audioFormat` між цими командами та вибраним голосовим провайдером реального часу. Стандартний шлях Chrome — 24 кГц PCM16; 8 кГц G.711 mu-law лишається доступним для застарілих пар команд. -- `chrome.audioBridgeCommand`: зовнішня команда моста керує всім локальним аудіошляхом і має завершитися після запуску або перевірки свого демона. +- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw керує + мостом моделі реального часу й передає аудіо у форматі `chrome.audioFormat` між цими + командами та вибраним провайдером голосу реального часу. Типовий шлях Chrome — + 24 кГц PCM16; 8 кГц G.711 mu-law лишається доступним для застарілих пар команд. +- `chrome.audioBridgeCommand`: зовнішня команда моста керує всім локальним + аудіошляхом і має завершитися після запуску або перевірки свого демона. -Для чистого дуплексного аудіо спрямуйте вихід Meet і мікрофон Meet через окремі віртуальні пристрої або граф віртуальних пристроїв у стилі Loopback. Один спільний пристрій BlackHole може повертати звук інших учасників назад у виклик. +Для чистого дуплексного аудіо маршрутизуйте вихід Meet і мікрофон Meet через окремі +віртуальні пристрої або граф віртуальних пристроїв у стилі Loopback. Один спільний +пристрій BlackHole може повертати аудіо інших учасників назад у дзвінок. -`googlemeet speak` запускає активний аудіоміст реального часу для сеансу Chrome. `googlemeet leave` зупиняє цей міст. Для сеансів Twilio, делегованих через Plugin голосових викликів, `leave` також завершує базовий голосовий виклик. +`googlemeet speak` запускає активний міст аудіо реального часу для сеансу Chrome. +`googlemeet leave` зупиняє цей міст. Для сеансів Twilio, делегованих через Plugin +Voice Call, `leave` також завершує базовий голосовий виклик. ## Пов’язане -- [Plugin голосових викликів](/uk/plugins/voice-call) +- [Plugin голосового виклику](/uk/plugins/voice-call) - [Режим розмови](/uk/nodes/talk) -- [Створення plugins](/uk/plugins/building-plugins) +- [Створення Plugin](/uk/plugins/building-plugins)