Skip to main content
El plugin google-meet se une a URL explícitas de Meet en nombre de un agente de OpenClaw. Su alcance es deliberadamente limitado:
  • Solo se une a URL de https://meet.google.com/...; nunca llama a una reunión mediante un número de teléfono que haya detectado por sí mismo.
  • googlemeet create puede generar una nueva URL de Meet mediante la API de Google Meet (o una alternativa basada en el navegador) y unirse a ella de forma predeterminada.
  • La participación mediante Chrome utiliza un perfil de Chrome con una sesión iniciada, opcionalmente en un Node emparejado. La participación mediante Twilio llama a un número de teléfono más un PIN/DTMF a través del plugin de llamadas de voz; no puede llamar directamente a una URL de Meet.
  • mode: "agent" (predeterminado) transcribe la voz de los participantes con un proveedor en tiempo real, la envía al agente de OpenClaw configurado y reproduce la respuesta mediante el TTS habitual de OpenClaw. mode: "bidi" permite que un modelo de voz en tiempo real responda directamente. mode: "transcribe" se une solo como observador, sin responder por voz.
  • No se emite ningún anuncio automático de consentimiento cuando el plugin se une a una llamada.
  • El comando de la CLI es googlemeet; meet está reservado para flujos de trabajo más amplios de teleconferencia de agentes.

Inicio rápido

Instale el plugin y las dependencias de audio locales y, a continuación, configure una clave de proveedor en tiempo real. OpenAI es el proveedor de transcripción predeterminado para el modo agent; Google Gemini Live está disponible como proveedor de voz del modo bidi:
blackhole-2ch instala el dispositivo de audio virtual BlackHole 2ch a través del cual Chrome enruta el audio. El instalador de Homebrew requiere reiniciar antes de que macOS exponga el dispositivo:
Después de reiniciar, verifique ambos componentes:
El plugin queda habilitado de forma predeterminada después de instalarlo. Añada una entrada solo para personalizarlo:
Ejecute openclaw plugins disable google-meet si no desea que el plugin esté activo. Compruebe la configuración y, a continuación, únase:
La salida de setup es legible por el agente y tiene en cuenta el modo y el transporte: informa sobre el perfil de Chrome, la fijación del Node y, para las conexiones de Chrome en tiempo real, el puente de audio BlackHole/SoX y la comprobación de la introducción retrasada. Las conexiones solo como observador omiten los requisitos previos de tiempo real:
Cuando se configura la delegación de Twilio, setup también informa de si voice-call, las credenciales de Twilio y la exposición pública del Webhook están listos. Considere cualquier comprobación ok: false como un bloqueo para ese transporte o modo antes de que se una un agente. Use --json para obtener una salida legible por máquina y --transport chrome|chrome-node|twilio para comprobar previamente un transporte específico:
También puede permitir que un agente se una mediante la herramienta google_meet:
En hosts de Gateway que no utilizan macOS, google_meet permanece visible para las acciones de artefactos, calendario, configuración, transcripción, Twilio y chrome-node, pero la respuesta por voz mediante Chrome local (transport: "chrome" con mode: "agent" o "bidi") se bloquea antes de llegar al puente de audio, ya que esa ruta depende actualmente de BlackHole 2ch de macOS. En su lugar, use mode: "transcribe", la conexión telefónica de Twilio o un host chrome-node con macOS.

Crear una reunión

create dispone de dos rutas, indicadas en el campo source del resultado:
  • api: se utiliza cuando están configuradas las credenciales de OAuth de Google Meet. Es determinista y no depende del estado de la interfaz del navegador.
  • browser: se utiliza sin credenciales de OAuth. OpenClaw abre https://meet.google.com/new en el Node de Chrome fijado y espera a que Google redirija a una URL con un código de reunión real; el perfil de Chrome de OpenClaw en ese Node ya debe tener iniciada una sesión de Google. Tanto la unión como la creación reutilizan una pestaña de Meet existente (o una pestaña de .../new o de solicitud de cuenta de Google en curso) antes de abrir una nueva; la coincidencia de pestañas ignora cadenas de consulta inofensivas como authuser.
create se une de forma predeterminada y devuelve joined: true junto con la sesión de unión. Pase --no-join (CLI) o "join": false (herramienta) para generar únicamente la URL. Para las salas creadas mediante la API, establezca una política de acceso explícita en lugar de heredar la predeterminada de la cuenta de Google:
Esto solo se aplica a las salas creadas mediante la API, por lo que OAuth debe estar configurado. Si se autenticó antes de que existiera esta opción, vuelva a ejecutar openclaw googlemeet auth login --json después de añadir el ámbito meetings.space.settings a la pantalla de consentimiento de OAuth. Si la alternativa basada en el navegador encuentra un bloqueo de inicio de sesión de Google o de permisos de Meet, la herramienta devuelve manualActionRequired: true con manualActionReason, manualActionMessage y los valores browser.nodeId/browser.targetId/browserUrl. Informe de ese mensaje y deje de abrir nuevas pestañas de Meet hasta que el operador complete el paso en el navegador.

Unión solo como observador

