google-meet подключается к явно указанным URL Meet от имени агента OpenClaw. Его назначение намеренно ограничено:
- Он подключается только к URL
https://meet.google.com/...; он никогда не звонит на встречу по номеру телефона, найденному самостоятельно. googlemeet createможет создать новый URL Meet через API Google Meet (или резервный браузерный механизм) и по умолчанию подключиться к нему.- Для участия через 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 и проверке отложенного вступления. При подключении только для наблюдения предварительные требования режима реального времени пропускаются:
setup также сообщает о готовности voice-call, учётных данных Twilio и публичного доступа к Webhook. Любую проверку ok: false следует считать блокирующей для соответствующего транспорта/режима до подключения агента. Используйте --json для машиночитаемого вывода и --transport chrome|chrome-node|twilio для предварительной проверки конкретного транспорта:
google_meet:
google_meet остаётся доступным для действий с артефактами, календарём, настройкой, транскрибированием, Twilio и chrome-node, однако локальный голосовой ответ через Chrome (transport: "chrome" с mode: "agent" или "bidi") блокируется до обращения к аудиомосту, поскольку сейчас этот путь зависит от BlackHole 2ch в macOS. Вместо него используйте mode: "transcribe", подключение по телефону через Twilio или хост chrome-node на macOS.
Создание встречи
create есть два пути, которые указываются в поле source результата:
api: используется, когда настроены учётные данные OAuth для Google Meet. Детерминированный путь, не зависящий от состояния интерфейса браузера.browser: используется без учётных данных OAuth. OpenClaw открываетhttps://meet.google.com/newна закреплённом узле Chrome и ожидает перенаправления Google на реальный URL с кодом встречи; в профиле Chrome OpenClaw на этом узле уже должен быть выполнен вход в 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:
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
Для предоставления Chrome в виртуальной машине macOS не требуется запускать внутри неё полноценный Gateway или хранить там ключ API модели. Запустите Gateway и агента локально, а хост узла — в виртуальной машине.
Установите зависимости в ВМ, перезагрузите её и выполните проверку:
<gateway-host> — IP-адрес локальной сети без TLS, явно разрешите его для этой доверенной частной сети:
openclaw.json):
googlemeet.chrome, так и возможность браузера/browser.proxy:
manualActionRequired: true с manualActionReason и manualActionMessage. Прекратите повторные попытки, сообщите это сообщение вместе с browserUrl/browserTitle и повторите попытку только после завершения ручного действия.
Если chromeNode.node не указан, OpenClaw выполняет автоматический выбор, только когда ровно один подключённый узел объявляет поддержку как googlemeet.chrome, так и управления браузером; если подключено несколько подходящих узлов, закрепите chromeNode.node (идентификатор узла, отображаемое имя или удалённый IP-адрес).
Проверка распространённых сбоев
Примечания по установке
Стандартная конфигурация обратной передачи звука Chrome использует два внешних инструмента, которые OpenClaw не включает в комплект и не распространяет; установите их как зависимости хоста через Homebrew:sox: утилита командной строки для работы со звуком. Плагин выполняет явные команды для устройств CoreAudio, обеспечивающие стандартный аудиомост PCM16 с частотой 24 кГц.blackhole-2ch: виртуальный аудиодрайвер macOS, предоставляющий устройствоBlackHole 2ch, через которое проходит маршрут Chrome/Meet.
LGPL-2.0-only AND GPL-2.0-only; BlackHole — по GPL-3.0. Если вы создаёте установщик или программно-аппаратный комплекс, включающий BlackHole вместе с OpenClaw, изучите условия лицензирования исходного проекта BlackHole или получите отдельную лицензию у Existential Audio.
Транспорты
Chrome
Открывает URL-адрес Meet через управление браузером OpenClaw и присоединяется от имени профиля браузера OpenClaw, в котором выполнен вход. В macOS плагин перед запуском проверяет наличиеBlackHole 2ch и, если настроено, выполняет команду проверки работоспособности или запуска аудиомоста перед открытием Chrome. Для локального Chrome выберите профиль с помощью browser.defaultProfile; вместо этого chrome.browserProfile передаётся хостам chrome-node.
BlackHole 2ch не установлен, присоединение завершается ошибкой настройки, а не происходит без аудиотракта.
Twilio
Строгий план набора номера, делегированный плагину Voice Call. Он не анализирует страницы Meet для поиска телефонных номеров; Google Meet должен предоставлять для встречи номер телефонного подключения и PIN-код. Включите Voice Call на хосте Gateway, а не на узле Chrome:openclaw.json:
realtime.provider: "openai" с OPENAI_API_KEY.
После включения voice-call перезапустите или перезагрузите Gateway; изменения конфигурации плагина не вступают в силу до перезагрузки. Проверьте:
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.createdhttps://www.googleapis.com/auth/meetings.space.readonlyhttps://www.googleapis.com/auth/meetings.space.settingshttps://www.googleapis.com/auth/meetings.conference.media.readonlyhttps://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 (или передайте их как переменные окружения), затем выполните:
http://localhost:8085/oauth2callback и выводит блок конфигурации oauth с токеном обновления. Добавьте --manual для потока с копированием и вставкой, когда браузер не может обратиться к локальному обратному вызову:
oauth в конфигурации плагина:
openclaw googlemeet auth login --json, чтобы токен обновления охватывал текущий набор областей доступа.
Проверка OAuth с помощью doctor
ok, configured, tokenSource, expiresAt, сообщения проверок) и никогда не выводит токен доступа, токен обновления или секрет клиента.
Подтвердите включение Meet API и область доступа
spaces.create с помощью проверки создания, имеющей побочный эффект:
403 в результатах этих проверок обычно означает, что REST API Meet отключён, в токене обновления отсутствует необходимая область доступа или аккаунт Google не имеет доступа к этому пространству. Ошибка токена обновления означает, что необходимо повторно выполнить 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
Разрешение, предварительная проверка и чтение артефактов
--meeting команды artifacts и attendance по умолчанию используют последнюю запись конференции; передайте --all-conference-records, чтобы обработать все сохранённые записи.
Поиск в календаре разрешает URL встречи через Google Calendar перед чтением артефактов (требуется токен обновления, включающий область доступа только для чтения событий Calendar):
--today ищет в сегодняшнем календаре primary событие со ссылкой Meet; --event <query> ищет совпадающий текст события; --calendar <id> указывает неосновной календарь. calendar-events предварительно показывает совпадающие события и отмечает, какое из них выберут latest/artifacts/attendance/export.
Если идентификатор записи конференции уже известен, обратитесь к ней напрямую:
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.
Примеры создания
google_meet возвращает структурированные сведения вместо простой строки:
manualActionRequired: true или ошибку резервного варианта через браузер и просит оператора завершить вход в Google перед повторной попыткой.
Устанавливайте preview.enrollmentAcknowledged: true только после подтверждения того, что ваш проект Cloud, субъект OAuth и участники встречи зарегистрированы в программе Google Workspace Developer Preview Program для медиа-API Meet.
Конфигурация
Для общего пути агента Chrome требуются только включённый плагин, BlackHole, SoX, ключ поставщика реального времени и настроенный поставщик TTS OpenClaw:Значения по умолчанию
chrome.audioBridgeCommand и chrome.audioBridgeHealthCommand позволяют внешнему мосту полностью управлять локальным аудиотрактом вместо chrome.audioInputCommand/chrome.audioOutputCommand; ограничение на режим, в котором их можно использовать, приведено в разделе Примечания.
Для устаревшей структуры realtime.provider: "google" предусмотрена миграция openclaw doctor --fix: она переносит соответствующую настройку в realtime.voiceProvider: "google" и realtime.transcriptionProvider: "openai", если эти поля ещё не заданы.
Необязательные переопределения
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 оставляет повторно используемую пользовательскую вкладку открытой после нажатия кнопки завершения вызова Meet. Вкладки, открытые OpenClaw, закрываются после выхода.
Используйте transport: "chrome", когда Chrome работает на хосте Gateway, и transport: "chrome-node", когда он работает на сопряжённом узле. В обоих случаях провайдеры моделей и openclaw_agent_consult работают на хосте Gateway, поэтому учётные данные моделей остаются там. При запуске моста журналы режима агента содержат разрешённые провайдер и модель распознавания речи, а после каждого синтезированного ответа — провайдер, модель, голос, формат вывода и частоту дискретизации TTS. Необработанное значение mode: "realtime" по-прежнему принимается как устаревший псевдоним совместимости для mode: "agent", но больше не указывается в перечислении mode инструмента.
create с комнатой на базе API и явно заданной политикой доступа:
status включает состояние Chrome, когда оно доступно:
Режимы агента и двунаправленной связи
Режим
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:
Контрольный список проверки в реальных условиях
Перед передачей встречи автономному агенту:googlemeet setupполностью исправен и включаетchrome-node-connected, когда Chrome-node является транспортом по умолчанию или закреплён определённый узел.nodes statusпоказывает, что выбранный узел подключён и объявляет какgooglemeet.chrome, так иbrowser.proxy.- Вкладка Meet подключается, а
test-speechвозвращает состояние Chrome сinCall: true.
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:google_meet остаётся видимым, но локальные действия Chrome для обратной передачи речи блокируются до попадания в аудиомост. Вместо стандартного пути локального агента Chrome используйте mode: "transcribe", телефонное подключение Twilio или хост chrome-node на macOS.
Нет подключённого Node с поддержкой Google Meet
На хосте Node:googlemeet.chrome и browser.proxy; конфигурация Gateway должна разрешать обе команды:
googlemeet setup завершается ошибкой chrome-node-connected или в журнале Gateway указано gateway token mismatch, переустановите или перезапустите Node с текущим токеном Gateway:
Браузер открывается, но агент не может присоединиться
Выполните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:
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: убедитесь, что Webhook Twilio поступают в Gateway.openclaw logs --follow: найдите последовательность Twilio Meet: Google Meet делегирует подключение, Voice Call сохраняет и обслуживает TwiML DTMF перед подключением, 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, поэтому участники не услышат речь.
plugins.entries.voice-call.config.publicUrl или настроенному туннелю. См. устранение неполадок голосовых вызовов.
Примечания
Официальный мультимедийный API Google Meet ориентирован на приём, поэтому для передачи речи в вызов по-прежнему требуется путь участника. Этот плагин явно сохраняет это разделение: Chrome обеспечивает участие через браузер и локальную маршрутизацию звука; Twilio обеспечивает участие через телефонное подключение. Режимы обратной передачи речи Chrome требуютBlackHole 2ch и одного из следующих вариантов:
chrome.audioInputCommandплюсchrome.audioOutputCommand: OpenClaw управляет мостом и передаёт аудио вchrome.audioFormatмежду этими командами и выбранным провайдером. Режимagentиспользует транскрипцию в реальном времени и обычный TTS; режимbidiиспользует провайдера голосовой связи в реальном времени. По умолчанию используется PCM16 с частотой 24 кГц иchrome.audioBufferBytes: 4096; G.711 mu-law с частотой 8 кГц остаётся доступным для устаревших пар команд.chrome.audioBridgeCommand: внешняя команда моста управляет всем локальным аудиотрактом и должна завершиться после запуска или проверки своего демона. Допустимо только дляbidi, поскольку режимуagentнеобходим прямой доступ к паре команд для TTS.
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.