Gmail Pub/Sub -> OpenClaw¶
Objectif : surveillance Gmail -> push Pub/Sub -> gog gmail watch serve -> webhook OpenClaw.
Prérequis¶
gcloudinstallĂ© et connectĂ© (guide dâinstallation).gog(gogcli) installĂ© et autorisĂ© pour le compte Gmail (gogcli.sh).- Webhooks OpenClaw activĂ©s (voir Webhooks).
tailscaleconnectĂ© (tailscale.com). La configuration prise en charge utilise Tailscale Funnel pour le point de terminaison HTTPS public. Dâautres services de tunnel peuvent fonctionner, mais sont DIY/non pris en charge et nĂ©cessitent un cĂąblage manuel. Actuellement, Tailscale est ce que nous prenons en charge.
Exemple de configuration de hook (activer le mapping prédéfini Gmail) :
{
hooks: {
enabled: true,
token: "OPENCLAW_HOOK_TOKEN",
path: "/hooks",
presets: ["gmail"],
},
}
Pour livrer le résumé Gmail vers une surface de discussion, remplacez le prédéfini par un mapping
qui définit deliver + channel/to en option :
{
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"
},
],
},
}
Si vous souhaitez un canal fixe, définissez channel + to. Sinon channel: "last"
utilise la derniĂšre route de livraison (retombe sur WhatsApp).
Pour forcer un modÚle moins coûteux pour les exécutions Gmail, définissez model dans le mapping
(provider/model ou alias). Si vous imposez agents.defaults.models, incluez-le ici.
Pour définir un modÚle par défaut et un niveau de réflexion spécifiquement pour les hooks Gmail, ajoutez
hooks.gmail.model / hooks.gmail.thinking dans votre configuration :
{
hooks: {
gmail: {
model: "openrouter/meta-llama/llama-3.3-70b-instruct:free",
thinking: "off",
},
},
}
Remarques :
- Les
model/thinkingpar hook dans le mapping remplacent toujours ces valeurs par défaut. - Ordre de repli :
hooks.gmail.modelâagents.defaults.model.fallbacksâ primaire (auth/limitation de dĂ©bit/dĂ©lais). - Si
agents.defaults.modelsest dĂ©fini, le modĂšle Gmail doit ĂȘtre dans la liste dâautorisation. - Le contenu du hook Gmail est enveloppĂ© par dĂ©faut avec des limites de sĂ©curitĂ© de contenu externe.
Pour désactiver (dangereux), définissez
hooks.gmail.allowUnsafeExternalContent: true.
Pour personnaliser davantage la gestion du payload, ajoutez hooks.mappings ou un module de transformation JS/TS
sous hooks.transformsDir (voir Webhooks).
Assistant (recommandé)¶
Utilisez lâassistant OpenClaw pour tout cĂąbler (installe les dĂ©pendances sur macOS via brew) :
openclaw webhooks gmail setup \
--account openclaw@gmail.com
Valeurs par défaut :
- Utilise Tailscale Funnel pour le point de terminaison de push public.
- Ăcrit la configuration
hooks.gmailpouropenclaw webhooks gmail run. - Active le préréglage de hook Gmail (
hooks.presets: ["gmail"]).
Note de chemin : lorsque tailscale.mode est activé, OpenClaw définit automatiquement
hooks.gmail.serve.path sur / et conserve le chemin public Ă
hooks.gmail.tailscale.path (par défaut /gmail-pubsub) car Tailscale
supprime le préfixe de chemin défini avant le proxy.
Si vous avez besoin que le backend reçoive le chemin préfixé, définissez
hooks.gmail.tailscale.target (ou --tailscale-target) vers une URL complĂšte comme
http://127.0.0.1:8788/gmail-pubsub et faites correspondre hooks.gmail.serve.path.
Besoin dâun point de terminaison personnalisé ? Utilisez --push-endpoint <url> ou --tailscale off.
Note de plateforme : sur macOS, lâassistant installe gcloud, gogcli et tailscale
via Homebrew ; sur Linux, installez-les manuellement au préalable.
Démarrage automatique du Gateway (passerelle) (recommandé) :
- Lorsque
hooks.enabled=trueethooks.gmail.accountest défini, le Gateway démarregog gmail watch serveau démarrage et renouvelle automatiquement la surveillance. - Définissez
OPENCLAW_SKIP_GMAIL_WATCHER=1pour vous dĂ©sinscrire (utile si vous exĂ©cutez le daemon vousâmĂȘme). - NâexĂ©cutez pas le daemon manuel en mĂȘme temps, sinon vous rencontrerez
listen tcp 127.0.0.1:8788: bind: address already in use.
Daemon manuel (démarre gog gmail watch serve + renouvellement automatique) :
openclaw webhooks gmail run
Configuration unique¶
- Sélectionnez le projet GCP qui possÚde le client OAuth utilisé par
gog.
gcloud auth login
gcloud config set project <project-id>
Remarque : la surveillance Gmail exige que le topic Pub/Sub rĂ©side dans le mĂȘme projet que le client OAuth.
- Activer les APIÂ :
gcloud services enable gmail.googleapis.com pubsub.googleapis.com
- Créer un topic :
gcloud pubsub topics create gog-gmail-watch
- Autoriser Gmail push à publier :
gcloud pubsub topics add-iam-policy-binding gog-gmail-watch \
--member=serviceAccount:gmail-api-push@system.gserviceaccount.com \
--role=roles/pubsub.publisher
Démarrer la surveillance¶
gog gmail watch start \
--account openclaw@gmail.com \
--label INBOX \
--topic projects/<project-id>/topics/gog-gmail-watch
Enregistrez le history_id depuis la sortie (pour le débogage).
Exécuter le gestionnaire de push¶
Exemple local (authentification par jeton partagé) :
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
Remarques :
--tokenprotĂšge le point de terminaison push (x-gog-tokenou?token=).--hook-urlpointe vers OpenClaw/hooks/gmail(mappé ; exĂ©cution isolĂ©e + rĂ©sumĂ© vers le principal).--include-bodyet--max-bytescontrĂŽlent lâextrait du corps envoyĂ© Ă OpenClaw.
Recommandé : openclaw webhooks gmail run encapsule le mĂȘme flux et renouvelle automatiquement la surveillance.
Exposer le gestionnaire (avancé, non pris en charge)¶
Si vous avez besoin dâun tunnel autre que Tailscale, cĂąblez-le manuellement et utilisez lâURL publique dans la souscription push (non pris en charge, sans garde-fous)Â :
cloudflared tunnel --url http://127.0.0.1:8788 --no-autoupdate
Utilisez lâURL gĂ©nĂ©rĂ©e comme point de terminaison push :
gcloud pubsub subscriptions create gog-gmail-watch-push \
--topic gog-gmail-watch \
--push-endpoint "https://<public-url>/gmail-pubsub?token=<shared>"
Production : utilisez un point de terminaison HTTPS stable et configurez Pub/Sub OIDC JWT, puis exécutez :
gog gmail watch serve --verify-oidc --oidc-email <svc@...>
Test¶
Envoyez un message à la boßte de réception surveillée :
gog gmail send \
--account openclaw@gmail.com \
--to openclaw@gmail.com \
--subject "watch test" \
--body "ping"
VĂ©rifiez lâĂ©tat de la surveillance et lâhistorique :
gog gmail watch status --account openclaw@gmail.com
gog gmail history --account openclaw@gmail.com --since <historyId>
Problemes courants¶
Invalid topicName : incohĂ©rence de projet (le topic nâest pas dans le projet du client OAuth).User not authorized :roles/pubsub.publishermanquant sur le topic.- Messages vides : le push Gmail ne fournit que
historyId ; récupérez viagog gmail history.
Nettoyage¶
gog gmail watch stop --account openclaw@gmail.com
gcloud pubsub subscriptions delete gog-gmail-watch-push
gcloud pubsub topics delete gog-gmail-watch