Establezca "mode": "transcribe" para omitir el puente dúplex en tiempo real (sin necesidad de BlackHole/SoX y sin respuesta por voz). Las conexiones de Chrome en modo de transcripción también omiten la concesión de permisos de micrófono y cámara de OpenClaw y la ruta Use microphone de Meet; si Meet muestra la pantalla intermedia de elección de audio, la automatización prueba primero Continue without microphone. Los transportes de Chrome administrados instalan, en la medida de lo posible, un observador de subtítulos de Meet en todos los modos para que haya notas duraderas disponibles sin modificar la ruta de consulta del agente en vivo. googlemeet status --json y googlemeet doctor informan de captioning, captionsEnabledAttempted, transcriptLines, lastCaptionAt, lastCaptionSpeaker, lastCaptionText y una cola recentTranscript. Para consultar la transcripción acotada de la sesión, lea la pestaña exacta de Meet de la que se realiza el seguimiento:
El observador conserva como máximo 2,000 líneas de subtítulos completadas en la página de Meet. El texto progresivo visible permanece en la cola de estado hasta que se completa la fila de subtítulos, de modo que guardar nextIndex no puede omitir una ampliación posterior del texto; al salir, se finalizan las filas visibles antes de generar la instantánea. droppedLines informa de las líneas perdidas al principio cuando se supera el límite. La cola acotada googlemeet transcript sigue conservando únicamente las cuatro sesiones finalizadas más recientemente y se restablece con el Gateway. Por separado, OpenClaw añade las filas de subtítulos completadas a la base de datos de estado compartida durante toda la reunión y escribe un resumen derivado al salir. Use openclaw transcripts para consultar o exportar esas notas duraderas. Las notas automáticas están habilitadas de forma predeterminada. Establezca transcripts.enabled: false para deshabilitar globalmente las notas duraderas; el modo explícito transcribe sigue mostrando únicamente su cola en vivo acotada. Las conexiones de Twilio no disponen del flujo de subtítulos del navegador y esta ruta no las captura. Para realizar una prueba de escucha con respuesta sí/no:
Se une en modo de transcripción, espera a que haya actividad nueva en los subtítulos o la transcripción y devuelve listenVerified, listenTimedOut, campos de acción manual y el estado actual de los subtítulos.

Estado de la sesión en tiempo real

Durante las sesiones con respuesta por voz, el estado de google_meet informa del estado de Chrome y del puente de audio: inCall, manualActionRequired, providerConnected, realtimeReady, audioInputActive, audioOutputActive, marcas de tiempo de la última entrada y salida, contadores de bytes y estado de cierre del puente. Las sesiones administradas de Chrome solo reproducen la frase de introducción o prueba después de que el estado indique inCall: true; de lo contrario, speechReady: false y el intento de reproducción de voz se bloquea en lugar de no hacer nada silenciosamente. Las conexiones de Chrome locales se realizan mediante el perfil del navegador de OpenClaw con la sesión iniciada y necesitan BlackHole 2ch para la ruta del micrófono y el altavoz. Un solo dispositivo BlackHole basta para una primera prueba básica, pero puede producir eco; use dispositivos virtuales independientes o un grafo similar a Loopback para obtener audio dúplex limpio.

Gateway local + Chrome en Parallels

No se necesita un Gateway completo ni una clave de API de modelo dentro de una máquina virtual de macOS solo para proporcionarle Chrome. Ejecute el Gateway y el agente localmente; ejecute un host de Node en la máquina virtual. Instale las dependencias de la máquina virtual, reinicie y verifique:
Instale el plugin en la máquina virtual, donde queda habilitado de forma predeterminada, e inicie el host de Node:
Si <gateway-host> es una IP de LAN sin TLS, habilite explícitamente esa red privada de confianza:
Use la misma opción al instalarlo como LaunchAgent (es una variable de entorno del proceso, almacenada en el entorno de LaunchAgent cuando está presente en el comando de instalación, no una configuración de openclaw.json):
Apruebe el Node desde el host del Gateway y, a continuación, confirme que anuncia tanto googlemeet.chrome como la capacidad del navegador/browser.proxy:
Enrute Meet a través de ese Node:
Ahora, únase de la forma habitual desde el host del Gateway:
Para realizar una prueba básica con un solo comando que crea o reutiliza una sesión, reproduce una frase conocida y muestra el estado de la sesión:
Durante la incorporación en tiempo real, la automatización del navegador rellena el nombre del invitado, hace clic en Join/Ask to join y acepta el aviso inicial “Use microphone” de Meet cuando aparece (o “Continue without microphone” durante la incorporación de solo observación y la creación de reuniones solo mediante navegador). Si se ha cerrado la sesión del perfil, Meet está esperando la admisión del anfitrión, Chrome necesita permiso para el micrófono o la cámara, o Meet está bloqueado en un aviso sin resolver, el resultado informa de manualActionRequired: true con manualActionReason y manualActionMessage. Deje de reintentarlo, informe de ese mensaje junto con browserUrl/browserTitle y vuelva a intentarlo solo después de completar la acción manual. Si se omite chromeNode.node, OpenClaw realiza la selección automática únicamente cuando exactamente un nodo conectado anuncia tanto googlemeet.chrome como el control del navegador; fije chromeNode.node (id. del nodo, nombre para mostrar o IP remota) cuando haya varios nodos aptos conectados.

Comprobaciones de errores comunes

Notas de instalación

