Back to Openclaw

Webhooks

docs/cli/webhooks.md

2026.7.17.6 KB
Original Source

openclaw webhooks

Webhook helpers and integrations. Today this surface is scoped to Gmail Pub/Sub flows built on the bundled gog watcher.

Subcommands

bash
openclaw webhooks gmail setup --account <email> [...]
openclaw webhooks gmail run   [--account <email>] [...]
SubcommandDescription
gmail setupOne-time wizard: Gmail watch, Pub/Sub topic/subscription, and OpenClaw hook delivery.
gmail runRun gog watch serve plus the watch auto-renew loop in the foreground.
<Note> The Gateway also auto-starts `gog gmail watch serve` on boot once `hooks.enabled=true` and `hooks.gmail.account` is set (set by `gmail setup`). `gmail run` is the same logic in the foreground, useful for debugging or when the Gateway watcher is disabled. See [Gmail Pub/Sub integration](/automation/cron-jobs#gmail-pubsub-integration) for the auto-start details and `OPENCLAW_SKIP_GMAIL_WATCHER` opt-out. </Note>

webhooks gmail setup

bash
openclaw webhooks gmail setup --account [email protected]
openclaw webhooks gmail setup --account [email protected] --project my-gcp-project --json
openclaw webhooks gmail setup --account [email protected] --hook-url https://gateway.example.com/hooks/gmail

Installs gcloud and gog if missing, authenticates gcloud, creates the Pub/Sub topic and subscription, starts the Gmail watch, and writes hooks.gmail config with hooks.enabled=true. Prints Next: openclaw webhooks gmail run.

Required

FlagDescription
--account <email>Gmail account to watch.

Pub/Sub options

FlagDefaultDescription
--project <id>(none)GCP project id (the OAuth client owner). Falls back to the topic's own project id, then to the project resolved from gog credentials.
--topic <name>gog-gmail-watchPub/Sub topic name.
--subscription <name>gog-gmail-watch-pushPub/Sub subscription name.
--label <label>INBOXGmail label to watch.
--push-endpoint <url>(none)Explicit Pub/Sub push endpoint. Overrides Tailscale.

OpenClaw delivery options

FlagDefaultDescription
--hook-url <url>Built from hooks.path and the Gateway portOpenClaw webhook URL.
--hook-token <token>hooks.token, or a generated tokenOpenClaw webhook token.
--push-token <token>Generated tokenPush token forwarded to gog watch serve.

gog watch serve options

FlagDefaultDescription
--bind <host>127.0.0.1gog watch serve bind host.
--port <port>8788gog watch serve port.
--path <path>/gmail-pubsubgog watch serve path. Forced to / when Tailscale is enabled without an explicit target, since Tailscale strips the path before proxying.
--include-bodytrueInclude email body snippets. There is no CLI flag to turn this off; set hooks.gmail.includeBody: false in config instead.
--max-bytes <n>20000Max bytes per body snippet.
--renew-minutes <n>720 (12h)Renew Gmail watch every N minutes.

Tailscale exposure

FlagDefaultDescription
--tailscale <mode>funnelExpose push endpoint via tailscale: funnel, serve, or off.
--tailscale-path <path>(none)Path for tailscale serve/funnel.
--tailscale-target <t>(none)Tailscale serve/funnel target (port, host:port, or URL).

Output

FlagDescription
--jsonPrint a machine-readable summary instead of text.

webhooks gmail run

bash
openclaw webhooks gmail run --account [email protected]

Runs gog watch serve plus the watch auto-renew loop in the foreground, restarting gog watch serve after a 2s delay if it exits unexpectedly.

run accepts the same Pub/Sub, OpenClaw delivery, gog watch serve, and Tailscale flags as setup, except:

  • --account is optional on run; it falls back to hooks.gmail.account.
  • run does not accept --project, --push-endpoint, or --json.
  • Every flag falls back to the matching hooks.gmail.* config value (written by setup), then to the same built-in default setup uses, with one exception: --tailscale defaults to off on run (not funnel) when neither the flag nor hooks.gmail.tailscale.mode is set.
CategoryFlags
Pub/Sub--account, --topic, --subscription, --label
OpenClaw delivery--hook-url, --hook-token, --push-token
gog watch serve--bind, --port, --path, --include-body, --max-bytes, --renew-minutes
Tailscale--tailscale, --tailscale-path, --tailscale-target
<Note> For `run`, the `--topic` value is the full Pub/Sub topic path (`projects/.../topics/...`), not just the short topic name. </Note>