diff --git a/docs/uk/cli/voicecall.md b/docs/uk/cli/voicecall.md index 9beedb348..eada233a8 100644 --- a/docs/uk/cli/voicecall.md +++ b/docs/uk/cli/voicecall.md @@ -1,31 +1,32 @@ --- read_when: - - Ви використовуєте Plugin voice-call і хочете точки входу CLI - - Ви хочете швидкі приклади для `voicecall setup|smoke|call|continue|dtmf|status|tail|expose` -summary: Довідка CLI для `openclaw voicecall` (поверхня команд Plugin voice-call) -title: Voicecall + - Ви використовуєте Plugin для голосових викликів і хочете точки входу CLI + - Вам потрібні короткі приклади для `voicecall setup|smoke|call|continue|dtmf|status|tail|expose` +summary: Довідник CLI для `openclaw voicecall` (поверхня команд Plugin для голосових викликів) +title: Голосовий дзвінок x-i18n: - generated_at: "2026-04-25T05:04:08Z" - model: gpt-5.4 + generated_at: "2026-05-01T04:46:21Z" + model: gpt-5.5 provider: openai - source_hash: 7c8b83ef75f792920024a67b0dee1b07aff9f55486de1149266c6d94854ca0fe + source_hash: 4090858a58b7defaff955a370c8cb0ff025ef68061e68a6c69a637de24707c0b source_path: cli/voicecall.md - workflow: 15 + workflow: 16 --- # `openclaw voicecall` -`voicecall` — це команда, надана Plugin. Вона з’являється, лише якщо Plugin voice-call встановлено та ввімкнено. +`voicecall` — це команда, яку надає Plugin. Вона зʼявляється лише тоді, коли Plugin голосових викликів встановлено й увімкнено. Основний документ: -- Plugin voice-call: [Голосовий виклик](/uk/plugins/voice-call) +- Plugin голосових викликів: [Voice Call](/uk/plugins/voice-call) ## Поширені команди ```bash openclaw voicecall setup openclaw voicecall smoke +openclaw voicecall status --json openclaw voicecall status --call-id openclaw voicecall call --to "+15555550123" --message "Hello" --mode notify openclaw voicecall continue --call-id --message "Any questions?" @@ -33,24 +34,29 @@ openclaw voicecall dtmf --call-id --digits "ww123456#" openclaw voicecall end --call-id ``` -`setup` за замовчуванням виводить перевірки готовності в зручному для читання форматі. Використовуйте `--json` для +`setup` за замовчуванням виводить зручні для читання перевірки готовності. Використовуйте `--json` для скриптів: ```bash openclaw voicecall setup --json ``` -Для зовнішніх провайдерів (`twilio`, `telnyx`, `plivo`) setup має визначити публічний URL Webhook із `publicUrl`, тунелю або Tailscale. Резервний варіант loopback/private serve відхиляється, оскільки оператори не можуть до нього звернутися. +`status` за замовчуванням виводить активні виклики у форматі JSON. Передайте `--call-id `, щоб переглянути +один виклик. -`smoke` запускає ті самі перевірки готовності. Він не здійснить реальний телефонний дзвінок, +Для зовнішніх провайдерів (`twilio`, `telnyx`, `plivo`) налаштування має визначити публічну +URL-адресу Webhook з `publicUrl`, тунелю або доступу через Tailscale. Резервний варіант обслуговування через loopback/private +відхиляється, оскільки оператори не можуть до нього звернутися. + +`smoke` виконує ті самі перевірки готовності. Він не здійснюватиме справжній телефонний виклик, якщо не вказано одночасно `--to` і `--yes`: ```bash -openclaw voicecall smoke --to "+15555550123" # пробний запуск -openclaw voicecall smoke --to "+15555550123" --yes # реальний сповіщувальний дзвінок +openclaw voicecall smoke --to "+15555550123" # dry run +openclaw voicecall smoke --to "+15555550123" --yes # live notify call ``` -## Відкриття Webhook назовні (Tailscale) +## Відкриття Webhook (Tailscale) ```bash openclaw voicecall expose --mode serve @@ -58,9 +64,9 @@ openclaw voicecall expose --mode funnel openclaw voicecall expose --mode off ``` -Примітка щодо безпеки: відкривайте endpoint Webhook лише для мереж, яким ви довіряєте. За можливості віддавайте перевагу Tailscale Serve замість Funnel. +Примітка щодо безпеки: відкривайте endpoint Webhook лише для мереж, яким довіряєте. За можливості віддавайте перевагу Tailscale Serve замість Funnel. ## Пов’язане -- [Довідка CLI](/uk/cli) +- [Довідник CLI](/uk/cli) - [Plugin голосових викликів](/uk/plugins/voice-call) diff --git a/docs/uk/plugins/google-meet.md b/docs/uk/plugins/google-meet.md index bd1ad716c..a0c538fbd 100644 --- a/docs/uk/plugins/google-meet.md +++ b/docs/uk/plugins/google-meet.md @@ -1,15 +1,15 @@ --- 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 +summary: 'Plugin Google Meet: приєднання до явних URL-адрес Meet через Chrome або Twilio зі стандартними налаштуваннями голосу в реальному часі' +title: Plugin Google Meet x-i18n: - generated_at: "2026-04-30T01:50:01Z" + generated_at: "2026-05-01T04:46:32Z" model: gpt-5.5 provider: openai - source_hash: 7b989c872fee0dca31680f67559cd26b715303f7c6f4eeda51fc63889bb0383c + source_hash: 7eb6e48964d9592562fad1cebeadd765f2a2bcea9bfe887153e65438bfeaa617 source_path: plugins/google-meet.md workflow: 16 --- @@ -19,24 +19,24 @@ x-i18n: - Він приєднується лише до явно вказаної URL-адреси `https://meet.google.com/...`. - Він може створити новий простір Meet через Google Meet API, а потім приєднатися до поверненої URL-адреси. -- `realtime` voice є режимом за замовчуванням. -- Realtime voice може звертатися назад до повного агента OpenClaw, коли потрібні глибші +- `realtime` голос є режимом за замовчуванням. +- Голос у реальному часі може викликати повного агента OpenClaw, коли потрібні глибші міркування або інструменти. - Агенти вибирають поведінку приєднання за допомогою `mode`: використовуйте `realtime` для живого прослуховування/відповіді голосом або `transcribe`, щоб приєднатися/керувати браузером без - realtime voice bridge. -- Автентифікація починається як особистий Google OAuth або вже виконаний вхід у профіль Chrome. + голосового мосту реального часу. +- Автентифікація починається як особистий Google OAuth або вже виконаний вхід у профілі Chrome. - Автоматичного оголошення згоди немає. - Стандартний аудіобекенд Chrome — `BlackHole 2ch`. -- Chrome може працювати локально або на спареному хості node. -- Twilio приймає номер для дозвону плюс необов’язковий PIN або послідовність DTMF. +- Chrome може працювати локально або на спареному вузловому хості. +- Twilio приймає номер для дзвінка плюс необов’язковий PIN або послідовність DTMF. - Команда CLI — `googlemeet`; `meet` зарезервовано для ширших агентських - телекомунікаційних робочих процесів. + робочих процесів телеконференцій. ## Швидкий старт -Установіть локальні аудіозалежності та налаштуйте бекенд-провайдера realtime voice. -OpenAI є стандартним; Google Gemini Live також працює з +Установіть локальні аудіозалежності та налаштуйте бекенд-провайдер голосу +реального часу. OpenAI є стандартним; Google Gemini Live також працює з `realtime.provider: "google"`: ```bash @@ -53,7 +53,7 @@ Homebrew потребує перезавантаження, перш ніж macO sudo reboot ``` -Після перезавантаження перевірте обидва компоненти: +Після перезавантаження перевірте обидві частини: ```bash system_profiler SPAudioDataType | grep -i BlackHole @@ -81,22 +81,22 @@ command -v sox openclaw googlemeet setup ``` -Вивід налаштування призначений для читання агентом і враховує режим. Він повідомляє про профіль Chrome, -закріплення node і, для realtime-приєднань Chrome, аудіоміст BlackHole/SoX -та відкладені перевірки realtime-вступу. Для приєднань лише для спостереження перевірте той самий -транспорт за допомогою `--mode transcribe`; цей режим пропускає передумови realtime-аудіо, -бо він не слухає і не говорить через міст: +Вивід налаштування призначений бути читабельним для агента та враховувати режим. Він повідомляє про профіль Chrome, +закріплення вузла і, для приєднань Chrome у реальному часі, аудіоміст BlackHole/SoX +та перевірки відкладеного вступу в реальному часі. Для приєднань лише для спостереження перевірте той самий +транспорт із `--mode transcribe`; цей режим пропускає передумови аудіо реального часу, +оскільки він не слухає й не говорить через міст: ```bash openclaw googlemeet setup --transport chrome-node --mode transcribe ``` -Коли налаштовано делегування Twilio, налаштування також повідомляє, чи готові -Plugin `voice-call` і облікові дані Twilio. Розглядайте будь-яку перевірку `ok: false` +Коли делегування Twilio налаштовано, налаштування також повідомляє, чи готові +Plugin `voice-call` і облікові дані Twilio. Сприймайте будь-яку перевірку `ok: false` як блокер для перевіреного транспорту й режиму, перш ніж просити агента -приєднатися. Використовуйте `openclaw googlemeet setup --json` для скриптів або машинозчитуваного +приєднатися. Використовуйте `openclaw googlemeet setup --json` для скриптів або машинно-читабельного виводу. Використовуйте `--transport chrome`, `--transport chrome-node` або `--transport twilio`, -щоб попередньо перевірити конкретний транспорт, перш ніж агент спробує його. +щоб попередньо перевірити конкретний транспорт до того, як агент його спробує. Приєднайтеся до зустрічі: @@ -121,7 +121,7 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij openclaw googlemeet create --transport chrome-node --mode realtime ``` -Створіть лише URL без приєднання: +Створіть лише URL-адресу без приєднання: ```bash openclaw googlemeet create --no-join @@ -131,24 +131,24 @@ openclaw googlemeet create --no-join - Створення через API: використовується, коли налаштовано облікові дані Google Meet OAuth. Це найдетермінованіший шлях, який не залежить від стану інтерфейсу браузера. -- Резервний шлях через браузер: використовується, коли облікових даних OAuth немає. OpenClaw використовує - закріплений Chrome node, відкриває `https://meet.google.com/new`, чекає, поки Google - перенаправить на справжню URL-адресу з кодом зустрічі, а потім повертає цю URL-адресу. Цей шлях вимагає, - щоб у профілі OpenClaw Chrome на node вже було виконано вхід у Google. - Автоматизація браузера обробляє власний початковий запит Meet щодо мікрофона; цей запит +- Резервний шлях через браузер: використовується, коли облікові дані OAuth відсутні. OpenClaw використовує + закріплений вузол Chrome, відкриває `https://meet.google.com/new`, чекає, доки Google + перенаправить на справжню URL-адресу з кодом зустрічі, а потім повертає цю URL-адресу. Цей шлях потребує, + щоб у профілі Chrome OpenClaw на вузлі вже було виконано вхід у 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 voice і надішли -мені посилання». Агент має викликати `google_meet` з `action: "create"`, а +Або скажіть агенту: "Створи Google Meet, приєднайся до нього з голосом у реальному часі та надішли +мені посилання." Агент має викликати `google_meet` з `action: "create"`, а потім поділитися поверненим `meetingUri`. ```json @@ -160,41 +160,41 @@ openclaw googlemeet create --no-join ``` Для приєднання лише для спостереження/керування браузером установіть `"mode": "transcribe"`. Це -не запускає дуплексний міст realtime-моделі, не потребує BlackHole або SoX -і не відповідатиме голосом у зустрічі. Приєднання Chrome у цьому режимі також уникають -надання OpenClaw дозволу на мікрофон/камеру й обходять шлях Meet **Use +не запускає дуплексний міст моделі реального часу, не потребує BlackHole або SoX +і не відповідатиме голосом у зустрічі. Приєднання Chrome у цьому режимі також уникає +надання OpenClaw дозволу на мікрофон/камеру та обходить шлях Meet **Use microphone**. Якщо Meet показує проміжний екран вибору аудіо, автоматизація намагається -обрати шлях без мікрофона, а інакше повідомляє про ручну дію замість відкриття +вибрати шлях без мікрофона, а інакше повідомляє про ручну дію замість відкриття локального мікрофона. -Під час realtime-сеансів статус `google_meet` містить стан браузера й аудіомоста, +Під час сеансів реального часу статус `google_meet` містить стан браузера й аудіомосту, зокрема `inCall`, `manualActionRequired`, `providerConnected`, -`realtimeReady`, `audioInputActive`, `audioOutputActive`, останні часові позначки вводу/виводу, -лічильники байтів і стан закриття моста. Якщо з’являється безпечний запит сторінки Meet, +`realtimeReady`, `audioInputActive`, `audioOutputActive`, останні позначки часу вводу/виводу, +лічильники байтів і стан закриття мосту. Якщо з’являється безпечний запит сторінки Meet, автоматизація браузера обробляє його, коли може. Вхід, допуск хостом і запити дозволів браузера/ОС повідомляються як ручна дія з причиною та -повідомленням, яке агент має передати. Керовані сеанси Chrome видають вступ або -тестову фразу лише після того, як стан браузера повідомить `inCall: true`; інакше статус повідомляє -`speechReady: false`, а спробу мовлення блокують замість удавання, що -агент говорив у зустрічі. +повідомленням, яке агент має передати. Керовані сеанси Chrome відтворюють вступ або +тестову фразу лише після того, як стан браузера повідомляє `inCall: true`; інакше статус повідомляє +`speechReady: false`, а спроба мовлення блокується замість удавання, що +агент говорив у зустріч. -Локальні приєднання Chrome використовують профіль браузера OpenClaw, у якому виконано вхід. Realtime-режим +Локальні приєднання Chrome використовують браузерний профіль OpenClaw із виконаним входом. Режим реального часу потребує `BlackHole 2ch` для шляху мікрофона/динаміка, який використовує OpenClaw. Для чистого дуплексного аудіо використовуйте окремі віртуальні пристрої або граф у стилі Loopback; одного -пристрою BlackHole достатньо для першого smoke test, але він може створювати луну. +пристрою BlackHole достатньо для першого smoke-тесту, але він може створювати відлуння. ### Локальний Gateway + Parallels Chrome -Вам **не** потрібен повний OpenClaw Gateway або ключ API моделі всередині macOS VM, -лише щоб VM володіла Chrome. Запустіть Gateway і агента локально, а потім запустіть -node host у VM. Увімкніть bundled Plugin на VM один раз, щоб node +Вам **не** потрібен повний OpenClaw Gateway або ключ API моделі всередині macOS VM +лише для того, щоб VM володіла Chrome. Запустіть Gateway і агента локально, а потім запустіть +вузловий хост у VM. Один раз увімкніть комплектний Plugin на VM, щоб вузол оголошував команду Chrome: Що де працює: -- Хост Gateway: OpenClaw Gateway, робочий простір агента, ключі моделі/API, realtime - provider і конфігурація Plugin Google Meet. -- Parallels macOS VM: OpenClaw CLI/node host, Google Chrome, SoX, BlackHole 2ch, +- Хост Gateway: OpenClaw Gateway, робочий простір агента, ключі моделі/API, провайдер + реального часу та конфігурація Google Meet Plugin. +- Parallels macOS VM: OpenClaw CLI/вузловий хост, Google Chrome, SoX, BlackHole 2ch і профіль Chrome із виконаним входом у Google. - Не потрібно у VM: служба Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування провайдера моделі. @@ -218,27 +218,27 @@ system_profiler SPAudioDataType | grep -i BlackHole command -v sox ``` -Установіть або оновіть OpenClaw у VM, а потім увімкніть там bundled Plugin: +Установіть або оновіть OpenClaw у VM, а потім увімкніть там комплектний Plugin: ```bash openclaw plugins enable google-meet ``` -Запустіть node host у VM: +Запустіть вузловий хост у VM: ```bash openclaw node run --host --port 18789 --display-name parallels-macos ``` -Якщо `` — це LAN IP і ви не використовуєте TLS, node відмовиться від -plaintext 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 \ @@ -250,21 +250,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 { @@ -302,102 +302,103 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij або попросіть агента використати інструмент `google_meet` з `transport: "chrome-node"`. -Для однокомандного smoke test, який створює або повторно використовує сеанс, вимовляє відому -фразу й друкує стан сеансу: +Для smoke-тесту однією командою, який створює або повторно використовує сеанс, промовляє відому +фразу та друкує стан сеансу: ```bash openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij ``` -Під час realtime-приєднання автоматизація браузера OpenClaw заповнює ім’я гостя, натискає -Join/Ask to join і приймає початковий вибір Meet "Use microphone", коли цей -запит з’являється. Під час приєднання лише для спостереження або створення зустрічі лише в браузері вона -проходить далі той самий запит без мікрофона, коли такий вибір доступний. +Під час приєднання в реальному часі автоматизація браузера OpenClaw заповнює ім’я гостя, натискає +Join/Ask to join і приймає перший вибір Meet "Use microphone", коли цей +запит з’являється. Під час приєднання лише для спостереження або створення зустрічі лише через браузер вона +проходить той самий запит без мікрофона, коли такий вибір доступний. Якщо в профілі браузера не виконано вхід, Meet очікує допуску хостом, -Chrome потребує дозволу на мікрофон/камеру для realtime-приєднання або Meet застряг -на запиті, який автоматизація не змогла розв’язати, результат join/test-speech повідомляє +Chrome потребує дозволу на мікрофон/камеру для приєднання в реальному часі, або Meet застряг +на запиті, який автоматизація не змогла вирішити, результат join/test-speech повідомляє `manualActionRequired: true` з `manualActionReason` і -`manualActionMessage`. Агенти мають припинити повторні спроби приєднання, повідомити це точне +`manualActionMessage`. Агенти мають припинити повторювати приєднання, повідомити саме це повідомлення плюс поточні `browserUrl`/`browserTitle` і повторювати спробу лише після завершення ручної дії в браузері. -Якщо `chromeNode.node` пропущено, OpenClaw автоматично вибирає лише тоді, коли рівно один -підключений node оголошує як `googlemeet.chrome`, так і керування браузером. Якщо -підключено кілька придатних node, установіть `chromeNode.node` як id node, +Якщо `chromeNode.node` пропущено, OpenClaw автоматично вибирає вузол лише тоді, коли рівно один +підключений вузол оголошує як `googlemeet.chrome`, так і керування браузером. Якщо +підключено кілька здатних вузлів, задайте `chromeNode.node` як id вузла, відображуване ім’я або віддалену IP-адресу. Поширені перевірки збоїв: - `Configured Google Meet node ... is not usable: offline`: закріплений вузол - відомий Gateway, але недоступний. Агенти мають розглядати цей вузол як + відомий Gateway, але недоступний. Агенти мають трактувати цей вузол як діагностичний стан, а не як придатний хост Chrome, і повідомляти про блокер - налаштування замість переходу на інший транспорт, якщо користувач цього не просив. + налаштування замість переходу на інший транспорт, якщо користувач не просив + про це. - `No connected Google Meet-capable node`: запустіть `openclaw node run` у VM, - схваліть сполучення та переконайтеся, що `openclaw plugins enable google-meet` і + підтвердьте сполучення та переконайтеся, що `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. + який перевіряється, і перезавантажте його перед використанням локального аудіо 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"` або іменований профіль наявного сеансу. -- Дублікати вкладок Meet: залиште `chrome.reuseExistingTab: true` увімкненим. OpenClaw +- Дубльовані вкладки Meet: залиште `chrome.reuseExistingTab: true` увімкненим. OpenClaw активує наявну вкладку для тієї самої URL-адреси Meet перед відкриттям нової, а - створення зустрічі в браузері повторно використовує незавершену вкладку `https://meet.google.com/new` - або вкладку запиту облікового запису Google перед відкриттям іншої. + створення браузерної зустрічі повторно використовує вкладку `https://meet.google.com/new` + або запиту облікового запису Google, що вже виконується, перед відкриттям іншої. - Немає аудіо: у Meet спрямуйте мікрофон/динамік через шлях віртуального аудіопристрою, - який використовує OpenClaw; використовуйте окремі віртуальні пристрої або маршрутизацію у стилі Loopback - для чистого дуплексного аудіо. + який використовує OpenClaw; використовуйте окремі віртуальні пристрої або маршрутизацію + в стилі Loopback для чистого двостороннього аудіо. ## Примітки щодо встановлення -Стандартне реального часу Chrome використовує два зовнішні інструменти: +Стандартна конфігурація Chrome realtime використовує два зовнішні інструменти: -- `sox`: утиліта командного рядка для аудіо. Plugin використовує явні команди пристрою CoreAudio - для стандартного 24 кГц PCM16 аудіомоста. -- `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій `BlackHole 2ch`, - через який Chrome/Meet можуть маршрутизувати аудіо. +- `sox`: утиліта командного рядка для аудіо. Plugin використовує явні команди + пристрою CoreAudio для стандартного аудіомоста PCM16 24 кГц. +- `blackhole-2ch`: віртуальний аудіодрайвер macOS. Він створює аудіопристрій + `BlackHole 2ch`, через який Chrome/Meet може маршрутизувати аудіо. -OpenClaw не комплектує й не розповсюджує жоден із цих пакетів. Документація просить користувачів +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 перевіряє наявність -`BlackHole 2ch` перед запуском. Якщо налаштовано, він також виконує команду перевірки справності аудіомоста -та стартову команду перед відкриттям Chrome. Використовуйте `chrome`, коли +як профіль браузера OpenClaw із виконаним входом. На macOS Plugin перевіряє наявність +`BlackHole 2ch` перед запуском. Якщо налаштовано, він також виконує команду перевірки +стану аудіомоста й команду запуску перед відкриттям Chrome. Використовуйте `chrome`, коли Chrome/аудіо працюють на хості Gateway; використовуйте `chrome-node`, коли Chrome/аудіо працюють на сполученому вузлі, наприклад VM Parallels macOS. Для локального Chrome виберіть -профіль через `browser.defaultProfile`; `chrome.browserProfile` передається хостам -`chrome-node`. +профіль за допомогою `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. +Маршрутизуйте аудіо мікрофона й динаміків Chrome через локальний аудіоміст OpenClaw. Якщо `BlackHole 2ch` не встановлено, приєднання завершується помилкою налаштування замість тихого приєднання без аудіошляху. ### Twilio -Транспорт Twilio — це строгий план набору, делегований Plugin Voice Call. Він +Транспорт Twilio — це суворий план набору, делегований Plugin Voice Call. Він не аналізує сторінки Meet для пошуку телефонних номерів. -Використовуйте це, коли участь через Chrome недоступна або потрібен резервний варіант телефонного дозвону. -Google Meet має надавати телефонний номер для дозвону та PIN для +Використовуйте це, коли участь через Chrome недоступна або потрібен резервний +телефонний дозвін. Google Meet має надати номер дозвону та PIN для зустрічі; OpenClaw не виявляє їх зі сторінки Meet. Увімкніть Plugin Voice Call на хості Gateway, а не на вузлі Chrome: @@ -425,8 +426,8 @@ Google Meet має надавати телефонний номер для до } ``` -Надайте облікові дані Twilio через середовище або конфігурацію. Середовище зберігає -секрети поза `openclaw.json`: +Надайте облікові дані Twilio через середовище або конфігурацію. Середовище +не дає секретам потрапити в `openclaw.json`: ```bash export TWILIO_ACCOUNT_SID=AC... @@ -445,8 +446,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 \ @@ -455,7 +456,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 \ @@ -466,35 +467,36 @@ 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: створіть клієнт Google Cloud OAuth, -запитайте потрібні області доступу, авторизуйте обліковий запис Google, а потім збережіть +Доступ до Google Meet API використовує OAuth користувача: створіть OAuth-клієнт Google Cloud, +запросіть потрібні області доступу, авторизуйте обліковий запис Google, а потім збережіть отриманий refresh token у конфігурації Plugin Google Meet або надайте змінні середовища `OPENCLAW_GOOGLE_MEET_*`. OAuth не замінює шлях приєднання Chrome. Транспорти Chrome і Chrome-node -все одно приєднуються через профіль Chrome, у який виконано вхід, BlackHole/SoX і підключений -вузол, коли ви використовуєте участь через браузер. OAuth призначений лише для офіційного шляху -Google Meet API: створення просторів зустрічей, визначення просторів і виконання попередніх перевірок Meet Media API. +все одно приєднуються через профіль 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` - `https://www.googleapis.com/auth/meetings.space.readonly` - `https://www.googleapis.com/auth/meetings.conference.media.readonly` -5. Створіть OAuth client ID. +5. Створіть ідентифікатор OAuth-клієнта. - Тип застосунку: **Web application**. - Авторизований URI перенаправлення: @@ -507,10 +509,10 @@ Google Meet API: створення просторів зустрічей, ви `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. +Google може вимагати реєстрації в Developer Preview для фактичного використання Media API. +Якщо вам потрібні лише браузерні приєднання через Chrome, повністю пропустіть OAuth. -### Створіть refresh token +### Створення refresh token Налаштуйте `oauth.clientId` і, за потреби, `oauth.clientSecret`, або передайте їх як змінні середовища, а потім виконайте: @@ -520,7 +522,7 @@ openclaw googlemeet auth login --json ``` Команда виводить конфігураційний блок `oauth` із refresh token. Вона використовує PKCE, -localhost callback на `http://localhost:8085/oauth2callback` і ручний +callback localhost на `http://localhost:8085/oauth2callback` і ручний потік копіювання/вставлення з `--manual`. Приклади: @@ -576,38 +578,38 @@ openclaw googlemeet auth login --json --manual ``` Надавайте перевагу змінним середовища, коли не хочете зберігати refresh token у конфігурації. -Якщо присутні і значення конфігурації, і значення середовища, Plugin спершу використовує конфігурацію, -а потім резервне значення середовища. +Якщо присутні і значення конфігурації, і значення середовища, Plugin спочатку +використовує конфігурацію, а потім fallback до середовища. -Згода OAuth включає створення простору Meet, доступ на читання простору Meet і доступ на читання -медіа конференції Meet. Якщо ви автентифікувалися до появи підтримки створення зустрічей, -повторно виконайте `openclaw googlemeet auth login --json`, щоб refresh +Згода OAuth охоплює створення просторів Meet, доступ на читання просторів Meet і доступ +на читання медіа конференцій Meet. Якщо ви автентифікувалися до появи підтримки +створення зустрічей, повторно виконайте `openclaw googlemeet auth login --json`, щоб refresh token мав область доступу `meetings.space.created`. -### Перевірте OAuth через doctor +### Перевірка OAuth через doctor -Запустіть doctor OAuth, коли потрібна швидка перевірка справності без секретів: +Запустіть OAuth doctor, коли потрібна швидка перевірка стану без секретів: ```bash openclaw googlemeet doctor --oauth --json ``` -Це не завантажує runtime Chrome і не потребує підключеного вузла Chrome. Він +Це не завантажує runtime Chrome і не потребує під’єднаного вузла Chrome. Воно перевіряє, що конфігурація OAuth існує і що refresh token може створити access -token. Звіт JSON містить лише поля стану, як-от `ok`, `configured`, +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 @@ -615,7 +617,7 @@ 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`. @@ -628,16 +630,16 @@ openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij `doctor --oauth --meeting` і `resolve-space` доводять доступ на читання до наявного простору, до якого авторизований обліковий запис Google має доступ. `403` від цих перевірок -зазвичай означає, що Google Meet REST API вимкнено, погодженому refresh token -бракує потрібної області доступу або обліковий запис Google не може отримати доступ до цього простору Meet. -Помилка refresh-token означає, що потрібно повторно виконати `openclaw googlemeet auth login +зазвичай означає, що Google Meet REST API вимкнено, refresh token зі згодою +не має потрібної області доступу або обліковий запис Google не може отримати доступ до цього простору +Meet. Помилка refresh-token означає, що потрібно повторно виконати `openclaw googlemeet auth login --json` і зберегти новий блок `oauth`. -Облікові дані OAuth не потрібні для резервного режиму браузера. У цьому режимі автентифікація Google -надходить із профілю Chrome, у який виконано вхід на вибраному вузлі, а не з +Для браузерного fallback облікові дані OAuth не потрібні. У цьому режимі автентифікація Google +надходить із профілю Chrome із виконаним входом на вибраному вузлі, а не з конфігурації OpenClaw. -Ці змінні середовища приймаються як резервні: +Ці змінні середовища приймаються як fallback: - `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID` - `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` або `GOOGLE_MEET_CLIENT_SECRET` @@ -648,7 +650,7 @@ openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij - `OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING` або `GOOGLE_MEET_DEFAULT_MEETING` - `OPENCLAW_GOOGLE_MEET_PREVIEW_ACK` або `GOOGLE_MEET_PREVIEW_ACK` -Розпізнайте URL Meet, код або `spaces/{id}` через `spaces.get`: +Визначте Meet URL, код або `spaces/{id}` через `spaces.get`: ```bash openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij @@ -660,7 +662,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 @@ -668,7 +670,7 @@ 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: @@ -679,9 +681,9 @@ openclaw googlemeet artifacts --event "Weekly sync" openclaw googlemeet attendance --today --format csv --output attendance.csv ``` -`--today` шукає в сьогоднішньому календарі `primary` подію Calendar із посиланням Google Meet. Використовуйте `--event ` для пошуку відповідного тексту події, а `--calendar ` для неосновного календаря. Пошук у календарі потребує нового входу OAuth, який містить readonly-область подій Calendar. `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 @@ -704,11 +706,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` фіксує вибрані вхідні дані, параметри експорту, записи конференції, вихідні файли, кількості, джерело токена, подію 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. Це корисно перед записом великого експорту або коли агенту потрібні лише кількості, вибрані записи та попередження. +`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, зведення й manifest зберігають попередження замість збою всього експорту. Використовуйте `--dry-run`, щоб отримати ті самі дані артефактів/відвідуваності та вивести JSON manifest без створення папки чи ZIP. Це корисно перед записом великого експорту або коли агенту потрібні лише лічильники, вибрані записи та попередження. -Агенти також можуть створити такий самий набір через інструмент `google_meet`: +Агенти також можуть створити той самий пакет через інструмент `google_meet`: ```json { @@ -720,9 +722,9 @@ openclaw googlemeet export --conference-record conferenceRecords/abc123 \ } ``` -Установіть `"dryRun": true`, щоб повернути лише маніфест експорту та пропустити запис файлів. +Установіть `"dryRun": true`, щоб повернути лише manifest експорту й пропустити запис файлів. -Запустіть захищений live smoke проти справжньої збереженої зустрічі: +Запустіть захищену живу перевірку на реальній збереженій зустрічі: ```bash OPENCLAW_LIVE_TEST=1 \ @@ -730,21 +732,15 @@ OPENCLAW_GOOGLE_MEET_LIVE_MEETING=https://meet.google.com/abc-defg-hij \ 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 - 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_`. +- `OPENCLAW_LIVE_TEST=1` вмикає захищені живі тести. +- `OPENCLAW_GOOGLE_MEET_LIVE_MEETING` вказує на збережений Meet URL, код або `spaces/{id}`. +- `OPENCLAW_GOOGLE_MEET_CLIENT_ID` або `GOOGLE_MEET_CLIENT_ID` надає ідентифікатор клієнта OAuth. +- `OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN` або `GOOGLE_MEET_REFRESH_TOKEN` надає refresh token. +- Необов’язково: `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET`, `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN` і `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` використовують ті самі резервні назви без префікса `OPENCLAW_`. -Базовий 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`. +Базова жива перевірка артефактів/відвідуваності потребує `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`. Створіть новий простір Meet: @@ -752,9 +748,9 @@ pnpm test:live -- extensions/google-meet/google-meet.live.test.ts 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 із виконаним входом як резервний варіант. Агенти можуть використовувати інструмент `google_meet` з `action: "create"`, щоб створити зустріч і приєднатися одним кроком. Для створення лише URL передайте `"join": false`. -Приклад JSON-виводу з браузерного fallback: +Приклад JSON-виводу з резервного браузерного варіанта: ```json { @@ -774,7 +770,7 @@ openclaw googlemeet create } ``` -Якщо браузерний fallback наштовхується на вхід Google або блокування дозволів Meet до того, як зможе створити URL, метод Gateway повертає невдалу відповідь, а інструмент `google_meet` повертає структуровані деталі замість звичайного рядка: +Якщо резервний браузерний варіант натрапляє на вхід Google або блокування дозволів Meet до того, як зможе створити URL, метод Gateway повертає відповідь із помилкою, а інструмент `google_meet` повертає структуровані деталі замість звичайного рядка: ```json { @@ -794,7 +790,7 @@ openclaw googlemeet create Коли агент бачить `manualActionRequired: true`, він має повідомити `manualActionMessage` разом із контекстом browser node/tab і припинити відкривати нові вкладки Meet, доки оператор не завершить крок у браузері. -Приклад JSON-виводу зі створення через API: +Приклад JSON-виводу створення через API: ```json { @@ -815,13 +811,13 @@ openclaw googlemeet create } ``` -Створення Meet типово приєднується до зустрічі. Транспорт Chrome або Chrome-node все ще потребує профілю Google Chrome із виконаним входом, щоб приєднатися через браузер. Якщо з профілю виконано вихід, OpenClaw повідомляє `manualActionRequired: true` або помилку браузерного fallback і просить оператора завершити вхід Google перед повторною спробою. +Створення Meet за замовчуванням виконує приєднання. Транспорт Chrome або Chrome-node все одно потребує профілю Google Chrome із виконаним входом, щоб приєднатися через браузер. Якщо з профілю виконано вихід, OpenClaw повідомляє `manualActionRequired: true` або помилку резервного браузерного варіанта й просить оператора завершити вхід Google перед повторною спробою. -Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud-проєкт, OAuth-принципал і учасники зустрічі зареєстровані в Google Workspace Developer Preview Program для Meet media APIs. +Установлюйте `preview.enrollmentAcknowledged: true` лише після підтвердження, що ваш Cloud project, OAuth principal і учасники зустрічі зареєстровані в Google Workspace Developer Preview Program для Meet media APIs. ## Конфігурація -Спільний realtime-шлях Chrome потребує лише ввімкненого plugin, BlackHole, SoX і ключа backend realtime voice provider. OpenAI є типовим; установіть `realtime.provider: "google"`, щоб використовувати Google Gemini Live: +Спільний шлях Chrome у реальному часі потребує лише ввімкненого Plugin, BlackHole, SoX і ключа постачальника голосу backend у реальному часі. OpenAI є типовим; установіть `realtime.provider: "google"`, щоб використовувати Google Gemini Live: ```bash brew install blackhole-2ch sox @@ -830,7 +826,7 @@ export OPENAI_API_KEY=sk-... export GEMINI_API_KEY=... ``` -Установіть конфігурацію plugin у `plugins.entries.google-meet.config`: +Установіть конфігурацію Plugin у `plugins.entries.google-meet.config`: ```json5 { @@ -849,28 +845,22 @@ export GEMINI_API_KEY=... - `defaultTransport: "chrome"` - `defaultMode: "realtime"` -- `chromeNode.node`: необов'язковий ідентифікатор/назва/IP node для `chrome-node` +- `chromeNode.node`: необов’язковий ідентифікатор/ім’я/IP вузла для `chrome-node` - `chrome.audioBackend: "blackhole-2ch"` -- `chrome.guestName: "OpenClaw Agent"`: ім'я, що використовується на екрані гостя Meet без входу +- `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` +- `chrome.waitForInCallMs: 20000`: чекати, доки вкладка Meet повідомить про перебування у виклику, перед запуском вступу в реальному часі +- `chrome.audioFormat: "pcm16-24khz"`: аудіоформат пари команд. Використовуйте `"g711-ulaw-8khz"` лише для застарілих/користувацьких пар команд, які все ще видають телефонне аудіо. +- `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 bridge; установіть її в `""`, щоб приєднатися мовчки -- `realtime.agentId`: необов'язковий ідентифікатор агента OpenClaw для - `openclaw_agent_consult`; типово `main` +- `realtime.instructions`: короткі усні відповіді, з `openclaw_agent_consult` для глибших відповідей +- `realtime.introMessage`: коротка усна перевірка готовності, коли міст реального часу підключається; установіть `""`, щоб приєднатися мовчки +- `realtime.agentId`: необов’язковий ідентифікатор агента OpenClaw для `openclaw_agent_consult`; за замовчуванням `main` -Необов'язкові перевизначення: +Необов’язкові перевизначення: ```json5 { @@ -917,7 +907,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 до Plugin Voice Call. Якщо `voice-call` не ввімкнено, Google Meet усе ще може перевірити й записати план набору, але не може виконати Twilio-виклик. ## Інструмент @@ -934,32 +924,32 @@ export GEMINI_API_KEY=... Використовуйте `transport: "chrome"`, коли Chrome працює на хості Gateway. Використовуйте `transport: "chrome-node"`, коли Chrome працює на спареному вузлі, наприклад Parallels -VM. В обох випадках realtime-модель і `openclaw_agent_consult` працюють на -хості Gateway, тож облікові дані моделі залишаються там. +VM. В обох випадках модель реального часу й `openclaw_agent_consult` працюють на хості +Gateway, тому облікові дані моделі залишаються там. -Використовуйте `action: "status"`, щоб перелічити активні сеанси або перевірити ідентифікатор сеансу. Використовуйте -`action: "speak"` із `sessionId` і `message`, щоб realtime-агент +Використовуйте `action: "status"`, щоб перелічити активні сеанси або перевірити ID сеансу. Використовуйте +`action: "speak"` із `sessionId` і `message`, щоб агент реального часу заговорив негайно. Використовуйте `action: "test_speech"`, щоб створити або повторно використати сеанс, -запустити відому фразу й повернути стан `inCall`, коли хост Chrome може -про нього повідомити. `test_speech` завжди примусово встановлює `mode: "realtime"` і завершується помилкою, якщо його просять +запустити відому фразу й повернути стан справності `inCall`, коли хост Chrome може +повідомити його. `test_speech` завжди примусово встановлює `mode: "realtime"` і завершується помилкою, якщо його просять працювати в `mode: "transcribe"`, оскільки сеанси лише для спостереження навмисно не можуть -виводити мовлення. Його результат `speechOutputVerified` базується на збільшенні байтів realtime-аудіовиходу +відтворювати мовлення. Його результат `speechOutputVerified` базується на збільшенні байтів аудіовиходу реального часу під час цього тестового виклику, тому повторно використаний сеанс зі старішим аудіо -не зараховується як свіжа успішна перевірка мовлення. Використовуйте `action: "leave"`, щоб позначити +не рахується як свіжа успішна перевірка мовлення. Використовуйте `action: "leave"`, щоб позначити сеанс завершеним. -`status` включає стан Chrome, коли він доступний: +`status` містить стан справності Chrome, коли доступно: - `inCall`: Chrome, схоже, перебуває всередині виклику Meet - `micMuted`: найкраща доступна оцінка стану мікрофона Meet -- `manualActionRequired` / `manualActionReason` / `manualActionMessage`: профілю - браузера потрібен ручний вхід, допуск від хоста Meet, дозволи або +- `manualActionRequired` / `manualActionReason` / `manualActionMessage`: профіль + браузера потребує ручного входу, допуску хостом Meet, дозволів або відновлення керування браузером, перш ніж мовлення зможе працювати - `speechReady` / `speechBlockedReason` / `speechBlockedMessage`: чи - кероване мовлення Chrome зараз дозволене. `speechReady: false` означає, що OpenClaw не + кероване мовлення Chrome дозволене зараз. `speechReady: false` означає, що OpenClaw не надіслав вступну/тестову фразу в аудіоміст. -- `providerConnected` / `realtimeReady`: стан realtime-голосового мосту -- `lastInputAt` / `lastOutputAt`: останнє аудіо, побачене з мосту або надіслане до нього +- `providerConnected` / `realtimeReady`: стан голосового моста реального часу +- `lastInputAt` / `lastOutputAt`: останнє аудіо, отримане з моста або надіслане до нього ```json { @@ -969,41 +959,41 @@ VM. В обох випадках realtime-модель і `openclaw_agent_consul } ``` -## Консультація realtime-агента +## Консультація агента реального часу -Realtime-режим Chrome оптимізований для живого голосового циклу. Realtime-голосовий -провайдер чує аудіо зустрічі й говорить через налаштований аудіоміст. -Коли realtime-моделі потрібні глибше міркування, актуальна інформація або звичайні +Режим реального часу Chrome оптимізований для живого голосового циклу. Голосовий +провайдер реального часу чує аудіо зустрічі й говорить через налаштований аудіоміст. +Коли моделі реального часу потрібні глибше міркування, поточна інформація або звичайні інструменти OpenClaw, вона може викликати `openclaw_agent_consult`. -Інструмент консультації запускає звичайного агента OpenClaw у фоновому режимі з нещодавнім -контекстом транскрипту зустрічі й повертає стислу усну відповідь до realtime -голосового сеансу. Потім голосова модель може промовити цю відповідь назад у зустріч. -Він використовує той самий спільний realtime-інструмент консультацій, що й Voice Call. +Інструмент консультації запускає звичайного агента OpenClaw у фоновому режимі з контекстом нещодавньої +стенограми зустрічі й повертає стислу усну відповідь у голосовий сеанс реального часу. +Після цього голосова модель може промовити цю відповідь назад у зустріч. +Він використовує той самий спільний інструмент консультації реального часу, що й 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`: не надавати інструмент консультації realtime-голосовій моделі. +- `none`: не надає інструмент консультації голосовій моделі реального часу. -Ключ сеансу консультації обмежений конкретним сеансом Meet, тож подальші виклики консультації +Ключ сеансу консультації обмежений окремим сеансом Meet, тому наступні виклики консультації можуть повторно використовувати попередній контекст консультації під час тієї самої зустрічі. -Щоб примусово запустити усну перевірку готовності після повного приєднання Chrome до виклику: +Щоб примусово запустити усну перевірку готовності після повного входу Chrome у виклик: ```bash openclaw googlemeet speak meet_... "Say exactly: I'm here and listening." ``` -Для повної smoke-перевірки приєднання й мовлення: +Для повної перевірки join-and-speak: ```bash openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ @@ -1026,14 +1016,14 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ Очікуваний стан Chrome-node: - `googlemeet setup` повністю зелений. -- `googlemeet setup` включає `chrome-node-connected`, коли Chrome-node є +- `googlemeet setup` містить `chrome-node-connected`, коли Chrome-node є типовим транспортом або вузол закріплено. -- `nodes status` показує вибраний вузол як підключений. +- `nodes status` показує, що вибраний вузол підключено. - Вибраний вузол оголошує і `googlemeet.chrome`, і `browser.proxy`. -- Вкладка Meet приєднується до виклику, а `test-speech` повертає стан Chrome з +- Вкладка Meet приєднується до виклику, а `test-speech` повертає стан справності Chrome з `inCall: true`. -Для віддаленого хоста Chrome, наприклад Parallels macOS VM, це найкоротша +Для віддаленого хоста Chrome, такого як Parallels macOS VM, це найкоротша безпечна перевірка після оновлення Gateway або VM: ```bash @@ -1046,10 +1036,10 @@ openclaw nodes invoke \ ``` Це доводить, що Plugin Gateway завантажено, вузол VM підключено з -поточним токеном, а аудіоміст Meet доступний, перш ніж агент відкриє +поточним токеном, а аудіоміст Meet доступний до того, як агент відкриє справжню вкладку зустрічі. -Для smoke-перевірки Twilio використовуйте зустріч, яка надає дані телефонного дозвону: +Для перевірки Twilio використовуйте зустріч, яка надає дані телефонного набору: ```bash openclaw googlemeet setup @@ -1061,7 +1051,7 @@ 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`. @@ -1100,7 +1090,7 @@ openclaw devices approve openclaw nodes status ``` -Вузол має бути підключений і перелічувати `googlemeet.chrome` плюс `browser.proxy`. +Вузол має бути підключений і перелічувати `googlemeet.chrome` разом із `browser.proxy`. Конфігурація Gateway має дозволяти ці команди вузла: ```json5 @@ -1135,7 +1125,7 @@ openclaw nodes status --connected ### Браузер відкривається, але агент не може приєднатися -Запустіть `googlemeet test-speech` і перевірте повернений стан Chrome. Якщо він +Запустіть `googlemeet test-speech` і перегляньте повернений стан справності Chrome. Якщо він повідомляє `manualActionRequired: true`, покажіть `manualActionMessage` оператору й припиніть повторні спроби, доки дія в браузері не буде завершена. @@ -1143,79 +1133,81 @@ openclaw nodes status --connected - Увійти в профіль 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** через автоматизацію браузера, коли це доступно, і продовжує -чекати справжнього стану зустрічі. Для браузерного fallback лише для створення OpenClaw -може натиснути **Continue without microphone**, оскільки створення URL не потребує -realtime-аудіошляху. +натискає **Use microphone** через автоматизацію браузера, коли доступно, і продовжує +чекати справжнього стану зустрічі. Для браузерного резервного режиму лише створення OpenClaw +може натиснути **Continue without microphone**, тому що створення URL не потребує +шляху аудіо реального часу. -### Не вдається створити зустріч +### Не вдалося створити зустріч `googlemeet create` спочатку використовує endpoint Google Meet API `spaces.create`, -коли налаштовано облікові дані OAuth. Без облікових даних OAuth він переходить на fallback -до браузера закріпленого вузла Chrome. Підтвердьте: +коли облікові дані OAuth налаштовані. Без облікових даних OAuth він переходить до резервного +браузера на закріпленому вузлі Chrome. Підтвердьте: - Для створення через API: `oauth.clientId` і `oauth.refreshToken` налаштовані, або наявні відповідні змінні середовища `OPENCLAW_GOOGLE_MEET_*`. -- Для створення через API: refresh token було видано після додавання підтримки створення. - Старішим токенам може бракувати scope `meetings.space.created`; повторно виконайте +- Для створення через API: refresh token був створений після додавання підтримки створення. + У старіших токенах може бракувати scope `meetings.space.created`; повторно виконайте `openclaw googlemeet auth login --json` і оновіть конфігурацію Plugin. -- Для browser fallback: `defaultTransport: "chrome-node"` і +- Для браузерного резервного режиму: `defaultTransport: "chrome-node"` і `chromeNode.node` вказують на підключений вузол із `browser.proxy` і `googlemeet.chrome`. -- Для browser fallback: профіль OpenClaw Chrome на цьому вузлі ввійшов - у Google і може відкрити `https://meet.google.com/new`. -- Для browser fallback: повторні спроби повторно використовують наявну вкладку `https://meet.google.com/new` - або вкладку запиту облікового запису Google, перш ніж відкривати нову вкладку. Якщо агент вичікує тайм-аут, +- Для браузерного резервного режиму: профіль Chrome OpenClaw на цьому вузлі виконано вхід + у Google і він може відкрити `https://meet.google.com/new`. +- Для браузерного резервного режиму: повторні спроби повторно використовують наявну вкладку + `https://meet.google.com/new` або вкладку запиту облікового запису Google перед відкриттям нової вкладки. Якщо в агента спливає час очікування, повторіть виклик інструмента замість ручного відкриття ще однієї вкладки Meet. -- Для browser fallback: якщо інструмент повертає `manualActionRequired: true`, використовуйте +- Для браузерного резервного режиму: якщо інструмент повертає `manualActionRequired: true`, використовуйте повернені `browser.nodeId`, `browser.targetId`, `browserUrl` і - `manualActionMessage`, щоб спрямувати оператора. Не повторюйте спроби в циклі, доки цю - дію не буде завершено. -- Для browser fallback: якщо Meet показує "Do you want people to hear you in the + `manualActionMessage`, щоб скерувати оператора. Не повторюйте спроби в циклі, доки ця + дія не буде завершена. +- Для браузерного резервного режиму: якщо Meet показує "Do you want people to hear you in the meeting?", залиште вкладку відкритою. OpenClaw має натиснути **Use microphone** або, для - fallback лише для створення, **Continue without microphone** через автоматизацію браузера - й продовжити чекати згенерований URL Meet. Якщо він не може, помилка + резервного режиму лише створення, **Continue without microphone** через автоматизацію + браузера й продовжити чекати згенерований URL Meet. Якщо він не може, помилка має згадувати `meet-audio-choice-required`, а не `google-login-required`. ### Агент приєднується, але не говорить -Перевірте realtime-шлях: +Перевірте шлях реального часу: ```bash openclaw googlemeet setup openclaw googlemeet doctor ``` -Використовуйте `mode: "realtime"` для прослуховування/відповіді голосом. `mode: "transcribe"` навмисно -не запускає дуплексний realtime-голосовий міст. `googlemeet test-speech` -завжди перевіряє realtime-шлях і повідомляє, чи були помічені байти виходу мосту -для цього виклику. Якщо `speechOutputVerified` дорівнює false, а -`speechOutputTimedOut` дорівнює true, realtime-провайдер міг прийняти -висловлювання, але OpenClaw не побачив, щоб нові вихідні байти досягли аудіомоста Chrome. +Використовуйте `mode: "realtime"` для прослуховування/відповіді мовленням. `mode: "transcribe"` навмисно +не запускає дуплексний голосовий міст реального часу. `googlemeet test-speech` +завжди перевіряє шлях реального часу й повідомляє, чи були помічені байти виходу моста +для цього виклику. Якщо `speechOutputVerified` має значення false, а +`speechOutputTimedOut` має значення true, провайдер реального часу міг прийняти +висловлювання, але OpenClaw не побачив, щоб нові байти виходу дійшли до аудіомоста +Chrome. Також перевірте: -- Ключ realtime-провайдера доступний на хості Gateway, наприклад +- Ключ провайдера реального часу доступний на хості Gateway, наприклад `OPENAI_API_KEY` або `GEMINI_API_KEY`. - `BlackHole 2ch` видимий на хості Chrome. - `sox` існує на хості Chrome. -- Мікрофон і динамік Meet спрямовані через віртуальний аудіошлях, який використовує +- Мікрофон і динамік Meet маршрутизуються через віртуальний аудіошлях, який використовує OpenClaw. -`googlemeet doctor [session-id]` друкує сеанс, вузол, стан у виклику, -причину ручної дії, підключення realtime-провайдера, `realtimeReady`, активність -аудіовходу/аудіовиходу, останні аудіочасові мітки, лічильники байтів і URL браузера. -Використовуйте `googlemeet status [session-id]`, коли потрібен сирий JSON. Використовуйте -`googlemeet doctor --oauth`, коли потрібно перевірити refresh Google Meet OAuth -без розкриття токенів; додайте `--meeting` або `--create-space`, коли також потрібне -підтвердження Google Meet API. +`googlemeet doctor [session-id]` друкує сеанс, вузол, стан перебування у виклику, +причину ручної дії, підключення провайдера реального часу, `realtimeReady`, активність +вхідного/вихідного аудіо, останні часові мітки аудіо, лічильники байтів і URL браузера. +Використовуйте `googlemeet status [session-id] --json`, коли потрібен сирий JSON. Використовуйте +`googlemeet doctor --oauth`, коли потрібно перевірити оновлення OAuth Google Meet +без розкриття токенів; додайте `--meeting` або `--create-space`, коли також потрібен +доказ Google Meet API. -Якщо агент дочекався тайм-ауту, а ви бачите вже відкриту вкладку Meet, перевірте цю вкладку +Якщо в агента сплив час очікування й ви бачите вже відкриту вкладку Meet, перевірте цю вкладку без відкриття ще однієї: ```bash @@ -1223,22 +1215,22 @@ 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. Вона не відкриває нову вкладку й не створює новий сеанс; вона повідомляє поточний блокер, наприклад вхід, допуск, дозволи або стан вибору аудіо. -Команда 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 не має облікового -SID, токена автентифікації або номера абонента-відправника. Налаштуйте їх на хості Gateway: +`twilio-voice-call-credentials` дає збій, коли в бекенді Twilio немає SID +облікового запису, токена автентифікації або номера абонента. Налаштуйте їх на хості Gateway: ```bash export TWILIO_ACCOUNT_SID=AC... @@ -1254,23 +1246,23 @@ openclaw voicecall setup openclaw voicecall smoke ``` -`voicecall smoke` за замовчуванням перевіряє лише готовність. Щоб виконати пробний запуск для конкретного номера: +`voicecall smoke` за замовчуванням лише перевіряє готовність. Щоб виконати пробний запуск для конкретного номера: ```bash openclaw voicecall smoke --to "+15555550123" ``` -Додавайте `--yes` лише тоді, коли навмисно хочете здійснити реальний вихідний +Додавайте `--yes` лише тоді, коли навмисно хочете здійснити живий вихідний дзвінок-сповіщення: ```bash openclaw voicecall smoke --to "+15555550123" --yes ``` -### Виклик Twilio починається, але ніколи не входить у зустріч +### Виклик Twilio починається, але не входить у зустріч -Переконайтеся, що подія Meet містить дані телефонного підключення. Передайте точний номер -для набору й PIN або власну послідовність DTMF: +Переконайтеся, що подія Meet надає дані для телефонного підключення. Передайте точний номер +для набору та PIN або власну послідовність DTMF: ```bash openclaw googlemeet join https://meet.google.com/abc-defg-hij \ @@ -1279,35 +1271,35 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --dtmf-sequence ww123456# ``` -Використовуйте початкові `w` або коми в `--dtmf-sequence`, якщо провайдеру потрібна пауза +Використовуйте початкову `w` або коми в `--dtmf-sequence`, якщо провайдеру потрібна пауза перед введенням PIN. -## Нотатки +## Примітки -Офіційний медіа API Google Meet орієнтований на приймання, тому для мовлення в -дзвінку Meet усе ще потрібен шлях учасника. Цей Plugin робить цю межу видимою: -Chrome обробляє участь через браузер і локальну маршрутизацію аудіо; Twilio обробляє +Офіційний медіа-API Google Meet орієнтований на приймання, тому для мовлення у виклик Meet +усе одно потрібен шлях учасника. Цей Plugin робить цю межу явною: +Chrome обробляє участь у браузері та локальну маршрутизацію аудіо; Twilio обробляє участь через телефонне підключення. Режим реального часу Chrome потребує `BlackHole 2ch` і одного з таких варіантів: -- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw керує +- `chrome.audioInputCommand` плюс `chrome.audioOutputCommand`: OpenClaw володіє мостом моделі реального часу й передає аудіо у форматі `chrome.audioFormat` між цими - командами та вибраним провайдером голосу реального часу. Типовий шлях Chrome — - 24 кГц PCM16; 8 кГц G.711 mu-law лишається доступним для застарілих пар команд. -- `chrome.audioBridgeCommand`: зовнішня команда моста керує всім локальним + командами та вибраним провайдером голосу реального часу. Стандартний шлях Chrome — + 24 кГц PCM16; 8 кГц G.711 mu-law залишається доступним для застарілих пар команд. +- `chrome.audioBridgeCommand`: зовнішня команда мосту володіє всім локальним аудіошляхом і має завершитися після запуску або перевірки свого демона. Для чистого дуплексного аудіо маршрутизуйте вихід Meet і мікрофон Meet через окремі віртуальні пристрої або граф віртуальних пристроїв у стилі Loopback. Один спільний -пристрій BlackHole може повертати аудіо інших учасників назад у дзвінок. +пристрій BlackHole може повертати звук інших учасників назад у виклик. -`googlemeet speak` запускає активний міст аудіо реального часу для сеансу Chrome. +`googlemeet speak` запускає активний аудіоміст реального часу для сеансу Chrome. `googlemeet leave` зупиняє цей міст. Для сеансів Twilio, делегованих через Plugin -Voice Call, `leave` також завершує базовий голосовий виклик. +голосових викликів, `leave` також завершує базовий голосовий виклик. ## Пов’язане -- [Plugin голосового виклику](/uk/plugins/voice-call) +- [Plugin голосових викликів](/uk/plugins/voice-call) - [Режим розмови](/uk/nodes/talk) -- [Створення Plugin](/uk/plugins/building-plugins) +- [Створення plugins](/uk/plugins/building-plugins)