La configuración predeterminada de respuesta mediante Chrome utiliza dos herramientas externas que OpenClaw no incluye ni redistribuye; instálelas como dependencias del host mediante Homebrew:
  • sox: utilidad de audio para la línea de comandos. El Plugin emite comandos explícitos de dispositivos CoreAudio para el puente de audio PCM16 predeterminado de 24 kHz.
  • blackhole-2ch: controlador de audio virtual para macOS que proporciona el dispositivo BlackHole 2ch mediante el que se enrutan Chrome/Meet.
SoX tiene licencia LGPL-2.0-only AND GPL-2.0-only; BlackHole tiene licencia GPL-3.0. Si se crea un instalador o dispositivo que incluya BlackHole con OpenClaw, revise la licencia original de BlackHole u obtenga una licencia independiente de Existential Audio.

Transportes

Chrome

Abre la URL de Meet mediante el control del navegador de OpenClaw y se incorpora con el perfil del navegador de OpenClaw que tiene la sesión iniciada. En macOS, el Plugin comprueba BlackHole 2ch antes del inicio y, si está configurado, ejecuta un comando de estado/inicio del puente de audio antes de abrir Chrome. Para Chrome local, seleccione el perfil con browser.defaultProfile; en su lugar, chrome.browserProfile se pasa a los hosts chrome-node.
El audio del micrófono y el altavoz de Chrome se enruta mediante el puente de audio local de OpenClaw. Si BlackHole 2ch no está instalado, la incorporación falla con un error de configuración en lugar de incorporarse sin una ruta de audio.

Twilio

Un plan de marcación estricto delegado al Plugin Voice Call. No analiza las páginas de Meet para encontrar números de teléfono; Google Meet debe proporcionar un número de acceso telefónico y un PIN para la reunión. Habilite Voice Call en el host del Gateway, no en el nodo de Chrome:
Proporcione las credenciales de Twilio mediante el entorno para mantener los secretos fuera de openclaw.json:
Use en su lugar realtime.provider: "openai" con OPENAI_API_KEY si OpenAI es el proveedor de voz en tiempo real. Reinicie o vuelva a cargar el Gateway después de habilitar voice-call; los cambios de configuración del Plugin no se aplican hasta que se vuelve a cargar. Verifique:
Cuando la delegación de Twilio está conectada, googlemeet setup incluye las comprobaciones twilio-voice-call-plugin, twilio-voice-call-credentials y twilio-voice-call-webhook.
Use --dtmf-sequence para una secuencia personalizada, con w iniciales o comas para introducir una pausa antes del PIN:

OAuth y comprobación previa

OAuth es opcional para crear un enlace de Meet, porque googlemeet create puede recurrir a la automatización del navegador. Configure OAuth para la creación mediante la API oficial, la resolución de espacios o la comprobación previa de Meet Media API. Las incorporaciones mediante Chrome/Chrome-node nunca dependen de OAuth; utilizan un perfil de Chrome con la sesión iniciada, BlackHole/SoX y, para chrome-node, un nodo conectado en cualquier caso.

Crear credenciales de Google

En Google Cloud Console:
1

Crear o seleccionar un proyecto

2

Habilitar la API REST de Google Meet

3

Configurar la pantalla de consentimiento de OAuth

Internal es la opción más sencilla para una organización de Google Workspace. External funciona para configuraciones personales o de prueba; mientras la aplicación esté en Testing, añada como usuario de prueba cada cuenta de Google que vaya a autorizarla.
4

Añadir los ámbitos solicitados

  • 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 (consulta de Calendar)
  • https://www.googleapis.com/auth/drive.meet.readonly (exportación del cuerpo del documento de transcripción/notas inteligentes)
5

Crear un ID de cliente de OAuth

Tipo de aplicación Web application. URI de redirección autorizado:
6

Copiar el ID y el secreto del cliente

meetings.space.created es obligatorio para spaces.create. meetings.space.readonly resuelve las URL o los códigos de Meet en espacios. meetings.space.settings permite que OpenClaw pase ajustes de SpaceConfig, como accessType, durante la creación de salas mediante la API. meetings.conference.media.readonly se utiliza para la comprobación previa y el trabajo multimedia de Meet Media API; Google puede exigir la inscripción en Developer Preview para utilizar realmente Media API. calendar.events.readonly solo es necesario para la consulta de Calendar --today/--event. drive.meet.readonly solo es necesario para la exportación --include-doc-bodies. Si únicamente se necesitan incorporaciones mediante Chrome basadas en el navegador, omita OAuth por completo.

Generar el token de actualización

Configure oauth.clientId y, opcionalmente, oauth.clientSecret (o páselos como variables de entorno) y, a continuación, ejecute:
Esto ejecuta un flujo PKCE con una devolución de llamada de localhost en http://localhost:8085/oauth2callback e imprime un bloque de configuración oauth con un token de actualización. Añada --manual para usar un flujo de copiar y pegar cuando el navegador no pueda acceder a la devolución de llamada local:
Salida JSON:
Almacene el objeto oauth en la configuración del Plugin:
Utilice preferentemente variables de entorno si no desea guardar el token de actualización en la configuración; primero se resuelve la configuración y, después, se usa el entorno como alternativa. Si la autenticación se realizó antes de que existiera la compatibilidad con la creación de reuniones, la consulta de Calendar o la exportación del cuerpo de los documentos, vuelva a ejecutar openclaw googlemeet auth login --json para que el token de actualización abarque el conjunto actual de ámbitos.

Verificar OAuth con doctor

