Gmail Pub/Sub -> OpenClaw
Objetivo: monitoramento do Gmail -> push do Pub/Sub ->gog gmail watch serve -> webhook do OpenClaw.
Pré-requisitos
gcloudinstalado e com login efetuado (guia de instalação).gog(gogcli) instalado e autorizado para a conta do Gmail (gogcli.sh).- Hooks do OpenClaw habilitados (veja Webhooks).
tailscalecom login efetuado (tailscale.com). A configuração suportada usa o Tailscale Funnel para o endpoint HTTPS público. Outros serviços de túnel podem funcionar, mas são DIY/não suportados e exigem configuração manual. No momento, o Tailscale é o que oferecemos suporte.
deliver + opcional channel/to:
channel + to. Caso contrário, channel: "last"
usa a última rota de entrega (retorna para o WhatsApp).
Para forçar um modelo mais barato para execuções do Gmail, defina model no mapeamento
(provider/model ou alias). Se você aplicar agents.defaults.models, inclua-o ali.
Para definir um modelo padrão e nível de pensamento especificamente para hooks do Gmail, adicione
hooks.gmail.model / hooks.gmail.thinking na sua configuração:
model/thinkingpor hook no mapeamento ainda substitui esses padrões.- Ordem de fallback:
hooks.gmail.model→agents.defaults.model.fallbacks→ primário (autenticação/limite de taxa/timeouts). - Se
agents.defaults.modelsestiver definido, o modelo do Gmail deve estar na lista de permissões. - O conteúdo do hook do Gmail é envolvido por limites de segurança de conteúdo externo por padrão.
Para desativar (perigoso), defina
hooks.gmail.allowUnsafeExternalContent: true. Para desativar (perigoso), definahooks.gmail.allowUnsafeExternalContent: true.
hooks.mappings ou um módulo de transformação JS/TS
em hooks.transformsDir (veja Webhooks).
Assistente (recomendado)
Use o helper do OpenClaw para conectar tudo (instala dependências no macOS via brew):- Usa o Tailscale Funnel para o endpoint público de push.
- Grava a configuração
hooks.gmailparaopenclaw webhooks gmail run. - Habilita o preset de hook do Gmail (
hooks.presets: ["gmail"]).
tailscale.mode está habilitado, o OpenClaw define automaticamente
hooks.gmail.serve.path como / e mantém o caminho público em
hooks.gmail.tailscale.path (padrão /gmail-pubsub) porque o Tailscale
remove o prefixo set-path antes de fazer o proxy.
Se você precisar que o backend receba o caminho com prefixo, defina
hooks.gmail.tailscale.target (ou --tailscale-target) para uma URL completa como
http://127.0.0.1:8788/gmail-pubsub e corresponda hooks.gmail.serve.path.
Quer um endpoint personalizado? Use --push-endpoint <url> ou --tailscale off.
Nota de plataforma: no macOS o assistente instala gcloud, gogcli e tailscale
via Homebrew; no Linux, instale-os manualmente antes.
Inicialização automática do Gateway (recomendado):
- Quando
hooks.enabled=trueehooks.gmail.accountestão definidos, o Gateway iniciagog gmail watch servena inicialização e renova automaticamente o watch. - Defina
OPENCLAW_SKIP_GMAIL_WATCHER=1para optar por não usar (útil se você executa o daemon por conta própria). - Não execute o daemon manual ao mesmo tempo, ou você enfrentará
listen tcp 127.0.0.1:8788: bind: address already in use.
gog gmail watch serve + renovação automática):
Configuração única
- Selecione o projeto do GCP que possui o cliente OAuth usado por
gog.
- Habilite as APIs:
- Crie um tópico:
- Permita que o push do Gmail publique:
Iniciar o watch
history_id da saída (para depuração).
Executar o handler de push
Exemplo local (autenticação por token compartilhado):--tokenprotege o endpoint de push (x-gog-tokenou?token=).--hook-urlaponta para o OpenClaw/hooks/gmail(mapeado; execução isolada + resumo para o principal).--include-bodye--max-bytescontrolam o trecho do corpo enviado ao OpenClaw.
openclaw webhooks gmail run envolve o mesmo fluxo e renova automaticamente o watch.
Expor o handler (avançado, não suportado)
Se você precisar de um túnel que não seja Tailscale, conecte manualmente e use a URL pública na assinatura de push (não suportado, sem proteções):Teste
Envie uma mensagem para a caixa de entrada monitorada:Solução de problemas
Invalid topicName: incompatibilidade de projeto (tópico não está no projeto do cliente OAuth).User not authorized: falta deroles/pubsub.publisherno tópico.- Mensagens vazias: o push do Gmail fornece apenas
historyId; busque viagog gmail history.