google-meet entra em URLs explícitas do Meet em nome de um agente do OpenClaw. Ele é deliberadamente restrito:
- Ele entra apenas em URLs
https://meet.google.com/...; nunca disca para uma reunião usando um número de telefone que ele próprio descobriu. googlemeet createpode gerar uma nova URL do Meet por meio da API Google Meet (ou de um fallback do navegador) e entrar nela por padrão.- A participação pelo Chrome usa um perfil do Chrome com login ativo, opcionalmente em um Node pareado. A participação pelo Twilio disca um número de telefone com PIN/DTMF por meio do Plugin de chamada de voz; ela não pode discar diretamente para uma URL do Meet.
mode: "agent"(padrão) transcreve a fala dos participantes com um provedor em tempo real, encaminha-a ao agente configurado do OpenClaw e reproduz a resposta usando o TTS normal do OpenClaw.mode: "bidi"permite que um modelo de voz em tempo real responda diretamente.mode: "transcribe"entra apenas para observar, sem resposta por voz.- Não há anúncio automático de consentimento quando o plugin entra em uma chamada.
- O comando da CLI é
googlemeet;meeté reservado para fluxos de trabalho mais amplos de teleconferência de agentes.
Início rápido
Instale as dependências de áudio locais e defina uma chave de provedor em tempo real. OpenAI é o provedor de transcrição padrão para o modoagent; Google Gemini Live está disponível como provedor de voz do modo bidi:
blackhole-2ch instala o dispositivo de áudio virtual BlackHole 2ch pelo qual o Chrome encaminha o áudio. O instalador do Homebrew exige uma reinicialização antes que o macOS disponibilize o dispositivo:
setup pode ser lida pelo agente e considera o modo e o transporte: ela informa o perfil do Chrome, a fixação do Node e, para entradas em tempo real pelo Chrome, a ponte de áudio BlackHole/SoX e a verificação da introdução atrasada. Entradas apenas para observação ignoram os pré-requisitos de tempo real:
setup também informa se voice-call, as credenciais do Twilio e a exposição pública do Webhook estão prontos. Trate qualquer verificação com ok: false como um bloqueio para esse transporte/modo antes que um agente entre. Use --json para obter uma saída legível por máquina e --transport chrome|chrome-node|twilio para verificar previamente um transporte específico:
google_meet:
google_meet permanece visível para ações de artefato, calendário, configuração, transcrição, Twilio e chrome-node, mas a resposta por voz do Chrome local (transport: "chrome" com mode: "agent" ou "bidi") é bloqueada antes de chegar à ponte de áudio, pois esse caminho depende atualmente do BlackHole 2ch no macOS. Em vez disso, use mode: "transcribe", discagem pelo Twilio ou um host macOS chrome-node.
Criar uma reunião
create tem dois caminhos, informados no campo source do resultado:
api: usado quando as credenciais OAuth do Google Meet estão configuradas. Determinístico; não depende do estado da interface do navegador.browser: usado sem credenciais OAuth. O OpenClaw abrehttps://meet.google.com/newno Node do Chrome fixado e aguarda o Google redirecionar para uma URL real com código de reunião; o perfil do OpenClaw no Chrome desse Node já deve estar conectado ao Google. Tanto a entrada quanto a criação reutilizam uma guia existente do Meet (ou uma guia em andamento de.../new/ solicitação de conta do Google) antes de abrir uma nova; a correspondência de guias ignora strings de consulta inofensivas, comoauthuser.
create entra por padrão e retorna joined: true junto com a sessão de entrada. Passe --no-join (CLI) ou "join": false (ferramenta) para gerar somente a URL.
Para salas criadas pela API, defina uma política de acesso explícita em vez de herdar o padrão da conta do Google:
Isso se aplica apenas a salas criadas pela API, portanto o OAuth deve estar configurado. Se você se autenticou antes de essa opção existir, execute novamente
openclaw googlemeet auth login --json após adicionar o escopo meetings.space.settings à sua tela de consentimento OAuth.
Se o fallback do navegador encontrar um bloqueio de login do Google ou de permissão do Meet, a ferramenta retornará manualActionRequired: true com manualActionReason, manualActionMessage e browser.nodeId/browser.targetId/browserUrl. Informe essa mensagem e pare de abrir novas guias do Meet até que o operador conclua a etapa no navegador.
Entrada apenas para observação
Defina"mode": "transcribe" para ignorar a ponte duplex em tempo real (sem requisito de BlackHole/SoX e sem resposta por voz). As entradas pelo Chrome no modo de transcrição também ignoram a concessão de permissão de microfone/câmera do OpenClaw e a opção Use microphone do Meet; se o Meet exibir a tela intermediária de escolha de áudio, a automação tentará primeiro Continue without microphone. Os transportes gerenciados do Chrome nesse modo instalam um observador de legendas do Meet em caráter de melhor esforço. googlemeet status --json e googlemeet doctor informam captioning, captionsEnabledAttempted, transcriptLines, lastCaptionAt, lastCaptionSpeaker, lastCaptionText e um trecho final de recentTranscript.
Para ler a transcrição limitada da sessão, consulte a guia exata do Meet que está sendo monitorada:
nextIndex não pode ignorar uma expansão posterior do texto. Ao sair, as linhas visíveis são finalizadas antes do snapshot. droppedLines informa as linhas perdidas no início quando o limite é excedido. As transcrições das quatro sessões encerradas mais recentemente permanecem legíveis até que o Gateway seja reiniciado. Transcrições encerradas mais antigas retornam evicted: true. Isso é intencionalmente memória de runtime, e não armazenamento durável do histórico de reuniões: reiniciar o Gateway, fechar a guia antes de um snapshot ou exceder os limites documentados pode causar a perda de legendas.
Para uma sondagem de escuta com resposta sim/não:
listenVerified, listenTimedOut, os campos de ação manual e a integridade atual das legendas.
Integridade da sessão em tempo real
Durante sessões com resposta por voz, o status degoogle_meet informa a integridade do Chrome e da ponte de áudio: inCall, manualActionRequired, providerConnected, realtimeReady, audioInputActive, audioOutputActive, os últimos timestamps de entrada/saída, os contadores de bytes e o estado de fechamento da ponte. As sessões gerenciadas do Chrome só reproduzem a introdução/frase de teste depois que a integridade informa inCall: true; caso contrário, speechReady: false, e a tentativa de fala é bloqueada em vez de silenciosamente não fazer nada.
As entradas pelo Chrome local usam o perfil conectado do navegador do OpenClaw e precisam do BlackHole 2ch para o caminho de microfone/alto-falante. Um único dispositivo BlackHole é suficiente para um primeiro teste de fumaça, mas pode causar eco; use dispositivos virtuais separados ou um grafo no estilo Loopback para obter áudio duplex limpo.
Gateway local + Chrome no Parallels
Não é necessário ter um Gateway completo nem uma chave de API de modelo dentro de uma VM do macOS apenas para disponibilizar o Chrome. Execute o Gateway e o agente localmente; execute um host de Node na VM.
Instale as dependências da VM, reinicie e verifique:
<gateway-host> for um IP da LAN sem TLS, habilite explicitamente essa rede privada confiável:
openclaw.json):
googlemeet.chrome quanto o recurso de navegador/browser.proxy:
manualActionRequired: true com manualActionReason e manualActionMessage. Pare de tentar novamente, informe essa mensagem junto com browserUrl/browserTitle e tente novamente somente após a conclusão da ação manual.
Se chromeNode.node for omitido, o OpenClaw fará a seleção automática somente quando exatamente um Node conectado anunciar tanto googlemeet.chrome quanto o controle do navegador; fixe chromeNode.node (ID do Node, nome de exibição ou IP remoto) quando vários Nodes compatíveis estiverem conectados.
Verificações de falhas comuns
Notas de instalação
A configuração padrão de retorno de áudio do Chrome usa duas ferramentas externas que o OpenClaw não inclui nem redistribui; instale-as como dependências do host por meio do Homebrew:sox: utilitário de áudio de linha de comando. O Plugin emite comandos explícitos de dispositivo CoreAudio para a ponte de áudio PCM16 padrão de 24 kHz.blackhole-2ch: driver de áudio virtual do macOS que fornece o dispositivoBlackHole 2chpelo qual o Chrome/Meet faz o roteamento.
LGPL-2.0-only AND GPL-2.0-only; o BlackHole é GPL-3.0. Se você criar um instalador ou appliance que inclua o BlackHole com o OpenClaw, analise o licenciamento upstream do BlackHole ou obtenha uma licença separada da Existential Audio.
Transportes
Chrome
Abre a URL do Meet por meio do controle de navegador do OpenClaw e entra usando o perfil de navegador do OpenClaw com sessão iniciada. No macOS, o Plugin verifica a presença deBlackHole 2ch antes da inicialização e, se configurado, executa um comando de integridade/inicialização da ponte de áudio antes de abrir o Chrome. Para o Chrome local, selecione o perfil com browser.defaultProfile; chrome.browserProfile é repassado aos hosts chrome-node.
BlackHole 2ch não estiver instalado, a entrada falhará com um erro de configuração, em vez de ocorrer sem um caminho de áudio.
Twilio
Um plano de discagem estrito delegado ao Plugin Voice Call. Ele não analisa páginas do Meet em busca de números de telefone; o Google Meet deve disponibilizar um número de discagem telefônica e um PIN para a reunião. Ative o Voice Call no host do Gateway, não no Node do Chrome:openclaw.json:
realtime.provider: "openai" com OPENAI_API_KEY se a OpenAI for a provedora de voz em tempo real.
Reinicie ou recarregue o Gateway depois de ativar voice-call; as alterações de configuração do Plugin não entram em vigor até o recarregamento. Verifique:
googlemeet setup incluirá as verificações twilio-voice-call-plugin, twilio-voice-call-credentials e twilio-voice-call-webhook.
--dtmf-sequence para uma sequência personalizada, com w no início ou vírgulas para inserir uma pausa antes do PIN:
OAuth e pré-verificação
O OAuth é opcional para criar um link do Meet, poisgooglemeet create pode usar a automação de navegador como alternativa. Configure o OAuth para criação pela API oficial, resolução de espaços ou pré-verificação da Meet Media API. As entradas pelo Chrome/Chrome-node nunca dependem do OAuth; elas usam um perfil do Chrome com sessão iniciada, BlackHole/SoX e, para chrome-node, um Node conectado em qualquer caso.
Criar credenciais do Google
No Google Cloud Console:1
Criar ou selecionar um projeto
2
Ativar a Google Meet REST API
3
Configurar a tela de consentimento OAuth
Internal é a opção mais simples para uma organização do Google Workspace. External funciona para configurações pessoais/de teste; enquanto o aplicativo estiver em Testing, adicione como usuário de teste cada conta do Google que o autorizará.
4
Adicionar os escopos solicitados
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(consulta ao Calendar)https://www.googleapis.com/auth/drive.meet.readonly(exportação do corpo de documentos de transcrição/notas inteligentes)
5
Criar um ID de cliente OAuth
Tipo de aplicativo Web application. URI de redirecionamento autorizado:
6
Copiar o ID e o segredo do cliente
meetings.space.created é exigido por spaces.create. meetings.space.readonly resolve URLs/códigos do Meet em espaços. meetings.space.settings permite que o OpenClaw forneça configurações de SpaceConfig, como accessType, durante a criação de salas pela API. meetings.conference.media.readonly destina-se à pré-verificação e ao trabalho de mídia da Meet Media API; o Google pode exigir inscrição no Developer Preview para o uso efetivo da Media API. calendar.events.readonly é necessário somente para a consulta ao calendário com --today/--event. drive.meet.readonly é necessário somente para a exportação com --include-doc-bodies. Se você precisar apenas de entradas pelo Chrome baseadas no navegador, ignore totalmente o OAuth.
Gerar o token de atualização
Configureoauth.clientId e, opcionalmente, oauth.clientSecret (ou forneça-os como variáveis de ambiente) e execute:
http://localhost:8085/oauth2callback e imprime um bloco de configuração oauth com um token de atualização. Adicione --manual para usar um fluxo de copiar/colar quando o navegador não conseguir acessar o retorno de chamada local:
oauth na configuração do Plugin:
openclaw googlemeet auth login --json para que o token de atualização abranja o conjunto atual de escopos.
Verificar o OAuth com o doctor
ok, configured, tokenSource, expiresAt, mensagens de verificação) e nunca imprime o token de acesso, o token de atualização ou o segredo do cliente.
Comprove a habilitação da API Meet e o escopo
spaces.create com a verificação de criação que produz efeito colateral:
403 nessas verificações geralmente significa que a API REST do Meet está desabilitada, que o token de atualização não tem o escopo necessário ou que a conta do Google não pode acessar esse espaço. Um erro de token de atualização significa que você deve executar novamente openclaw googlemeet auth login --json e armazenar o novo bloco oauth.
Nenhum OAuth é necessário para o fallback do navegador; nesse caso, a autenticação do Google vem do perfil do Chrome conectado no Node selecionado, não da configuração do OpenClaw.
Estas variáveis de ambiente são aceitas como fallbacks:
OPENCLAW_GOOGLE_MEET_CLIENT_IDouGOOGLE_MEET_CLIENT_IDOPENCLAW_GOOGLE_MEET_CLIENT_SECRETouGOOGLE_MEET_CLIENT_SECRETOPENCLAW_GOOGLE_MEET_REFRESH_TOKENouGOOGLE_MEET_REFRESH_TOKENOPENCLAW_GOOGLE_MEET_ACCESS_TOKENouGOOGLE_MEET_ACCESS_TOKENOPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_ATouGOOGLE_MEET_ACCESS_TOKEN_EXPIRES_ATOPENCLAW_GOOGLE_MEET_DEFAULT_MEETINGouGOOGLE_MEET_DEFAULT_MEETINGOPENCLAW_GOOGLE_MEET_PREVIEW_ACKouGOOGLE_MEET_PREVIEW_ACK
Resolver, fazer a verificação preliminar e ler artefatos
--meeting, artifacts e attendance usam o registro de conferência mais recente por padrão; passe --all-conference-records para incluir todos os registros mantidos.
A consulta do Calendar resolve a URL da reunião no Google Calendar antes de ler os artefatos (requer um token de atualização que inclua o escopo somente leitura de eventos do Calendar):
--today pesquisa no calendário primary de hoje um evento com um link do Meet; --event <query> pesquisa textos de eventos correspondentes; --calendar <id> direciona a pesquisa a um calendário não primário. calendar-events mostra uma prévia dos eventos correspondentes e indica qual deles latest/artifacts/attendance/export escolherá.
Se você já souber o ID do registro de conferência, indique-o diretamente:
spaces.endActiveConference e requer OAuth com o escopo meetings.space.created para um espaço que a conta autorizada possa gerenciar. Aceita uma URL do Meet, um código de reunião ou spaces/{id} e primeiro o resolve para o recurso de espaço da API. Isso é separado de googlemeet leave: leave interrompe a participação local/da sessão do OpenClaw; end-active-conference solicita que o Google Meet encerre a conferência ativa do espaço.
Gere um relatório legível:
artifacts retorna os metadados do registro de conferência, além dos metadados de recursos de participantes, gravações, transcrições, entradas estruturadas de transcrição e notas inteligentes, quando o Google os disponibiliza. --no-transcript-entries ignora a consulta de entradas em reuniões grandes. attendance expande os participantes em linhas de sessão de participante com horários da primeira e última aparição, duração total da sessão, indicadores de atraso/saída antecipada e recursos duplicados de participantes mesclados por usuário conectado ou nome de exibição; --no-merge-duplicates mantém os recursos brutos separados, e --late-after-minutes/--early-before-minutes ajustam os limites.
export grava uma pasta com summary.md, attendance.csv, transcript.md, artifacts.json, attendance.json e manifest.json. manifest.json registra a entrada escolhida, as opções de exportação, os registros de conferência, os arquivos de saída, as contagens, a origem do token, qualquer evento do Calendar usado e os avisos de recuperação parcial. --zip também grava um arquivo portátil ao lado da pasta. --include-doc-bodies exporta o texto dos Google Docs vinculados de transcrições/notas inteligentes por meio de files.export do Drive (requer o escopo somente leitura do Meet no Drive); sem essa opção, as exportações incluem apenas os metadados do Meet e as entradas estruturadas de transcrição. Uma falha parcial de artefato (erro na listagem de notas inteligentes, nas entradas de transcrição ou no corpo do documento) mantém o aviso no resumo/manifesto em vez de causar falha em toda a exportação. --dry-run busca os mesmos dados e imprime o JSON do manifesto sem criar a pasta nem o ZIP.
Os agentes usam as mesmas ações por meio da ferramenta google_meet (export, create com accessType, end_active_conference, test_listen); consulte Ferramenta.
Teste rápido em ambiente real
O teste rápido básico de artefatos/presença requer
meetings.space.readonly e meetings.conference.media.readonly. A consulta do Calendar requer calendar.events.readonly. A exportação do corpo de documentos do Drive requer drive.meet.readonly.
Exemplos de criação
google_meet retornará detalhes estruturados em vez de uma string simples:
manualActionRequired: true ou um erro de fallback do navegador e solicita que o operador conclua o login do Google antes de tentar novamente.
Defina preview.enrollmentAcknowledged: true somente depois de confirmar que seu projeto do Cloud, a entidade principal OAuth e os participantes da reunião estão inscritos no Google Workspace Developer Preview Program para APIs de mídia do Meet.
Configuração
O caminho comum do agente do Chrome requer apenas que o plugin esteja habilitado, além do BlackHole, do SoX, de uma chave de provedor em tempo real e de um provedor de TTS do OpenClaw configurado:Padrões
chrome.audioBridgeCommand e chrome.audioBridgeHealthCommand permitem que uma ponte externa controle todo o caminho de áudio local em vez de chrome.audioInputCommand/chrome.audioOutputCommand; consulte Observações para ver a restrição sobre qual modo pode usá-los.
Há uma migração openclaw doctor --fix para o formato legado realtime.provider: "google": ela transfere essa intenção para realtime.voiceProvider: "google" junto com realtime.transcriptionProvider: "openai" quando esses campos ainda não estão definidos.
Substituições opcionais
messages.tts.providers.elevenlabs.speakerVoiceId. As respostas do agente também podem usar diretivas [[tts:speakerVoiceId=... model=eleven_v3]] por resposta quando as substituições do modelo TTS estão habilitadas, mas a configuração é o padrão determinístico para reuniões. Ao entrar, os logs mostram transcriptionProvider=elevenlabs, e cada resposta falada registra provider=elevenlabs model=eleven_v3 speakerVoiceId=<voiceId>.
Configuração somente para Twilio:
voiceCall.enabled: true (o padrão) e o transporte Twilio, o Voice Call executa a sequência DTMF antes de abrir o fluxo de mídia em tempo real e, em seguida, usa o texto de introdução salvo como saudação inicial em tempo real. Se voice-call não estiver habilitado, o Google Meet ainda poderá validar e registrar o plano de discagem, mas não poderá realizar a chamada pelo Twilio.
Deixe voiceCall.gatewayUrl sem definir para usar o runtime local confiável do Gateway, que preserva o
agente invocador durante toda a chamada. Uma URL do Gateway configurada continua sendo um destino WebSocket explícito e
não pode autenticar a proveniência do plugin; entradas de agentes não padrão falham de forma fechada, em vez de usar
silenciosamente outro agente. Execute o Google Meet e o Voice Call no mesmo processo do Gateway quando o roteamento
por agente for necessário.
Ferramenta
Os agentes usam a ferramentagoogle_meet:
test_speech sempre força mode: "agent" ou "bidi" e falha se solicitado a executar em mode: "transcribe", pois sessões somente de observação não podem emitir fala. Seu resultado speechOutputVerified se baseia no aumento dos bytes de saída de áudio em tempo real durante essa chamada; portanto, uma sessão reutilizada com áudio anterior não conta como uma nova verificação.
Para transportes do Chrome, leave mantém aberta uma aba reutilizada pertencente ao usuário após clicar no botão de sair da chamada do Meet. As abas abertas pelo OpenClaw são fechadas após a saída.
Use transport: "chrome" quando o Chrome for executado no host do Gateway e transport: "chrome-node" quando for executado em um Node pareado. Em ambos os casos, os provedores de modelo e openclaw_agent_consult são executados no host do Gateway, portanto as credenciais do modelo permanecem nele. Os logs do modo de agente incluem o provedor/modelo de transcrição resolvido na inicialização da ponte e o provedor/modelo/voz/formato de saída/taxa de amostragem de TTS após cada resposta sintetizada. O mode: "realtime" bruto ainda é aceito como alias de compatibilidade legado para mode: "agent", mas não é mais divulgado no enum mode da ferramenta.
create com uma sala baseada em API e uma política de acesso explícita:
status inclui a integridade do Chrome quando disponível:
Modos de agente e bidi
Modo
agent: o provedor de transcrição em tempo real ouve o áudio da reunião, as transcrições finais dos participantes são encaminhadas pelo agente OpenClaw configurado e a resposta é falada pelo TTS normal do OpenClaw. Fragmentos próximos da transcrição final são agrupados antes da consulta para que um único turno falado não produza várias respostas parciais obsoletas; a entrada em tempo real é suprimida enquanto o áudio enfileirado do assistente ainda está sendo reproduzido, e ecos recentes de transcrição semelhantes à fala do assistente são ignorados antes da consulta para que o loopback do BlackHole não faça o agente responder à própria fala.
Modo bidi: o modelo de voz em tempo real responde diretamente e pode chamar openclaw_agent_consult para raciocínio mais aprofundado, informações atuais ou ferramentas normais do OpenClaw. A ferramenta de consulta executa o agente OpenClaw normal nos bastidores com o contexto recente da transcrição da reunião e retorna uma resposta falada concisa; no modo agent, o OpenClaw envia essa resposta diretamente ao TTS; no modo bidi, o modelo de voz em tempo real pode reproduzi-la. Ela usa o mesmo mecanismo compartilhado de consulta que o Voice Call.
Por padrão, as consultas são executadas no agente main; defina realtime.agentId para direcionar uma via do Meet a um workspace de agente dedicado, padrões de modelo, política de ferramentas, memória e histórico de sessões. As consultas do modo de agente usam uma chave de sessão agent:<id>:subagent:google-meet:<session> por reunião, para que perguntas de acompanhamento mantenham o contexto da reunião e, ao mesmo tempo, herdem a política normal do agente. Quando um agente chama google_meet no modo de agente, a sessão de consulta bifurca a transcrição atual do chamador antes de responder à fala do participante; a sessão do Meet permanece separada para que acompanhamentos da reunião não alterem diretamente a transcrição do chamador.
realtime.toolPolicy controla a execução da consulta:
A chave da sessão de consulta tem escopo por sessão do Meet, portanto chamadas de consulta subsequentes reutilizam o contexto de consulta anterior durante a mesma reunião.
Force uma verificação falada de prontidão após o Chrome ter entrado completamente:
Lista de verificação para testes ao vivo
Antes de entregar uma reunião a um agente sem supervisão:googlemeet setupestá totalmente verde e incluichrome-node-connectedquando Chrome-node é o transporte padrão ou um Node está fixado.nodes statusmostra o Node selecionado conectado, anunciandogooglemeet.chromeebrowser.proxy.- A aba do Meet entra na reunião, e
test-speechretorna a integridade do Chrome cominCall: true.
googlemeet setupinclui verificações verdes detwilio-voice-call-plugin,twilio-voice-call-credentialsetwilio-voice-call-webhook.voicecallfica disponível na CLI após o recarregamento do Gateway.- A sessão retornada tem
transport: "twilio"e umtwilio.voiceCallId. openclaw logs --followmostra o TwiML de DTMF sendo servido antes do TwiML em tempo real e, em seguida, uma ponte em tempo real com a saudação inicial na fila.googlemeet leave <sessionId>encerra a chamada de voz delegada.
Solução de problemas
O agente não consegue ver a ferramenta do Google Meet
Confirme que o plugin está habilitado e recarregue o Gateway; o agente em execução só vê as ferramentas de plugin registradas pelo processo atual do Gateway:google_meet permanece visível, mas as ações locais de resposta por voz do Chrome são bloqueadas antes de chegarem à ponte de áudio. Use mode: "transcribe", discagem telefônica pelo Twilio ou um host macOS chrome-node em vez do caminho padrão do agente local do Chrome.
Nenhum nó compatível com Google Meet conectado
No host do nó:googlemeet.chrome e browser.proxy; a configuração do Gateway deve permitir ambos:
googlemeet setup falhar em chrome-node-connected ou o log do Gateway informar gateway token mismatch, reinstale ou reinicie o nó com o token atual do Gateway:
O navegador abre, mas o agente não consegue entrar
Executegooglemeet test-listen para entradas somente de observação ou googlemeet test-speech para entradas em tempo real e, em seguida, inspecione o estado do Chrome retornado. Se algum deles informar manualActionRequired: true, mostre manualActionMessage ao operador e pare de tentar novamente até que a ação no navegador seja concluída.
Ações manuais comuns: entrar no perfil do Chrome; admitir o convidado pela conta do anfitrião do Meet; conceder permissões de microfone/câmera ao Chrome quando o prompt nativo aparecer; fechar ou corrigir uma caixa de diálogo travada de permissões do Meet.
Não informe “não conectado” apenas porque o Meet pergunta “Do you want people to hear you in the meeting?”; essa é a tela intermediária de escolha de áudio do Meet. O OpenClaw clica em Use microphone por meio da automação do navegador quando disponível e continua aguardando o estado real da reunião; no fallback do navegador somente para criação, ele pode clicar em Continue without microphone, pois a geração da URL não precisa do caminho de áudio em tempo real.
Falha na criação da reunião
googlemeet create usa spaces.create da API do Meet quando o OAuth está configurado; caso contrário, usa o navegador do nó do Chrome fixado. Confirme:
- Criação pela API:
oauth.clientIdeoauth.refreshToken(ou variáveis de ambienteOPENCLAW_GOOGLE_MEET_*correspondentes) estão presentes, e o token de atualização foi gerado depois que o suporte à criação foi adicionado; tokens mais antigos podem não termeetings.space.created, portanto execute novamenteopenclaw googlemeet auth login --json. - Fallback do navegador:
defaultTransport: "chrome-node"echromeNode.nodeapontam para um nó conectado combrowser.proxyegooglemeet.chrome; o perfil do Chrome do OpenClaw nesse nó está conectado e consegue abrirhttps://meet.google.com/new. - Novas tentativas do fallback do navegador: reutilize uma guia existente de
.../newou de prompt da conta do Google antes de abrir uma nova; tente novamente a chamada da ferramenta em vez de abrir manualmente outra guia. - Ação manual: se a ferramenta retornar
manualActionRequired: true, usebrowser.nodeId,browser.targetId,browserUrlemanualActionMessagepara orientar o operador; não tente novamente em loop. - Tela intermediária de escolha de áudio: se o Meet mostrar “Do you want people to hear you in the meeting?”, deixe a guia aberta. O OpenClaw deve clicar em Use microphone ou, somente para criação, em Continue without microphone e continuar aguardando a URL gerada; se não conseguir, o erro deve mencionar
meet-audio-choice-required, nãogoogle-login-required.
O agente entra, mas não fala
mode: "agent" para o caminho STT -> agente do OpenClaw -> TTS e mode: "bidi" para o fallback direto de voz em tempo real. mode: "transcribe" intencionalmente não inicia nenhuma ponte de resposta por voz. Para depuração somente por observação, execute openclaw googlemeet status --json <session-id> depois que os participantes falarem e verifique captioning, transcriptLines e lastCaptionText. Se inCall for verdadeiro, mas transcriptLines permanecer 0, as legendas do Meet podem estar desabilitadas, ninguém pode ter falado desde que o observador foi instalado, a interface do Meet pode ter mudado ou as legendas ao vivo podem estar indisponíveis para o idioma ou a conta da reunião.
googlemeet test-speech sempre verifica o caminho em tempo real e informa se foram observados bytes de saída da ponte nessa invocação. Se speechOutputVerified for falso e speechOutputTimedOut for verdadeiro, o provedor em tempo real pode ter aceitado a fala, mas o OpenClaw não detectou novos bytes de saída chegando à ponte de áudio do Chrome.
Verifique também: uma chave de provedor em tempo real (OPENAI_API_KEY ou GEMINI_API_KEY) está disponível no host do Gateway; BlackHole 2ch está visível no host do Chrome; sox existe nesse host; o microfone e o alto-falante do Meet estão roteados pelo caminho de áudio virtual (doctor deve mostrar meet output routed: yes para entradas locais do Chrome em tempo real).
googlemeet doctor [session-id] exibe sessão, nó, estado de chamada, motivo da ação manual, conexão do provedor em tempo real, realtimeReady, atividade de entrada/saída de áudio, últimos registros de data e hora de áudio, contadores de bytes e URL do navegador. Use googlemeet status [session-id] --json para obter o JSON bruto e googlemeet doctor --oauth (adicione --meeting ou --create-space) para verificar a atualização do OAuth sem expor tokens.
Se um agente tiver atingido o tempo limite e uma guia do Meet já estiver aberta, inspecione-a sem abrir outra:
recover_current_tab: ela focaliza e inspeciona uma guia existente do Meet para o transporte selecionado (controle local do navegador para chrome, o nó configurado para chrome-node) sem abrir uma nova guia ou sessão e informa o bloqueio atual (login, admissão, permissões ou estado de escolha de áudio). O comando da CLI se comunica com o Gateway configurado, que deve estar em execução; chrome-node também exige que o nó esteja conectado.
Falha nas verificações de configuração do Twilio
twilio-voice-call-plugin falha quando voice-call não é permitido ou não está habilitado: adicione-o a plugins.allow, habilite plugins.entries.voice-call e recarregue o Gateway.
twilio-voice-call-credentials falha quando o backend do Twilio não tem SID da conta, token de autenticação ou número de origem:
twilio-voice-call-webhook falha quando voice-call não tem exposição pública de Webhook ou quando publicUrl aponta para o espaço de rede local ou privado. Não use 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 ou fd00::/8 como publicUrl; os callbacks da operadora não conseguem acessar esses endereços. Defina plugins.entries.voice-call.config.publicUrl como uma URL pública ou configure uma exposição por túnel/Tailscale:
voicecall smoke apenas verifica a prontidão. Faça uma simulação para um número específico:
--yes somente para realizar intencionalmente uma chamada real de saída:
A chamada do Twilio começa, mas nunca entra na reunião
Confirme que o evento do Meet expõe os detalhes da discagem telefônica e informe o número exato de discagem junto com o PIN ou uma sequência DTMF personalizada:w no início ou vírgulas em --dtmf-sequence para adicionar uma pausa antes do PIN.
Se a chamada for criada, mas a lista de participantes do Meet nunca mostrar o participante conectado por telefone:
openclaw googlemeet doctor <session-id>: confirme o ID da chamada delegada do Twilio, se o DTMF foi colocado na fila e se a saudação introdutória foi solicitada.openclaw voicecall status --call-id <id>: confirme que a chamada ainda está ativa.openclaw voicecall tail: confirme que os Webhooks do Twilio estão chegando ao Gateway.openclaw logs --follow: procure a sequência do Twilio no Meet: o Google Meet delega a entrada, o Voice Call armazena e serve o TwiML de DTMF anterior à conexão, o Voice Call serve o TwiML em tempo real para a chamada do Twilio e, em seguida, o Google Meet solicita a fala introdutória comvoicecall.speak.- Execute novamente
openclaw googlemeet setup --transport twilio; uma verificação de configuração verde é obrigatória, mas não comprova que a sequência do PIN da reunião está correta. - Confirme que o número de discagem pertence ao mesmo convite e à mesma região do Meet que o PIN.
- Aumente
voiceCall.dtmfDelayMsem relação ao padrão de 12 segundos se o Meet demorar para atender ou se a transcrição da chamada ainda mostrar o prompt do PIN depois que o DTMF anterior à conexão tiver sido enviado. - Se o participante entrar, mas você não ouvir a saudação, verifique
openclaw logs --followem busca da solicitaçãovoicecall.speakposterior ao DTMF e da reprodução de TTS pelo fluxo de mídia ou do fallback<Say>do Twilio. Se a transcrição ainda mostrar “enter the meeting PIN”, a parte telefônica ainda não entrou na sala do Meet, portanto os participantes não ouvirão a fala.
plugins.entries.voice-call.config.publicUrl ou o túnel configurado. Consulte Solução de problemas de chamadas de voz.
Observações
A API de mídia oficial do Google Meet é orientada ao recebimento, portanto falar em uma chamada ainda exige um caminho de participante. Este plugin mantém esse limite visível: o Chrome lida com a participação pelo navegador e o roteamento de áudio local; o Twilio lida com a participação por discagem telefônica. Os modos de resposta por voz do Chrome precisam deBlackHole 2ch e uma das seguintes opções:
chrome.audioInputCommandechrome.audioOutputCommand: o OpenClaw controla a ponte e encaminha o áudio emchrome.audioFormatentre esses comandos e o provedor selecionado. O modoagentusa transcrição em tempo real com TTS regular; o modobidiusa o provedor de voz em tempo real. O caminho padrão é PCM16 de 24 kHz comchrome.audioBufferBytes: 4096; o mu-law G.711 de 8 kHz permanece disponível para pares de comandos legados.chrome.audioBridgeCommand: um comando de ponte externo controla todo o caminho de áudio local e deve ser encerrado após iniciar ou validar seu daemon. Válido somente parabidi, pois o modoagentprecisa de acesso direto ao par de comandos para TTS.
chrome.bargeInInputCommand pode escutar um microfone local separado e interromper a reprodução do assistente quando uma pessoa começa a falar, mantendo a fala humana à frente da saída do assistente mesmo enquanto a entrada de loopback compartilhada do BlackHole é temporariamente suprimida durante a reprodução do assistente. Assim como chrome.audioInputCommand/chrome.audioOutputCommand, ele é um comando local configurado pelo operador: use um caminho de comando confiável explícito ou uma lista de argumentos, nunca um script de um local não confiável.
Para obter áudio duplex limpo, encaminhe a saída do Meet e o microfone do Meet por dispositivos virtuais separados ou por um grafo de dispositivos virtuais no estilo do Loopback; um único dispositivo BlackHole compartilhado pode devolver o áudio dos outros participantes à chamada, causando eco.
googlemeet speak aciona a ponte de áudio de resposta ativa para uma sessão do Chrome; googlemeet leave a interrompe (e, para sessões do Twilio delegadas por meio do Voice Call, encerra a chamada subjacente). Use googlemeet end-active-conference para também encerrar a conferência ativa do Google Meet em um espaço gerenciado pela API.