Gmail Pub/Sub -> OpenClaw
Ziel: Gmail Watch -> Pub/Sub Push -> gog gmail watch serve -> OpenClaw Webhook.
Voraussetzungen
gcloudinstalliert und eingeloggt (Installationsanleitung).gog(gogcli) installiert und für das Gmail-Konto autorisiert (gogcli.sh).- OpenClaw Hooks aktiviert (siehe Webhooks).
tailscaleeingeloggt (tailscale.com). Das unterstützte Setup nutzt Tailscale Funnel für den öffentlichen HTTPS-Endpunkt. Andere Tunnel-Dienste funktionieren möglicherweise, sind aber DIY/nicht unterstützt und erfordern manuelle Verkabelung. Aktuell unterstützen wir Tailscale.
Beispiel-Hook-Konfiguration (Gmail-Preset-Mapping aktivieren):
{
hooks: {
enabled: true,
token: "OPENCLAW_HOOK_TOKEN",
path: "/hooks",
presets: ["gmail"],
},
}
Um die Gmail-Zusammenfassung an eine Chat-Oberfläche zuzustellen, überschreibe das Preset mit einem Mapping,
das deliver + optionales channel/to setzt:
{
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"
},
],
},
}
Wenn du einen festen Channel willst, setze channel + to. Ansonsten nutzt channel: "last"
die letzte Zustellroute (Fallback auf WhatsApp).
Um ein günstigeres Modell für Gmail-Läufe zu erzwingen, setze model im Mapping
(provider/model oder Alias). Wenn du agents.defaults.models erzwingst, nimm es dort mit auf.
Um ein Standard-Modell und Thinking-Level speziell für Gmail-Hooks zu setzen, füge
hooks.gmail.model / hooks.gmail.thinking in deine Konfiguration ein:
{
hooks: {
gmail: {
model: "openrouter/meta-llama/llama-3.3-70b-instruct:free",
thinking: "off",
},
},
}
Hinweise:
- Per-Hook
model/thinkingim Mapping überschreibt diese Standardwerte trotzdem. - Fallback-Reihenfolge:
hooks.gmail.model→agents.defaults.model.fallbacks→ primär (auth/rate-limit/timeouts). - Wenn
agents.defaults.modelsgesetzt ist, muss das Gmail-Modell in der Allowlist stehen. - Gmail-Hook-Inhalte werden standardmäßig mit Sicherheitsgrenzen für externen Content umschlossen.
Um das zu deaktivieren (gefährlich), setze
hooks.gmail.allowUnsafeExternalContent: true.
Für weitergehende Anpassung der Payload-Behandlung füge hooks.mappings oder ein JS/TS-Transform-Modul
unter ~/.openclaw/hooks/transforms hinzu (siehe Webhooks).
Assistent (empfohlen)
Nutze den OpenClaw-Helfer, um alles zu verkabeln (installiert Abhängigkeiten auf macOS via brew):
openclaw webhooks gmail setup \
--account [email protected]
Standardwerte:
- Nutzt Tailscale Funnel für den öffentlichen Push-Endpunkt.
- Schreibt
hooks.gmail-Konfiguration füropenclaw webhooks gmail run. - Aktiviert das Gmail-Hook-Preset (
hooks.presets: ["gmail"]).
Pfad-Hinweis: Wenn tailscale.mode aktiviert ist, setzt OpenClaw automatisch
hooks.gmail.serve.path auf / und behält den öffentlichen Pfad bei
hooks.gmail.tailscale.path (Standard /gmail-pubsub), weil Tailscale
das set-path-Präfix vor dem Proxying entfernt.
Wenn das Backend den Pfad mit Präfix erhalten soll, setze
hooks.gmail.tailscale.target (oder --tailscale-target) auf eine vollständige URL wie
http://127.0.0.1:8788/gmail-pubsub und stimme hooks.gmail.serve.path darauf ab.
Eigenen Endpunkt nutzen? Verwende --push-endpoint <url> oder --tailscale off.
Plattform-Hinweis: Auf macOS installiert der Assistent gcloud, gogcli und tailscale
via Homebrew; auf Linux installiere sie vorher manuell.
Gateway Auto-Start (empfohlen):
- Wenn
hooks.enabled=trueundhooks.gmail.accountgesetzt ist, startet das Gatewaygog gmail watch servebeim Hochfahren und erneuert die Watch automatisch. - Setze
OPENCLAW_SKIP_GMAIL_WATCHER=1zum Abmelden (nützlich wenn du den Daemon selbst betreibst). - Starte den manuellen Daemon nicht gleichzeitig, sonst bekommst du
listen tcp 127.0.0.1:8788: bind: address already in use.
Manueller Daemon (startet gog gmail watch serve + Auto-Erneuerung):
openclaw webhooks gmail run
Einmalige Einrichtung
- Wähle das GCP-Projekt, das den OAuth-Client besitzt, den
gognutzt.
gcloud auth login
gcloud config set project <project-id>
Hinweis: Gmail Watch erfordert, dass das Pub/Sub-Topic im gleichen Projekt wie der OAuth-Client liegt.
- APIs aktivieren:
gcloud services enable gmail.googleapis.com pubsub.googleapis.com
- Topic erstellen:
gcloud pubsub topics create gog-gmail-watch
- Gmail Push das Veröffentlichen erlauben:
gcloud pubsub topics add-iam-policy-binding gog-gmail-watch \
--member=serviceAccount:[email protected] \
--role=roles/pubsub.publisher
Watch starten
gog gmail watch start \
--account [email protected] \
--label INBOX \
--topic projects/<project-id>/topics/gog-gmail-watch
Speichere die history_id aus der Ausgabe (für Debugging).
Push-Handler starten
Lokales Beispiel (Shared-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
Hinweise:
--tokenschützt den Push-Endpunkt (x-gog-tokenoder?token=).--hook-urlzeigt auf OpenClaw/hooks/gmail(gemappt; isolierter Lauf + Zusammenfassung in Main).--include-bodyund--max-bytessteuern das Body-Snippet, das an OpenClaw gesendet wird.
Empfohlen: openclaw webhooks gmail run umschließt den gleichen Flow und erneuert die Watch automatisch.
Handler exponieren (fortgeschritten, nicht unterstützt)
Wenn du einen Nicht-Tailscale-Tunnel brauchst, verkable ihn manuell und nutze die öffentliche URL in der Push- Subscription (nicht unterstützt, ohne Sicherheitsnetz):
cloudflared tunnel --url http://127.0.0.1:8788 --no-autoupdate
Nutze die generierte URL als Push-Endpunkt:
gcloud pubsub subscriptions create gog-gmail-watch-push \
--topic gog-gmail-watch \
--push-endpoint "https://<public-url>/gmail-pubsub?token=<shared>"
Produktion: Nutze einen stabilen HTTPS-Endpunkt und konfiguriere Pub/Sub OIDC JWT, dann starte:
gog gmail watch serve --verify-oidc --oidc-email <svc@...>
Test
Sende eine Nachricht an die überwachte Inbox:
gog gmail send \
--account [email protected] \
--to [email protected] \
--subject "watch test" \
--body "ping"
Watch-Status und History prüfen:
gog gmail watch status --account [email protected]
gog gmail history --account [email protected] --since <historyId>
Fehlerbehebung
Invalid topicName: Projektkonflikt (Topic nicht im OAuth-Client-Projekt).User not authorized:roles/pubsub.publisherfehlt auf dem Topic.- Leere Nachrichten: Gmail Push liefert nur
historyId; pergog gmail historyabrufen.
Aufräumen
gog gmail watch stop --account [email protected]
gcloud pubsub subscriptions delete gog-gmail-watch-push
gcloud pubsub topics delete gog-gmail-watch