Zum Inhalt springen

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.

Ziel: Gmail watch -> Pub/Sub push -> gog gmail watch serve -> OpenClaw webhook.

  • gcloud installiert und eingeloggt (install guide).
  • gog (gogcli) installiert und für den Gmail-Account autorisiert (gogcli.sh).
  • OpenClaw hooks aktiviert (siehe Webhooks).
  • tailscale eingeloggt (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/thinking direkt im Mapping überschreiben diese Standardwerte weiterhin.
  • Fallback-Reihenfolge: hooks.gmail.model → agents.defaults.model.fallbacks → primary (auth/rate-limit/timeouts).
  • Wenn agents.defaults.models gesetzt 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).

Nutze den OpenClaw Helper, um alles miteinander zu verknüpfen (installiert Abhängigkeiten auf macOS via brew):

Terminal-Fenster
openclaw webhooks gmail setup \
--account openclaw@gmail.com

Standardwerte:

  • Verwendet Tailscale Funnel für den öffentlichen Push-Endpoint.
  • Schreibt die hooks.gmail Konfiguration für openclaw 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=true und hooks.gmail.account gesetzt sind, startet das Gateway beim Booten gog gmail watch serve und 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):

Terminal-Fenster
openclaw webhooks gmail run
  1. Wähle das GCP-Projekt aus, dem der von gog verwendete OAuth-Client gehört.
Terminal-Fenster
gcloud auth login
gcloud config set project <project-id>

Hinweis: Gmail Watch erfordert, dass das Pub/Sub Topic im selben Projekt wie der OAuth-Client liegt.

  1. APIs aktivieren:
Terminal-Fenster
gcloud services enable gmail.googleapis.com pubsub.googleapis.com
  1. Ein Topic erstellen:
Terminal-Fenster
gcloud pubsub topics create gog-gmail-watch
  1. Gmail Push erlauben, Nachrichten zu veröffentlichen:
Terminal-Fenster
gcloud pubsub topics add-iam-policy-binding gog-gmail-watch \
--member=serviceAccount:gmail-api-push@system.gserviceaccount.com \
--role=roles/pubsub.publisher
Terminal-Fenster
gog gmail watch start \
--account openclaw@gmail.com \
--label INBOX \
--topic projects/<project-id>/topics/gog-gmail-watch

Speichere die history_id aus der Ausgabe (für Debugging-Zwecke).

Lokales Beispiel (Shared Token Auth):

Terminal-Fenster
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 20000

Hinweise:

  • --token schützt den Push-Endpoint (x-gog-token oder ?token=).
  • --hook-url zeigt auf OpenClaw /hooks/gmail.
  • --include-body und --max-bytes steuern 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):

Terminal-Fenster
cloudflared tunnel --url http://127.0.0.1:8788 --no-autoupdate

Nutze die generierte URL als Push-Endpoint:

Terminal-Fenster
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:

Terminal-Fenster
gog gmail watch serve --verify-oidc --oidc-email <svc@...>

Sende eine Nachricht an das überwachte Postfach:

Terminal-Fenster
gog gmail send \
--account openclaw@gmail.com \
--to openclaw@gmail.com \
--subject "watch test" \
--body "ping"

Überprüfe den Watch-Status und die Historie:

Terminal-Fenster
gog gmail watch status --account openclaw@gmail.com
gog gmail history --account openclaw@gmail.com --since <historyId>
  • Invalid topicName: Projekt-Mismatch (Topic befindet sich nicht im Projekt des OAuth-Clients).
  • User not authorized: Fehlende roles/pubsub.publisher Berechtigung auf dem Topic.
  • Leere Nachrichten: Gmail Push liefert nur die historyId; Daten müssen via gog gmail history abgerufen werden.
Terminal-Fenster
gog gmail watch stop --account openclaw@gmail.com
gcloud pubsub subscriptions delete gog-gmail-watch-push
gcloud pubsub topics delete gog-gmail-watch

AI Setup Assistant

OpenClaw

OpenClaw Expert

Noch festgefahren?

Wenn diese Seite nicht hilft, frage OpenClaw Expert nach Schritt-fuer-Schritt-Loesungen.