Skip to main content
Плагін google-meet приєднується до явних URL-адрес Meet від імені агента OpenClaw. Його можливості навмисно обмежені:
  • Він приєднується лише до URL-адрес https://meet.google.com/...; він ніколи самостійно не телефонує на зустріч за знайденим номером телефону.
  • googlemeet create може створити нову URL-адресу Meet через Google Meet API (або резервний варіант у браузері) і типово приєднатися до неї.
  • Участь через Chrome використовує профіль Chrome із виконаним входом, за потреби на спареному вузлі. Участь через Twilio передбачає набір номера телефону з PIN-кодом/DTMF через плагін голосових викликів; безпосередньо набрати URL-адресу Meet він не може.
  • mode: "agent" (типово) транскрибує мовлення учасників за допомогою постачальника послуг реального часу, спрямовує його налаштованому агенту OpenClaw і озвучує відповідь за допомогою звичайного TTS OpenClaw. mode: "bidi" дає змогу голосовій моделі реального часу відповідати безпосередньо. mode: "transcribe" приєднується лише для спостереження без голосових відповідей.
  • Під час приєднання плагіна до виклику автоматичне оголошення про згоду не відтворюється.
  • Команда CLI — googlemeet; meet зарезервовано для ширших сценаріїв телеконференцій агента.

Швидкий початок

Установіть локальні аудіозалежності, а потім задайте ключ постачальника послуг реального часу. OpenAI є типовим постачальником транскрибування для режиму agent; Google Gemini Live доступний як постачальник голосових послуг для режиму bidi:
blackhole-2ch установлює віртуальний аудіопристрій BlackHole 2ch, через який Chrome спрямовує звук. Інсталятор Homebrew вимагає перезавантаження, перш ніж macOS зробить пристрій доступним:
Після перезавантаження перевірте обидва компоненти:
Увімкніть плагін:
Перевірте налаштування, а потім приєднайтеся:
Вивід setup придатний для читання агентом і враховує режим та транспорт: він повідомляє про профіль Chrome, закріплення вузла, а для приєднань Chrome у реальному часі — про аудіоміст BlackHole/SoX і перевірку відкладеного вступу. Приєднання лише для спостереження пропускають передумови реального часу:
Коли налаштовано делегування Twilio, setup також повідомляє, чи готові voice-call, облікові дані Twilio та загальнодоступний Webhook. Вважайте будь-яку перевірку ok: false блокувальною для відповідного транспорту/режиму до приєднання агента. Використовуйте --json для машинозчитуваного виводу, а --transport chrome|chrome-node|twilio — для завчасної попередньої перевірки певного транспорту:
Або дозвольте агенту приєднатися через інструмент google_meet:
На хостах Gateway, відмінних від macOS, google_meet залишається доступним для дій з артефактами, календарем, налаштуванням, транскрибуванням, Twilio та chrome-node, але локальні голосові відповіді Chrome (transport: "chrome" із mode: "agent" або "bidi") блокуються до потрапляння в аудіоміст, оскільки цей шлях наразі залежить від macOS BlackHole 2ch. Натомість використовуйте mode: "transcribe", телефонне підключення через Twilio або хост macOS chrome-node.

Створення зустрічі

create має два шляхи, зазначені в полі source результату:
  • api: використовується, коли налаштовано облікові дані Google Meet OAuth. Детермінований; не залежить від стану інтерфейсу браузера.
  • browser: використовується без облікових даних OAuth. OpenClaw відкриває https://meet.google.com/new на закріпленому вузлі Chrome і чекає, доки Google переспрямує на справжню URL-адресу з кодом зустрічі; у профілі OpenClaw Chrome на цьому вузлі вже має бути виконано вхід у Google. І приєднання, і створення повторно використовують наявну вкладку Meet (або вкладку з незавершеним .../new / запитом облікового запису Google), перш ніж відкрити нову; під час зіставлення вкладок ігноруються нешкідливі рядки запиту на кшталт authuser.
create типово приєднується та повертає joined: true разом із сеансом приєднання. Передайте --no-join (CLI) або "join": false (інструмент), щоб лише створити URL-адресу. Для кімнат, створених через API, задайте явну політику доступу замість успадкування типових налаштувань облікового запису Google:
Це стосується лише кімнат, створених через API, тому OAuth має бути налаштовано. Якщо автентифікацію виконано до появи цієї опції, повторно запустіть openclaw googlemeet auth login --json після додавання області meetings.space.settings на екран згоди OAuth. Якщо резервний варіант у браузері стикається з блокуванням через вхід у Google або дозволи Meet, інструмент повертає manualActionRequired: true із manualActionReason, manualActionMessage та browser.nodeId/browser.targetId/browserUrl. Повідомте це повідомлення й припиніть відкривати нові вкладки Meet, доки оператор не завершить дію в браузері.

Приєднання лише для спостереження