Esto comprueba que exista la configuración de OAuth y que el token de actualización pueda generar un token de acceso, sin cargar el entorno de ejecución de Chrome ni requerir un nodo conectado. El informe incluye únicamente campos de estado (ok, configured, tokenSource, expiresAt, mensajes de comprobación) y nunca muestra el token de acceso, el token de actualización ni el secreto del cliente. Para demostrar que la API de Meet está habilitada y que se dispone del ámbito spaces.create, utilice la comprobación de creación con efectos secundarios:
Para demostrar el acceso de lectura a un espacio existente:
Un 403 en estas comprobaciones suele significar que la API REST de Meet está deshabilitada, que al token de actualización le falta el ámbito requerido o que la cuenta de Google no puede acceder a ese espacio. Un error del token de actualización significa que se debe volver a ejecutar openclaw googlemeet auth login --json y almacenar el nuevo bloque oauth. No se necesita OAuth para el mecanismo alternativo del navegador; en este caso, la autenticación de Google procede del perfil de Chrome con la sesión iniciada en el nodo seleccionado, no de la configuración de OpenClaw. Se aceptan estas variables de entorno como alternativas:
  • OPENCLAW_GOOGLE_MEET_CLIENT_ID o GOOGLE_MEET_CLIENT_ID
  • OPENCLAW_GOOGLE_MEET_CLIENT_SECRET o GOOGLE_MEET_CLIENT_SECRET
  • OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN o GOOGLE_MEET_REFRESH_TOKEN
  • OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN o GOOGLE_MEET_ACCESS_TOKEN
  • OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT o GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT
  • OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING o GOOGLE_MEET_DEFAULT_MEETING
  • OPENCLAW_GOOGLE_MEET_PREVIEW_ACK o GOOGLE_MEET_PREVIEW_ACK

Resolver, realizar la comprobación previa y leer artefactos

Después de que Meet haya creado registros de conferencia:
Con --meeting, artifacts y attendance, se utiliza de forma predeterminada el registro de conferencia más reciente; pase --all-conference-records para incluir todos los registros conservados. La búsqueda en Calendar resuelve la URL de la reunión desde Google Calendar antes de leer los artefactos (requiere un token de actualización que incluya el ámbito de solo lectura de eventos de Calendar):
--today busca en el calendario primary de hoy un evento con un enlace de Meet; --event <query> busca texto coincidente en los eventos; --calendar <id> especifica un calendario no principal. calendar-events muestra una vista previa de los eventos coincidentes e indica cuál elegirán latest/artifacts/attendance/export. Si ya se conoce el identificador del registro de conferencia, se puede especificar directamente:
Para cerrar la sala de un espacio creado mediante la API:
Llama a spaces.endActiveConference y requiere OAuth con el ámbito meetings.space.created para un espacio que la cuenta autorizada pueda administrar. Acepta una URL de Meet, un código de reunión o spaces/{id}, y primero lo resuelve como el recurso de espacio de la API. Esto es independiente de googlemeet leave: leave detiene la participación local o de sesión de OpenClaw; end-active-conference solicita a Google Meet que finalice la conferencia activa del espacio. Para escribir un informe legible:
artifacts devuelve los metadatos del registro de conferencia, además de los metadatos de los recursos de participantes, grabaciones, transcripciones, entradas de transcripción estructuradas y notas inteligentes cuando Google los proporciona. --no-transcript-entries omite la búsqueda de entradas para reuniones grandes. attendance expande los participantes en filas de sesiones de participante con las horas de primera y última aparición, la duración total de la sesión, indicadores de llegada tardía y salida anticipada, y combina los recursos de participantes duplicados por usuario con la sesión iniciada o nombre para mostrar; --no-merge-duplicates mantiene separados los recursos sin procesar, y --late-after-minutes/--early-before-minutes ajustan los umbrales. export escribe una carpeta con summary.md, attendance.csv, transcript.md, artifacts.json, attendance.json y manifest.json. manifest.json registra la entrada elegida, las opciones de exportación, los registros de conferencia, los archivos de salida, los recuentos, el origen del token, cualquier evento de Calendar utilizado y las advertencias de recuperación parcial. --zip también escribe un archivo comprimido portátil junto a la carpeta. --include-doc-bodies exporta mediante Drive files.export el texto de los documentos de Google vinculados de transcripciones y notas inteligentes (requiere el ámbito de solo lectura de Meet de Drive); sin este, las exportaciones solo incluyen los metadatos de Meet y las entradas de transcripción estructuradas. Un fallo parcial de un artefacto (error al enumerar notas inteligentes, obtener entradas de transcripción o recuperar el cuerpo de un documento) conserva la advertencia en el resumen o manifiesto en lugar de hacer fallar toda la exportación. --dry-run obtiene los mismos datos y muestra el JSON del manifiesto sin crear la carpeta ni el archivo ZIP. Los agentes utilizan las mismas acciones mediante la herramienta google_meet (export, create con accessType, end_active_conference, test_listen); consulte Herramienta.

Prueba rápida en vivo

La prueba rápida básica de artefactos y asistencia necesita meetings.space.readonly y meetings.conference.media.readonly. La búsqueda en Calendar necesita calendar.events.readonly. La exportación del cuerpo de documentos de Drive necesita drive.meet.readonly.

Ejemplos de creación

