Mainstream messaging
Google Chat
Status: plugin baixável para DMs + espaços via webhooks da API do Google Chat (somente HTTP).
Instalação
Instale o Google Chat antes de configurar o canal:
openclaw plugins install @openclaw/googlechatCheckout local (ao executar de um repositório git):
openclaw plugins install ./path/to/local/googlechat-pluginConfiguração rápida (iniciante)
- Crie um projeto do Google Cloud e ative a API Google Chat.
- Acesse: Credenciais da API Google Chat
- Ative a API se ela ainda não estiver ativada.
- Crie uma Conta de serviço:
- Pressione Criar credenciais > Conta de serviço.
- Dê o nome que quiser (por exemplo,
openclaw-chat). - Deixe as permissões em branco (pressione Continuar).
- Deixe os principais com acesso em branco (pressione Concluído).
- Crie e baixe a Chave JSON:
- Na lista de contas de serviço, clique naquela que você acabou de criar.
- Acesse a aba Chaves.
- Clique em Adicionar chave > Criar nova chave.
- Selecione JSON e pressione Criar.
- Armazene o arquivo JSON baixado no host do seu gateway (por exemplo,
~/.openclaw/googlechat-service-account.json). - Crie um app do Google Chat na Configuração do Chat no Console do Google Cloud:
- Preencha as Informações do aplicativo:
- Nome do app: (por exemplo,
OpenClaw) - URL do avatar: (por exemplo,
https://openclaw.ai/logo.png) - Descrição: (por exemplo,
Personal AI Assistant)
- Nome do app: (por exemplo,
- Ative Recursos interativos.
- Em Funcionalidade, marque Participar de espaços e conversas em grupo.
- Em Configurações de conexão, selecione URL do endpoint HTTP.
- Em Gatilhos, selecione Usar uma URL de endpoint HTTP comum para todos os gatilhos e defina-a como a URL pública do seu gateway seguida de
/googlechat.- Dica: execute
openclaw statuspara encontrar a URL pública do seu gateway.
- Dica: execute
- Em Visibilidade, marque Disponibilizar este app do Chat para pessoas e grupos específicos em
<Your Domain>. - Insira seu endereço de e-mail (por exemplo,
user@example.com) na caixa de texto. - Clique em Salvar na parte inferior.
- Preencha as Informações do aplicativo:
- Ative o status do app:
- Depois de salvar, atualize a página.
- Procure a seção Status do app (geralmente perto do topo ou da parte inferior depois de salvar).
- Altere o status para Ao vivo - disponível para usuários.
- Clique em Salvar novamente.
- Configure o OpenClaw com o caminho da conta de serviço + público do webhook:
- Env:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - Ou config:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json".
- Env:
- Defina o tipo + valor do público do webhook (corresponde à configuração do seu app do Chat).
- Inicie o gateway. O Google Chat enviará POST para o caminho do seu webhook.
Adicionar ao Google Chat
Depois que o gateway estiver em execução e seu e-mail for adicionado à lista de visibilidade:
- Acesse Google Chat.
- Clique no ícone + (mais) ao lado de Mensagens diretas.
- Na barra de pesquisa (onde você normalmente adiciona pessoas), digite o Nome do app que configurou no Console do Google Cloud.
- Observação: o bot não aparecerá na lista de navegação do "Marketplace" porque é um app privado. Você deve pesquisá-lo pelo nome.
- Selecione seu bot nos resultados.
- Clique em Adicionar ou Chat para iniciar uma conversa 1:1.
- Envie "Olá" para acionar o assistente!
URL pública (somente Webhook)
Webhooks do Google Chat exigem um endpoint HTTPS público. Por segurança, exponha somente o caminho /googlechat à internet. Mantenha o painel do OpenClaw e outros endpoints sensíveis na sua rede privada.
Opção A: Tailscale Funnel (Recomendado)
Use Tailscale Serve para o painel privado e Funnel para o caminho público do webhook. Isso mantém / privado enquanto expõe somente /googlechat.
-
Verifique a qual endereço seu gateway está vinculado:
bash ss -tlnp | grep 18789Observe o endereço IP (por exemplo,
127.0.0.1,0.0.0.0ou seu IP do Tailscale, como100.x.x.x). -
Exponha o painel somente para a tailnet (porta 8443):
bash # If bound to localhost (127.0.0.1 or 0.0.0.0):tailscale serve --bg --https 8443 http://127.0.0.1:18789 # If bound to Tailscale IP only (e.g., 100.106.161.80):tailscale serve --bg --https 8443 http://100.106.161.80:18789 -
Exponha publicamente somente o caminho do webhook:
bash # If bound to localhost (127.0.0.1 or 0.0.0.0):tailscale funnel --bg --set-path /googlechat http://127.0.0.1:18789/googlechat # If bound to Tailscale IP only (e.g., 100.106.161.80):tailscale funnel --bg --set-path /googlechat http://100.106.161.80:18789/googlechat -
Autorize o node para acesso ao Funnel: Se solicitado, visite a URL de autorização exibida na saída para ativar o Funnel para este node na sua política de tailnet.
-
Verifique a configuração:
bash tailscale serve statustailscale funnel status
Sua URL pública do webhook será:
https://<node-name>.<tailnet>.ts.net/googlechat
Seu painel privado permanece somente na tailnet:
https://<node-name>.<tailnet>.ts.net:8443/
Use a URL pública (sem :8443) na configuração do app do Google Chat.
Observação: esta configuração persiste entre reinicializações. Para removê-la depois, execute
tailscale funnel resetetailscale serve reset.
Opção B: Proxy reverso (Caddy)
Se você usa um proxy reverso como o Caddy, faça proxy somente do caminho específico:
your-domain.com { reverse_proxy /googlechat* localhost:18789}Com esta configuração, qualquer solicitação para your-domain.com/ será ignorada ou retornará 404, enquanto your-domain.com/googlechat será roteado com segurança para o OpenClaw.
Opção C: Cloudflare Tunnel
Configure as regras de ingresso do seu túnel para rotear somente o caminho do webhook:
- Caminho:
/googlechat->http://localhost:18789/googlechat - Regra padrão: HTTP 404 (Não encontrado)
Como funciona
- O Google Chat envia POSTs de webhook para o gateway. Cada solicitação inclui um cabeçalho
Authorization: Bearer <token>.- O OpenClaw verifica a autenticação bearer antes de ler/analisar os corpos completos dos webhooks quando o cabeçalho está presente.
- Solicitações de complementos do Google Workspace que carregam
authorizationEventObject.systemIdTokenno corpo são compatíveis por meio de um orçamento de corpo de pré-autenticação mais restrito.
- O OpenClaw verifica o token em relação ao
audienceType+audienceconfigurados:audienceType: "app-url"→ o público é a URL HTTPS do seu webhook.audienceType: "project-number"→ o público é o número do projeto do Cloud.
- As mensagens são roteadas por espaço:
- DMs usam a chave de sessão
agent:<agentId>:googlechat:direct:<spaceId>. - Espaços usam a chave de sessão
agent:<agentId>:googlechat:group:<spaceId>.
- DMs usam a chave de sessão
- O acesso por DM usa pareamento por padrão. Remetentes desconhecidos recebem um código de pareamento; aprove com:
openclaw pairing approve googlechat <code>
- Espaços de grupo exigem @menção por padrão. Use
botUserse a detecção de menção precisar do nome de usuário do app. - Quando uma solicitação de aprovação de execução ou plugin começa no Google Chat e um aprovador estável
users/<id>está configurado, o OpenClaw publica um cartão de aprovação nativo do Google Chat no espaço ou thread de origem. Os botões do cartão usam tokens de callback opacos, e o prompt manual/approve <id> <decision>só é exibido quando a entrega de aprovação nativa não está disponível.
Destinos
Use estes identificadores para entrega e listas de permissão:
- Mensagens diretas:
users/<userId>(recomendado). - E-mail bruto
name@example.comé mutável e usado somente para correspondência direta de lista de permissão quandochannels.googlechat.dangerouslyAllowNameMatching: true. - Obsoleto:
users/<email>é tratado como um ID de usuário, não como uma lista de permissão de e-mail. - Espaços:
spaces/<spaceId>.
Destaques da configuração
{ channels: { googlechat: { enabled: true, serviceAccountFile: "/path/to/service-account.json", // or serviceAccountRef: { source: "file", provider: "filemain", id: "/channels/googlechat/serviceAccount" } audienceType: "app-url", audience: "https://gateway.example.com/googlechat", webhookPath: "/googlechat", botUser: "users/1234567890", // optional; helps mention detection allowBots: false, dm: { policy: "pairing", allowFrom: ["users/1234567890"], }, groupPolicy: "allowlist", groups: { "spaces/AAAA": { enabled: true, requireMention: true, users: ["users/1234567890"], systemPrompt: "Short answers only.", }, }, actions: { reactions: true }, typingIndicator: "message", mediaMaxMb: 20, }, },}Observações:
- As credenciais da conta de serviço também podem ser passadas inline com
serviceAccount(string JSON). serviceAccountReftambém é compatível (env/file SecretRef), incluindo refs por conta emchannels.googlechat.accounts.<id>.serviceAccountRef.- O caminho padrão do webhook é
/googlechatsewebhookPathnão estiver definido. dangerouslyAllowNameMatchingreativa a correspondência de principal de e-mail mutável para listas de permissão (modo de compatibilidade de emergência).- Reações estão disponíveis por meio da ferramenta
reactionse dechannels actionquandoactions.reactionsestá ativado. - Cartões de aprovação nativos usam cliques em botões
cardsV2do Google Chat, não eventos de reação. Aprovadores vêm dedm.allowFromoudefaultToe devem ser valores numéricos estáveisusers/<id>. - Ações de mensagem expõem
sendpara texto eupload-filepara envios explícitos de anexos.upload-fileaceitamedia/filePath/path, além demessage,filenamee direcionamento de thread opcionais. typingIndicatoré compatível commessage(padrão),noneereaction(reactionexige OAuth de usuário).- Anexos são baixados pela API Chat e armazenados no pipeline de mídia (tamanho limitado por
mediaMaxMb). - Mensagens do Google Chat criadas por bots são ignoradas por padrão. Se você definir intencionalmente
allowBots: true, mensagens criadas por bots aceitas usam a proteção compartilhada contra loop de bot. Configurechannels.defaults.botLoopProtectione então substitua porchannels.googlechat.botLoopProtectionouchannels.googlechat.groups.<space>.botLoopProtectionquando um espaço precisar de um orçamento diferente.
Detalhes de referência de segredos: Gerenciamento de segredos.
Solução de problemas
405 Método não permitido
Se o Explorador de registros do Google Cloud mostrar erros como:
status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not AllowedIsso significa que o manipulador do webhook não está registrado. Causas comuns:
-
Canal não configurado: a seção
channels.googlechatestá ausente da sua configuração. Verifique com:bash openclaw config get channels.googlechatSe retornar "Caminho de configuração não encontrado", adicione a configuração (consulte Destaques da configuração).
-
Plugin não ativado: verifique o status do plugin:
bash openclaw plugins list | grep googlechatSe mostrar "desativado", adicione
plugins.entries.googlechat.enabled: trueà sua configuração. -
Gateway não reiniciado: depois de adicionar a configuração, reinicie o gateway:
bash openclaw gateway restart
Verifique se o canal está em execução:
openclaw channels status# Should show: Google Chat default: enabled, configured, ...Outros problemas
- Verifique
openclaw channels status --probepara erros de autenticação ou configuração de público ausente. - Se nenhuma mensagem chegar, confirme a URL do webhook + assinaturas de eventos do app do Chat.
- Se a exigência de menção bloquear respostas, defina
botUsercomo o nome do recurso de usuário do app e verifiquerequireMention. - Use
openclaw logs --followao enviar uma mensagem de teste para ver se as solicitações chegam ao gateway.
Documentos relacionados:
Relacionado
- Visão geral dos canais — todos os canais compatíveis
- Pareamento — autenticação por DM e fluxo de pareamento
- Grupos — comportamento de chat em grupo e controle por menções
- Roteamento de canais — roteamento de sessões para mensagens
- Segurança — modelo de acesso e reforço de segurança