Mainstream messaging
Google Chat
Status: Plugin baixável para mensagens diretas + espaços via Webhooks da Google Chat API (apenas HTTP).
Instalação
Instale o Google Chat antes de configurar o canal:
openclaw plugins install @openclaw/googlechat
Checkout local (ao executar a partir de um repositório git):
openclaw plugins install ./path/to/local/googlechat-plugin
Configuração rápida (iniciante)
- Crie um projeto do Google Cloud e habilite a Google Chat API.
- Acesse: Credenciais da Google Chat API
- Habilite a API se ela ainda não estiver habilitada.
- 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 na que você acabou de criar.
- Vá para 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 Google Cloud Console:
- Preencha as Informações do app:
- 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,
- Habilite 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 Acionadores, selecione Usar uma URL de endpoint HTTP comum para todos os acionadores 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,
[email protected]) na caixa de texto. - Clique em Salvar na parte inferior.
- Preencha as Informações do app:
- Habilite 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 Ativo - disponível para usuários.
- Clique em Salvar novamente.
- Configure o OpenClaw com o caminho da conta de serviço + o público-alvo do Webhook:
- Env:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - Ou configuração:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json".
- Env:
- Defina o tipo + valor do público-alvo 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
Quando o Gateway estiver em execução e seu e-mail tiver sido 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 você configurou no Google Cloud Console.
- 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 à internet somente o caminho /googlechat. Mantenha o painel do OpenClaw e outros endpoints sensíveis na sua rede privada.
Opção A: Tailscale Funnel (recomendado)
Use o Tailscale Serve para o painel privado e o 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:
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 à tailnet (porta 8443):
# 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:
# 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 mostrada na saída para habilitar o Funnel para este Node na política da sua tailnet.
-
Verifique a configuração:
tailscale serve status tailscale funnel status
Sua URL pública de 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 após reinicializações. Para removê-la mais tarde, 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 tunnel 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 de Webhook 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 limite de corpo pré-autenticação mais estrito.
- O OpenClaw verifica o token em relação ao
audienceType+audienceconfigurados:audienceType: "app-url"→ o público-alvo é a URL HTTPS do seu Webhook.audienceType: "project-number"→ o público-alvo é o número do projeto Cloud.
- As mensagens são roteadas por espaço:
- Mensagens diretas usam a chave de sessão
agent:<agentId>:googlechat:direct:<spaceId>. - Espaços usam a chave de sessão
agent:<agentId>:googlechat:group:<spaceId>.
- Mensagens diretas usam a chave de sessão
- O acesso a mensagens diretas 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.
Destinos
Use estes identificadores para entrega e listas de permissão:
- Mensagens diretas:
users/<userId>(recomendado). - E-mail bruto
[email protected]é mutável e usado somente para correspondência de lista de permissão direta 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
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:
- Credenciais de conta de serviço também podem ser passadas diretamente com
serviceAccount(string JSON). serviceAccountReftambém é compatível (env/file SecretRef), incluindo referências por conta emchannels.googlechat.accounts.<id>.serviceAccountRef.- O caminho padrão do Webhook é
/googlechatsewebhookPathnão estiver definido. dangerouslyAllowNameMatchingreabilita 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á habilitado. - Ações de mensagem expõem
sendpara texto eupload-filepara envios explícitos de anexos.upload-fileaceitamedia/filePath/pathmaismessage,filenamee direcionamento de thread opcionais. typingIndicatoré compatível comnone,message(padrão) ereaction(reação exige OAuth de usuário).- Anexos são baixados pela Chat API e armazenados no pipeline de mídia (tamanho limitado por
mediaMaxMb).
Detalhes de referência de segredos: Gerenciamento de segredos.
Solução de problemas
405 Método não permitido
Se o Google Cloud Logs Explorer mostrar erros como:
status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not Allowed
Isso 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:openclaw config get channels.googlechatSe retornar "Config path not found", adicione a configuração (consulte Destaques da configuração).
-
Plugin não habilitado: verifique o status do Plugin:
openclaw plugins list | grep googlechatSe mostrar "disabled", adicione
plugins.entries.googlechat.enabled: trueà sua configuração. -
Gateway não reiniciado: depois de adicionar a configuração, reinicie o Gateway:
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 --probeem busca de erros de autenticação ou configuração de público-alvo ausente. - Se nenhuma mensagem chegar, confirme a URL de Webhook + assinaturas de eventos do app do Chat.
- Se o bloqueio por menção impedir respostas, defina
botUsercomo o nome de 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:
Relacionados
- Visão geral dos canais — todos os canais compatíveis
- Pareamento — autenticação de mensagens diretas e fluxo de pareamento
- Grupos — comportamento de chats em grupo e bloqueio por menção
- Roteamento de canais — roteamento de sessões para mensagens
- Segurança — modelo de acesso e reforço de segurança