Muestra el URI de la nueva reunión, el origen y la sesión de incorporación. Con OAuth utiliza la API de Meet; sin OAuth, utiliza el perfil con la sesión iniciada del nodo de Chrome fijado. JSON del mecanismo alternativo del navegador:
Si el mecanismo alternativo del navegador encuentra primero el inicio de sesión de Google o un bloqueo de permisos de Meet, google_meet devuelve detalles estructurados en lugar de una cadena de texto simple:
JSON de creación mediante la API:
Al crear, se incorpora de forma predeterminada, pero Chrome/Chrome-node sigue necesitando un perfil de Google con la sesión iniciada para incorporarse mediante el navegador; si la sesión está cerrada, OpenClaw informa de manualActionRequired: true o de un error del mecanismo alternativo del navegador y solicita al operador que complete el inicio de sesión de Google antes de volver a intentarlo. Establezca preview.enrollmentAcknowledged: true únicamente después de confirmar que el proyecto de Cloud, la entidad principal de OAuth y los participantes de la reunión están inscritos en el Google Workspace Developer Preview Program para las API multimedia de Meet.

Configuración

La ruta común del agente de Chrome solo necesita que el plugin esté habilitado, BlackHole, SoX, una clave de proveedor en tiempo real y un proveedor de TTS de OpenClaw configurado:

Valores predeterminados

chrome.audioBridgeCommand y chrome.audioBridgeHealthCommand permiten que un puente externo controle toda la ruta de audio local en lugar de chrome.audioInputCommand/chrome.audioOutputCommand; consulte Notas para conocer la restricción sobre qué modo puede utilizarlos. Existe una migración openclaw doctor --fix para la estructura heredada realtime.provider: "google": traslada esa intención a realtime.voiceProvider: "google" junto con realtime.transcriptionProvider: "openai" cuando esos campos aún no están definidos.

Anulaciones opcionales

ElevenLabs para la escucha y el habla en modo de agente:
La voz persistente de Meet procede de tts.providers.elevenlabs.speakerVoiceId. Las respuestas del agente también pueden utilizar directivas [[tts:speakerVoiceId=... model=eleven_v3]] por respuesta cuando están habilitadas las anulaciones del modelo TTS, pero la configuración es el valor predeterminado determinista para las reuniones. Al unirse, los registros muestran transcriptionProvider=elevenlabs, y cada respuesta oral registra provider=elevenlabs model=eleven_v3 speakerVoiceId=<voiceId>. Configuración exclusiva para Twilio:
Con voiceCall.enabled: true (el valor predeterminado) y el transporte de Twilio, Voice Call envía la secuencia DTMF antes de abrir el flujo multimedia en tiempo real y, a continuación, utiliza el texto de introducción guardado como saludo inicial en tiempo real. Si voice-call no está habilitado, Google Meet aún puede validar y registrar el plan de marcación, pero no puede realizar la llamada de Twilio. Deje voiceCall.gatewayUrl sin configurar para usar el runtime local de confianza del Gateway, que conserva el agente que realiza la invocación durante toda la llamada. Una URL del Gateway configurada sigue siendo un destino WebSocket explícito y no puede autenticar la procedencia del plugin; las incorporaciones de agentes no predeterminados fallan de forma segura en lugar de usar silenciosamente otro agente. Ejecute Google Meet y Voice Call en el mismo proceso del Gateway cuando se requiera enrutamiento por agente.

Herramienta

Los agentes usan la herramienta google_meet:
test_speech siempre fuerza mode: "agent" o "bidi" y falla si se le solicita ejecutarse en mode: "transcribe", porque las sesiones solo de observación no pueden emitir voz. speechOutputVerified requiere tanto bytes nuevos de salida en tiempo real como audio nuevo no silencioso que regrese por la ruta de captura del micrófono del puente durante esa salida. La salida anterior o la señal de bucle invertido de una sesión reutilizada no cuentan, y el crecimiento de los bytes del sumidero por sí solo ya no indica voz verificada. Para los transportes de Chrome, leave mantiene abierta una pestaña reutilizada propiedad del usuario después de hacer clic en el botón Leave call de Meet. Las pestañas abiertas por OpenClaw se cierran después de salir. Use transport: "chrome" cuando Chrome se ejecute en el host del Gateway y transport: "chrome-node" cuando se ejecute en un Node emparejado. En ambos casos, los proveedores de modelos y openclaw_agent_consult se ejecutan en el host del Gateway, por lo que las credenciales del modelo permanecen allí. Los registros del modo agente incluyen el proveedor y el modelo de transcripción resueltos al iniciar el puente, y el proveedor, modelo, voz, formato de salida y frecuencia de muestreo de TTS después de cada respuesta sintetizada. El valor sin procesar mode: "realtime" todavía se acepta como alias de compatibilidad heredado de mode: "agent", pero ya no se anuncia en la enumeración mode de la herramienta. create con una sala respaldada por API y una política de acceso explícita:
Finalización de la conferencia activa de una sala conocida:
Validación centrada primero en la escucha antes de afirmar que una reunión es útil:
Hablar bajo demanda:
status incluye el estado de Chrome cuando está disponible:

Modos agente y bidireccional

