Hoppa till huvudinnehåll

Gmail Pub/Sub -> OpenClaw

Mål: Gmail watch -> Pub/Sub push -> gog gmail watch serve -> OpenClaw-webhook.

Förutsättningar

  • gcloud installerat och inloggat (installationsguide).
  • gog (gogcli) installerat och auktoriserat för Gmail-kontot (gogcli.sh).
  • OpenClaw-hooks aktiverade (se Webhooks).
  • tailscale inloggad (tailscale.com). Konfigurationen som stöds använder Tailscale Funnel för den offentliga HTTPS-slutpunkten. Andra tunneltjänster kan fungera, men är DIY/ej stödda och kräver manuell ledning. Just nu är Tailscale vad vi stöder.
Exempel på hook-konfig (aktivera Gmail-förinställd mappning):
{
  hooks: {
    enabled: true,
    token: "OPENCLAW_HOOK_TOKEN",
    path: "/hooks",
    presets: ["gmail"],
  },
}
För att leverera Gmail-sammanfattningen till en chattkanal, åsidosätt förinställningen med en mappning som sätter deliver + valfri channel/to:
{
  hooks: {
    enabled: true,
    token: "OPENCLAW_HOOK_TOKEN",
    presets: ["gmail"],
    mappings: [
      {
        match: { path: "gmail" },
        action: "agent",
        wakeMode: "now",
        name: "Gmail",
        sessionKey: "hook:gmail:{{messages[0].id}}",
        messageTemplate: "New email from {{messages[0].from}}\nSubject: {{messages[0].subject}}\n{{messages[0].snippet}}\n{{messages[0].body}}",
        model: "openai/gpt-5.2-mini",
        deliver: true,
        channel: "last",
        // to: "+15551234567"
      },
    ],
  },
}
Om du vill ha en fast kanal, sätt channel + to. Annars channel: "last" använder den senaste leveransvägen (faller tillbaka till WhatsApp). För att tvinga fram en billigare modell för Gmail-körningar, sätt model i kartläggningen (provider/model eller alias). Om du genomdriver agents.defaults.models, inkludera den där. För att sätta en standardmodell och tänkenivå specifikt för Gmail-hooks, lägg till hooks.gmail.model / hooks.gmail.thinking i din konfig:
{
  hooks: {
    gmail: {
      model: "openrouter/meta-llama/llama-3.3-70b-instruct:free",
      thinking: "off",
    },
  },
}
Noteringar:
  • Per-hook model/thinking i mappningen åsidosätter fortfarande dessa standarder.
  • Reservordning: hooks.gmail.modelagents.defaults.model.fallbacks → primär (auth/rate-limit/timeouts).
  • Om agents.defaults.models är satt måste Gmail-modellen finnas i tillåtelselistan.
  • Gmail-hook innehåll är insvept med externa säkerhetsgränser för innehåll som standard. För att inaktivera (farlig), sätt hooks.gmail.allowUnsafeExternalInnehåll: true.
För att anpassa payload-hanteringen ytterligare, lägg till hooks.mappings eller en JS/TS-transformmodul under hooks.transformsDir (se Webhooks).

Guide (rekommenderas)

Använd OpenClaw-hjälparen för att koppla ihop allt (installerar beroenden på macOS via brew):
openclaw webhooks gmail setup \
  --account [email protected]
Standarder:
  • Använder Tailscale Funnel för den publika push-slutpunkten.
  • Skriver hooks.gmail-konfig för openclaw webhooks gmail run.
  • Aktiverar Gmail-hook-förinställningen (hooks.presets: ["gmail"]).