Установіть "mode": "transcribe", щоб пропустити дуплексний міст реального часу (без вимоги BlackHole/SoX і без голосових відповідей). Приєднання Chrome у режимі транскрибування також пропускають надання OpenClaw дозволу на мікрофон/камеру та шлях Meet Use microphone; якщо Meet показує проміжний екран вибору аудіо, автоматизація спочатку намагається вибрати Continue without microphone. Керовані транспорти Chrome у цьому режимі встановлюють спостерігач субтитрів Meet за принципом найкращих зусиль. googlemeet status --json і googlemeet doctor повідомляють captioning, captionsEnabledAttempted, transcriptLines, lastCaptionAt, lastCaptionSpeaker, lastCaptionText і хвіст recentTranscript. Щоб отримати обмежену стенограму сеансу, прочитайте точну відстежувану вкладку Meet:
Спостерігач зберігає на сторінці Meet щонайбільше 2,000 завершених рядків субтитрів. Видимий текст, що поступово доповнюється, залишається у хвості стану справності, доки рядок субтитрів не завершиться, тому збереження nextIndex не може пропустити пізніше розширення тексту; вихід завершує видимі рядки перед створенням знімка. droppedLines повідомляє про рядки, утрачені з початку після перевищення обмеження. Стенограми чотирьох останніх завершених сеансів залишаються доступними для читання до перезапуску Gateway. Старіші завершені стенограми повертають evicted: true. Це навмисно пам’ять середовища виконання, а не постійне сховище історії зустрічей: перезапуск Gateway, закриття вкладки до створення знімка або перевищення задокументованих обмежень може призвести до втрати субтитрів. Для перевірки прослуховування з відповіддю «так/ні»:
Команда приєднується в режимі транскрибування, очікує нового руху субтитрів/стенограми та повертає listenVerified, listenTimedOut, поля ручних дій і поточний стан субтитрів.

Стан сеансу реального часу

Під час сеансів із голосовими відповідями стан google_meet повідомляє про справність Chrome/аудіомоста: inCall, manualActionRequired, providerConnected, realtimeReady, audioInputActive, audioOutputActive, часові позначки останнього вводу/виводу, лічильники байтів і стан закриття моста. Керовані сеанси Chrome озвучують вступну/тестову фразу лише після того, як стан справності повідомить inCall: true; інакше speechReady: false, а спроба мовлення блокується замість непомітної бездіяльності. Локальні приєднання Chrome відбуваються через профіль браузера OpenClaw із виконаним входом і потребують BlackHole 2ch для шляху мікрофона/динаміка. Одного пристрою BlackHole достатньо для першої базової перевірки, але він може створювати відлуння; для чистого дуплексного аудіо використовуйте окремі віртуальні пристрої або граф у стилі Loopback.

Локальний Gateway + Chrome у Parallels

Повноцінний Gateway або ключ API моделі не потрібні всередині віртуальної машини macOS, якщо вона лише надає Chrome. Запускайте Gateway і агента локально, а хост вузла — у віртуальній машині. Установіть залежності у віртуальній машині, перезавантажте її та перевірте:
Увімкніть плагін у віртуальній машині та запустіть хост вузла:
Якщо <gateway-host> — це IP-адреса LAN без TLS, явно дозвольте використання цієї довіреної приватної мережі:
Використовуйте той самий прапорець під час установлення як LaunchAgent (це середовище процесу, яке за наявності в команді встановлення зберігається в середовищі LaunchAgent, а не налаштування openclaw.json):
Схваліть вузол із хоста Gateway, а потім переконайтеся, що він оголошує і googlemeet.chrome, і можливість браузера/browser.proxy:
Спрямуйте Meet через цей вузол:
Тепер приєднуйтеся звичайним способом із хоста Gateway:
Для базової перевірки однією командою, яка створює або повторно використовує сеанс, озвучує відому фразу та виводить стан сеансу:
Під час приєднання в реальному часі автоматизація браузера заповнює ім’я гостя, натискає Join/Ask to join і приймає запит Meet “Use microphone” під час першого запуску, якщо він з’являється (або “Continue without microphone” під час приєднання лише для спостереження та створення зустрічі лише в браузері). Якщо в профілі не виконано вхід, Meet очікує допуску від хоста, Chrome потребує дозволу на мікрофон/камеру або Meet застряг на невирішеному запиті, результат повідомляє manualActionRequired: true із manualActionReason і manualActionMessage. Припиніть повторні спроби, повідомте це повідомлення разом із browserUrl/browserTitle і повторіть спробу лише після завершення ручної дії. Якщо chromeNode.node не вказано, OpenClaw автоматично вибирає вузол лише тоді, коли рівно один підключений вузол заявляє про підтримку і googlemeet.chrome, і керування браузером; зафіксуйте chromeNode.node (ідентифікатор вузла, відображуване ім’я або віддалену IP-адресу), коли підключено кілька придатних вузлів.

Перевірки поширених помилок

Примітки щодо встановлення