Modo agent: el proveedor de transcripción en tiempo real escucha el audio de la reunión, las transcripciones finales de los participantes se enrutan mediante el agente de OpenClaw configurado y la respuesta se reproduce mediante el TTS habitual de OpenClaw. Los fragmentos cercanos de la transcripción final se agrupan antes de la consulta para que un turno hablado no produzca varias respuestas parciales obsoletas; la entrada en tiempo real se suprime mientras el audio en cola del asistente sigue reproduciéndose, y los ecos recientes de transcripciones similares a las del asistente se ignoran antes de la consulta para que el bucle invertido de BlackHole no haga que el agente responda a su propia voz. Modo bidi: el modelo de voz en tiempo real responde directamente y puede llamar a openclaw_agent_consult para realizar un razonamiento más profundo, obtener información actual o usar las herramientas normales de OpenClaw. La herramienta de consulta ejecuta en segundo plano el agente normal de OpenClaw con el contexto reciente de la transcripción de la reunión y devuelve una respuesta oral concisa; en el modo agent, OpenClaw envía esa respuesta directamente a TTS, mientras que en el modo bidi el modelo de voz en tiempo real puede reproducirla. Usa el mismo mecanismo compartido de consulta que Voice Call. De forma predeterminada, las consultas se ejecutan con el agente main; establezca realtime.agentId para dirigir una vía de Meet a un espacio de trabajo de agente dedicado, valores predeterminados del modelo, política de herramientas, memoria e historial de sesiones. Las consultas del modo agente usan una clave de sesión agent:<id>:subagent:google-meet:<session> por reunión, de modo que las preguntas de seguimiento conservan el contexto de la reunión mientras heredan la política normal del agente. Cuando un agente llama a google_meet en modo agente, la sesión del consultor bifurca la transcripción actual del agente que realiza la llamada antes de responder a la voz del participante; la sesión de Meet permanece separada para que los seguimientos de la reunión no modifiquen directamente la transcripción del agente que realiza la llamada. realtime.toolPolicy controla la ejecución de la consulta: La clave de sesión de consulta tiene un ámbito por sesión de Meet, por lo que las llamadas de consulta de seguimiento reutilizan el contexto de consultas anterior durante la misma reunión. Fuerce una comprobación oral de disponibilidad después de que Chrome se haya unido por completo:
Prueba de humo completa de unión y voz:

Lista de comprobación para pruebas en directo

Antes de dejar una reunión a cargo de un agente sin supervisión:
Estado esperado de Chrome-node:
  • googlemeet setup está completamente en verde e incluye chrome-node-connected cuando Chrome-node es el transporte predeterminado o hay un nodo fijado.
  • nodes status muestra el nodo seleccionado conectado, anunciando tanto googlemeet.chrome como browser.proxy.
  • La pestaña de Meet se une y test-speech devuelve el estado de Chrome con inCall: true.
Para un host de Chrome remoto, como una máquina virtual macOS de Parallels, la comprobación segura más breve después de actualizar el Gateway o la máquina virtual es:
Esto demuestra que el plugin del Gateway está cargado, que el Node de la máquina virtual está conectado con el token actual y que el puente de audio de Meet está disponible antes de que un agente abra una pestaña de reunión real. Para una prueba rápida de Twilio, utilice una reunión que proporcione datos de acceso telefónico:
Estado esperado de Twilio:
  • googlemeet setup incluye comprobaciones en verde de twilio-voice-call-plugin, twilio-voice-call-credentials y twilio-voice-call-webhook.
  • voicecall está disponible en la CLI después de recargar el Gateway.
  • La sesión devuelta tiene transport: "twilio" y un twilio.voiceCallId.
  • openclaw logs --follow muestra que se proporcionó el TwiML de DTMF antes del TwiML en tiempo real y, después, un puente en tiempo real con el saludo inicial en cola.
  • googlemeet leave <sessionId> finaliza la llamada de voz delegada.

Solución de problemas

El agente no puede ver la herramienta de Google Meet

Confirme que el plugin esté habilitado y vuelva a cargar el Gateway; el agente en ejecución solo ve las herramientas de plugins registradas por el proceso actual del Gateway:
En hosts del Gateway que no sean macOS, google_meet permanece visible, pero las acciones locales de respuesta de Chrome se bloquean antes de llegar al puente de audio. Utilice mode: "transcribe", el acceso telefónico de Twilio o un host chrome-node de macOS en lugar de la ruta predeterminada del agente de Chrome local.

No hay ningún Node conectado compatible con Google Meet

En el host del Node:
En el host del Gateway:
El Node debe estar conectado y enumerar googlemeet.chrome además de browser.proxy; la configuración del Gateway debe permitir ambos:
Si googlemeet setup no supera chrome-node-connected o el registro del Gateway informa de gateway token mismatch, reinstale o reinicie el Node con el token actual del Gateway:
Después, vuelva a cargar el servicio del Node y ejecute de nuevo:

El navegador se abre, pero el agente no puede unirse

Ejecute googlemeet test-listen para incorporaciones de solo observación o googlemeet test-speech para incorporaciones en tiempo real y, después, inspeccione el estado de Chrome devuelto. Si cualquiera de ellos informa de manualActionRequired: true, muestre manualActionMessage al operador y deje de reintentar hasta que finalice la acción en el navegador. Acciones manuales habituales: iniciar sesión en el perfil de Chrome; admitir al invitado desde la cuenta anfitriona de Meet; conceder a Chrome permisos de micrófono y cámara cuando aparezca la solicitud nativa; cerrar o corregir un diálogo de permisos de Meet bloqueado. No informe de que «no se ha iniciado sesión» solo porque Meet pregunte «Do you want people to hear you in the meeting?»; esa es la pantalla intermedia de selección de audio de Meet. OpenClaw hace clic en Use microphone mediante la automatización del navegador cuando está disponible y sigue esperando el estado real de la reunión; para el mecanismo alternativo del navegador destinado únicamente a la creación, puede hacer clic en Continue without microphone, ya que generar la URL no necesita la ruta de audio en tiempo real.

