Caricamento in corso...
Caricamento in corso...
Last synced: Today, 22:00
Technical reference for the OpenClaw framework. Real-time synchronization with the official documentation engine.
Use this file to discover all available pages before exploring further.
Status: ready for DMs + spaces via Google Chat API webhooks (HTTP only).
openclaw-chat~/.openclaw/googlechat-service-account.jsonOpenClawhttps://openclaw.ai/logo.pngPersonal AI Assistant/googlechatopenclaw status<Your Domain>user@example.comGOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.jsonchannels.googlechat.serviceAccountFile: "/path/to/service-account.json"Once the gateway is running and your email is added to the visibility list:
Google Chat webhooks require a public HTTPS endpoint. For security, only expose the /googlechat
Use Tailscale Serve for the private dashboard and Funnel for the public webhook path. This keeps
//googlechatCheck what address your gateway is bound to:
bashss -tlnp | grep 18789
Note the IP address (e.g.,
127.0.0.10.0.0.0100.x.x.xExpose the dashboard to the tailnet only (port 8443):
bash# If bound to localhost (127.0.0.1 or 0.0.0.0): tailscale serve --bg --https 8443 http://127.0.0.1:18789 # If bound to Tailscale IP only (e.g., 100.106.161.80): tailscale serve --bg --https 8443 http://100.106.161.80:18789
Expose only the webhook path publicly:
bash# If bound to localhost (127.0.0.1 or 0.0.0.0): tailscale funnel --bg --set-path /googlechat http://127.0.0.1:18789/googlechat # If bound to Tailscale IP only (e.g., 100.106.161.80): tailscale funnel --bg --set-path /googlechat http://100.106.161.80:18789/googlechat
Authorize the node for Funnel access: If prompted, visit the authorization URL shown in the output to enable Funnel for this node in your tailnet policy.
Verify the configuration:
bashtailscale serve status tailscale funnel status
Your public webhook URL will be:
https://<node-name>.<tailnet>.ts.net/googlechatYour private dashboard stays tailnet-only:
https://<node-name>.<tailnet>.ts.net:8443/Use the public URL (without
:8443Note: This configuration persists across reboots. To remove it later, run
tailscale funnel resettailscale serve resetIf you use a reverse proxy like Caddy, only proxy the specific path:
caddyyour-domain.com { reverse_proxy /googlechat* localhost:18789 }
With this config, any request to
your-domain.com/your-domain.com/googlechatConfigure your tunnel's ingress rules to only route the webhook path:
/googlechathttp://localhost:18789/googlechatAuthorization: Bearer <token>authorizationEventObject.systemIdTokenaudienceTypeaudienceaudienceType: "app-url"audienceType: "project-number"agent:<agentId>:googlechat:direct:<spaceId>agent:<agentId>:googlechat:group:<spaceId>openclaw pairing approve googlechat <code>botUserUse these identifiers for delivery and allowlists:
users/<userId>name@example.comchannels.googlechat.dangerouslyAllowNameMatching: trueusers/<email>spaces/<spaceId>json5{ channels: { googlechat: { enabled: true, serviceAccountFile: "/path/to/service-account.json", // or serviceAccountRef: { source: "file", provider: "filemain", id: "/channels/googlechat/serviceAccount" } audienceType: "app-url", audience: "https://gateway.example.com/googlechat", webhookPath: "/googlechat", botUser: "users/1234567890", // optional; helps mention detection dm: { policy: "pairing", allowFrom: ["users/1234567890"], }, groupPolicy: "allowlist", groups: { "spaces/AAAA": { allow: true, requireMention: true, users: ["users/1234567890"], systemPrompt: "Short answers only.", }, }, actions: { reactions: true }, typingIndicator: "message", mediaMaxMb: 20, }, }, }
Notes:
serviceAccountserviceAccountRefchannels.googlechat.accounts.<id>.serviceAccountRef/googlechatwebhookPathdangerouslyAllowNameMatchingreactionschannels actionactions.reactionssendupload-fileupload-filemediafilePathpathmessagefilenametypingIndicatornonemessagereactionmediaMaxMbSecrets reference details: Secrets Management.
If Google Cloud Logs Explorer shows errors like:
textstatus code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not Allowed
This means the webhook handler isn't registered. Common causes:
Channel not configured: The
channels.googlechatbashopenclaw config get channels.googlechat
If it returns "Config path not found", add the configuration (see Config highlights).
Plugin not enabled: Check plugin status:
bashopenclaw plugins list | grep googlechat
If it shows "disabled", add
plugins.entries.googlechat.enabled: trueGateway not restarted: After adding config, restart the gateway:
bashopenclaw gateway restart
Verify the channel is running:
bashopenclaw channels status # Should show: Google Chat default: enabled, configured, ...
openclaw channels status --probebotUserrequireMentionopenclaw logs --followRelated docs:
© 2024 TaskFlow Mirror
Powered by TaskFlow Sync Engine