Типова конфігурація зворотного аудіозв’язку Chrome використовує два зовнішні інструменти, які OpenClaw не постачає та не розповсюджує; установіть їх як залежності хоста через Homebrew:
  • sox: утиліта командного рядка для роботи зі звуком. Plugin надсилає явні команди пристрою CoreAudio для типового аудіомоста PCM16 із частотою 24 кГц.
  • blackhole-2ch: віртуальний аудіодрайвер macOS, що надає пристрій BlackHole 2ch, через який проходить маршрут Chrome/Meet.
SoX ліцензовано за LGPL-2.0-only AND GPL-2.0-only; BlackHole — за GPL-3.0. Якщо ви створюєте інсталятор або готовий пристрій, що постачає BlackHole разом з OpenClaw, перевірте умови ліцензування BlackHole від розробника або отримайте окрему ліцензію від Existential Audio.

Транспорти

Chrome

Відкриває URL-адресу Meet за допомогою керування браузером OpenClaw і приєднується через профіль браузера OpenClaw, у якому виконано вхід. У macOS Plugin перед запуском перевіряє наявність BlackHole 2ch і, якщо налаштовано, запускає команду перевірки справності або запуску аудіомоста перед відкриттям Chrome. Для локального Chrome виберіть профіль за допомогою browser.defaultProfile; натомість chrome.browserProfile передається хостам chrome-node.
Аудіо мікрофона й динаміка Chrome проходить через локальний аудіоміст OpenClaw. Якщо BlackHole 2ch не встановлено, приєднання завершується помилкою налаштування замість приєднання без аудіотракту.

Twilio

Строгий план набору, делегований Plugin голосових викликів. Він не аналізує сторінки Meet для пошуку телефонних номерів; Google Meet має надати для зустрічі номер телефонного підключення та PIN-код. Увімкніть Voice Call на хості Gateway, а не на вузлі Chrome:
Надайте облікові дані Twilio через середовище, щоб не зберігати секрети в openclaw.json:
Якщо постачальником голосового зв’язку в реальному часі є OpenAI, натомість використовуйте realtime.provider: "openai" разом із OPENAI_API_KEY. Перезапустіть або перезавантажте Gateway після ввімкнення voice-call; зміни конфігурації Plugin не набудуть чинності до перезавантаження. Перевірте:
Коли делегування Twilio підключено, googlemeet setup містить перевірки twilio-voice-call-plugin, twilio-voice-call-credentials і twilio-voice-call-webhook.
Для спеціальної послідовності використовуйте --dtmf-sequence, додаючи на початку w або коми для паузи перед PIN-кодом:

OAuth і попередня перевірка

OAuth необов’язковий для створення посилання Meet, оскільки googlemeet create може використати автоматизацію браузера як резервний варіант. Налаштуйте OAuth для офіційного створення через API, визначення простору або попередньої перевірки Meet Media API. Приєднання через Chrome/Chrome-node ніколи не залежать від OAuth; вони в будь-якому разі використовують профіль Chrome, у якому виконано вхід, BlackHole/SoX і (для chrome-node) підключений вузол.

Створення облікових даних Google

У Google Cloud Console:
1

Створіть або виберіть проєкт

2

Увімкніть Google Meet REST API

3

Налаштуйте екран згоди OAuth

Варіант Internal найпростіший для організації Google Workspace. Варіант External підходить для особистих або тестових конфігурацій; поки застосунок перебуває в режимі Testing, додайте кожен обліковий запис Google, який його авторизуватиме, як тестового користувача.
4

Додайте запитувані області доступу

  • https://www.googleapis.com/auth/meetings.space.created
  • https://www.googleapis.com/auth/meetings.space.readonly
  • https://www.googleapis.com/auth/meetings.space.settings
  • https://www.googleapis.com/auth/meetings.conference.media.readonly
  • https://www.googleapis.com/auth/calendar.events.readonly (пошук у календарі)
  • https://www.googleapis.com/auth/drive.meet.readonly (експорт тексту документа з транскриптом або інтелектуальними нотатками)
5

Створіть ідентифікатор клієнта OAuth

Тип застосунку Web application. Авторизована URI-адреса переспрямування:
6

Скопіюйте ідентифікатор клієнта та секрет клієнта

meetings.space.created потрібен для spaces.create. meetings.space.readonly зіставляє URL-адреси й коди Meet із просторами. meetings.space.settings дає OpenClaw змогу передавати параметри SpaceConfig, як-от accessType, під час створення кімнати через API. meetings.conference.media.readonly призначений для попередньої перевірки Meet Media API та роботи з медіа; для фактичного використання Media API Google може вимагати участі в Developer Preview. calendar.events.readonly потрібен лише для пошуку в календарі через --today/--event. drive.meet.readonly потрібен лише для експорту --include-doc-bodies. Якщо потрібні лише приєднання через Chrome на основі браузера, повністю пропустіть OAuth.

Створення токена оновлення