No se puede crear la reunión

googlemeet create utiliza spaces.create de la API de Meet cuando OAuth está configurado; de lo contrario, utiliza el navegador del Node de Chrome fijado. Confirme lo siguiente:
  • Creación mediante la API: oauth.clientId y oauth.refreshToken (o las variables de entorno OPENCLAW_GOOGLE_MEET_* correspondientes) están presentes, y el token de actualización se generó después de añadir la compatibilidad con la creación; es posible que los tokens anteriores no incluyan meetings.space.created, por lo que debe volver a ejecutar openclaw googlemeet auth login --json.
  • Mecanismo alternativo del navegador: defaultTransport: "chrome-node" y chromeNode.node apuntan a un Node conectado con browser.proxy y googlemeet.chrome; se ha iniciado sesión en el perfil de Chrome de OpenClaw de ese Node y este puede abrir https://meet.google.com/new.
  • Reintentos del mecanismo alternativo del navegador: reutilice una pestaña existente de .../new o de solicitud de cuenta de Google antes de abrir una nueva; vuelva a intentar la llamada a la herramienta en lugar de abrir manualmente otra pestaña.
  • Acción manual: si la herramienta devuelve manualActionRequired: true, utilice browser.nodeId, browser.targetId, browserUrl y manualActionMessage para orientar al operador; no reintente en bucle.
  • Pantalla intermedia de selección de audio: si Meet muestra «Do you want people to hear you in the meeting?», deje abierta la pestaña. OpenClaw debería hacer clic en Use microphone o, únicamente para la creación, en Continue without microphone, y seguir esperando la URL generada; si no puede hacerlo, el error debería mencionar meet-audio-choice-required, no google-login-required.

El agente se une, pero no habla

Utilice mode: "agent" para la ruta STT -> agente de OpenClaw -> TTS y mode: "bidi" para el mecanismo alternativo directo de voz en tiempo real. mode: "transcribe" no inicia intencionadamente ningún puente de respuesta. Para depurar en modo de solo observación, ejecute openclaw googlemeet status --json <session-id> después de que hablen los participantes y compruebe captioning, transcriptLines y lastCaptionText. Si inCall es verdadero, pero transcriptLines permanece en 0, es posible que los subtítulos de Meet estén deshabilitados, que nadie haya hablado desde que se instaló el observador, que la interfaz de Meet haya cambiado o que los subtítulos en directo no estén disponibles para el idioma o la cuenta de la reunión. googlemeet test-speech siempre comprueba la ruta en tiempo real e informa de si se observaron bytes de salida del puente para esa invocación. Si speechOutputVerified es falso y speechOutputTimedOut es verdadero, es posible que el proveedor en tiempo real haya aceptado la intervención, pero OpenClaw no haya detectado nuevos bytes de salida que llegaran al puente de audio de Chrome. Compruebe también lo siguiente: hay una clave del proveedor en tiempo real (OPENAI_API_KEY o GEMINI_API_KEY) disponible en el host del Gateway; BlackHole 2ch está visible en el host de Chrome; sox existe allí; el micrófono y el altavoz de Meet se enrutan a través de la ruta de audio virtual (doctor debería mostrar meet output routed: yes para incorporaciones en tiempo real con Chrome local). googlemeet doctor [session-id] muestra la sesión, el Node, el estado de la llamada, el motivo de la acción manual, la conexión con el proveedor en tiempo real, realtimeReady, la actividad de entrada y salida de audio, las marcas de tiempo del último audio, los contadores de bytes y la URL del navegador. Utilice googlemeet status [session-id] --json para obtener JSON sin procesar y googlemeet doctor --oauth (añada --meeting o --create-space) para verificar la actualización de OAuth sin exponer tokens. Si se agotó el tiempo de espera de un agente y ya hay una pestaña de Meet abierta, inspecciónela sin abrir otra:
La acción de herramienta equivalente es recover_current_tab: enfoca e inspecciona una pestaña de Meet existente para el transporte seleccionado (control del navegador local para chrome y el Node configurado para chrome-node) sin abrir una pestaña ni una sesión nuevas, e informa del bloqueo actual (inicio de sesión, admisión, permisos o estado de selección de audio). El comando de la CLI se comunica con el Gateway configurado, que debe estar en ejecución; chrome-node también requiere que el Node esté conectado.

Fallan las comprobaciones de configuración de Twilio

