Skip to main content

Gmail Pub/Sub -> OpenClaw

Objetivo: monitoramento do Gmail -> push do Pub/Sub -> gog gmail watch serve -> webhook do OpenClaw.

Pré-requisitos

  • gcloud instalado 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).
  • tailscale com 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.
Exemplo de configuração do hook (habilita o mapeamento predefinido do Gmail):
Para entregar o resumo do Gmail a uma superfície de chat, substitua o preset por um mapeamento que defina deliver + opcional channel/to:
Se você quiser um canal fixo, defina 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:
Notas:
  • model/thinking por hook no mapeamento ainda substitui esses padrões.
  • Ordem de fallback: hooks.gmail.modelagents.defaults.model.fallbacks → primário (autenticação/limite de taxa/timeouts).
  • Se agents.defaults.models estiver 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), defina hooks.gmail.allowUnsafeExternalContent: true.
Para personalizar ainda mais o tratamento do payload, adicione 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):
Padrões:
  • Usa o Tailscale Funnel para o endpoint público de push.
  • Grava a configuração hooks.gmail para openclaw webhooks gmail run.
  • Habilita o preset de hook do Gmail (hooks.presets: ["gmail"]).
Nota sobre caminho: quando 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=true e hooks.gmail.account estão definidos, o Gateway inicia gog gmail watch serve na inicialização e renova automaticamente o watch.
  • Defina OPENCLAW_SKIP_GMAIL_WATCHER=1 para 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.
Daemon manual (inicia gog gmail watch serve + renovação automática):

Configuração única

  1. Selecione o projeto do GCP que possui o cliente OAuth usado por gog.
Nota: o watch do Gmail exige que o tópico do Pub/Sub esteja no mesmo projeto que o cliente OAuth.
  1. Habilite as APIs:
  1. Crie um tópico:
  1. Permita que o push do Gmail publique:

Iniciar o watch

Salve o history_id da saída (para depuração).

Executar o handler de push

Exemplo local (autenticação por token compartilhado):
Notas:
  • --token protege o endpoint de push (x-gog-token ou ?token=).
  • --hook-url aponta para o OpenClaw /hooks/gmail (mapeado; execução isolada + resumo para o principal).
  • --include-body e --max-bytes controlam o trecho do corpo enviado ao OpenClaw.
Recomendado: 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):
Use a URL gerada como endpoint de push:
Produção: use um endpoint HTTPS estável e configure OIDC JWT do Pub/Sub, depois execute:

Teste

Envie uma mensagem para a caixa de entrada monitorada:
Verifique o estado do watch e o histórico:

Solução de problemas

  • Invalid topicName: incompatibilidade de projeto (tópico não está no projeto do cliente OAuth).
  • User not authorized: falta de roles/pubsub.publisher no tópico.
  • Mensagens vazias: o push do Gmail fornece apenas historyId; busque via gog gmail history.

Limpeza