Налаштуйте oauth.clientId і, за потреби, oauth.clientSecret (або передайте їх як змінні середовища), а потім виконайте:
Ця команда запускає потік PKCE зі зворотним викликом localhost на http://localhost:8085/oauth2callback і виводить блок конфігурації oauth із токеном оновлення. Додайте --manual для потоку з копіюванням і вставленням, коли браузер не може отримати доступ до локального зворотного виклику:
Виведення JSON:
Збережіть об’єкт oauth у конфігурації Plugin:
Надавайте перевагу змінним середовища, якщо не хочете зберігати токен оновлення в конфігурації; спочатку опрацьовується конфігурація, а потім як резервний варіант — середовище. Якщо автентифікацію виконано до появи підтримки створення зустрічей, пошуку в календарі або експорту тексту документа, повторно запустіть openclaw googlemeet auth login --json, щоб токен оновлення охоплював поточний набір областей доступу.

Перевірка OAuth за допомогою doctor

Ця команда перевіряє наявність конфігурації OAuth і можливість отримати токен доступу за допомогою токена оновлення, не завантажуючи середовище виконання Chrome і не вимагаючи підключеного вузла. Звіт містить лише поля стану (ok, configured, tokenSource, expiresAt, повідомлення перевірок) і ніколи не виводить токен доступу, токен оновлення або секрет клієнта. Підтвердьте ввімкнення Meet API та область доступу spaces.create за допомогою перевірки створення, що має побічний ефект:
Підтвердьте доступ на читання до наявного простору:
403 у цих перевірках зазвичай означає, що Meet REST API вимкнено, у токена оновлення немає потрібної області доступу або обліковий запис Google не має доступу до цього простору. Помилка токена оновлення означає, що потрібно повторно виконати openclaw googlemeet auth login --json і зберегти новий блок oauth. Для резервного варіанта через браузер OAuth не потрібен; автентифікація Google у цьому випадку надходить із профілю Chrome, у який виконано вхід на вибраному Node, а не з конфігурації OpenClaw. Як резервні варіанти приймаються такі змінні середовища:
  • OPENCLAW_GOOGLE_MEET_CLIENT_ID або GOOGLE_MEET_CLIENT_ID
  • OPENCLAW_GOOGLE_MEET_CLIENT_SECRET або GOOGLE_MEET_CLIENT_SECRET
  • OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN або GOOGLE_MEET_REFRESH_TOKEN
  • OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN або GOOGLE_MEET_ACCESS_TOKEN
  • OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT або GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT
  • OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING або GOOGLE_MEET_DEFAULT_MEETING
  • OPENCLAW_GOOGLE_MEET_PREVIEW_ACK або GOOGLE_MEET_PREVIEW_ACK

Визначення, попередня перевірка та читання артефактів

Після того як Meet створить записи конференції:
З --meeting команди artifacts та attendance типово використовують найновіший запис конференції; передайте --all-conference-records для кожного збереженого запису. Пошук у календарі визначає URL зустрічі з Google Calendar перед читанням артефактів (потрібен токен оновлення, що містить область доступу лише для читання подій Calendar):
--today шукає в сьогоднішньому календарі primary подію з посиланням Meet; --event <query> шукає відповідний текст події; --calendar <id> націлюється на неосновний календар. calendar-events показує попередній перегляд відповідних подій і позначає, яку з них виберуть latest/artifacts/attendance/export. Якщо ідентифікатор запису конференції вже відомий, зверніться до нього безпосередньо:
Закрийте кімнату для простору, створеного через API:
Викликає spaces.endActiveConference і потребує OAuth з областю доступу meetings.space.created для простору, яким може керувати авторизований обліковий запис. Приймає URL Meet, код зустрічі або spaces/{id} і спочатку визначає для нього ресурс простору API. Це окремо від googlemeet leave: leave припиняє локальну участь або участь у сеансі OpenClaw; end-active-conference просить Google Meet завершити активну конференцію для простору. Створіть зручний для читання звіт:
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 із транскриптами та розумними нотатками через Drive files.export (потрібна область доступу Drive Meet лише для читання); без неї експорт містить лише метадані Meet і структуровані записи транскрипту. У разі часткової помилки артефакту (помилки отримання списку розумних нотаток, запису транскрипту або вмісту документа) попередження зберігається у зведенні або маніфесті замість завершення всього експорту з помилкою. --dry-run отримує ті самі дані та виводить JSON маніфесту без створення папки або ZIP-архіву. Агенти використовують ті самі дії через інструмент google_meet (export, create з accessType, end_active_conference, test_listen); див. Інструмент.

Оперативна димова перевірка

Базова димова перевірка артефактів і відвідуваності потребує meetings.space.readonly та meetings.conference.media.readonly. Для пошуку в календарі потрібен calendar.events.readonly. Для експорту вмісту документів Drive потрібен drive.meet.readonly.

Приклади створення