twilio-voice-call-plugin falla cuando voice-call no está permitido o habilitado: añádalo a plugins.allow, habilite plugins.entries.voice-call y vuelva a cargar el Gateway. twilio-voice-call-credentials falla cuando al backend de Twilio le falta el SID de la cuenta, el token de autenticación o el número de origen:
twilio-voice-call-webhook falla cuando voice-call no tiene exposición pública del Webhook o publicUrl apunta a un espacio de red de bucle invertido o privado. No utilice 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 ni fd00::/8 como publicUrl; las devoluciones de llamada del operador no pueden acceder a ellos. Establezca plugins.entries.voice-call.config.publicUrl en una URL pública o configure una exposición mediante un túnel o Tailscale:
Para el desarrollo local, utilice una exposición mediante un túnel o Tailscale en lugar de una URL de host privado:
Reinicie o vuelva a cargar el Gateway y, después, ejecute:
De forma predeterminada, voicecall smoke solo comprueba la disponibilidad. Realice una ejecución de prueba con un número concreto:
Añada --yes únicamente para realizar intencionadamente una llamada saliente real:

La llamada de Twilio se inicia, pero nunca entra en la reunión

Confirme que el evento de Meet proporcione datos de acceso telefónico e indique el número de acceso telefónico exacto junto con el PIN o una secuencia DTMF personalizada:
Utilice w iniciales o comas en --dtmf-sequence para introducir una pausa antes del PIN. Si se crea la llamada, pero la lista de participantes de Meet nunca muestra al participante conectado por teléfono:
  • openclaw googlemeet doctor <session-id>: confirme el identificador de la llamada delegada de Twilio, si se puso DTMF en cola y si se solicitó el saludo de introducción.
  • openclaw voicecall status --call-id <id>: confirme que la llamada siga activa.
  • openclaw voicecall tail: confirme que los Webhooks de Twilio estén llegando al Gateway.
  • openclaw logs --follow: busque la secuencia de Twilio para Meet: Google Meet delega la incorporación, Voice Call almacena y proporciona el TwiML de DTMF previo a la conexión, Voice Call proporciona el TwiML en tiempo real para la llamada de Twilio y, después, Google Meet solicita la locución introductoria con voicecall.speak.
  • Vuelva a ejecutar openclaw googlemeet setup --transport twilio; se requiere una comprobación de configuración en verde, pero esta no demuestra que la secuencia del PIN de la reunión sea correcta.
  • Confirme que el número de acceso telefónico pertenezca a la misma invitación y región de Meet que el PIN.
  • Aumente voiceCall.dtmfDelayMs respecto al valor predeterminado de 12 segundos si Meet tarda en responder o la transcripción de la llamada sigue mostrando la solicitud del PIN después de enviar el DTMF previo a la conexión.
  • Si el participante se une, pero no se oye el saludo, compruebe en openclaw logs --follow la solicitud voicecall.speak posterior al DTMF y la reproducción de TTS mediante flujo multimedia o el mecanismo alternativo <Say> de Twilio. Si la transcripción sigue mostrando «enter the meeting PIN», el tramo telefónico aún no se ha unido a la sala de Meet, por lo que los participantes no oirán la locución.
Si los webhooks no llegan, depure primero el Plugin de llamadas de voz: el proveedor debe poder acceder a plugins.entries.voice-call.config.publicUrl o al túnel configurado. Consulte Solución de problemas de llamadas de voz.

Notas

La API oficial de medios de Google Meet está orientada a la recepción, por lo que para hablar en una llamada sigue siendo necesaria una ruta de participante. Este Plugin mantiene visible ese límite: Chrome gestiona la participación mediante el navegador y el enrutamiento del audio local; Twilio gestiona la participación mediante acceso telefónico. Los modos de respuesta de Chrome necesitan BlackHole 2ch más una de estas opciones:
  • chrome.audioInputCommand más chrome.audioOutputCommand: OpenClaw controla el puente y canaliza el audio en chrome.audioFormat entre esos comandos y el proveedor seleccionado. El modo agent utiliza transcripción en tiempo real más TTS normal; el modo bidi utiliza el proveedor de voz en tiempo real. La ruta predeterminada es PCM16 a 24 kHz con chrome.audioBufferBytes: 4096; G.711 mu-law a 8 kHz sigue disponible para pares de comandos heredados.
  • chrome.audioBridgeCommand: un comando de puente externo controla toda la ruta de audio local y debe finalizar después de iniciar o validar su daemon. Solo es válido para bidi, porque el modo agent necesita acceso directo al par de comandos para TTS.
Con el puente de Chrome basado en pares de comandos, chrome.bargeInInputCommand puede escuchar un micrófono local independiente e interrumpir la reproducción del asistente cuando una persona empieza a hablar, dando prioridad a la voz humana frente a la salida del asistente incluso mientras la entrada de bucle invertido compartida de BlackHole se suprime temporalmente durante la reproducción del asistente. Al igual que chrome.audioInputCommand/chrome.audioOutputCommand, es un comando local configurado por el operador: utilice una ruta de comando explícita y de confianza o una lista de argumentos, nunca un script procedente de una ubicación que no sea de confianza. Para obtener un audio dúplex limpio, enrute la salida de Meet y el micrófono de Meet mediante dispositivos virtuales separados o un gráfico de dispositivos virtuales similar a Loopback; un único dispositivo BlackHole compartido puede devolver a la llamada el audio de los demás participantes como eco. googlemeet speak activa el puente de audio de respuesta para una sesión de Chrome; googlemeet leave lo detiene (y, en las sesiones de Twilio delegadas mediante Llamadas de voz, finaliza la llamada subyacente). Utilice googlemeet end-active-conference para cerrar también la conferencia activa de Google Meet de un espacio gestionado mediante la API.

Contenido relacionado