Sökvägskommentaren: när tailscale.mode är aktiverat, sätter OpenClaw automatiskt hooks.gmail.serve.path till / och behåller den offentliga sökvägen på hooks. mail.tailscale.path (standard /gmail-pubsub) eftersom Tailscale tar bort set-path-prefixet innan proxying. Om du behöver backend för att få den prefixerade sökvägen anger du hooks.gmail.tailscale.target (eller --tailscale-target) till en fullständig URL som http://127.0.0.1:8788/gmail-pubsub och matchar hooks.gmail.serve.path. Vill du ha en anpassad slutpunkt? Använd --push-endpoint <url> eller --tailscale off. Plattformsnotis: på macOS installerar guiden gcloud, gogcli och tailscale via Homebrew; på Linux installerar du dem manuellt först. Gateway auto-start (rekommenderas):
  • När hooks.enabled=true och hooks.gmail.account är satt startar Gateway gog gmail watch serve vid uppstart och förnyar watch automatiskt.
  • Sätt OPENCLAW_SKIP_GMAIL_WATCHER=1 för att välja bort (användbart om du kör daemonen själv).
  • Kör inte den manuella daemonen samtidigt, annars får du listen tcp 127.0.0.1:8788: bind: address already in use.
Manuell daemon (startar gog gmail watch serve + auto-förnyelse):
openclaw webhooks gmail run

Engångsinställning

  1. Välj GCP-projektet som äger OAuth-klienten som används av gog.
gcloud auth login
gcloud config set project <project-id>
Obs: Gmail watch kräver att Pub/Sub-ämnet finns i samma projekt som OAuth-klienten.
  1. Aktivera API:er:
gcloud services enable gmail.googleapis.com pubsub.googleapis.com
  1. Skapa ett ämne:
gcloud pubsub topics create gog-gmail-watch
  1. Tillåt att Gmail-push publicerar:
gcloud pubsub topics add-iam-policy-binding gog-gmail-watch \
  --member=serviceAccount:[email protected] \
  --role=roles/pubsub.publisher

Starta watch

gog gmail watch start \
  --account [email protected] \
  --label INBOX \
  --topic projects/<project-id>/topics/gog-gmail-watch
Spara history_id från utdata (för felsökning).

Kör push-hanteraren

Lokalt exempel (delad token-auth):
gog gmail watch serve \
  --account [email protected] \
  --bind 127.0.0.1 \
  --port 8788 \
  --path /gmail-pubsub \
  --token <shared> \
  --hook-url http://127.0.0.1:18789/hooks/gmail \
  --hook-token OPENCLAW_HOOK_TOKEN \
  --include-body \
  --max-bytes 20000
Noteringar:
  • --token skyddar push-slutpunkten (x-gog-token eller ?token=).
  • --hook-url pekar på OpenClaw /hooks/gmail (mappad; isolerad körning + sammanfattning till huvud).
  • --include-body och --max-bytes styr body-snippet som skickas till OpenClaw.
Rekommenderat: openclaw webhooks gmail run omsluter samma flöde och förnyar watch automatiskt.

Exponera hanteraren (avancerat, ej stödd)

Om du behöver en icke-Tailscale-tunnel, koppla den manuellt och använd den publika URL:en i push- prenumerationen (ej stödd, inga skyddsräcken):
cloudflared tunnel --url http://127.0.0.1:8788 --no-autoupdate
Använd den genererade URL:en som push-slutpunkt:
gcloud pubsub subscriptions create gog-gmail-watch-push \
  --topic gog-gmail-watch \
  --push-endpoint "https://<public-url>/gmail-pubsub?token=<shared>"
Produktion: använd en stabil HTTPS-slutpunkt och konfigurera Pub/Sub OIDC JWT, kör sedan:
gog gmail watch serve --verify-oidc --oidc-email <svc@...>

Test

Skicka ett meddelande till den bevakade inkorgen:
gog gmail send \
  --account [email protected] \
  --to [email protected] \
  --subject "watch test" \
  --body "ping"
Kontrollera watch-status och historik:
gog gmail watch status --account [email protected]
gog gmail history --account [email protected] --since <historyId>

Felsökning

  • Invalid topicName: projektmatchningsfel (ämnet finns inte i OAuth-klientens projekt).
  • User not authorized: saknar roles/pubsub.publisher på ämnet.
  • Tomma meddelanden: Gmail-push tillhandahåller bara historyId; hämta via gog gmail history.

Rensa upp

gog gmail watch stop --account [email protected]
gcloud pubsub subscriptions delete gog-gmail-watch-push
gcloud pubsub topics delete gog-gmail-watch