Виводить URI нової зустрічі, джерело та сеанс приєднання. З OAuth використовується Meet API; без нього — профіль закріпленого Node Chrome, у який виконано вхід. JSON резервного варіанта через браузер:
Якщо резервний варіант через браузер спочатку натрапляє на вхід у Google або блокування дозволів Meet, google_meet повертає структуровані відомості замість простого рядка:
JSON створення через API:
Після створення приєднання відбувається типово, але Chrome або Chrome-node все одно потребує профілю Google, у який виконано вхід, щоб приєднатися через браузер; якщо вхід не виконано, OpenClaw повідомляє manualActionRequired: true або помилку резервного варіанта через браузер і просить оператора завершити вхід у Google перед повторною спробою. Установлюйте preview.enrollmentAcknowledged: true лише після підтвердження, що ваш хмарний проєкт, суб’єкт OAuth та учасники зустрічі зареєстровані в Google Workspace Developer Preview Program для медіа-API Meet.

Конфігурація

Для спільного шляху агента Chrome потрібні лише ввімкнений plugin, BlackHole, SoX, ключ постачальника реального часу та налаштований постачальник TTS OpenClaw:

Типові значення

chrome.audioBridgeCommand і chrome.audioBridgeHealthCommand дають змогу зовнішньому мосту керувати всім локальним аудіотрактом замість chrome.audioInputCommand/chrome.audioOutputCommand; обмеження щодо режиму, у якому їх можна використовувати, див. у Примітках. Існує міграція openclaw doctor --fix для застарілої структури realtime.provider: "google": вона переносить цей намір до realtime.voiceProvider: "google" разом із realtime.transcriptionProvider: "openai", якщо ці поля ще не задано.

Необов’язкові перевизначення

ElevenLabs для прослуховування й озвучення в режимі агента:
Постійний голос Meet надходить із messages.tts.providers.elevenlabs.speakerVoiceId. Відповіді агента також можуть використовувати директиви [[tts:speakerVoiceId=... model=eleven_v3]] для кожної відповіді, коли перевизначення моделі TTS увімкнено, але конфігурація є детермінованим стандартним варіантом для зустрічей. Під час приєднання в журналах відображається transcriptionProvider=elevenlabs, а для кожної озвученої відповіді записується provider=elevenlabs model=eleven_v3 speakerVoiceId=<voiceId>. Конфігурація лише для Twilio:
З voiceCall.enabled: true (значенням за замовчуванням) і транспортом Twilio Voice Call вводить послідовність DTMF перед відкриттям медіапотоку реального часу, а потім використовує збережений текст вступу як початкове привітання в реальному часі. Якщо voice-call не ввімкнено, Google Meet усе одно може перевірити й записати план набору, але не може здійснити виклик Twilio. Залиште voiceCall.gatewayUrl невстановленим, щоб використовувати локальне довірене середовище виконання Gateway, яке зберігає агента-викликувача протягом усього виклику. Налаштована URL-адреса Gateway залишається явною ціллю WebSocket і не може автентифікувати походження плагіна; приєднання агентів, відмінних від типового, завершується відмовою замість непомітного використання іншого агента. Запускайте Google Meet і Voice Call в одному процесі Gateway, коли потрібна маршрутизація за агентами.

Інструмент

Агенти використовують інструмент google_meet:
test_speech завжди примусово встановлює mode: "agent" або "bidi" і завершується помилкою, якщо його просять працювати в mode: "transcribe", оскільки сеанси лише для спостереження не можуть відтворювати мовлення. Його результат speechOutputVerified ґрунтується на збільшенні кількості вихідних аудіобайтів реального часу під час цього виклику, тому повторно використаний сеанс зі старішим аудіо не вважається новою перевіркою. Для транспортів Chrome leave залишає повторно використану вкладку користувача відкритою після натискання кнопки завершення виклику Leave у Meet. Вкладки, відкриті OpenClaw, закриваються після виходу. Використовуйте transport: "chrome", коли Chrome працює на хості Gateway, і transport: "chrome-node", коли він працює на спареному вузлі. В обох випадках постачальники моделей і openclaw_agent_consult працюють на хості Gateway, тому облікові дані моделей залишаються там. Журнали режиму агента містять визначені постачальника/модель транскрибування під час запуску мосту та постачальника/модель/голос/формат виведення/частоту дискретизації TTS після кожної синтезованої відповіді. Необроблений mode: "realtime" усе ще приймається як застарілий псевдонім сумісності для mode: "agent", але більше не оголошується в переліку mode інструмента. create із кімнатою на основі API та явною політикою доступу:
Завершення активної конференції відомої кімнати:
Перевірка з початковим прослуховуванням, перш ніж вважати зустріч придатною:
Мовлення на вимогу:
status містить стан Chrome, коли він доступний:

Режими агента та bidi

