Mainstream messaging
Google Chat
Status: downloadbare Plugin voor DM's + ruimten via Google Chat API-webhooks (alleen HTTP).
Installeren
Installeer Google Chat voordat je het kanaal configureert:
openclaw plugins install @openclaw/googlechat
Lokale checkout (bij uitvoeren vanuit een git-repo):
openclaw plugins install ./path/to/local/googlechat-plugin
Snelle configuratie (beginner)
- Maak een Google Cloud-project en schakel de Google Chat API in.
- Ga naar: Google Chat API-inloggegevens
- Schakel de API in als die nog niet is ingeschakeld.
- Maak een Service Account:
- Druk op Create Credentials > Service Account.
- Geef deze een naam naar keuze (bijv.
openclaw-chat). - Laat machtigingen leeg (druk op Continue).
- Laat principals met toegang leeg (druk op Done).
- Maak en download de JSON-sleutel:
- Klik in de lijst met serviceaccounts op het account dat je zojuist hebt gemaakt.
- Ga naar het tabblad Keys.
- Klik op Add Key > Create new key.
- Selecteer JSON en druk op Create.
- Sla het gedownloade JSON-bestand op je Gateway-host op (bijv.
~/.openclaw/googlechat-service-account.json). - Maak een Google Chat-app in de Google Cloud Console Chat-configuratie:
- Vul de Application info in:
- App name: (bijv.
OpenClaw) - Avatar URL: (bijv.
https://openclaw.ai/logo.png) - Description: (bijv.
Personal AI Assistant)
- App name: (bijv.
- Schakel Interactive features in.
- Vink onder Functionality Join spaces and group conversations aan.
- Selecteer onder Connection settings HTTP endpoint URL.
- Selecteer onder Triggers Use a common HTTP endpoint URL for all triggers en stel dit in op de openbare URL van je Gateway gevolgd door
/googlechat.- Tip: voer
openclaw statusuit om de openbare URL van je Gateway te vinden.
- Tip: voer
- Vink onder Visibility Make this Chat app available to specific people and groups in
<Your Domain>aan. - Voer je e-mailadres (bijv.
[email protected]) in het tekstvak in. - Klik onderaan op Save.
- Vul de Application info in:
- Schakel de appstatus in:
- Ververs de pagina na het opslaan.
- Zoek naar de sectie App status (meestal na het opslaan bovenaan of onderaan).
- Wijzig de status naar Live - available to users.
- Klik opnieuw op Save.
- Configureer OpenClaw met het serviceaccountpad + Webhook-audience:
- Env:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - Of configuratie:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json".
- Env:
- Stel het type + de waarde voor de Webhook-audience in (komt overeen met je Chat-appconfiguratie).
- Start de Gateway. Google Chat zal POST-verzoeken naar je Webhook-pad sturen.
Toevoegen aan Google Chat
Zodra de Gateway draait en je e-mail is toegevoegd aan de zichtbaarheidslijst:
- Ga naar Google Chat.
- Klik op het +-pictogram naast Direct Messages.
- Typ in de zoekbalk (waar je normaal mensen toevoegt) de App name die je in de Google Cloud Console hebt geconfigureerd.
- Opmerking: de bot verschijnt niet in de bladerlijst "Marketplace", omdat het een privé-app is. Je moet er op naam naar zoeken.
- Selecteer je bot in de resultaten.
- Klik op Add of Chat om een 1-op-1-gesprek te starten.
- Stuur "Hallo" om de assistent te activeren!
Openbare URL (alleen Webhook)
Google Chat-webhooks vereisen een openbaar HTTPS-eindpunt. Stel om veiligheidsredenen alleen het pad /googlechat beschikbaar op internet. Houd het OpenClaw-dashboard en andere gevoelige eindpunten op je privénetwerk.
Optie A: Tailscale Funnel (aanbevolen)
Gebruik Tailscale Serve voor het privédashboard en Funnel voor het openbare Webhook-pad. Hierdoor blijft / privé terwijl alleen /googlechat wordt blootgesteld.
-
Controleer aan welk adres je Gateway is gebonden:
ss -tlnp | grep 18789Noteer het IP-adres (bijv.
127.0.0.1,0.0.0.0of je Tailscale-IP zoals100.x.x.x). -
Maak het dashboard alleen beschikbaar voor het tailnet (poort 8443):
# 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 -
Maak alleen het Webhook-pad openbaar beschikbaar:
# 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 -
Autoriseer de Node voor Funnel-toegang: Ga, als daarom wordt gevraagd, naar de autorisatie-URL die in de uitvoer wordt getoond om Funnel voor deze Node in je tailnet-beleid in te schakelen.
-
Controleer de configuratie:
tailscale serve status tailscale funnel status
Je openbare Webhook-URL wordt:
https://<node-name>.<tailnet>.ts.net/googlechat
Je privédashboard blijft alleen toegankelijk via het tailnet:
https://<node-name>.<tailnet>.ts.net:8443/
Gebruik de openbare URL (zonder :8443) in de Google Chat-appconfiguratie.
Opmerking: deze configuratie blijft behouden na herstarts. Voer later
tailscale funnel resetentailscale serve resetuit om deze te verwijderen.
Optie B: Reverse proxy (Caddy)
Als je een reverse proxy zoals Caddy gebruikt, proxy dan alleen het specifieke pad:
your-domain.com {
reverse_proxy /googlechat* localhost:18789
}
Met deze configuratie wordt elk verzoek naar your-domain.com/ genegeerd of als 404 geretourneerd, terwijl your-domain.com/googlechat veilig naar OpenClaw wordt gerouteerd.
Optie C: Cloudflare Tunnel
Configureer de ingressregels van je tunnel om alleen het Webhook-pad te routeren:
- Pad:
/googlechat->http://localhost:18789/googlechat - Standaardregel: HTTP 404 (niet gevonden)
Hoe het werkt
- Google Chat stuurt Webhook-POST's naar de Gateway. Elk verzoek bevat een header
Authorization: Bearer <token>.- OpenClaw verifieert bearer-auth voordat volledige Webhook-bodies worden gelezen/geparset wanneer de header aanwezig is.
- Google Workspace Add-on-verzoeken die
authorizationEventObject.systemIdTokenin de body bevatten, worden ondersteund via een strikter pre-auth body-budget.
- OpenClaw verifieert het token tegen de geconfigureerde
audienceType+audience:audienceType: "app-url"→ audience is je HTTPS-Webhook-URL.audienceType: "project-number"→ audience is het Cloud-projectnummer.
- Berichten worden gerouteerd per ruimte:
- DM's gebruiken sessiesleutel
agent:<agentId>:googlechat:direct:<spaceId>. - Ruimten gebruiken sessiesleutel
agent:<agentId>:googlechat:group:<spaceId>.
- DM's gebruiken sessiesleutel
- DM-toegang gebruikt standaard koppeling. Onbekende afzenders ontvangen een koppelingscode; keur goed met:
openclaw pairing approve googlechat <code>
- Groepsruimten vereisen standaard een @-vermelding. Gebruik
botUserals vermeldingsdetectie de gebruikersnaam van de app nodig heeft.
Doelen
Gebruik deze identifiers voor bezorging en allowlists:
- Directe berichten:
users/<userId>(aanbevolen). - Ruwe e-mail
[email protected]is veranderlijk en wordt alleen gebruikt voor directe allowlist-matching wanneerchannels.googlechat.dangerouslyAllowNameMatching: true. - Verouderd:
users/<email>wordt behandeld als een gebruikers-ID, niet als een e-mail-allowlist. - Ruimten:
spaces/<spaceId>.
Configuratie-highlights
{
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": {
enabled: true,
requireMention: true,
users: ["users/1234567890"],
systemPrompt: "Short answers only.",
},
},
actions: { reactions: true },
typingIndicator: "message",
mediaMaxMb: 20,
},
},
}
Opmerkingen:
- Serviceaccount-inloggegevens kunnen ook inline worden doorgegeven met
serviceAccount(JSON-string). serviceAccountRefwordt ook ondersteund (env/file SecretRef), inclusief refs per account onderchannels.googlechat.accounts.<id>.serviceAccountRef.- Het standaard Webhook-pad is
/googlechatalswebhookPathniet is ingesteld. dangerouslyAllowNameMatchingschakelt matching van veranderlijke e-mail-principals opnieuw in voor allowlists (compatibiliteitsmodus voor noodsituaties).- Reacties zijn beschikbaar via de tool
reactionsenchannels actionwanneeractions.reactionsis ingeschakeld. - Berichtacties bieden
sendvoor tekst enupload-filevoor expliciete verzending van bijlagen.upload-fileaccepteertmedia/filePath/pathplus optioneelmessage,filenameen thread-targeting. typingIndicatorondersteuntnone,message(standaard) enreaction(reactionvereist gebruikers-OAuth).- Bijlagen worden gedownload via de Chat API en opgeslagen in de mediapijplijn (grootte beperkt door
mediaMaxMb).
Details over secrets-referenties: Secrets-beheer.
Probleemoplossing
405 Methode niet toegestaan
Als Google Cloud Logs Explorer fouten toont zoals:
status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not Allowed
Betekent dit dat de Webhook-handler niet is geregistreerd. Veelvoorkomende oorzaken:
-
Kanaal niet geconfigureerd: de sectie
channels.googlechatontbreekt in je configuratie. Controleer met:openclaw config get channels.googlechatAls dit "Config path not found" retourneert, voeg dan de configuratie toe (zie Configuratie-highlights).
-
Plugin niet ingeschakeld: controleer de Plugin-status:
openclaw plugins list | grep googlechatAls dit "disabled" toont, voeg dan
plugins.entries.googlechat.enabled: truetoe aan je configuratie. -
Gateway niet opnieuw gestart: start de Gateway opnieuw nadat je configuratie hebt toegevoegd:
openclaw gateway restart
Controleer of het kanaal actief is:
openclaw channels status
# Should show: Google Chat default: enabled, configured, ...
Andere problemen
- Controleer
openclaw channels status --probeop auth-fouten of ontbrekende audience-configuratie. - Als er geen berichten binnenkomen, bevestig dan de Webhook-URL + gebeurtenisabonnementen van de Chat-app.
- Als vermeldingsgating antwoorden blokkeert, stel
botUserin op de gebruikersresourcenaam van de app en controleerrequireMention. - Gebruik
openclaw logs --followterwijl je een testbericht verzendt om te zien of verzoeken de Gateway bereiken.
Gerelateerde docs:
Gerelateerd
- Kanalenoverzicht — alle ondersteunde kanalen
- Koppeling — DM-authenticatie en koppelingsflow
- Groepen — gedrag van groepschats en vermeldingsgating
- Kanaalroutering — sessieroutering voor berichten
- Beveiliging — toegangsmodel en hardening