Mainstream messaging
Google Chat
Stato: Plugin scaricabile per DM + spazi tramite Webhook dell'API Google Chat (solo HTTP).
Installazione
Installa Google Chat prima di configurare il canale:
openclaw plugins install @openclaw/googlechatCheckout locale (quando eseguito da un repository git):
openclaw plugins install ./path/to/local/googlechat-pluginConfigurazione rapida (principianti)
- Crea un progetto Google Cloud e abilita la Google Chat API.
- Vai a: Credenziali Google Chat API
- Abilita l'API se non è già abilitata.
- Crea un Service Account:
- Premi Create Credentials > Service Account.
- Assegnagli il nome che preferisci (ad es.
openclaw-chat). - Lascia vuote le autorizzazioni (premi Continue).
- Lascia vuoti i principali con accesso (premi Done).
- Crea e scarica la chiave JSON:
- Nell'elenco dei service account, fai clic su quello appena creato.
- Vai alla scheda Keys.
- Fai clic su Add Key > Create new key.
- Seleziona JSON e premi Create.
- Archivia il file JSON scaricato sull'host del Gateway (ad es.
~/.openclaw/googlechat-service-account.json). - Crea un'app Google Chat nella Configurazione Chat di Google Cloud Console:
- Compila le informazioni sull'applicazione:
- Nome app: (ad es.
OpenClaw) - URL avatar: (ad es.
https://openclaw.ai/logo.png) - Descrizione: (ad es.
Assistente AI personale)
- Nome app: (ad es.
- Abilita le funzionalità interattive.
- In Funzionalità, seleziona Partecipa a spazi e conversazioni di gruppo.
- In Impostazioni di connessione, seleziona URL endpoint HTTP.
- In Trigger, seleziona Usa un URL endpoint HTTP comune per tutti i trigger e impostalo sull'URL pubblico del tuo Gateway seguito da
/googlechat.- Suggerimento: esegui
openclaw statusper trovare l'URL pubblico del tuo Gateway.
- Suggerimento: esegui
- In Visibilità, seleziona Rendi questa app Chat disponibile a persone e gruppi specifici in
<Your Domain>. - Inserisci il tuo indirizzo email (ad es.
user@example.com) nella casella di testo. - Fai clic su Save in basso.
- Compila le informazioni sull'applicazione:
- Abilita lo stato dell'app:
- Dopo il salvataggio, aggiorna la pagina.
- Cerca la sezione Stato app (di solito vicino alla parte superiore o inferiore dopo il salvataggio).
- Cambia lo stato in Live - available to users.
- Fai di nuovo clic su Save.
- Configura OpenClaw con il percorso del service account + audience del Webhook:
- Env:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - Oppure config:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json".
- Env:
- Imposta il tipo e il valore dell'audience del Webhook (corrispondono alla configurazione della tua app Chat).
- Avvia il Gateway. Google Chat invierà POST al tuo percorso Webhook.
Aggiungere a Google Chat
Quando il Gateway è in esecuzione e la tua email è stata aggiunta all'elenco di visibilità:
- Vai a Google Chat.
- Fai clic sull'icona + (più) accanto a Direct Messages.
- Nella barra di ricerca (dove di solito aggiungi persone), digita il nome dell'app configurato in Google Cloud Console.
- Nota: il bot non comparirà nell'elenco di navigazione "Marketplace" perché è un'app privata. Devi cercarlo per nome.
- Seleziona il tuo bot dai risultati.
- Fai clic su Add o Chat per avviare una conversazione 1:1.
- Invia "Ciao" per attivare l'assistente.
URL pubblico (solo Webhook)
I Webhook di Google Chat richiedono un endpoint HTTPS pubblico. Per sicurezza, esponi a internet solo il percorso /googlechat. Mantieni la dashboard di OpenClaw e gli altri endpoint sensibili sulla tua rete privata.
Opzione A: Tailscale Funnel (consigliata)
Usa Tailscale Serve per la dashboard privata e Funnel per il percorso Webhook pubblico. Questo mantiene / privato esponendo solo /googlechat.
-
Controlla a quale indirizzo è associato il Gateway:
bash ss -tlnp | grep 18789Prendi nota dell'indirizzo IP (ad es.
127.0.0.1,0.0.0.0o il tuo IP Tailscale come100.x.x.x). -
Esponi la dashboard solo alla tailnet (porta 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 -
Esponi pubblicamente solo il percorso Webhook:
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 -
Autorizza il nodo per l'accesso Funnel: Se richiesto, visita l'URL di autorizzazione mostrato nell'output per abilitare Funnel per questo nodo nella policy della tua tailnet.
-
Verifica la configurazione:
bash tailscale serve statustailscale funnel status
Il tuo URL Webhook pubblico sarà:
https://<node-name>.<tailnet>.ts.net/googlechat
La tua dashboard privata rimane accessibile solo dalla tailnet:
https://<node-name>.<tailnet>.ts.net:8443/
Usa l'URL pubblico (senza :8443) nella configurazione dell'app Google Chat.
Nota: questa configurazione persiste dopo i riavvii. Per rimuoverla in seguito, esegui
tailscale funnel resetetailscale serve reset.
Opzione B: proxy inverso (Caddy)
Se usi un proxy inverso come Caddy, instrada tramite proxy solo il percorso specifico:
your-domain.com { reverse_proxy /googlechat* localhost:18789}Con questa configurazione, qualsiasi richiesta a your-domain.com/ verrà ignorata o restituirà 404, mentre your-domain.com/googlechat viene instradata in modo sicuro a OpenClaw.
Opzione C: Cloudflare Tunnel
Configura le regole di ingresso del tunnel in modo da instradare solo il percorso Webhook:
- Percorso:
/googlechat->http://localhost:18789/googlechat - Regola predefinita: HTTP 404 (Not Found)
Come funziona
- Google Chat invia POST Webhook al Gateway. Ogni richiesta include un'intestazione
Authorization: Bearer <token>.- OpenClaw verifica l'autenticazione bearer prima di leggere/analizzare i corpi completi dei Webhook quando l'intestazione è presente.
- Le richieste Google Workspace Add-on che contengono
authorizationEventObject.systemIdTokennel corpo sono supportate tramite un budget del corpo pre-auth più rigoroso.
- OpenClaw verifica il token rispetto a
audienceType+audienceconfigurati:audienceType: "app-url"→ l'audience è il tuo URL Webhook HTTPS.audienceType: "project-number"→ l'audience è il numero del progetto Cloud.
- I messaggi vengono instradati per spazio:
- I DM usano la chiave di sessione
agent:<agentId>:googlechat:direct:<spaceId>. - Gli spazi usano la chiave di sessione
agent:<agentId>:googlechat:group:<spaceId>.
- I DM usano la chiave di sessione
- L'accesso ai DM usa il pairing per impostazione predefinita. I mittenti sconosciuti ricevono un codice di pairing; approva con:
openclaw pairing approve googlechat <code>
- Gli spazi di gruppo richiedono una @-menzione per impostazione predefinita. Usa
botUserse il rilevamento delle menzioni richiede il nome utente dell'app. - Quando una richiesta di approvazione exec o Plugin parte da Google Chat e viene configurato un approvatore stabile
users/<id>, OpenClaw pubblica una scheda di approvazione nativa di Google Chat nello spazio o nel thread di origine. I pulsanti della scheda usano token di callback opachi e il prompt manuale/approve <id> <decision>viene mostrato solo quando la consegna dell'approvazione nativa non è disponibile.
Destinazioni
Usa questi identificatori per consegna e allowlist:
- Messaggi diretti:
users/<userId>(consigliato). - L'email grezza
name@example.comè mutabile e viene usata solo per la corrispondenza diretta con l'allowlist quandochannels.googlechat.dangerouslyAllowNameMatching: true. - Deprecato:
users/<email>viene trattato come ID utente, non come allowlist email. - Spazi:
spaces/<spaceId>.
Punti salienti della configurazione
{ 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 allowBots: false, 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, }, },}Note:
- Le credenziali del service account possono anche essere passate inline con
serviceAccount(stringa JSON). - È supportato anche
serviceAccountRef(env/file SecretRef), inclusi i riferimenti per account inchannels.googlechat.accounts.<id>.serviceAccountRef. - Il percorso Webhook predefinito è
/googlechatsewebhookPathnon è impostato. dangerouslyAllowNameMatchingriabilita la corrispondenza dei principal email mutabili per le allowlist (modalità di compatibilità break-glass).- Le reazioni sono disponibili tramite lo strumento
reactionsechannels actionquandoactions.reactionsè abilitato. - Le schede di approvazione native usano clic sui pulsanti
cardsV2di Google Chat, non eventi di reazione. Gli approvatori provengono dadm.allowFromodefaultToe devono essere valori numerici stabiliusers/<id>. - Le azioni messaggio espongono
sendper il testo eupload-fileper invii espliciti di allegati.upload-fileaccettamedia/filePath/pathpiùmessage,filenamee destinazione thread opzionali. typingIndicatorsupportamessage(predefinito),noneereaction(la reazione richiede OAuth utente).- Gli allegati vengono scaricati tramite la Chat API e archiviati nella pipeline multimediale (dimensione limitata da
mediaMaxMb). - I messaggi Google Chat creati da bot vengono ignorati per impostazione predefinita. Se imposti intenzionalmente
allowBots: true, i messaggi creati da bot accettati usano la protezione dai loop dei bot condivisa. Configurachannels.defaults.botLoopProtection, poi sovrascrivi conchannels.googlechat.botLoopProtectionochannels.googlechat.groups.<space>.botLoopProtectionquando uno spazio richiede un budget diverso.
Dettagli riferimento segreti: Gestione dei segreti.
Risoluzione dei problemi
405 Method Not Allowed
Se Google Cloud Logs Explorer mostra errori come:
status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not AllowedSignifica che il gestore Webhook non è registrato. Cause comuni:
-
Canale non configurato: la sezione
channels.googlechatmanca dalla tua configurazione. Verifica con:bash openclaw config get channels.googlechatSe restituisce "Config path not found", aggiungi la configurazione (vedi Punti salienti della configurazione).
-
Plugin non abilitato: controlla lo stato del Plugin:
bash openclaw plugins list | grep googlechatSe mostra "disabled", aggiungi
plugins.entries.googlechat.enabled: truealla tua configurazione. -
Gateway non riavviato: dopo aver aggiunto la configurazione, riavvia il Gateway:
bash openclaw gateway restart
Verifica che il canale sia in esecuzione:
openclaw channels status# Should show: Google Chat default: enabled, configured, ...Altri problemi
- Controlla
openclaw channels status --probeper errori di autenticazione o configurazione audience mancante. - Se non arrivano messaggi, conferma l'URL Webhook dell'app Chat + le sottoscrizioni agli eventi.
- Se il gating delle menzioni blocca le risposte, imposta
botUsersul nome risorsa utente dell'app e verificarequireMention. - Usa
openclaw logs --followmentre invii un messaggio di prova per vedere se le richieste raggiungono il Gateway.
Documentazione correlata:
Correlati
- Panoramica dei canali — tutti i canali supportati
- Associazione — autenticazione DM e flusso di associazione
- Gruppi — comportamento delle chat di gruppo e controllo tramite menzioni
- Instradamento dei canali — instradamento delle sessioni per i messaggi
- Sicurezza — modello di accesso e irrobustimento