Режим agent: постачальник транскрибування реального часу отримує аудіо зустрічі, остаточні транскрипти учасників спрямовуються через налаштованого агента OpenClaw, а відповідь озвучується через звичайний TTS OpenClaw. Сусідні фрагменти остаточного транскрипту об’єднуються перед консультацією, щоб одна усна репліка не породжувала кілька застарілих часткових відповідей; вхід реального часу пригнічується, доки аудіо асистента в черзі ще відтворюється, а нещодавні відлуння транскрипту, схожі на мовлення асистента, ігноруються перед консультацією, щоб зворотний зв’язок BlackHole не змушував агента відповідати на власне мовлення. Режим bidi: голосова модель реального часу відповідає безпосередньо й може викликати openclaw_agent_consult для глибшого міркування, актуальної інформації або звичайних інструментів OpenClaw. Інструмент консультації непомітно запускає звичайного агента OpenClaw із контекстом нещодавнього транскрипту зустрічі та повертає стислу усну відповідь; у режимі agent OpenClaw надсилає цю відповідь безпосередньо до TTS, у режимі bidi голосова модель реального часу може її озвучити. Він використовує той самий спільний механізм консультацій, що й Voice Call. Типово консультації виконуються для агента main; установіть realtime.agentId, щоб спрямувати канал Meet на окремий робочий простір агента, типові параметри моделі, політику інструментів, пам’ять та історію сеансів. Консультації в режимі агента використовують окремий для кожної зустрічі ключ сеансу agent:<id>:subagent:google-meet:<session>, тому подальші запитання зберігають контекст зустрічі й водночас успадковують звичайну політику агента. Коли агент викликає google_meet у режимі агента, сеанс консультанта створює відгалуження поточного транскрипту агента-викликувача, перш ніж відповідати на мовлення учасника; сеанс Meet залишається окремим, тому подальші запитання зустрічі не змінюють транскрипт агента-викликувача безпосередньо. realtime.toolPolicy керує виконанням консультації: Ключ сеансу консультації має область дії окремого сеансу Meet, тому наступні виклики консультації повторно використовують попередній контекст консультації під час тієї самої зустрічі. Примусово виконайте голосову перевірку готовності після повного приєднання Chrome:
Повна димова перевірка приєднання та мовлення:

Контрольний список перевірки в реальному середовищі

Перед передаванням зустрічі автономному агенту:
Очікуваний стан Chrome-node:
  • googlemeet setup повністю зелений і містить chrome-node-connected, коли Chrome-node є типовим транспортом або закріплено вузол.
  • nodes status показує, що вибраний вузол підключений і оголошує як googlemeet.chrome, так і browser.proxy.
  • Вкладка Meet приєднується, а test-speech повертає стан Chrome з inCall: true.
Для віддаленого хоста Chrome, наприклад віртуальної машини macOS Parallels, найкоротша безпечна перевірка після оновлення Gateway або віртуальної машини:
Це підтверджує, що плагін Gateway завантажено, вузол віртуальної машини підключено з поточним токеном, а аудіоміст Meet доступний до того, як агент відкриє справжню вкладку зустрічі. Для димової перевірки Twilio використовуйте зустріч, яка надає дані для приєднання телефоном:
Очікуваний стан 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

Переконайтеся, що плагін увімкнено, і перезавантажте Gateway; запущений агент бачить лише інструменти плагінів, зареєстровані поточним процесом Gateway:
На хостах Gateway не з macOS google_meet залишається видимим, але локальні дії зворотного передавання звуку Chrome блокуються до потрапляння в аудіоміст. Замість стандартного шляху локального агента Chrome використовуйте mode: "transcribe", телефонне підключення Twilio або хост macOS chrome-node.

Немає підключеного Node з підтримкою Google Meet

На хості Node:
На хості Gateway:
Node має бути підключений і містити в списку googlemeet.chrome та browser.proxy; конфігурація Gateway має дозволяти обидві команди:
Якщо googlemeet setup завершує chrome-node-connected невдало або журнал Gateway повідомляє gateway token mismatch, перевстановіть чи перезапустіть Node з поточним токеном Gateway:
Потім перезавантажте службу Node і повторно виконайте:

Браузер відкривається, але агент не може приєднатися

Запустіть googlemeet test-listen для приєднання лише в режимі спостереження або googlemeet test-speech для приєднання в реальному часі, а потім перевірте повернений стан Chrome. Якщо будь-яка з команд повідомляє manualActionRequired: true, покажіть оператору manualActionMessage і припиніть повторні спроби, доки дію в браузері не буде завершено. Поширені ручні дії: увійти в профіль Chrome; допустити гостя з облікового запису організатора Meet; надати Chrome дозволи на мікрофон і камеру, коли з’явиться системний запит; закрити або виправити зависле діалогове вікно дозволів Meet. Не повідомляйте «не виконано вхід» лише тому, що Meet запитує «Do you want people to hear you in the meeting?»; це проміжний екран Meet для вибору аудіо. OpenClaw натискає Use microphone за допомогою автоматизації браузера, коли це можливо, і продовжує очікувати фактичного стану зустрічі; для резервного браузерного створення без приєднання натомість може бути натиснуто Continue without microphone, оскільки для створення URL не потрібен шлях аудіо в реальному часі.

