OpenClaw mit Gmail verbinden: Automatisierung in 5 Minuten
Kennst du das? Du möchtest sofort auf eingehende E-Mails reagieren, aber das ständige Pollen der Gmail API ist ineffizient und verbraucht unnötig Ressourcen. Eine echte Event-gesteuerte Architektur ist hier die Lösung.
In dieser Anleitung zeige ich dir, wie du Gmail-Events über Google Cloud Pub/Sub direkt an deinen OpenClaw Webhook weiterleitest. So baust du eine reaktionsschnelle Pipeline, die deine E-Mails in Echtzeit verarbeitet.
Gmail Pub/Sub -> OpenClaw
Abschnitt betitelt „Gmail Pub/Sub -> OpenClaw“Ziel: Gmail watch -> Pub/Sub push -> gog gmail watch serve -> OpenClaw webhook.
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“gcloudinstalliert und eingeloggt (install guide).gog(gogcli) installiert und für den Gmail-Account autorisiert (gogcli.sh).- OpenClaw hooks aktiviert (siehe Webhooks).
tailscaleeingeloggt (tailscale.com). Das unterstützte Setup nutzt Tailscale Funnel für den öffentlichen HTTPS-Endpoint. Andere Tunnel-Dienste können funktionieren, sind aber DIY/unsupported und erfordern manuelle Konfiguration. Aktuell unterstützen wir offiziell Tailscale.
Beispiel für eine 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 zu senden, überschreibe das Preset mit einem Mapping, das deliver sowie optional 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 möchtest, setze channel + to. Ansonsten nutzt channel: "last" die letzte Delivery-Route (Fallback auf WhatsApp).
Um ein günstigeres Model für Gmail-Runs zu erzwingen, setze model im Mapping (provider/model oder Alias). Falls du agents.defaults.models nutzt, füge es dort hinzu.
Um ein Standard-Model und Thinking-Level speziell für Gmail-Hooks festzulegen, 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:
model/thinkingdirekt im Mapping überschreiben diese Standardwerte weiterhin.- Fallback-Reihenfolge:
hooks.gmail.model→agents.defaults.model.fallbacks→ primary (auth/rate-limit/timeouts). - Wenn
agents.defaults.modelsgesetzt ist, muss das Gmail-Model in der Allowlist stehen. - Gmail-Hook-Inhalte werden standardmäßig durch Sicherheitsgrenzen für externe Inhalte geschützt. Um dies zu deaktivieren (gefährlich), setze
hooks.gmail.allowUnsafeExternalContent: true.
Um das Payload-Handling weiter anzupassen, füge hooks.mappings oder ein JS/TS Transform-Modul unter hooks.transformsDir hinzu (siehe Webhooks).
Wizard (empfohlen)
Abschnitt betitelt „Wizard (empfohlen)“Nutze den OpenClaw Helper, um alles miteinander zu verknüpfen (installiert Abhängigkeiten auf macOS via brew):
openclaw webhooks gmail setup \ --account openclaw@gmail.comStandardwerte:
- Verwendet Tailscale Funnel für den öffentlichen Push-Endpoint.
- Schreibt die
hooks.gmailKonfiguration füropenclaw webhooks gmail run. - Aktiviert das Gmail-Hook-Preset (
hooks.presets: ["gmail"]).
Hinweis zum Pfad: 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), da Tailscale den Pfad-Präfix vor dem Proxying entfernt.
Falls das Backend den Pfad mit Präfix empfangen muss, setze hooks.gmail.tailscale.target (oder --tailscale-target) auf eine vollständige URL wie http://127.0.0.1:8788/gmail-pubsub und passe hooks.gmail.serve.path entsprechend an.
Du möchtest einen eigenen Endpoint? Nutze --push-endpoint <url> oder --tailscale off.
Plattform-Hinweis: Auf macOS installiert der Wizard gcloud, gogcli und tailscale via Homebrew; auf Linux installiere diese bitte vorher manuell.
Gateway Auto-Start (empfohlen):
- Wenn
hooks.enabled=trueundhooks.gmail.accountgesetzt sind, startet das Gateway beim Bootengog gmail watch serveund erneuert den Watch automatisch. - Setze
OPENCLAW_SKIP_GMAIL_WATCHER=1, um dies zu deaktivieren (nützlich, wenn du den Daemon selbst verwaltest). - Führe den manuellen Daemon nicht gleichzeitig aus, sonst erhältst du die Fehlermeldung
listen tcp 127.0.0.1:8788: bind: address already in use.
Manueller Daemon (startet gog gmail watch serve + Auto-Renew):
openclaw webhooks gmail runEinmalige Einrichtung
Abschnitt betitelt „Einmalige Einrichtung“- Wähle das GCP-Projekt aus, dem der von
gogverwendete OAuth-Client gehört.
gcloud auth logingcloud config set project <project-id>Hinweis: Gmail Watch erfordert, dass das Pub/Sub Topic im selben Projekt wie der OAuth-Client liegt.
- APIs aktivieren:
gcloud services enable gmail.googleapis.com pubsub.googleapis.com- Ein Topic erstellen:
gcloud pubsub topics create gog-gmail-watch- Gmail Push erlauben, Nachrichten zu veröffentlichen:
gcloud pubsub topics add-iam-policy-binding gog-gmail-watch \ --member=serviceAccount:gmail-api-push@system.gserviceaccount.com \ --role=roles/pubsub.publisherWatch starten
Abschnitt betitelt „Watch starten“gog gmail watch start \ --account openclaw@gmail.com \ --label INBOX \ --topic projects/<project-id>/topics/gog-gmail-watchSpeichere die history_id aus der Ausgabe (für Debugging-Zwecke).
Push-Handler ausführen
Abschnitt betitelt „Push-Handler ausführen“Lokales Beispiel (Shared Token Auth):
gog gmail watch serve \ --account openclaw@gmail.com \ --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 20000Hinweise:
--tokenschützt den Push-Endpoint (x-gog-tokenoder?token=).--hook-urlzeigt auf OpenClaw/hooks/gmail.--include-bodyund--max-bytessteuern den Body-Snippet, der an OpenClaw gesendet wird.
Empfohlen: openclaw webhooks gmail run kapselt diesen Flow und erneuert den Watch automatisch.
Handler freigeben (fortgeschritten, nicht unterstützt)
Abschnitt betitelt „Handler freigeben (fortgeschritten, nicht unterstützt)“Wenn du einen Tunnel abseits von Tailscale benötigst, konfiguriere diesen manuell und nutze die öffentliche URL in der Push-Subscription (unsupported, keine Guardrails):
cloudflared tunnel --url http://127.0.0.1:8788 --no-autoupdateNutze die generierte URL als Push-Endpoint:
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-Endpoint, konfiguriere Pub/Sub OIDC JWT und führe dann aus:
gog gmail watch serve --verify-oidc --oidc-email <svc@...>Sende eine Nachricht an das überwachte Postfach:
gog gmail send \ --account openclaw@gmail.com \ --to openclaw@gmail.com \ --subject "watch test" \ --body "ping"Überprüfe den Watch-Status und die Historie:
gog gmail watch status --account openclaw@gmail.comgog gmail history --account openclaw@gmail.com --since <historyId>Fehlerbehebung
Abschnitt betitelt „Fehlerbehebung“Invalid topicName: Projekt-Mismatch (Topic befindet sich nicht im Projekt des OAuth-Clients).User not authorized: Fehlenderoles/pubsub.publisherBerechtigung auf dem Topic.- Leere Nachrichten: Gmail Push liefert nur die
historyId; Daten müssen viagog gmail historyabgerufen werden.
Aufräumen
Abschnitt betitelt „Aufräumen“gog gmail watch stop --account openclaw@gmail.comgcloud pubsub subscriptions delete gog-gmail-watch-pushgcloud pubsub topics delete gog-gmail-watchNächste Schritte
Abschnitt betitelt „Nächste Schritte“OpenClaw Expert
Noch festgefahren?
Wenn diese Seite nicht hilft, frage OpenClaw Expert nach Schritt-fuer-Schritt-Loesungen.