Bundled plugin guides
Плагін Google Meet
Підтримка учасника Google Meet для OpenClaw — Plugin навмисно явний за задумом:
- Він приєднується лише до явної URL-адреси
https://meet.google.com/.... - Він може створити новий простір Meet через Google Meet API, а потім приєднатися до поверненої URL-адреси.
agent— режим відповіді за замовчуванням: транскрипція в реальному часі слухає, налаштований агент OpenClaw відповідає, а звичайний OpenClaw TTS говорить у Meet.bidiзалишається доступним як резервний режим прямої голосової моделі в реальному часі.- Агенти вибирають поведінку приєднання за допомогою
mode: використовуйтеagentдля живого прослуховування/відповіді,bidiдля прямого резервного голосового режиму в реальному часі абоtranscribeдля приєднання/керування браузером без моста відповіді. - Автентифікація починається як особистий Google OAuth або вже авторизований профіль Chrome.
- Автоматичного оголошення згоди немає.
- Стандартний аудіобекенд Chrome —
BlackHole 2ch. - Chrome може працювати локально або на спареному вузловому хості.
- Twilio приймає номер для дозвону плюс необов'язковий PIN або DTMF-послідовність; він не може напряму набрати URL Meet.
- Команда CLI —
googlemeet;meetзарезервовано для ширших агентських робочих процесів телеконференцій.
Швидкий старт
Установіть локальні аудіозалежності та налаштуйте постачальника транскрипції в реальному часі
плюс звичайний OpenClaw TTS. OpenAI є стандартним постачальником транскрипції;
Google Gemini Live також працює як окремий голосовий резерв bidi з
realtime.voiceProvider: "google":
brew install blackhole-2ch soxexport OPENAI_API_KEY=sk-...# only needed when realtime.voiceProvider is "google" for bidi modeexport GEMINI_API_KEY=...blackhole-2ch встановлює віртуальний аудіопристрій BlackHole 2ch. Інсталятор
Homebrew потребує перезавантаження, перш ніж macOS покаже пристрій:
sudo rebootПісля перезавантаження перевірте обидві частини:
system_profiler SPAudioDataType | grep -i BlackHolecommand -v soxУвімкніть Plugin:
{ plugins: { entries: { "google-meet": { enabled: true, config: {}, }, }, },}Перевірте налаштування:
openclaw googlemeet setupВивід налаштування призначений бути читабельним для агента та враховувати режим. Він повідомляє про профіль Chrome,
прив'язку до вузла та, для приєднань Chrome у реальному часі, аудіоміст BlackHole/SoX
і відкладені перевірки вступу в реальному часі. Для приєднань лише для спостереження перевірте той самий
транспорт за допомогою --mode transcribe; цей режим пропускає передумови аудіо в реальному часі,
бо він не слухає через міст і не говорить через нього:
openclaw googlemeet setup --transport chrome-node --mode transcribeКоли налаштовано делегування Twilio, налаштування також повідомляє, чи готові
Plugin voice-call, облікові дані Twilio та публічна доступність Webhook.
Сприймайте будь-яку перевірку ok: false як блокер для перевіреного транспорту й режиму
перед тим, як просити агента приєднатися. Використовуйте openclaw googlemeet setup --json для
скриптів або машинно-читабельного виводу. Використовуйте --transport chrome,
--transport chrome-node або --transport twilio, щоб попередньо перевірити конкретний
транспорт перед спробою агента.
Для Twilio завжди явно попередньо перевіряйте транспорт, коли стандартним транспортом є Chrome:
openclaw googlemeet setup --transport twilioЦе виявляє відсутнє підключення voice-call, облікові дані Twilio або недоступну
публічну Webhook-експозицію до того, як агент спробує набрати зустріч.
Приєднайтеся до зустрічі:
openclaw googlemeet join https://meet.google.com/abc-defg-hijАбо дозвольте агенту приєднатися через інструмент google_meet:
{ "action": "join", "url": "https://meet.google.com/abc-defg-hij", "transport": "chrome-node", "mode": "agent"}Агентський інструмент google_meet залишається доступним на хостах не macOS для
артефактів, календаря, налаштування, транскрипції, Twilio та потоків chrome-node. Локальні
дії відповіді Chrome там заблоковані, бо вбудований аудіошлях Chrome
зараз залежить від macOS BlackHole 2ch. На Linux використовуйте mode: "transcribe",
дозвін Twilio або macOS-хост chrome-node для участі Chrome з відповіддю.
Створіть нову зустріч і приєднайтеся до неї:
openclaw googlemeet create --transport chrome-node --mode agentДля кімнат, створених через API, використовуйте Google Meet SpaceConfig.accessType, коли хочете,
щоб політика кімнати без стуку була явною, а не успадкованою зі стандартних налаштувань облікового запису Google:
openclaw googlemeet create --access-type OPEN --transport chrome-node --mode agentOPEN дозволяє будь-кому з URL Meet приєднуватися без стуку. TRUSTED дозволяє
довіреним користувачам організації хоста, запрошеним зовнішнім користувачам і користувачам дозвону
приєднуватися без стуку. RESTRICTED обмежує вхід без стуку лише запрошеними. Ці
налаштування застосовуються лише до офіційного шляху створення Google Meet API, тому OAuth
облікові дані мають бути налаштовані.
Якщо ви автентифікували Google Meet до появи цієї опції, повторно запустіть
openclaw googlemeet auth login --json після додавання області
meetings.space.settings до екрана згоди Google OAuth.
Створіть лише URL без приєднання:
openclaw googlemeet create --no-joingooglemeet create має два шляхи:
- Створення через API: використовується, коли налаштовано облікові дані Google Meet OAuth. Це найдетермінованіший шлях, який не залежить від стану інтерфейсу браузера.
- Резервний браузерний шлях: використовується, коли облікових даних OAuth немає. OpenClaw використовує
закріплений вузол Chrome, відкриває
https://meet.google.com/new, чекає, поки Google перенаправить на реальну URL-адресу з кодом зустрічі, а потім повертає цю URL-адресу. Цей шлях вимагає, щоб профіль OpenClaw Chrome на вузлі вже був авторизований у Google. Браузерна автоматизація обробляє власний запит Meet на мікрофон під час першого запуску; цей запит не вважається помилкою входу Google. Потоки приєднання та створення також намагаються повторно використати наявну вкладку Meet перед відкриттям нової. Зіставлення ігнорує нешкідливі рядки запиту URL, як-отauthuser, тому повторна спроба агента має сфокусувати вже відкриту зустріч замість створення другої вкладки Chrome.
Вивід команди/інструмента містить поле source (api або browser), щоб агенти
могли пояснити, який шлях було використано. create за замовчуванням приєднується до нової зустрічі та
повертає joined: true плюс сесію приєднання. Щоб лише створити URL, використовуйте
create --no-join у CLI або передайте "join": false інструменту.
Або скажіть агенту: "Створи Google Meet, приєднайся до нього в режимі відповіді агента
та надішли мені посилання." Агент має викликати google_meet з
action: "create", а потім поділитися поверненим meetingUri.
{ "action": "create", "transport": "chrome-node", "mode": "agent"}Для приєднання лише для спостереження/керування браузером установіть "mode": "transcribe". Це
не запускає дуплексний голосовий міст у реальному часі, не потребує BlackHole або SoX
і не відповідатиме голосом у зустріч. Приєднання Chrome у цьому режимі також уникають
надання дозволів OpenClaw на мікрофон/камеру та уникають шляху Meet Використати
мікрофон. Якщо Meet показує проміжний екран вибору аудіо, автоматизація намагається
обрати шлях без мікрофона, а інакше повідомляє про ручну дію замість відкриття
локального мікрофона. У режимі transcribe керовані транспорти Chrome також встановлюють
спостерігач субтитрів Meet за принципом найкращих зусиль. googlemeet status --json і
googlemeet doctor показують captioning, captionsEnabledAttempted,
transcriptLines, lastCaptionAt, lastCaptionSpeaker, lastCaptionText,
і короткий хвіст recentTranscript, щоб оператори могли зрозуміти, чи браузер
приєднався до дзвінка та чи субтитри Meet генерують текст.
Використовуйте openclaw googlemeet test-listen <meet-url> --transport chrome-node, коли
потрібна перевірка так/ні: він приєднується в режимі transcribe, чекає свіжого руху субтитрів або
транскрипту та повертає listenVerified, listenTimedOut, поля ручної
дії й останній стан субтитрів.
Під час сесій у реальному часі статус google_meet містить стан браузера й аудіомоста,
як-от inCall, manualActionRequired, providerConnected,
realtimeReady, audioInputActive, audioOutputActive, останні часові мітки вводу/виводу,
лічильники байтів і стан закриття моста. Якщо з'являється безпечний запит сторінки Meet,
браузерна автоматизація обробляє його, коли може. Вхід, допуск хостом і
запити дозволів браузера/ОС повідомляються як ручна дія з причиною та
повідомленням, яке агент має передати. Керовані сесії Chrome виводять вступну або
тестову фразу лише після того, як стан браузера повідомить inCall: true; інакше статус повідомляє
speechReady: false, а спроба мовлення блокується замість удавання, що
агент говорив у зустріч.
Локальні приєднання Chrome використовують авторизований браузерний профіль OpenClaw. Режим реального часу
потребує BlackHole 2ch для шляху мікрофона/динаміка, який використовує OpenClaw. Для
чистого дуплексного аудіо використовуйте окремі віртуальні пристрої або граф у стилі Loopback; одного
пристрою BlackHole достатньо для першого smoke-тесту, але він може створювати відлуння.
Локальний Gateway + Parallels Chrome
Вам не потрібен повний OpenClaw Gateway або ключ API моделі всередині macOS VM лише для того, щоб VM володіла Chrome. Запустіть Gateway і агента локально, а потім запустіть вузловий хост у VM. Увімкніть вбудований Plugin на VM один раз, щоб вузол оголошував команду Chrome:
Що де працює:
- Хост Gateway: OpenClaw Gateway, робочий простір агента, ключі моделі/API, постачальник реального часу та конфігурація Google Meet Plugin.
- Parallels macOS VM: OpenClaw CLI/вузловий хост, Google Chrome, SoX, BlackHole 2ch і профіль Chrome, авторизований у Google.
- Не потрібно у VM: сервіс Gateway, конфігурація агента, ключ OpenAI/GPT або налаштування постачальника моделі.
Установіть залежності VM:
brew install blackhole-2ch soxПерезавантажте VM після встановлення BlackHole, щоб macOS показала BlackHole 2ch:
sudo rebootПісля перезавантаження перевірте, що VM бачить аудіопристрій і команди SoX:
system_profiler SPAudioDataType | grep -i BlackHolecommand -v soxУстановіть або оновіть OpenClaw у VM, а потім увімкніть там вбудований Plugin:
openclaw plugins enable google-meetЗапустіть вузловий хост у VM:
openclaw node run --host <gateway-host> --port 18789 --display-name parallels-macosЯкщо <gateway-host> — LAN IP і ви не використовуєте TLS, вузол відхиляє
незашифрований WebSocket, якщо ви явно не погодитеся на це для довіреної приватної мережі:
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macosВикористовуйте ту саму змінну середовища під час установлення вузла як LaunchAgent:
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node install --host <gateway-lan-ip> --port 18789 --display-name parallels-macos --forceopenclaw node restartOPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 — це середовище процесу, а не налаштування
openclaw.json. openclaw node install зберігає його в середовищі LaunchAgent,
коли воно присутнє в команді встановлення.
Схваліть вузол з хоста Gateway:
openclaw devices listopenclaw devices approve <requestId>Підтвердьте, що Gateway бачить вузол і що він оголошує як googlemeet.chrome,
так і можливість браузера/browser.proxy:
openclaw nodes statusСпрямуйте Meet через цей вузол на хості Gateway:
{ gateway: { nodes: { allowCommands: ["googlemeet.chrome", "browser.proxy"], }, }, plugins: { entries: { "google-meet": { enabled: true, config: { defaultTransport: "chrome-node", chrome: { guestName: "OpenClaw Agent", autoJoin: true, reuseExistingTab: true, }, chromeNode: { node: "parallels-macos", }, }, }, }, },}Тепер приєднуйтеся як зазвичай з хоста Gateway:
openclaw googlemeet join https://meet.google.com/abc-defg-hijабо попросіть агента використати інструмент google_meet з transport: "chrome-node".
Для smoke-тесту однією командою, який створює або повторно використовує сесію, промовляє відому фразу та друкує стан сесії:
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hijПід час realtime-приєднання браузерна автоматизація OpenClaw заповнює ім’я гостя, натискає
Приєднатися/Попросити приєднатися та приймає перший вибір Meet «Використовувати мікрофон», коли цей
запит з’являється. Під час приєднання лише для спостереження або створення зустрічі лише в браузері вона
проходить повз той самий запит без мікрофона, коли такий вибір доступний.
Якщо профіль браузера не ввійшов в обліковий запис, Meet очікує допуску від організатора,
Chrome потребує дозволу на мікрофон/камеру для realtime-приєднання, або Meet застряг
на запиті, який автоматизація не змогла розв’язати, результат join/test-speech повідомляє
manualActionRequired: true з manualActionReason і
manualActionMessage. Агенти мають припинити повторювати приєднання, повідомити саме це
повідомлення разом із поточними browserUrl/browserTitle і повторити спробу лише після
завершення ручної дії в браузері.
Якщо chromeNode.node пропущено, OpenClaw автоматично вибирає лише тоді, коли рівно один
підключений вузол оголошує і googlemeet.chrome, і керування браузером. Якщо
підключено кілька придатних вузлів, задайте chromeNode.node як id вузла,
відображуване ім’я або віддалену IP-адресу.
Типові перевірки збоїв:
Configured Google Meet node ... is not usable: offline: закріплений вузол відомий Gateway, але недоступний. Агенти мають трактувати цей вузол як діагностичний стан, а не як придатний хост Chrome, і повідомити блокер налаштування замість переходу на інший транспорт, якщо користувач цього не просив.No connected Google Meet-capable node: запустітьopenclaw node runу VM, схваліть спарювання та переконайтеся, щоopenclaw plugins enable google-meetіopenclaw plugins enable browserбули виконані у VM. Також підтвердьте, що хост Gateway дозволяє обидві команди вузла черезgateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"].BlackHole 2ch audio device not found: установітьblackhole-2chна хості, який перевіряється, і перезавантажтеся перед використанням локального аудіо Chrome.BlackHole 2ch audio device not found on the node: установітьblackhole-2chу VM і перезавантажте VM.- Chrome відкривається, але не може приєднатися: увійдіть у профіль браузера всередині VM або
залиште
chrome.guestNameзаданим для гостьового приєднання. Гостьове автоматичне приєднання використовує браузерну автоматизацію OpenClaw через проксі браузера вузла; переконайтеся, що конфігурація браузера вузла вказує на потрібний профіль, наприкладbrowser.defaultProfile: "user"або іменований профіль наявного сеансу. - Дублікати вкладок Meet: залиште
chrome.reuseExistingTab: trueувімкненим. OpenClaw активує наявну вкладку для тієї самої URL-адреси Meet перед відкриттям нової, а створення зустрічі в браузері повторно використовує поточну вкладкуhttps://meet.google.com/newабо вкладку запиту облікового запису Google перед відкриттям іншої. - Немає аудіо: у Meet спрямуйте мікрофон/динамік через шлях віртуального аудіопристрою, який використовує OpenClaw; використовуйте окремі віртуальні пристрої або маршрутизацію в стилі Loopback для чистого дуплексного аудіо.
Примітки щодо встановлення
Стандартний режим зворотного мовлення Chrome використовує два зовнішні інструменти:
sox: утиліта командного рядка для аудіо. Plugin використовує явні команди пристроїв CoreAudio для стандартного аудіомоста 24 kHz PCM16.blackhole-2ch: віртуальний аудіодрайвер macOS. Він створює аудіопристрійBlackHole 2ch, через який Chrome/Meet можуть маршрутизувати аудіо.
OpenClaw не комплектує і не розповсюджує жоден із цих пакетів. Документація просить користувачів
установити їх як залежності хоста через Homebrew. SoX ліцензовано як
LGPL-2.0-only AND GPL-2.0-only; BlackHole має GPL-3.0. Якщо ви створюєте
інсталятор або appliance, що комплектує BlackHole з OpenClaw, перегляньте ліцензійні умови
upstream BlackHole або отримайте окрему ліцензію від Existential Audio.
Транспорти
Chrome
Транспорт Chrome відкриває URL-адресу Meet через керування браузером OpenClaw і приєднується
як профіль браузера OpenClaw, що ввійшов в обліковий запис. На macOS Plugin перевіряє наявність
BlackHole 2ch перед запуском. Якщо налаштовано, він також виконує команду перевірки стану
аудіомоста й команду запуску перед відкриттям Chrome. Використовуйте chrome, коли
Chrome/аудіо працюють на хості Gateway; використовуйте chrome-node, коли Chrome/аудіо працюють
на спареному вузлі, наприклад VM macOS у Parallels. Для локального Chrome виберіть
профіль через browser.defaultProfile; chrome.browserProfile передається хостам
chrome-node.
openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chromeopenclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome-nodeСпрямуйте аудіо мікрофона й динаміка Chrome через локальний аудіоміст OpenClaw.
Якщо BlackHole 2ch не встановлено, приєднання завершується помилкою налаштування
замість непомітного приєднання без аудіошляху.
Twilio
Транспорт Twilio — це строгий план набору, делегований Plugin Voice Call. Він не аналізує сторінки Meet для пошуку телефонних номерів.
Використовуйте це, коли участь через Chrome недоступна або потрібен резервний варіант телефонного набору. Google Meet має показувати номер телефонного входу й PIN для зустрічі; OpenClaw не виявляє їх зі сторінки Meet.
Увімкніть Plugin Voice Call на хості Gateway, а не на вузлі Chrome:
{ plugins: { allow: ["google-meet", "voice-call", "google"], entries: { "google-meet": { enabled: true, config: { defaultTransport: "chrome-node", // or set "twilio" if Twilio should be the default }, }, "voice-call": { enabled: true, config: { provider: "twilio", inboundPolicy: "allowlist", realtime: { enabled: true, provider: "google", instructions: "Join this Google Meet as an OpenClaw agent. Be brief.", toolPolicy: "safe-read-only", providers: { google: { silenceDurationMs: 500, startSensitivity: "high", }, }, }, }, }, google: { enabled: true, }, }, },}Надайте облікові дані Twilio через середовище або конфігурацію. Середовище тримає
секрети поза openclaw.json:
export TWILIO_ACCOUNT_SID=AC...export TWILIO_AUTH_TOKEN=...export TWILIO_FROM_NUMBER=+15550001234export GEMINI_API_KEY=...Натомість використовуйте realtime.provider: "openai" з Plugin провайдера OpenAI і
OPENAI_API_KEY, якщо це ваш провайдер realtime-голосу.
Перезапустіть або перезавантажте Gateway після ввімкнення voice-call; зміни конфігурації Plugin
не з’являються в уже запущеному процесі Gateway, доки він не перезавантажиться.
Потім перевірте:
openclaw config validateopenclaw plugins list | grep -E 'google-meet|voice-call'openclaw googlemeet setupКоли делегування Twilio підключено, googlemeet setup містить успішні перевірки
twilio-voice-call-plugin, twilio-voice-call-credentials і
twilio-voice-call-webhook.
openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --transport twilio \ --dial-in-number +15551234567 \ --pin 123456Використовуйте --dtmf-sequence, коли зустріч потребує власної послідовності:
openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --transport twilio \ --dial-in-number +15551234567 \ --dtmf-sequence ww123456#OAuth і preflight
OAuth необов’язковий для створення посилання Meet, тому що googlemeet create може
повернутися до браузерної автоматизації. Налаштуйте OAuth, коли потрібні офіційне створення через API,
розв’язання space або preflight-перевірки Meet Media API.
Доступ до Google Meet API використовує користувацький OAuth: створіть клієнт Google Cloud OAuth,
запросіть потрібні scopes, авторизуйте обліковий запис Google, а потім збережіть
отриманий refresh token у конфігурації Plugin Google Meet або надайте
змінні середовища OPENCLAW_GOOGLE_MEET_*.
OAuth не замінює шлях приєднання Chrome. Транспорти Chrome і Chrome-node все ще приєднуються через профіль Chrome, що ввійшов в обліковий запис, BlackHole/SoX і підключений вузол, коли ви використовуєте браузерну участь. OAuth призначений лише для офіційного шляху Google Meet API: створювати meeting spaces, розв’язувати spaces і запускати preflight-перевірки Meet Media API.
Створення облікових даних Google
У Google Cloud Console:
-
Створіть або виберіть проєкт Google Cloud.
-
Увімкніть Google Meet REST API для цього проєкту.
-
Налаштуйте екран згоди OAuth.
- Internal найпростіший для організації Google Workspace.
- External працює для персональних/тестових налаштувань; поки застосунок перебуває в Testing, додайте кожен обліковий запис Google, який авторизуватиме застосунок, як тестового користувача.
-
Додайте scopes, які запитує OpenClaw:
https://www.googleapis.com/auth/meetings.space.createdhttps://www.googleapis.com/auth/meetings.space.readonlyhttps://www.googleapis.com/auth/meetings.space.settingshttps://www.googleapis.com/auth/meetings.conference.media.readonly
-
Створіть OAuth client ID.
-
Тип застосунку: Web application.
-
Авторизований redirect URI:
text http://localhost:8085/oauth2callback
-
-
Скопіюйте client ID і client secret.
meetings.space.created потрібен Google Meet spaces.create.
meetings.space.readonly дає OpenClaw змогу розв’язувати URL-адреси/коди Meet у spaces.
meetings.space.settings дає OpenClaw змогу передавати налаштування SpaceConfig, як-от
accessType, під час створення кімнати через API.
meetings.conference.media.readonly призначений для preflight Meet Media API і роботи з медіа;
Google може вимагати реєстрацію в Developer Preview для фактичного використання Media API.
Якщо вам потрібні лише браузерні приєднання Chrome, повністю пропустіть OAuth.
Випуск refresh token
Налаштуйте oauth.clientId і, за бажанням, oauth.clientSecret, або передайте їх як
змінні середовища, а потім виконайте:
openclaw googlemeet auth login --jsonКоманда друкує конфігураційний блок oauth з refresh token. Вона використовує PKCE,
localhost callback на http://localhost:8085/oauth2callback і ручний
потік копіювання/вставлення з --manual.
Приклади:
OPENCLAW_GOOGLE_MEET_CLIENT_ID="your-client-id" \OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \openclaw googlemeet auth login --jsonВикористовуйте ручний режим, коли браузер не може досягти локального callback:
OPENCLAW_GOOGLE_MEET_CLIENT_ID="your-client-id" \OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \openclaw googlemeet auth login --json --manualВивід JSON містить:
{ "oauth": { "clientId": "your-client-id", "clientSecret": "your-client-secret", "refreshToken": "refresh-token", "accessToken": "access-token", "expiresAt": 1770000000000 }, "scope": "..."}Збережіть об’єкт oauth у конфігурації Plugin Google Meet:
{ plugins: { entries: { "google-meet": { enabled: true, config: { oauth: { clientId: "your-client-id", clientSecret: "your-client-secret", refreshToken: "refresh-token", }, }, }, }, },}Надавайте перевагу змінним середовища, якщо не хочете зберігати refresh token у конфігурації. Якщо присутні і значення конфігурації, і значення середовища, Plugin спершу використовує конфігурацію, а потім fallback середовища.
Згода OAuth включає створення Meet space, доступ на читання Meet space і доступ на читання медіа
конференції Meet. Якщо ви автентифікувалися до появи підтримки створення зустрічей,
повторно виконайте openclaw googlemeet auth login --json, щоб refresh token мав scope
meetings.space.created.
Перевірка OAuth через doctor
Запустіть OAuth doctor, коли потрібна швидка перевірка стану без секретів:
openclaw googlemeet doctor --oauth --jsonЦе не завантажує runtime Chrome і не потребує підключеного вузла Chrome. Воно
перевіряє, що конфігурація OAuth існує і що refresh token може випустити access
token. Звіт JSON містить лише поля стану, як-от ok, configured,
tokenSource, expiresAt, і повідомлення перевірок; він не друкує access
token, refresh token або client secret.
Типові результати:
| Перевірка | Значення |
|---|---|
oauth-config |
Наявний oauth.clientId разом з oauth.refreshToken або кешований токен доступу. |
oauth-token |
Кешований токен доступу ще чинний, або токен оновлення видав новий токен доступу. |
meet-spaces-get |
Необов’язкова перевірка --meeting розпізнала наявний простір Meet. |
meet-spaces-create |
Необов’язкова перевірка --create-space створила новий простір Meet. |
Щоб також підтвердити ввімкнення Google Meet API та область доступу spaces.create, запустіть
перевірку створення з побічним ефектом:
openclaw googlemeet doctor --oauth --create-space --jsonopenclaw googlemeet create --no-join --json--create-space створює одноразову URL-адресу Meet. Використовуйте це, коли потрібно підтвердити,
що в проєкті Google Cloud увімкнено Meet API і що авторизований обліковий запис
має область доступу meetings.space.created.
Щоб підтвердити доступ на читання до наявного простору зустрічі:
openclaw googlemeet doctor --oauth --meeting https://meet.google.com/abc-defg-hij --jsonopenclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hijdoctor --oauth --meeting і resolve-space підтверджують доступ на читання до наявного
простору, до якого має доступ авторизований обліковий запис Google. 403 від цих перевірок
зазвичай означає, що Google Meet REST API вимкнено, погодженому токену оновлення
бракує потрібної області доступу або обліковий запис Google не може отримати доступ до цього
простору Meet. Помилка токена оновлення означає, що потрібно повторно виконати openclaw googlemeet auth login --json і зберегти новий блок oauth.
Для резервного браузерного режиму облікові дані OAuth не потрібні. У цьому режимі автентифікація Google надходить із профілю Chrome із виконаним входом на вибраному вузлі, а не з конфігурації OpenClaw.
Ці змінні середовища приймаються як резервні:
OPENCLAW_GOOGLE_MEET_CLIENT_IDабоGOOGLE_MEET_CLIENT_IDOPENCLAW_GOOGLE_MEET_CLIENT_SECRETабоGOOGLE_MEET_CLIENT_SECRETOPENCLAW_GOOGLE_MEET_REFRESH_TOKENабоGOOGLE_MEET_REFRESH_TOKENOPENCLAW_GOOGLE_MEET_ACCESS_TOKENабоGOOGLE_MEET_ACCESS_TOKENOPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_ATабоGOOGLE_MEET_ACCESS_TOKEN_EXPIRES_ATOPENCLAW_GOOGLE_MEET_DEFAULT_MEETINGабоGOOGLE_MEET_DEFAULT_MEETINGOPENCLAW_GOOGLE_MEET_PREVIEW_ACKабоGOOGLE_MEET_PREVIEW_ACK
Розпізнайте URL-адресу Meet, код або spaces/{id} через spaces.get:
openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hijЗапустіть попередню перевірку перед роботою з медіа:
openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hijПерелічіть артефакти зустрічі та відвідуваність після того, як Meet створить записи конференції:
openclaw googlemeet artifacts --meeting https://meet.google.com/abc-defg-hijopenclaw googlemeet attendance --meeting https://meet.google.com/abc-defg-hijopenclaw googlemeet export --meeting https://meet.google.com/abc-defg-hij --output ./meet-exportЗ --meeting команди artifacts і attendance типово використовують найновіший запис конференції.
Передайте --all-conference-records, коли потрібен кожен збережений запис
для цієї зустрічі.
Пошук у календарі може розпізнати URL-адресу зустрічі з Google Calendar перед читанням артефактів Meet:
openclaw googlemeet latest --todayopenclaw googlemeet calendar-events --today --jsonopenclaw googlemeet artifacts --event "Weekly sync"openclaw googlemeet attendance --today --format csv --output attendance.csv--today шукає в сьогоднішньому календарі primary подію Calendar із
посиланням Google Meet. Використовуйте --event <query> для пошуку відповідного тексту події, а
--calendar <id> для неосновного календаря. Пошук у календарі потребує свіжого
входу OAuth, який включає область доступу лише для читання подій Calendar.
calendar-events попередньо показує відповідні події Meet і позначає подію, яку
вибере latest, artifacts, attendance або export.
Якщо ви вже знаєте ідентифікатор запису конференції, зверніться до нього напряму:
openclaw googlemeet latest --meeting https://meet.google.com/abc-defg-hijopenclaw googlemeet artifacts --conference-record conferenceRecords/abc123 --jsonopenclaw googlemeet attendance --conference-record conferenceRecords/abc123 --jsonЗавершіть активну конференцію для простору, створеного через API, коли потрібно закрити кімнату після дзвінка:
openclaw googlemeet end-active-conference https://meet.google.com/abc-defg-hijЦе викликає Google Meet spaces.endActiveConference і потребує OAuth з
областю доступу meetings.space.created для простору, яким авторизований обліковий запис може керувати.
OpenClaw приймає URL-адресу Meet, код зустрічі або вхідні дані spaces/{id} і розпізнає їх
до ресурсу простору API перед завершенням активної конференції.
Це окремо від googlemeet leave: leave зупиняє локальну/сеансову
участь OpenClaw, тоді як end-active-conference просить Google Meet завершити активну
конференцію для простору.
Запишіть читабельний звіт:
openclaw googlemeet artifacts --conference-record conferenceRecords/abc123 \ --format markdown --output meet-artifacts.mdopenclaw googlemeet attendance --conference-record conferenceRecords/abc123 \ --format markdown --output meet-attendance.mdopenclaw googlemeet attendance --conference-record conferenceRecords/abc123 \ --format csv --output meet-attendance.csvopenclaw googlemeet export --conference-record conferenceRecords/abc123 \ --include-doc-bodies --zip --output meet-exportopenclaw googlemeet export --conference-record conferenceRecords/abc123 \ --include-doc-bodies --dry-runartifacts повертає метадані запису конференції, а також метадані ресурсів учасників, записів,
транскриптів, структурованих записів транскрипту та розумних нотаток, коли
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, який включає область доступу Drive Meet лише для читання. Без
--include-doc-bodies експорти містять лише метадані Meet і структуровані записи транскрипту.
Якщо Google повертає часткову помилку артефакта, наприклад помилку списку розумних нотаток,
запису транскрипту або тіла документа Drive, зведення та
маніфест зберігають попередження замість того, щоб провалити весь експорт.
Використовуйте --dry-run, щоб отримати ті самі дані артефактів/відвідуваності та надрукувати
JSON маніфесту без створення папки або ZIP. Це корисно перед записом
великого експорту або коли агенту потрібні лише кількості, вибрані записи й
попередження.
Агенти також можуть створити такий самий пакет через інструмент google_meet:
{ "action": "export", "conferenceRecord": "conferenceRecords/abc123", "includeDocumentBodies": true, "outputDir": "meet-export", "zip": true}Установіть "dryRun": true, щоб повернути лише маніфест експорту та пропустити запис файлів.
Агенти також можуть створити кімнату з підтримкою API з явною політикою доступу:
{ "action": "create", "transport": "chrome-node", "mode": "agent", "accessType": "OPEN"}І вони можуть завершити активну конференцію для відомої кімнати:
{ "action": "end_active_conference", "meeting": "https://meet.google.com/abc-defg-hij"}Для перевірки з пріоритетом прослуховування агенти мають використовувати test_listen, перш ніж стверджувати, що
зустріч корисна:
{ "action": "test_listen", "url": "https://meet.google.com/abc-defg-hij", "transport": "chrome-node", "timeoutMs": 30000}Запустіть захищену live smoke-перевірку проти реальної збереженої зустрічі:
OPENCLAW_LIVE_TEST=1 \OPENCLAW_GOOGLE_MEET_LIVE_MEETING=https://meet.google.com/abc-defg-hij \pnpm test:live -- extensions/google-meet/google-meet.live.test.tsЗапустіть live браузерну пробу з пріоритетом прослуховування проти зустрічі, де хтось говоритиме з доступними субтитрами Meet:
openclaw googlemeet setup --transport chrome-node --mode transcribeopenclaw googlemeet test-listen https://meet.google.com/abc-defg-hij --transport chrome-node --timeout-ms 30000Середовище 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надає токен оновлення.- Необов’язково:
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. Пошук у календарі
потребує https://www.googleapis.com/auth/calendar.events.readonly. Експорт
тіла документа Drive потребує
https://www.googleapis.com/auth/drive.meet.readonly.
Створіть свіжий простір Meet:
openclaw googlemeet createКоманда друкує новий meeting uri, джерело та сеанс приєднання. З обліковими даними OAuth
вона використовує офіційний Google Meet API. Без облікових даних OAuth вона
використовує профіль браузера з виконаним входом закріпленого вузла Chrome як резервний варіант. Агенти можуть
використовувати інструмент google_meet з action: "create", щоб створити й приєднатися за один
крок. Для створення лише URL-адреси передайте "join": false.
Приклад JSON-виводу з резервного браузерного режиму:
{ "source": "browser", "meetingUri": "https://meet.google.com/abc-defg-hij", "joined": true, "browser": { "nodeId": "ba0f4e4bc...", "targetId": "tab-1" }, "join": { "session": { "id": "meet_...", "url": "https://meet.google.com/abc-defg-hij" } }}Якщо резервний браузерний режим натрапляє на вхід Google або блокування дозволу Meet до того, як
може створити URL-адресу, метод Gateway повертає невдалу відповідь, а
інструмент google_meet повертає структуровані деталі замість звичайного рядка:
{ "source": "browser", "error": "google-login-required: Sign in to Google in the OpenClaw browser profile, then retry meeting creation.", "manualActionRequired": true, "manualActionReason": "google-login-required", "manualActionMessage": "Sign in to Google in the OpenClaw browser profile, then retry meeting creation.", "browser": { "nodeId": "ba0f4e4bc...", "targetId": "tab-1", "browserUrl": "https://accounts.google.com/signin", "browserTitle": "Sign in - Google Accounts" }}Коли агент бачить manualActionRequired: true, він має повідомити
manualActionMessage разом із контекстом браузерного вузла/вкладки та припинити відкривати нові
вкладки Meet, доки оператор не завершить браузерний крок.
Приклад JSON-виводу зі створення через API:
{ "source": "api", "meetingUri": "https://meet.google.com/abc-defg-hij", "joined": true, "space": { "name": "spaces/abc-defg-hij", "meetingCode": "abc-defg-hij", "meetingUri": "https://meet.google.com/abc-defg-hij" }, "join": { "session": { "id": "meet_...", "url": "https://meet.google.com/abc-defg-hij" } }}Створення Meet типово виконує приєднання. Транспорт Chrome або Chrome-node усе ще
потребує профілю Google Chrome із виконаним входом, щоб приєднатися через браузер. Якщо з
профілю виконано вихід, OpenClaw повідомляє manualActionRequired: true або
помилку резервного переходу браузера й просить оператора завершити вхід у Google перед
повторною спробою.
Установлюйте preview.enrollmentAcknowledged: true лише після підтвердження, що ваш Cloud
project, OAuth principal і учасники зустрічі зареєстровані в Google
Workspace Developer Preview Program для Meet media APIs.
Конфігурація
Спільний шлях агента Chrome потребує лише ввімкненого Plugin, BlackHole, SoX,
ключа провайдера транскрибування в реальному часі та налаштованого провайдера TTS OpenClaw.
OpenAI є типовим провайдером транскрибування; задайте realtime.voiceProvider як
"google" і realtime.model, щоб використовувати Google Gemini Live для режиму bidi
без зміни типового провайдера транскрибування режиму агента:
brew install blackhole-2ch soxexport OPENAI_API_KEY=sk-...# orexport GEMINI_API_KEY=...Задайте конфігурацію Plugin у plugins.entries.google-meet.config:
{ plugins: { entries: { "google-meet": { enabled: true, config: {}, }, }, },}Типові значення:
defaultTransport: "chrome"defaultMode: "agent"("realtime"приймається лише як застарілий сумісний псевдонім для"agent"; нові виклики інструментів мають указувати"agent")chromeNode.node: необов’язковий ідентифікатор/назва/IP вузла дляchrome-nodechrome.audioBackend: "blackhole-2ch"chrome.guestName: "OpenClaw Agent": ім’я, що використовується на екрані гостя Meet без виконаного входуchrome.autoJoin: true: найкраща спроба заповнити ім’я гостя й натиснути Join Now через браузерну автоматизацію OpenClaw наchrome-nodechrome.reuseExistingTab: true: активувати наявну вкладку Meet замість відкривання дублікатівchrome.waitForInCallMs: 20000: чекати, доки вкладка Meet повідомить про стан виклику, перш ніж буде запущено вступ із голосовою відповіддюchrome.audioFormat: "pcm16-24khz": аудіоформат пари команд. Використовуйте"g711-ulaw-8khz"лише для застарілих/користувацьких пар команд, які досі видають телефонний аудіосигнал.chrome.audioBufferBytes: 4096: буфер обробки SoX для згенерованих аудіокоманд пари команд Chrome. Це половина типового 8192-байтового буфера SoX, що зменшує типову затримку каналу, залишаючи можливість збільшити його на завантажених хостах. Значення нижче мінімуму SoX обмежуються до 17 байтів.chrome.audioInputCommand: команда SoX, що читає з CoreAudioBlackHole 2chі записує аудіо у форматіchrome.audioFormatchrome.audioOutputCommand: команда SoX, що читає аудіо у форматіchrome.audioFormatі записує до CoreAudioBlackHole 2chchrome.bargeInInputCommand: необов’язкова команда локального мікрофона, яка записує підписаний 16-бітний little-endian моно PCM для виявлення людського перебивання, поки активне відтворення асистента. Наразі це застосовується до розміщеного на Gateway мосту пари командchrome.chrome.bargeInRmsThreshold: 650: рівень RMS, який вважається людським перебиванням наchrome.bargeInInputCommandchrome.bargeInPeakThreshold: 2500: піковий рівень, який вважається людським перебиванням наchrome.bargeInInputCommandchrome.bargeInCooldownMs: 900: мінімальна затримка між повторними очищеннями людського перебиванняmode: "agent": типовий режим голосової відповіді. Мовлення учасників транскрибується налаштованим провайдером транскрибування в реальному часі, надсилається налаштованому агенту OpenClaw у підсеансі агента для окремої зустрічі й озвучується назад через звичайне середовище виконання OpenClaw TTS.mode: "bidi": резервний прямий двоспрямований режим моделі в реальному часі. Провайдер голосу в реальному часі відповідає на мовлення учасників напряму й може викликатиopenclaw_agent_consultдля глибших відповідей або відповідей з інструментами.mode: "transcribe": режим лише спостереження без мосту голосової відповіді.realtime.provider: "openai": сумісний резервний варіант, який використовується, коли наведені нижче поля провайдера в межах області не задано.realtime.transcriptionProvider: "openai": ідентифікатор провайдера, який режимagentвикористовує для транскрибування в реальному часі.realtime.voiceProvider: ідентифікатор провайдера, який режимbidiвикористовує для прямого голосу в реальному часі. Задайте його як"google", щоб використовувати Gemini Live, зберігаючи транскрибування режиму агента на OpenAI.realtime.toolPolicy: "safe-read-only"realtime.instructions: короткі усні відповіді зopenclaw_agent_consultдля глибших відповідейrealtime.introMessage: коротка усна перевірка готовності, коли міст реального часу підключається; задайте"", щоб приєднатися мовчкиrealtime.agentId: необов’язковий ідентифікатор агента OpenClaw дляopenclaw_agent_consult; типовоmain
Необов’язкові перевизначення:
{ defaults: { meeting: "https://meet.google.com/abc-defg-hij", }, browser: { defaultProfile: "openclaw", }, chrome: { guestName: "OpenClaw Agent", waitForInCallMs: 30000, bargeInInputCommand: [ "sox", "-q", "-t", "coreaudio", "External Microphone", "-r", "24000", "-c", "1", "-b", "16", "-e", "signed-integer", "-t", "raw", "-", ], }, chromeNode: { node: "parallels-macos", }, defaultMode: "agent", realtime: { provider: "openai", transcriptionProvider: "openai", voiceProvider: "google", model: "gemini-2.5-flash-native-audio-preview-12-2025", agentId: "jay", toolPolicy: "owner", introMessage: "Say exactly: I'm here.", providers: { google: { speakerVoice: "Kore", }, }, },}ElevenLabs для прослуховування та мовлення в режимі агента:
{ messages: { tts: { provider: "elevenlabs", providers: { elevenlabs: { modelId: "eleven_v3", speakerVoiceId: "pMsXgVXv3BLzUgSXRplE", }, }, }, }, plugins: { entries: { "google-meet": { config: { realtime: { transcriptionProvider: "elevenlabs", providers: { elevenlabs: { modelId: "scribe_v2_realtime", audioFormat: "ulaw_8000", sampleRate: 8000, commitStrategy: "vad", }, }, }, }, }, }, },}Постійний голос Meet надходить із
messages.tts.providers.elevenlabs.speakerVoiceId. Відповіді агента також можуть використовувати
директиви для окремих відповідей [[tts:speakerVoiceId=... model=eleven_v3]], коли перевизначення
моделі TTS увімкнено, але конфігурація є детермінованим типовим значенням для зустрічей.
Під час приєднання журнали мають показувати transcriptionProvider=elevenlabs, а кожна
озвучена відповідь має журналювати provider=elevenlabs model=eleven_v3 speakerVoiceId=<voiceId>.
Конфігурація лише для Twilio:
{ defaultTransport: "twilio", twilio: { defaultDialInNumber: "+15551234567", defaultPin: "123456", }, voiceCall: { gatewayUrl: "ws://127.0.0.1:18789", },}voiceCall.enabled типово дорівнює true; з транспортом Twilio він делегує
фактичний виклик PSTN, DTMF і вступне привітання Plugin Voice Call. Voice Call
відтворює послідовність DTMF перед відкриттям медіапотоку в реальному часі, а потім використовує
збережений вступний текст як початкове привітання в реальному часі. Якщо voice-call не
ввімкнено, Google Meet усе ще може перевірити й записати план набору, але не може
здійснити виклик Twilio.
Інструмент
Агенти можуть використовувати інструмент google_meet:
{ "action": "join", "url": "https://meet.google.com/abc-defg-hij", "transport": "chrome-node", "mode": "agent"}Використовуйте transport: "chrome", коли Chrome працює на хості Gateway. Використовуйте
transport: "chrome-node", коли Chrome працює на спареному вузлі, наприклад Parallels
VM. В обох випадках провайдери моделей і openclaw_agent_consult працюють на
хості Gateway, тож облікові дані моделей залишаються там. Із типовим mode: "agent"
провайдер транскрибування в реальному часі обробляє прослуховування, налаштований агент OpenClaw
створює відповідь, а звичайний OpenClaw TTS озвучує її в Meet. Використовуйте
mode: "bidi", коли хочете, щоб голосова модель у реальному часі відповідала напряму.
Необроблений mode: "realtime" досі приймається як застарілий сумісний псевдонім для
mode: "agent", але більше не рекламується в схемі інструмента агента.
Журнали режиму агента містять визначеного провайдера/модель транскрибування під час запуску
мосту, а також провайдера TTS, модель, голос, формат виводу й частоту дискретизації після
кожної синтезованої відповіді.
Використовуйте action: "status", щоб перелічити активні сеанси або переглянути ідентифікатор сеансу. Використовуйте
action: "speak" із sessionId і message, щоб агент реального часу
заговорив негайно. Використовуйте action: "test_speech", щоб створити або повторно використати сеанс,
запустити відому фразу й повернути стан inCall, коли хост Chrome може
про нього повідомити. test_speech завжди примусово встановлює mode: "agent" і завершується помилкою, якщо його просять
працювати в mode: "transcribe", бо сеанси лише спостереження навмисно не можуть
видавати мовлення. Його результат speechOutputVerified базується на збільшенні байтів аудіовиходу
в реальному часі під час цього тестового виклику, тож повторно використаний сеанс зі старішим аудіо
не зараховується як свіжа успішна перевірка мовлення. Використовуйте action: "leave", щоб позначити
сеанс завершеним.
status містить стан Chrome, коли він доступний:
inCall: Chrome, схоже, перебуває всередині виклику MeetmicMuted: найкраща оцінка стану мікрофона MeetmanualActionRequired/manualActionReason/manualActionMessage: профілю браузера потрібні ручний вхід, допуск хостом Meet, дозволи або ремонт керування браузером, перш ніж мовлення зможе працюватиspeechReady/speechBlockedReason/speechBlockedMessage: чи дозволено кероване мовлення Chrome зараз.speechReady: falseозначає, що OpenClaw не надіслав вступну/тестову фразу в аудіоміст.providerConnected/realtimeReady: стан голосового мосту в реальному часіlastInputAt/lastOutputAt: останнє аудіо, побачене з мосту або надіслане до ньогоaudioOutputRouted/audioOutputDeviceLabel: чи було медіавиведення вкладки Meet активно спрямоване на пристрій BlackHole, який використовує містlastSuppressedInputAt/suppressedInputBytes: вхід loopback, проігнорований, поки активне відтворення асистента
{ "action": "speak", "sessionId": "meet_...", "message": "Say exactly: I'm here and listening."}Режими агента та bidi
Режим Chrome agent оптимізовано для поведінки "мій агент на зустрічі". Провайдер
транскрибування в реальному часі чує аудіо зустрічі, фінальні транскрипти
учасників спрямовуються через налаштованого агента OpenClaw, а відповідь
озвучується через звичайне середовище виконання OpenClaw TTS. Задайте mode: "bidi", коли хочете,
щоб голосова модель у реальному часі відповідала напряму.
Близькі фінальні фрагменти транскрипту об’єднуються перед консультацією, щоб один усний
хід не створював кілька застарілих часткових відповідей. Вхід у реальному часі також
приглушується, поки поставлене в чергу аудіо асистента ще відтворюється,
а нещодавні схожі на асистента відлуння транскриптів ігноруються перед консультацією агента,
щоб loopback BlackHole не змушував агента відповідати на власне мовлення.
| Режим | Хто визначає відповідь | Шлях мовного виводу | Коли використовувати |
|---|---|---|---|
agent |
Налаштований агент OpenClaw | Звичайне середовище виконання OpenClaw TTS | Потрібна поведінка "мій агент на зустрічі" |
bidi |
Голосова модель у реальному часі | Аудіовідповідь голосового провайдера в реальному часі | Потрібен голосовий діалоговий цикл із найменшою затримкою |
У режимі bidi, коли моделі реального часу потрібні глибше міркування, актуальна
інформація або звичайні інструменти OpenClaw, вона може викликати openclaw_agent_consult.
Інструмент consult запускає звичайного агента OpenClaw за лаштунками з контекстом
нещодавньої стенограми зустрічі та повертає стислу усну відповідь. У режимі agent
OpenClaw надсилає цю відповідь безпосередньо до середовища виконання TTS; у режимі bidi
модель голосу реального часу може озвучити результат consult назад у зустрічі. Він використовує
той самий спільний механізм consult, що й Voice Call.
За замовчуванням consult-запити виконуються для агента main. Задайте realtime.agentId, коли
канал Meet має звертатися до окремого робочого простору агента OpenClaw, типових значень моделі,
політики інструментів, пам’яті та історії сеансів.
Consult-запити в режимі агента використовують ключ сеансу для кожної зустрічі
agent:<id>:subagent:google-meet:<session>, щоб додаткові запитання зберігали контекст зустрічі,
успадковуючи звичайну політику агента від налаштованого агента.
realtime.toolPolicy керує запуском consult:
safe-read-only: відкрити інструмент consult і обмежити звичайного агента доread,web_search,web_fetch,x_search,memory_searchіmemory_get.owner: відкрити інструмент consult і дозволити звичайному агенту використовувати звичайну політику інструментів агента.none: не відкривати інструмент consult для моделі голосу реального часу.
Ключ сеансу consult обмежений окремим сеансом Meet, тому наступні виклики consult можуть повторно використовувати попередній контекст consult під час тієї самої зустрічі.
Щоб примусово виконати усну перевірку готовності після того, як Chrome повністю приєднався до дзвінка:
openclaw googlemeet speak meet_... "Say exactly: I'm here and listening."Для повної smoke-перевірки приєднання й озвучення:
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ --transport chrome-node \ --message "Say exactly: I'm here and listening."Контрольний список live-тесту
Використовуйте цю послідовність перед передаванням зустрічі автономному агенту:
openclaw googlemeet setupopenclaw nodes statusopenclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \ --transport chrome-node \ --message "Say exactly: Google Meet speech test complete."Очікуваний стан Chrome-node:
googlemeet setupповністю зелений.googlemeet setupміститьchrome-node-connected, коли Chrome-node є типовим транспортом або вузол закріплено.nodes statusпоказує, що вибраний вузол підключено.- Вибраний вузол оголошує і
googlemeet.chrome, іbrowser.proxy. - Вкладка Meet приєднується до дзвінка, а
test-speechповертає стан Chrome ізinCall: true.
Для віддаленого хоста Chrome, наприклад macOS VM у Parallels, це найкоротша безпечна перевірка після оновлення Gateway або VM:
openclaw googlemeet setupopenclaw nodes status --connectedopenclaw nodes invoke \ --node parallels-macos \ --command googlemeet.chrome \ --params '{"action":"setup"}'Це доводить, що Plugin Gateway завантажено, вузол VM підключено з поточним токеном, а аудіоміст Meet доступний до того, як агент відкриє справжню вкладку зустрічі.
Для Twilio smoke використовуйте зустріч, яка надає дані телефонного дозвону:
openclaw googlemeet setupopenclaw googlemeet join https://meet.google.com/abc-defg-hij \ --transport twilio \ --dial-in-number +15551234567 \ --pin 123456Очікуваний стан Twilio:
googlemeet setupмістить зелені перевіркиtwilio-voice-call-plugin,twilio-voice-call-credentialsіtwilio-voice-call-webhook.voicecallдоступний у CLI після перезавантаження Gateway.- Повернений сеанс має
transport: "twilio"іtwilio.voiceCallId. openclaw logs --followпоказує, що DTMF TwiML віддано перед TwiML реального часу, а потім міст реального часу з поставленим у чергу початковим привітанням.googlemeet leave <sessionId>завершує делегований голосовий дзвінок.
Усунення несправностей
Агент не бачить інструмент Google Meet
Переконайтеся, що Plugin увімкнено в конфігурації Gateway, і перезавантажте Gateway:
openclaw plugins list | grep google-meetopenclaw googlemeet setupЯкщо ви щойно редагували plugins.entries.google-meet, перезапустіть або перезавантажте Gateway.
Запущений агент бачить лише інструменти Plugin, зареєстровані поточним процесом
Gateway.
На хостах Gateway не з macOS інструмент google_meet, видимий агенту, залишається доступним,
але локальні дії Chrome для зворотного мовлення блокуються до того, як вони потраплять в аудіоміст.
Аудіо локального зворотного мовлення Chrome наразі залежить від macOS BlackHole 2ch, тому
агентам Linux слід використовувати mode: "transcribe", дозвін Twilio або хост macOS
chrome-node замість типового шляху локального агента Chrome.
Немає підключеного вузла з підтримкою Google Meet
На хості вузла виконайте:
openclaw plugins enable google-meetopenclaw plugins enable browserOPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macosНа хості Gateway схваліть вузол і перевірте команди:
openclaw devices listopenclaw devices approve <requestId>openclaw nodes statusВузол має бути підключений і перелічувати googlemeet.chrome разом із browser.proxy.
Конфігурація Gateway має дозволяти ці команди вузла:
{ gateway: { nodes: { allowCommands: ["browser.proxy", "googlemeet.chrome"], }, },}Якщо googlemeet setup не проходить chrome-node-connected або журнал Gateway повідомляє
gateway token mismatch, перевстановіть або перезапустіть вузол із поточним токеном Gateway.
Для LAN Gateway це зазвичай означає:
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \ openclaw node install \ --host <gateway-lan-ip> \ --port 18789 \ --display-name parallels-macos \ --forceПотім перезавантажте службу вузла й повторно виконайте:
openclaw googlemeet setupopenclaw nodes status --connectedБраузер відкривається, але агент не може приєднатися
Виконайте googlemeet test-listen для приєднань лише для спостереження або googlemeet test-speech
для приєднань у реальному часі, а потім перевірте повернений стан Chrome. Якщо будь-який зонд
повідомляє manualActionRequired: true, покажіть manualActionMessage оператору
і припиніть повторні спроби, доки дію в браузері не буде завершено.
Поширені ручні дії:
- Увійдіть у профіль Chrome.
- Допустіть гостя з облікового запису хоста Meet.
- Надайте Chrome дозволи на мікрофон/камеру, коли з’явиться нативний запит дозволу Chrome.
- Закрийте або виправте завислий діалог дозволів Meet.
Не повідомляйте "not signed in" лише тому, що Meet показує "Do you want people to hear you in the meeting?" Це проміжний екран вибору аудіо Meet; OpenClaw натискає Use microphone через автоматизацію браузера, коли це доступно, і продовжує чекати справжнього стану зустрічі. Для браузерного резервного шляху лише створення OpenClaw може натиснути Continue without microphone, оскільки створення URL не потребує аудіошляху реального часу.
Не вдається створити зустріч
googlemeet create спершу використовує endpoint Google Meet API spaces.create,
коли налаштовано облікові дані OAuth. Без облікових даних OAuth він переходить
до резервного браузера закріпленого вузла Chrome. Переконайтеся:
- Для створення через API:
oauth.clientIdіoauth.refreshTokenналаштовані, або наявні відповідні змінні середовищаOPENCLAW_GOOGLE_MEET_*. - Для створення через API: refresh token було створено після додавання підтримки створення.
Старішим токенам може бракувати scope
meetings.space.created; повторно виконайтеopenclaw googlemeet auth login --jsonі оновіть конфігурацію Plugin. - Для браузерного резервного шляху:
defaultTransport: "chrome-node"іchromeNode.nodeвказують на підключений вузол ізbrowser.proxyтаgooglemeet.chrome. - Для браузерного резервного шляху: профіль OpenClaw Chrome на цьому вузлі ввійшов
у Google і може відкрити
https://meet.google.com/new. - Для браузерного резервного шляху: повторні спроби повторно використовують наявну вкладку
https://meet.google.com/newабо вкладку запиту облікового запису Google перед відкриттям нової вкладки. Якщо час очікування агента вичерпано, повторіть виклик інструмента, а не відкривайте вручну ще одну вкладку Meet. - Для браузерного резервного шляху: якщо інструмент повертає
manualActionRequired: true, використовуйте поверненіbrowser.nodeId,browser.targetId,browserUrlіmanualActionMessage, щоб скерувати оператора. Не повторюйте спроби в циклі, доки цю дію не буде завершено. - Для браузерного резервного шляху: якщо Meet показує "Do you want people to hear you in the
meeting?", залиште вкладку відкритою. OpenClaw має натиснути Use microphone або, для
резервного створення лише URL, Continue without microphone через автоматизацію браузера
і продовжити чекати згенерований URL Meet. Якщо це неможливо, помилка
має згадувати
meet-audio-choice-required, а неgoogle-login-required.
Агент приєднується, але не говорить
Перевірте шлях реального часу:
openclaw googlemeet setupopenclaw googlemeet doctorВикористовуйте mode: "agent" для звичайного шляху STT -> агент OpenClaw -> зворотне мовлення TTS,
або mode: "bidi" для прямого резервного голосового шляху реального часу. mode: "transcribe"
навмисно не запускає міст зворотного мовлення. Для налагодження лише спостереження
виконайте openclaw googlemeet status --json <session-id> після того, як учасники заговорять,
і перевірте captioning, transcriptLines та lastCaptionText. Якщо inCall дорівнює
true, але transcriptLines лишається 0, субтитри Meet можуть бути вимкнені, ніхто
не говорив після встановлення спостерігача, інтерфейс Meet змінився або live-субтитри
недоступні для мови/облікового запису зустрічі.
googlemeet test-speech завжди перевіряє шлях реального часу й повідомляє, чи
було зафіксовано байти виводу мосту для цього виклику. Якщо speechOutputVerified дорівнює false і
speechOutputTimedOut дорівнює true, провайдер реального часу міг прийняти
висловлювання, але OpenClaw не побачив, щоб нові байти виводу дійшли до аудіомоста
Chrome.
Також перевірте:
- Ключ провайдера реального часу доступний на хості Gateway, наприклад
OPENAI_API_KEYабоGEMINI_API_KEY. BlackHole 2chвидимий на хості Chrome.soxіснує на хості Chrome.- Мікрофон і динамік Meet спрямовані через віртуальний аудіошлях, який використовує
OpenClaw.
doctorмає показуватиmeet output routed: yesдля локальних приєднань Chrome у реальному часі.
googlemeet doctor [session-id] друкує сеанс, вузол, стан перебування в дзвінку,
причину ручної дії, підключення провайдера реального часу, realtimeReady, активність
аудіовходу/виходу, останні аудіомітки часу, лічильники байтів і URL браузера.
Використовуйте googlemeet status [session-id] --json, коли потрібен сирий JSON. Використовуйте
googlemeet doctor --oauth, коли потрібно перевірити Google Meet OAuth refresh
без розкриття токенів; додайте --meeting або --create-space, коли також потрібен
доказ Google Meet API.
Якщо час очікування агента вичерпано і ви бачите вже відкриту вкладку Meet, перевірте цю вкладку без відкриття іншої:
openclaw googlemeet recover-tabopenclaw googlemeet recover-tab https://meet.google.com/abc-defg-hijЕквівалентна дія інструмента — recover_current_tab. Вона фокусує й перевіряє
наявну вкладку Meet для вибраного транспорту. З chrome вона використовує локальне
керування браузером через Gateway; з chrome-node вона використовує налаштований
вузол Chrome. Вона не відкриває нову вкладку й не створює новий сеанс; вона повідомляє
поточний блокер, наприклад вхід, допуск, дозволи або стан вибору аудіо.
Команда CLI звертається до налаштованого Gateway, тому Gateway має бути запущений;
chrome-node також потребує підключеного вузла Chrome.
Перевірки налаштування Twilio не проходять
twilio-voice-call-plugin не проходить, коли voice-call не дозволено або не ввімкнено.
Додайте його до plugins.allow, увімкніть plugins.entries.voice-call і перезавантажте
Gateway.
twilio-voice-call-credentials не проходить, коли backend Twilio не має account
SID, auth token або номера абонента. Задайте їх на хості Gateway:
export TWILIO_ACCOUNT_SID=AC...export TWILIO_AUTH_TOKEN=...export TWILIO_FROM_NUMBER=+15550001234twilio-voice-call-webhook не проходить, коли voice-call не має публічного Webhook
доступу або коли publicUrl вказує на local loopback чи приватний мережевий простір.
Задайте plugins.entries.voice-call.config.publicUrl як URL публічного провайдера або
налаштуйте тунель/Tailscale-доступ для voice-call.
Loopback і приватні URL не є дійсними для carrier callbacks. Не використовуйте
localhost, 127.0.0.1, 0.0.0.0, 10.x, 172.16.x-172.31.x,
192.168.x, 169.254.x, fc00::/7 або fd00::/8 як publicUrl.
Для стабільного публічного URL:
{ plugins: { entries: { "voice-call": { enabled: true, config: { provider: "twilio", fromNumber: "+15550001234", publicUrl: "https://voice.example.com/voice/webhook", }, }, }, },}Для локальної розробки використовуйте тунель або відкриття через Tailscale замість приватної URL-адреси хоста:
{ plugins: { entries: { "voice-call": { config: { tunnel: { provider: "ngrok" }, // or tailscale: { mode: "funnel", path: "/voice/webhook" }, }, }, }, },}Потім перезапустіть або перезавантажте Gateway і виконайте:
openclaw googlemeet setup --transport twilioopenclaw voicecall setupopenclaw voicecall smokevoicecall smoke за замовчуванням лише перевіряє готовність. Щоб пробно перевірити конкретний номер:
openclaw voicecall smoke --to "+15555550123"Додавайте --yes лише тоді, коли ви навмисно хочете здійснити реальний вихідний
сповіщувальний дзвінок:
openclaw voicecall smoke --to "+15555550123" --yesДзвінок Twilio починається, але так і не входить у зустріч
Переконайтеся, що подія Meet надає дані для телефонного дозвону. Передайте точний номер дозвону та PIN або власну послідовність DTMF:
openclaw googlemeet join https://meet.google.com/abc-defg-hij \ --transport twilio \ --dial-in-number +15551234567 \ --dtmf-sequence ww123456#Використовуйте початкові w або коми в --dtmf-sequence, якщо провайдеру потрібна пауза
перед введенням PIN.
Якщо телефонний дзвінок створено, але в списку учасників Meet так і не з'являється учасник із дозвону:
- Виконайте
openclaw googlemeet doctor <session-id>, щоб підтвердити делегований Twilio call ID, чи було поставлено DTMF у чергу, і чи було запитано вступне привітання. - Виконайте
openclaw voicecall status --call-id <id>і переконайтеся, що дзвінок досі активний. - Виконайте
openclaw voicecall tailі перевірте, що Webhook-и Twilio надходять до Gateway. - Виконайте
openclaw logs --followі знайдіть послідовність Twilio Meet: Google Meet делегує приєднання, Voice Call зберігає та віддає pre-connect DTMF TwiML, Voice Call віддає realtime TwiML для дзвінка Twilio, після чого Google Meet запитує вступне мовлення черезvoicecall.speak. - Повторно виконайте
openclaw googlemeet setup --transport twilio; успішна перевірка налаштування є обов'язковою, але не доводить, що послідовність PIN для зустрічі правильна. - Переконайтеся, що номер дозвону належить до того самого запрошення Meet і регіону, що й PIN.
- Збільште
voiceCall.dtmfDelayMsвід стандартних 12 секунд, якщо Meet відповідає повільно або транскрипт дзвінка досі показує запит на PIN після надсилання pre-connect DTMF. - Якщо учасник приєднується, але ви не чуєте привітання, перевірте
openclaw logs --followна наявність post-DTMF запитуvoicecall.speakі або відтворення TTS через медіапотік, або fallback TwilioOPENCLAW_DOCS_MARKER:calloutOpen:U2F5. Якщо транскрипт дзвінка досі містить "enter the meeting PIN", телефонна гілка ще не приєдналася до кімнати Meet, тож учасники зустрічі не почують мовлення.
Якщо Webhook-и не надходять, спочатку налагодьте Plugin Voice Call: провайдер має
дістатися plugins.entries.voice-call.config.publicUrl або налаштованого тунелю.
Див. усунення несправностей голосового дзвінка.
Примітки
Офіційний медіа-API Google Meet орієнтований на приймання, тому для мовлення в дзвінку Meet усе одно потрібен шлях учасника. Цей Plugin залишає цю межу видимою: Chrome відповідає за участь у браузері та маршрутизацію локального аудіо; Twilio відповідає за участь через телефонний дозвін.
Режими talk-back у Chrome потребують BlackHole 2ch плюс одне з такого:
chrome.audioInputCommandплюсchrome.audioOutputCommand: OpenClaw володіє мостом і передає аудіо у форматіchrome.audioFormatміж цими командами та вибраним провайдером. Режим агента використовує realtime-транскрипцію плюс звичайний TTS; bidi-режим використовує realtime-провайдера голосу. Стандартний шлях Chrome — це 24 кГц PCM16 зchrome.audioBufferBytes: 4096; 8 кГц G.711 mu-law залишається доступним для застарілих пар команд.chrome.audioBridgeCommand: зовнішня команда мосту володіє всім локальним аудіошляхом і має завершитися після запуску або перевірки свого daemon. Це дійсно лише дляbidi, бо режимagentпотребує прямого доступу до пари команд для TTS.
Коли агент викликає інструмент google_meet у режимі агента, сеанс консультанта зустрічі
форкає поточний транскрипт викликача перед відповіддю на мовлення учасника. Сеанс Meet
все одно залишається окремим (agent:<agentId>:subagent:google-meet:<sessionId>),
тому подальші дії зустрічі не змінюють транскрипт викликача напряму.
Для чистого дуплексного аудіо маршрутизуйте вихід Meet і мікрофон Meet через окремі віртуальні пристрої або граф віртуальних пристроїв у стилі Loopback. Один спільний пристрій BlackHole може повертати ехо інших учасників назад у дзвінок.
З командною парою мосту Chrome chrome.bargeInInputCommand може слухати
окремий локальний мікрофон і очищати відтворення асистента, коли людина починає
говорити. Це утримує людське мовлення попереду виводу асистента навіть тоді, коли спільний
loopback-вхід BlackHole тимчасово приглушено під час відтворення асистента.
Як і chrome.audioInputCommand та chrome.audioOutputCommand, це
локальна команда, налаштована оператором. Використовуйте явний довірений шлях команди або
список аргументів і не спрямовуйте її на скрипти з недовірених розташувань.
googlemeet speak запускає активний talk-back аудіоміст для сеансу Chrome.
googlemeet leave зупиняє цей міст. Для сеансів Twilio, делегованих
через Plugin Voice Call, leave також завершує базовий голосовий дзвінок.
Використовуйте googlemeet end-active-conference, коли також хочете закрити активну
конференцію Google Meet для простору, керованого API.