Browse docs
Docs / channels / googlechat
Google Chat
Google Chat (Chat API)
Quick setup (beginner)
- Create a Google Cloud project and enable the Google Chat API.
- Go to: Google Chat API Credentials
- Enable the API if it is not already enabled.
- Go to: Google Chat API Credentials
- Enable the API if it is not already enabled.
- Create a Service Account:
- Press Create Credentials > Service Account.
- Name it whatever you want (e.g.,
openclaw-chat). - Leave permissions blank (press Continue).
- Leave principals with access blank (press Done).
- Press Create Credentials > Service Account.
- Name it whatever you want (e.g.,
openclaw-chat). - Leave permissions blank (press Continue).
- Leave principals with access blank (press Done).
- Create and download the JSON Key:
- In the list of service accounts, click on the one you just created.
- Go to the Keys tab.
- Click Add Key > Create new key.
- Select JSON and press Create.
- In the list of service accounts, click on the one you just created.
- Go to the Keys tab.
- Click Add Key > Create new key.
- Select JSON and press Create.
- Store the downloaded JSON file on your gateway host (e.g.,
~/.openclaw/googlechat-service-account.json). - Create a Google Chat app in the Google Cloud Console Chat Configuration:
- Fill in the Application info:
- App name: (e.g.
OpenClaw) - Avatar URL: (e.g.
https://openclaw.ai/logo.png) - Description: (e.g.
Personal AI Assistant)
- App name: (e.g.
- Enable Interactive features.
- Under Functionality, check Join spaces and group conversations.
- Under Connection settings, select HTTP endpoint URL.
- Under Triggers, select Use a common HTTP endpoint URL for all triggers and set it to your gateway’s public URL followed by
/googlechat.- Tip: Run
openclaw statusto find your gateway’s public URL.
- Tip: Run
- Under Visibility, check Make this Chat app available to specific people and groups in <Your Domain>.
- Enter your email address (e.g.
user@example.com) in the text box. - Click Save at the bottom.
- Fill in the Application info:
- Fill in the Application info:
- App name: (e.g.
OpenClaw) - Avatar URL: (e.g.
https://openclaw.ai/logo.png) - Description: (e.g.
Personal AI Assistant)
- App name: (e.g.
- App name: (e.g.
OpenClaw) - Avatar URL: (e.g.
https://openclaw.ai/logo.png) - Description: (e.g.
Personal AI Assistant) - Enable Interactive features.
- Under Functionality, check Join spaces and group conversations.
- Under Connection settings, select HTTP endpoint URL.
- Under Triggers, select Use a common HTTP endpoint URL for all triggers and set it to your gateway’s public URL followed by
/googlechat.- Tip: Run
openclaw statusto find your gateway’s public URL.
- Tip: Run
- Tip: Run
openclaw statusto find your gateway’s public URL. - Under Visibility, check Make this Chat app available to specific people and groups in <Your Domain>.
- Enter your email address (e.g.
user@example.com) in the text box. - Click Save at the bottom.
- Enable the app status:
- After saving, refresh the page.
- Look for the App status section (usually near the top or bottom after saving).
- Change the status to Live - available to users.
- Click Save again.
- After saving, refresh the page.
- Look for the App status section (usually near the top or bottom after saving).
- Change the status to Live - available to users.
- Click Save again.
- Configure OpenClaw with the service account path + webhook audience:
- Env:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - Or config:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json".
- Env:
- Env:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - Or config:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json". - Set the webhook audience type + value (matches your Chat app config).
- Start the gateway. Google Chat will POST to your webhook path.
- Go to: Google Chat API Credentials
- Enable the API if it is not already enabled.
- Press Create Credentials > Service Account.
- Name it whatever you want (e.g.,
openclaw-chat). - Leave permissions blank (press Continue).
- Leave principals with access blank (press Done).
- In the list of service accounts, click on the one you just created.
- Go to the Keys tab.
- Click Add Key > Create new key.
- Select JSON and press Create.
- Fill in the Application info:
- App name: (e.g.
OpenClaw) - Avatar URL: (e.g.
https://openclaw.ai/logo.png) - Description: (e.g.
Personal AI Assistant)
- App name: (e.g.
- App name: (e.g.
OpenClaw) - Avatar URL: (e.g.
https://openclaw.ai/logo.png) - Description: (e.g.
Personal AI Assistant) - Enable Interactive features.
- Under Functionality, check Join spaces and group conversations.
- Under Connection settings, select HTTP endpoint URL.
- Under Triggers, select Use a common HTTP endpoint URL for all triggers and set it to your gateway’s public URL followed by
/googlechat.- Tip: Run
openclaw statusto find your gateway’s public URL.
- Tip: Run
- Tip: Run
openclaw statusto find your gateway’s public URL. - Under Visibility, check Make this Chat app available to specific people and groups in <Your Domain>.
- Enter your email address (e.g.
user@example.com) in the text box. - Click Save at the bottom.
- App name: (e.g.
OpenClaw) - Avatar URL: (e.g.
https://openclaw.ai/logo.png) - Description: (e.g.
Personal AI Assistant)
- Tip: Run
openclaw statusto find your gateway’s public URL.
- After saving, refresh the page.
- Look for the App status section (usually near the top or bottom after saving).
- Change the status to Live - available to users.
- Click Save again.
- Env:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - Or config:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json".
Add to Google Chat
- Go to Google Chat.
- Click the + (plus) icon next to Direct Messages.
- In the search bar (where you usually add people), type the App name you configured in the Google Cloud Console.
- Note: The bot will not appear in the “Marketplace” browse list because it is a private app. You must search for it by name.
- Note: The bot will not appear in the “Marketplace” browse list because it is a private app. You must search for it by name.
- Select your bot from the results.
- Click Add or Chat to start a 1:1 conversation.
- Send “Hello” to trigger the assistant!
- Note: The bot will not appear in the “Marketplace” browse list because it is a private app. You must search for it by name.
Public URL (Webhook-only)
Option A: Tailscale Funnel (Recommended)
- Check what address your gateway is bound to:
Note the IP address (e.g.,
127.0.0.1,0.0.0.0, or your Tailscale IP like100.x.x.x). - Expose the dashboard to the tailnet only (port 8443):
- Expose only the webhook path publicly:
- 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:
text
ss -tlnp | grep 18789text
# 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:18789text
# 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/googlechattext
tailscale serve status
tailscale funnel statusNote: This configuration persists across reboots. To remove it later, runtailscale funnel resetandtailscale serve reset.
Option B: Reverse Proxy (Caddy)
text
your-domain.com {
reverse_proxy /googlechat* localhost:18789
}Option C: Cloudflare Tunnel
- Path:
/googlechat->http://localhost:18789/googlechat - Default Rule: HTTP 404 (Not Found)
How it works
- Google Chat sends webhook POSTs to the gateway. Each request includes an
Authorization: Bearer <token>header. - OpenClaw verifies the token against the configured
audienceType+audience:audienceType: "app-url"→ audience is your HTTPS webhook URL.audienceType: "project-number"→ audience is the Cloud project number.
audienceType: "app-url"→ audience is your HTTPS webhook URL.audienceType: "project-number"→ audience is the Cloud project number.- Messages are routed by space:
- DMs use session key
agent:<agentId>:googlechat:dm:<spaceId>. - Spaces use session key
agent:<agentId>:googlechat:group:<spaceId>.
- DMs use session key
- DMs use session key
agent:<agentId>:googlechat:dm:<spaceId>. - Spaces use session key
agent:<agentId>:googlechat:group:<spaceId>. - DM access is pairing by default. Unknown senders receive a pairing code; approve with:
openclaw pairing approve googlechat <code>
openclaw pairing approve googlechat <code>- Group spaces require @-mention by default. Use
botUserif mention detection needs the app’s user name.
audienceType: "app-url"→ audience is your HTTPS webhook URL.audienceType: "project-number"→ audience is the Cloud project number.
- DMs use session key
agent:<agentId>:googlechat:dm:<spaceId>. - Spaces use session key
agent:<agentId>:googlechat:group:<spaceId>.
openclaw pairing approve googlechat <code>
Targets
- Direct messages:
users/<userId>orusers/<email>(email addresses are accepted). - Spaces:
spaces/<spaceId>.
Config highlights
text
{
channels: {
googlechat: {
enabled: true,
serviceAccountFile: "/path/to/service-account.json",
audienceType: "app-url",
audience: "https://gateway.example.com/googlechat",
webhookPath: "/googlechat",
botUser: "users/1234567890", // optional; helps mention detection
dm: {
policy: "pairing",
allowFrom: ["users/1234567890", "name@example.com"],
},
groupPolicy: "allowlist",
groups: {
"spaces/AAAA": {
allow: true,
requireMention: true,
users: ["users/1234567890"],
systemPrompt: "Short answers only.",
},
},
actions: { reactions: true },
typingIndicator: "message",
mediaMaxMb: 20,
},
},
}- Service account credentials can also be passed inline with
serviceAccount(JSON string). - Default webhook path is
/googlechatifwebhookPathisn’t set. - Reactions are available via the
reactionstool andchannels actionwhenactions.reactionsis enabled. typingIndicatorsupportsnone,message(default), andreaction(reaction requires user OAuth).- Attachments are downloaded through the Chat API and stored in the media pipeline (size capped by
mediaMaxMb).
Troubleshooting
405 Method Not Allowed
text
status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not Allowed- Channel not configured: The
channels.googlechatsection is missing from your config. Verify with:If it returns “Config path not found”, add the configuration (see Config highlights). - Plugin not enabled: Check plugin status:
If it shows “disabled”, add
plugins.entries.googlechat.enabled: trueto your config. - Gateway not restarted: After adding config, restart the gateway:
text
openclaw config get channels.googlechattext
openclaw plugins list | grep googlechattext
openclaw gateway restarttext
openclaw channels status
# Should show: Google Chat default: enabled, configured, ...Other issues
- Check
openclaw channels status --probefor auth errors or missing audience config. - If no messages arrive, confirm the Chat app’s webhook URL + event subscriptions.
- If mention gating blocks replies, set
botUserto the app’s user resource name and verifyrequireMention. - Use
openclaw logs --followwhile sending a test message to see if requests reach the gateway.