Не вдається створити зустріч

googlemeet create використовує API Meet spaces.create, коли налаштовано OAuth, а інакше — браузер закріпленого Node Chrome. Перевірте:
  • Створення через API: наявні oauth.clientId та oauth.refreshToken (або відповідні змінні середовища OPENCLAW_GOOGLE_MEET_*), а токен оновлення створено після додавання підтримки створення; старішим токенам може бракувати meetings.space.created, тому повторно запустіть openclaw googlemeet auth login --json.
  • Резервний браузерний шлях: defaultTransport: "chrome-node" і chromeNode.node вказують на підключений Node з browser.proxy та googlemeet.chrome; у профілі OpenClaw Chrome на цьому Node виконано вхід і він може відкрити https://meet.google.com/new.
  • Повторні спроби резервного браузерного шляху: повторно використовуйте наявну вкладку .../new або вкладку із запитом облікового запису Google, перш ніж відкривати нову; повторіть виклик інструмента замість ручного відкриття іншої вкладки.
  • Ручна дія: якщо інструмент повертає manualActionRequired: true, використовуйте browser.nodeId, browser.targetId, browserUrl і manualActionMessage, щоб надати оператору вказівки; не повторюйте спроби циклічно.
  • Проміжний екран вибору аудіо: якщо Meet показує «Do you want people to hear you in the meeting?», залиште вкладку відкритою. OpenClaw має натиснути Use microphone або (лише для створення) Continue without microphone і продовжувати очікувати згенерований URL; якщо це не вдається, у помилці має згадуватися meet-audio-choice-required, а не google-login-required.

Агент приєднується, але не говорить

Використовуйте mode: "agent" для шляху STT -> агент OpenClaw -> TTS, а mode: "bidi" — для прямого резервного голосового зв’язку в реальному часі. mode: "transcribe" навмисно не запускає міст зворотного передавання звуку. Для налагодження лише в режимі спостереження запустіть openclaw googlemeet status --json <session-id> після того, як учасники заговорять, і перевірте captioning, transcriptLines, lastCaptionText. Якщо inCall має значення true, але transcriptLines залишається 0, субтитри Meet може бути вимкнено, після встановлення спостерігача ніхто не говорив, інтерфейс Meet змінився або живі субтитри недоступні для мови чи облікового запису зустрічі. googlemeet test-speech завжди перевіряє шлях реального часу й повідомляє, чи спостерігалися вихідні байти мосту для цього виклику. Якщо speechOutputVerified має значення false, а speechOutputTimedOut — true, постачальник реального часу міг прийняти висловлювання, але OpenClaw не виявив, що нові вихідні байти надійшли до аудіомосту Chrome. Також перевірте: на хості Gateway доступний ключ постачальника реального часу (OPENAI_API_KEY або GEMINI_API_KEY); BlackHole 2ch видимий на хості Chrome; там існує sox; мікрофон і динамік Meet спрямовані через віртуальний аудіошлях (doctor має показувати meet output routed: yes для локальних приєднань Chrome у реальному часі). googlemeet doctor [session-id] виводить сеанс, Node, стан виклику, причину ручної дії, підключення постачальника реального часу, realtimeReady, активність аудіовходу й аудіовиходу, часові позначки останнього аудіо, лічильники байтів і URL браузера. Використовуйте googlemeet status [session-id] --json для необробленого JSON, а googlemeet doctor --oauth (додайте --meeting або --create-space) — щоб перевірити оновлення OAuth без розкриття токенів. Якщо час очікування агента минув, а вкладку Meet уже відкрито, перевірте її, не відкриваючи нову:
Еквівалентна дія інструмента — recover_current_tab: вона фокусує й перевіряє наявну вкладку Meet для вибраного транспорту (локальне керування браузером для chrome, налаштований Node для chrome-node), не відкриваючи нової вкладки чи сеансу, і повідомляє про поточну перешкоду (вхід, допуск, дозволи, стан вибору аудіо). Команда CLI взаємодіє з налаштованим Gateway, який має бути запущений; для chrome-node також потрібно, щоб Node був підключений.

Перевірки налаштування Twilio завершуються невдало

twilio-voice-call-plugin завершується невдало, коли voice-call не дозволено або не ввімкнено: додайте його до plugins.allow, увімкніть plugins.entries.voice-call і перезавантажте Gateway. twilio-voice-call-credentials завершується невдало, коли в бекенді Twilio відсутні SID облікового запису, токен автентифікації або номер абонента:
twilio-voice-call-webhook завершується невдало, коли voice-call не має загальнодоступної адреси Webhook або publicUrl вказує на loopback чи простір приватної мережі. Не використовуйте 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; зворотні виклики оператора не можуть звернутися до них. Установіть для plugins.entries.voice-call.config.publicUrl загальнодоступний URL або налаштуйте доступ через тунель/Tailscale:
Для локальної розробки використовуйте тунель або доступ через Tailscale замість URL приватного хоста:
Перезапустіть або перезавантажте Gateway, а потім виконайте:
voicecall smoke за замовчуванням лише перевіряє готовність. Виконайте тестовий запуск для конкретного номера:
Додавайте --yes лише для навмисного здійснення реального вихідного виклику:

