- Он подключается только к явно указанному 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":
blackhole-2ch устанавливает виртуальное аудиоустройство BlackHole 2ch. Установщик
Homebrew требует перезагрузки, прежде чем macOS покажет устройство:
--mode transcribe; этот режим пропускает предварительные требования к аудио реального времени,
поскольку он не слушает через мост и не говорит через него:
voice-call, учетные данные Twilio и публичная доступность Webhook.
Считайте любую проверку ok: false блокирующей для проверяемого транспорта и режима
перед тем, как просить агента подключиться. Используйте openclaw googlemeet setup --json для
скриптов или машиночитаемого вывода. Используйте --transport chrome,
--transport chrome-node или --transport twilio, чтобы предварительно проверить конкретный
транспорт до того, как агент попробует его использовать.
Для Twilio всегда предварительно проверяйте транспорт явно, когда транспорт по умолчанию —
Chrome:
voice-call, учетные данные Twilio или недоступную
экспозицию Webhook до того, как агент попытается набрать встречу.
Подключитесь к встрече:
google_meet:
google_meet для агента остается доступным на хостах не под macOS для
артефактов, календаря, настройки, транскрибирования, Twilio и потоков chrome-node. Локальные
действия обратной речи Chrome там заблокированы, поскольку встроенный аудиопуть Chrome
сейчас зависит от macOS BlackHole 2ch. В Linux используйте mode: "transcribe",
дозвон Twilio или хост macOS chrome-node для участия в Chrome с обратной речью.
Создайте новую встречу и подключитесь к ней:
SpaceConfig.accessType, когда хотите,
чтобы политика входа без запроса была задана явно, а не наследовалась из настроек учетной записи Google
по умолчанию:
OPEN позволяет любому с URL Meet подключиться без запроса. TRUSTED позволяет
доверенным пользователям организации хоста, приглашенным внешним пользователям и пользователям дозвона
подключаться без запроса. RESTRICTED ограничивает вход без запроса приглашенными. Эти
настройки применяются только к официальному пути создания через Google Meet API, поэтому учетные данные
OAuth должны быть настроены.
Если вы аутентифицировали Google Meet до появления этой опции, повторно выполните
openclaw googlemeet auth login --json после добавления области
meetings.space.settings на экран согласия Google OAuth.
Создайте только URL без подключения:
googlemeet create два пути:
- Создание через API: используется, когда настроены учетные данные Google Meet OAuth. Это наиболее детерминированный путь, и он не зависит от состояния UI браузера.
- Резервный путь браузера: используется, когда учетные данные 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.
"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 модели внутри VM macOS только для того, чтобы VM владела Chrome. Запустите Gateway и агента локально, затем запустите узловой хост в VM. Один раз включите встроенный плагин в VM, чтобы узел объявлял команду Chrome: Что где работает:- Хост Gateway: OpenClaw Gateway, рабочая область агента, ключи модели/API, провайдер реального времени и конфиг плагина Google Meet.
- VM Parallels macOS: OpenClaw CLI/узловой хост, Google Chrome, SoX, BlackHole 2ch и профиль Chrome, авторизованный в Google.
- Не требуется в VM: сервис Gateway, конфиг агента, ключ OpenAI/GPT или настройка провайдера модели.
BlackHole 2ch:
<gateway-host> — LAN IP и вы не используете TLS, узел отклоняет
незашифрованный WebSocket, пока вы явно не разрешите его для этой доверенной частной сети:
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 — это окружение процесса, а не настройка
openclaw.json. openclaw node install сохраняет ее в окружении LaunchAgent,
когда она присутствует в команде установки.
Одобрите узел с хоста Gateway:
googlemeet.chrome,
и возможность браузера/browser.proxy:
google_meet с transport: "chrome-node".
Для smoke-теста одной командой, который создает или повторно использует сессию, произносит известную
фразу и печатает состояние сессии:
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 могут маршрутизировать звук.
LGPL-2.0-only AND GPL-2.0-only; BlackHole — GPL-3.0. Если вы создаете
установщик или appliance, который включает BlackHole вместе с OpenClaw, проверьте
лицензионные условия BlackHole upstream или получите отдельную лицензию от Existential Audio.
Транспорты
Chrome
Транспорт Chrome открывает URL Meet через управление браузером OpenClaw и подключается как авторизованный браузерный профиль OpenClaw. В macOS Plugin проверяет наличиеBlackHole 2ch перед запуском. Если настроено, он также выполняет команду проверки
состояния аудиомоста и команду запуска перед открытием Chrome. Используйте chrome, когда
Chrome/аудио находятся на хосте Gateway; используйте chrome-node, когда Chrome/аудио находятся
на сопряженном узле, например macOS VM в Parallels. Для локального Chrome выберите
профиль через browser.defaultProfile; chrome.browserProfile передается хостам
chrome-node.
BlackHole 2ch не установлен, подключение завершается ошибкой настройки
вместо тихого подключения без аудиопути.
Twilio
Транспорт Twilio — строгий план набора, делегированный Plugin Voice Call. Он не анализирует страницы Meet для поиска телефонных номеров. Используйте его, когда участие через Chrome недоступно или нужен резервный телефонный дозвон. Google Meet должен предоставлять телефонный номер дозвона и PIN для встречи; OpenClaw не обнаруживает их на странице Meet. Включите Plugin Voice Call на хосте Gateway, а не на узле Chrome:openclaw.json:
realtime.provider: "openai" с Plugin провайдера OpenAI и
OPENAI_API_KEY, если это ваш провайдер голоса в реальном времени.
Перезапустите или перезагрузите Gateway после включения voice-call; изменения конфигурации Plugin
не появляются в уже запущенном процессе Gateway до его перезагрузки.
Затем проверьте:
googlemeet setup включает успешные проверки
twilio-voice-call-plugin, twilio-voice-call-credentials и
twilio-voice-call-webhook.
--dtmf-sequence, когда встрече нужна пользовательская последовательность:
OAuth и предварительная проверка
OAuth необязателен для создания ссылки Meet, потому чтоgooglemeet create может
вернуться к автоматизации браузера. Настройте OAuth, когда вам нужно официальное создание через API,
разрешение пространств или предварительные проверки Meet Media API.
Доступ к Google Meet API использует пользовательский OAuth: создайте OAuth-клиент Google Cloud,
запросите необходимые области доступа, авторизуйте аккаунт Google, затем сохраните
полученный токен обновления в конфигурации Plugin Google Meet или передайте
переменные окружения OPENCLAW_GOOGLE_MEET_*.
OAuth не заменяет путь подключения через Chrome. Транспорты Chrome и Chrome-node
по-прежнему подключаются через профиль Chrome с выполненным входом, BlackHole/SoX и подключенный
узел, когда вы используете участие через браузер. OAuth нужен только для официального пути
Google Meet API: создавать пространства встреч, разрешать пространства и выполнять предварительные проверки
Meet Media API.
Создайте учетные данные Google
В Google Cloud Console:- Создайте или выберите проект Google Cloud.
- Включите Google Meet REST API для этого проекта.
-
Настройте экран согласия OAuth.
- Internal проще всего для организации Google Workspace.
- External подходит для личных/тестовых установок; пока приложение находится в Testing, добавьте каждый аккаунт Google, который будет авторизовывать приложение, как тестового пользователя.
-
Добавьте области доступа, которые запрашивает 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.
-
Разрешенный URI перенаправления:
- Скопируйте client ID и client secret.
meetings.space.created требуется Google Meet spaces.create.
meetings.space.readonly позволяет OpenClaw разрешать URL/коды Meet в пространства.
meetings.space.settings позволяет OpenClaw передавать настройки SpaceConfig, такие как
accessType, при создании комнаты через API.
meetings.conference.media.readonly предназначен для предварительных проверок Meet Media API и работы
с медиа; Google может требовать регистрацию в Developer Preview для фактического использования Media API.
Если вам нужны только подключения Chrome через браузер, полностью пропустите OAuth.
Выпустите токен обновления
Настройтеoauth.clientId и, при необходимости, oauth.clientSecret, или передайте их как
переменные окружения, затем выполните:
oauth с токеном обновления. Она использует PKCE,
локальный обратный вызов на http://localhost:8085/oauth2callback и ручной
поток копирования/вставки с --manual.
Примеры:
oauth в конфигурации Plugin Google Meet:
openclaw googlemeet auth login --json, чтобы токен обновления
имел область доступа meetings.space.created.
Проверьте OAuth с помощью doctor
Запустите OAuth doctor, когда нужна быстрая проверка состояния без секретов:ok, configured,
tokenSource, expiresAt, и сообщения проверок; он не выводит токен доступа,
токен обновления или client secret.
Распространенные результаты:
| Проверка | Значение |
|---|---|
oauth-config | Присутствует oauth.clientId плюс oauth.refreshToken или кэшированный токен доступа. |
oauth-token | Кэшированный токен доступа всё ещё действителен, или токен обновления выпустил новый токен доступа. |
meet-spaces-get | Необязательная проверка --meeting разрешила существующее пространство Meet. |
meet-spaces-create | Необязательная проверка --create-space создала новое пространство Meet. |
spaces.create, запустите
проверку создания с побочным эффектом:
--create-space создаёт одноразовый URL Meet. Используйте его, когда нужно подтвердить,
что в проекте Google Cloud включён Meet API и что авторизованная
учётная запись имеет область доступа meetings.space.created.
Чтобы подтвердить доступ на чтение для существующего пространства встречи:
doctor --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
spaces/{id} через spaces.get:
--meeting команды artifacts и attendance по умолчанию используют последнюю запись конференции.
Передайте --all-conference-records, если нужны все сохранённые записи
для этой встречи.
Поиск в календаре может разрешить URL встречи из Google Calendar перед чтением
артефактов Meet:
--today ищет в сегодняшнем календаре primary событие Calendar со ссылкой
Google Meet. Используйте --event <query> для поиска по совпадающему тексту события и
--calendar <id> для неосновного календаря. Для поиска в календаре требуется свежий
вход OAuth, включающий область доступа только для чтения событий Calendar.
calendar-events показывает предварительный список совпадающих событий Meet и помечает событие, которое
выберут latest, artifacts, attendance или export.
Если вы уже знаете идентификатор записи конференции, укажите его напрямую:
spaces.endActiveConference Google Meet и требует OAuth с областью доступа
meetings.space.created для пространства, которым авторизованная учётная запись может управлять.
OpenClaw принимает 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 через Google Drive files.export; для этого требуется
свежий вход OAuth, включающий область доступа только для чтения Drive Meet. Без
--include-doc-bodies экспорт включает только метаданные Meet и структурированные записи расшифровки.
Если Google возвращает частичный сбой артефакта, например ошибку списка умных заметок,
записи расшифровки или тела документа Drive, сводка и
манифест сохраняют предупреждение вместо сбоя всего экспорта.
Используйте --dry-run, чтобы получить те же данные артефактов/посещаемости и вывести
JSON манифеста без создания папки или ZIP. Это полезно перед записью
большого экспорта или когда агенту нужны только счётчики, выбранные записи и
предупреждения.
Агенты также могут создать тот же пакет через инструмент google_meet:
"dryRun": true, чтобы вернуть только манифест экспорта и пропустить запись файлов.
Агенты также могут создать комнату на базе API с явной политикой доступа:
test_listen, прежде чем утверждать, что
встреча полезна:
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_.
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:
meeting uri, источник и сеанс присоединения. С учётными данными OAuth
она использует официальный Google Meet API. Без учётных данных OAuth она
использует вошедший в систему браузерный профиль закреплённого узла Chrome как резервный вариант. Агенты могут
использовать инструмент google_meet с action: "create", чтобы создать встречу и присоединиться за один
шаг. Для создания только URL передайте "join": false.
Пример JSON-вывода из резервного браузерного режима:
google_meet возвращает структурированные сведения вместо простой строки:
manualActionRequired: true, он должен сообщить
manualActionMessage плюс контекст браузерного узла/вкладки и прекратить открывать новые
вкладки Meet, пока оператор не выполнит браузерный шаг.
Пример JSON-вывода при создании через API:
manualActionRequired: true или ошибку
резервного варианта браузера и просит оператора завершить вход в Google перед
повторной попыткой.
Задавайте preview.enrollmentAcknowledged: true только после подтверждения, что ваш Cloud
project, OAuth principal и участники встречи зарегистрированы в Google
Workspace Developer Preview Program для Meet media APIs.
Конфигурация
Обычному пути агента Chrome нужны только включенный Plugin, BlackHole, SoX, ключ провайдера транскрипции в реальном времени и настроенный провайдер OpenClaw TTS. OpenAI является провайдером транскрипции по умолчанию; задайтеrealtime.voiceProvider как
"google" и realtime.model, чтобы использовать Google Gemini Live для режима bidi
без изменения провайдера транскрипции по умолчанию для режима агента:
plugins.entries.google-meet.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. Это половина стандартного буфера SoX размером 8192 байта, что снижает стандартную задержку канала и оставляет возможность увеличить его на загруженных хостах. Значения ниже минимума 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
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 он делегирует
фактический вызов PSTN, DTMF и вступительное приветствие Plugin Voice Call. Voice Call
воспроизводит последовательность DTMF перед открытием медиапотока в реальном времени, затем использует
сохраненный вступительный текст как начальное приветствие в реальном времени. Если voice-call не
включен, Google Meet все равно может проверить и записать план дозвона, но не может
разместить вызов Twilio.
Инструмент
Агенты могут использовать инструментgoogle_meet:
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: состояние микрофона Meet по мере возможностиmanualActionRequired/manualActionReason/manualActionMessage: профилю браузера нужен ручной вход, допуск хостом Meet, разрешения или восстановление управления браузером, прежде чем речь сможет работатьspeechReady/speechBlockedReason/speechBlockedMessage: разрешена ли управляемая речь Chrome сейчас.speechReady: falseозначает, что OpenClaw не отправил вступительную/тестовую фразу в аудиомост.providerConnected/realtimeReady: состояние голосового моста в реальном времениlastInputAt/lastOutputAt: последнее аудио, полученное из моста или отправленное в негоaudioOutputRouted/audioOutputDeviceLabel: был ли медиавывод вкладки Meet активно направлен на устройство BlackHole, используемое мостомlastSuppressedInputAt/suppressedInputBytes: ввод loopback, проигнорированный, пока активно воспроизведение ассистента
Режимы агента и bidi
Режим Chromeagent оптимизирован для поведения «мой агент находится на встрече». Провайдер
транскрипции в реальном времени слышит аудио встречи, финальные транскрипты участников
передаются настроенному агенту 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 голосовой модели реального времени.
Контрольный список live-теста
Используйте эту последовательность перед передачей встречи автономному агенту:googlemeet setupполностью зеленый.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 отдан до realtime TwiML, затем мост реального времени с поставленным в очередь начальным приветствием.googlemeet leave <sessionId>завершает делегированный голосовой звонок.
Устранение неполадок
Агент не видит инструмент Google Meet
Убедитесь, что Plugin включен в конфигурации Gateway, и перезагрузите Gateway: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
На хосте узла выполните:googlemeet.chrome плюс browser.proxy.
Конфигурация Gateway должна разрешать эти команды узла:
googlemeet setup не проходит chrome-node-connected или журнал Gateway сообщает
gateway token mismatch, переустановите или перезапустите узел с текущим токеном Gateway.
Для LAN Gateway это обычно означает:
Браузер открывается, но агент не может присоединиться
Запуститеgooglemeet test-listen для присоединений только для наблюдения или googlemeet test-speech
для присоединений реального времени, затем изучите возвращенное состояние Chrome. Если любая из проверок
сообщает manualActionRequired: true, покажите manualActionMessage оператору
и прекратите повторять попытки, пока действие в браузере не будет завершено.
Распространенные ручные действия:
- Войти в профиль Chrome.
- Допустить гостя из аккаунта хоста Meet.
- Предоставить Chrome разрешения на микрофон/камеру, когда появится нативный запрос разрешений Chrome.
- Закрыть или исправить зависший диалог разрешений Meet.
Не удается создать встречу
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 или, для
резервного создания только через браузер, Continue without microphone через автоматизацию
браузера и продолжить ждать сгенерированный URL Meet. Если он не может этого сделать, ошибка
должна упоминать
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 могут быть отключены, никто
не говорил после установки наблюдателя, UI Meet изменился, либо live
субтитры недоступны для языка/аккаунта встречи.
googlemeet test-speech всегда проверяет путь реального времени и сообщает, были ли
байты вывода моста замечены для этого вызова. Если speechOutputVerified равно false и
speechOutputTimedOut равно true, realtime-провайдер мог принять
высказывание, но OpenClaw не увидел, чтобы новые байты вывода дошли до аудиомоста
Chrome.
Также проверьте:
- Ключ realtime-провайдера доступен на хосте Gateway, например
OPENAI_API_KEYилиGEMINI_API_KEY. BlackHole 2chвидим на хосте Chrome.soxсуществует на хосте Chrome.- Микрофон и динамик Meet маршрутизируются через виртуальный аудиопуть, используемый
OpenClaw.
doctorдолжен показыватьmeet output routed: yesдля локальных присоединений Chrome в реальном времени.
googlemeet doctor [session-id] печатает сеанс, узел, состояние в звонке,
причину ручного действия, подключение realtime-провайдера, realtimeReady, активность
аудиовхода/выхода, последние временные метки аудио, счетчики байтов и URL браузера.
Используйте googlemeet status [session-id] --json, когда нужен сырой JSON. Используйте
googlemeet doctor --oauth, когда нужно проверить обновление OAuth Google Meet
без раскрытия токенов; добавьте --meeting или --create-space, когда также нужно
доказательство Google Meet API.
Если агент истек по тайм-ауту и вы видите уже открытую вкладку Meet, проверьте эту вкладку
без открытия новой:
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 не проходит, когда в бэкенде Twilio отсутствуют account
SID, auth token или номер вызывающего абонента. Задайте их на хосте Gateway:
twilio-voice-call-webhook не проходит, когда у voice-call нет публичной экспозиции Webhook
или когда publicUrl указывает на loopback или пространство частной сети.
Задайте plugins.entries.voice-call.config.publicUrl на публичный URL провайдера или
настройте туннель/Tailscale-экспозицию voice-call.
Loopback и частные URL недопустимы для callback-ов операторов связи. Не используйте
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:
voicecall smoke по умолчанию только проверяет готовность. Чтобы выполнить пробный запуск для конкретного номера:
--yes только если намеренно хотите совершить живой исходящий
уведомительный звонок:
Вызов Twilio начинается, но не попадает на встречу
Убедитесь, что событие Meet содержит сведения для телефонного подключения. Передайте точный номер для дозвона и PIN или пользовательскую DTMF-последовательность: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 сохраняет и отдает TwiML DTMF перед подключением, Voice Call отдает realtime 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 или настроенного туннеля.
См. устранение неполадок голосовых вызовов.
Примечания
Официальный media API Google Meet ориентирован на прием, поэтому для речи в вызове Meet по-прежнему нужен путь участника. Этот Plugin оставляет эту границу видимой: Chrome обрабатывает участие через браузер и локальную маршрутизацию аудио; Twilio обрабатывает участие через телефонный дозвон. Для режимов обратной речи 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: внешняя команда моста владеет всем локальным аудиопутем и должна завершиться после запуска или проверки своего демона. Это допустимо только дляbidi, потому что режимуagentнужен прямой доступ к паре команд для TTS.
google_meet в режиме agent, сессия консультанта встречи
создает ответвление текущей расшифровки вызывающего перед ответом на речь участника.
Сессия Meet при этом остается отдельной (agent:<agentId>:subagent:google-meet:<sessionId>),
поэтому последующие действия встречи не изменяют напрямую расшифровку вызывающего.
Для чистого дуплексного аудио маршрутизируйте вывод Meet и микрофон Meet через отдельные
виртуальные устройства или граф виртуального устройства в стиле Loopback. Одно общее
устройство BlackHole может возвращать эхо других участников обратно в вызов.
С мостом Chrome на паре команд chrome.bargeInInputCommand может слушать
отдельный локальный микрофон и очищать воспроизведение ассистента, когда человек начинает
говорить. Это сохраняет приоритет человеческой речи над выводом ассистента, даже когда общий
loopback-вход BlackHole временно подавлен во время воспроизведения ассистента.
Как и chrome.audioInputCommand и chrome.audioOutputCommand, это
локальная команда, настроенная оператором. Используйте явный доверенный путь к команде или
список аргументов и не указывайте на скрипты из недоверенных расположений.
googlemeet speak запускает активный аудиомост обратной речи для сессии Chrome.
googlemeet leave останавливает этот мост. Для сессий Twilio, делегированных
через Plugin Voice Call, leave также завершает базовый голосовой вызов.
Используйте googlemeet end-active-conference, когда также нужно закрыть активную
конференцию Google Meet для пространства, управляемого API.