Виклик Twilio починається, але не переходить до зустрічі

Переконайтеся, що подія Meet містить відомості для телефонного підключення, і передайте точний номер підключення разом із PIN-кодом або власною послідовністю DTMF:
Використовуйте початкові w або коми в --dtmf-sequence для паузи перед PIN-кодом. Якщо виклик створено, але учасник, що підключається телефоном, так і не з’являється у списку Meet:
  • openclaw googlemeet doctor <session-id>: перевірте ідентифікатор делегованого виклику Twilio, чи додано DTMF до черги та чи було запитано вступне привітання.
  • openclaw voicecall status --call-id <id>: переконайтеся, що виклик досі активний.
  • openclaw voicecall tail: переконайтеся, що вебхуки Twilio надходять до Gateway.
  • openclaw logs --follow: знайдіть послідовність Twilio Meet: Google Meet делегує приєднання, Voice Call зберігає та обслуговує DTMF TwiML до підключення, Voice Call обслуговує TwiML реального часу для виклику Twilio, а потім Google Meet запитує вступне мовлення через voicecall.speak.
  • Повторно запустіть openclaw googlemeet setup --transport twilio; успішна перевірка налаштування є обов’язковою, але не доводить правильності послідовності PIN-коду зустрічі.
  • Переконайтеся, що номер телефонного підключення належить тому самому запрошенню Meet і регіону, що й PIN-код.
  • Збільште voiceCall.dtmfDelayMs порівняно зі стандартним значенням 12 секунд, якщо Meet відповідає повільно або транскрипт виклику все ще показує запит PIN-коду після надсилання DTMF до підключення.
  • Якщо учасник приєднується, але привітання не чути, перевірте openclaw logs --follow на наявність запиту voicecall.speak після DTMF і відтворення TTS через медіапотік або резервного варіанта Twilio <Say>. Якщо транскрипт усе ще показує «enter the meeting PIN», телефонне з’єднання ще не приєдналося до кімнати Meet, тому учасники не почують мовлення.
Якщо вебхуки не надходять, спочатку налагодьте плагін Voice Call: постачальник має мати доступ до plugins.entries.voice-call.config.publicUrl або налаштованого тунелю. Див. усунення несправностей голосових викликів.

Примітки

Офіційний API мультимедіа Google Meet орієнтований на отримання даних, тому для мовлення у виклику все одно потрібен шлях учасника. Цей плагін чітко зберігає цю межу: Chrome забезпечує участь через браузер і локальне спрямування аудіо; Twilio забезпечує участь через телефонне підключення. Для режимів зворотного передавання звуку Chrome потрібен BlackHole 2ch і один із таких варіантів:
  • chrome.audioInputCommand плюс chrome.audioOutputCommand: OpenClaw керує мостом і передає аудіо в chrome.audioFormat між цими командами та вибраним провайдером. Режим agent використовує транскрибування в реальному часі разом зі звичайним TTS; режим bidi використовує провайдера голосового зв’язку в реальному часі. Типовий шлях — 24 кГц PCM16 із chrome.audioBufferBytes: 4096; 8 кГц G.711 mu-law залишається доступним для застарілих пар команд.
  • chrome.audioBridgeCommand: зовнішня команда мосту керує всім локальним аудіотрактом і має завершити роботу після запуску або перевірки свого демона. Припустимо лише для bidi, оскільки режиму agent потрібен прямий доступ до пари команд для TTS.
З мостом Chrome на основі пари команд chrome.bargeInInputCommand може прослуховувати окремий локальний мікрофон і прибирати відтворення асистента, коли людина починає говорити, надаючи мовленню людини пріоритет над виведенням асистента, навіть коли спільний петльовий вхід BlackHole тимчасово приглушено під час відтворення асистента. Як і chrome.audioInputCommand/chrome.audioOutputCommand, це локальна команда, яку налаштовує оператор: використовуйте явно вказаний довірений шлях до команди або список аргументів, але ніколи не використовуйте сценарій із недовіреного розташування. Для чистого дуплексного аудіо спрямовуйте вихід Meet і мікрофон Meet через окремі віртуальні пристрої або граф віртуальних пристроїв на кшталт Loopback; один спільний пристрій BlackHole може повертати відлуння голосів інших учасників у виклик. googlemeet speak запускає активний аудіоміст зворотного зв’язку для сеансу Chrome; googlemeet leave зупиняє його (а для сеансів Twilio, делегованих через Voice Call, завершує базовий виклик). Використовуйте googlemeet end-active-conference, щоб також закрити активну конференцію Google Meet для простору, керованого через API.

Пов’язане