Mainstream messaging
Google Chat
Status : Plugin téléchargeable pour les messages privés + espaces via les webhooks de l’API Google Chat (HTTP uniquement).
Installation
Installez Google Chat avant de configurer le canal :
openclaw plugins install @openclaw/googlechatCheckout local (lors de l’exécution depuis un dépôt git) :
openclaw plugins install ./path/to/local/googlechat-pluginConfiguration rapide (débutant)
- Créez un projet Google Cloud et activez la Google Chat API.
- Accédez à : Identifiants Google Chat API
- Activez l’API si elle ne l’est pas déjà.
- Créez un compte de service :
- Appuyez sur Créer des identifiants > Compte de service.
- Donnez-lui le nom que vous voulez (par exemple,
openclaw-chat). - Laissez les autorisations vides (appuyez sur Continuer).
- Laissez les principaux avec accès vides (appuyez sur Terminé).
- Créez et téléchargez la clé JSON :
- Dans la liste des comptes de service, cliquez sur celui que vous venez de créer.
- Accédez à l’onglet Clés.
- Cliquez sur Ajouter une clé > Créer une clé.
- Sélectionnez JSON et appuyez sur Créer.
- Stockez le fichier JSON téléchargé sur votre hôte Gateway (par exemple,
~/.openclaw/googlechat-service-account.json). - Créez une application Google Chat dans la configuration Chat de la console Google Cloud :
- Renseignez les informations de l’application :
- Nom de l’application : (par exemple
OpenClaw) - URL de l’avatar : (par exemple
https://openclaw.ai/logo.png) - Description : (par exemple
Assistant IA personnel)
- Nom de l’application : (par exemple
- Activez les fonctionnalités interactives.
- Sous Fonctionnalité, cochez Rejoindre des espaces et des conversations de groupe.
- Sous Paramètres de connexion, sélectionnez URL du point de terminaison HTTP.
- Sous Déclencheurs, sélectionnez Utiliser une URL de point de terminaison HTTP commune pour tous les déclencheurs et définissez-la sur l’URL publique de votre Gateway suivie de
/googlechat.- Conseil : exécutez
openclaw statuspour trouver l’URL publique de votre Gateway.
- Conseil : exécutez
- Sous Visibilité, cochez Rendre cette application Chat disponible pour des personnes et des groupes spécifiques dans
<Your Domain>. - Saisissez votre adresse e-mail (par exemple
user@example.com) dans la zone de texte. - Cliquez sur Enregistrer en bas.
- Renseignez les informations de l’application :
- Activez le statut de l’application :
- Après l’enregistrement, actualisez la page.
- Recherchez la section Statut de l’application (généralement près du haut ou du bas après l’enregistrement).
- Changez le statut en En ligne - disponible pour les utilisateurs.
- Cliquez de nouveau sur Enregistrer.
- Configurez OpenClaw avec le chemin du compte de service + l’audience du Webhook :
- Env :
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - Ou config :
channels.googlechat.serviceAccountFile: "/path/to/service-account.json".
- Env :
- Définissez le type + la valeur de l’audience du Webhook (correspond à la configuration de votre application Chat).
- Démarrez le Gateway. Google Chat enverra des requêtes POST vers votre chemin de Webhook.
Ajouter à Google Chat
Une fois que le Gateway est en cours d’exécution et que votre adresse e-mail est ajoutée à la liste de visibilité :
- Accédez à Google Chat.
- Cliquez sur l’icône + (plus) à côté de Messages privés.
- Dans la barre de recherche (où vous ajoutez habituellement des personnes), saisissez le nom de l’application que vous avez configuré dans la console Google Cloud.
- Remarque : le bot n’apparaîtra pas dans la liste de navigation « Marketplace », car il s’agit d’une application privée. Vous devez le rechercher par nom.
- Sélectionnez votre bot dans les résultats.
- Cliquez sur Ajouter ou Discuter pour démarrer une conversation 1:1.
- Envoyez « Bonjour » pour déclencher l’assistant !
URL publique (Webhook uniquement)
Les webhooks Google Chat nécessitent un point de terminaison HTTPS public. Pour la sécurité, exposez uniquement le chemin /googlechat à Internet. Gardez le tableau de bord OpenClaw et les autres points de terminaison sensibles sur votre réseau privé.
Option A : Tailscale Funnel (recommandé)
Utilisez Tailscale Serve pour le tableau de bord privé et Funnel pour le chemin de Webhook public. Cela garde / privé tout en exposant uniquement /googlechat.
-
Vérifiez l’adresse à laquelle votre Gateway est lié :
bash ss -tlnp | grep 18789Notez l’adresse IP (par exemple,
127.0.0.1,0.0.0.0ou votre IP Tailscale comme100.x.x.x). -
Exposez le tableau de bord uniquement au tailnet (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 -
Exposez uniquement le chemin du Webhook publiquement :
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 -
Autorisez le nœud pour l’accès Funnel : Si vous y êtes invité, consultez l’URL d’autorisation affichée dans la sortie pour activer Funnel pour ce nœud dans votre politique de tailnet.
-
Vérifiez la configuration :
bash tailscale serve statustailscale funnel status
Votre URL publique de Webhook sera :
https://<node-name>.<tailnet>.ts.net/googlechat
Votre tableau de bord privé reste limité au tailnet :
https://<node-name>.<tailnet>.ts.net:8443/
Utilisez l’URL publique (sans :8443) dans la configuration de l’application Google Chat.
Remarque : cette configuration persiste après les redémarrages. Pour la supprimer plus tard, exécutez
tailscale funnel resetettailscale serve reset.
Option B : proxy inverse (Caddy)
Si vous utilisez un proxy inverse comme Caddy, ne proxifiez que le chemin spécifique :
your-domain.com { reverse_proxy /googlechat* localhost:18789}Avec cette configuration, toute requête vers your-domain.com/ sera ignorée ou renverra une 404, tandis que your-domain.com/googlechat sera acheminé en toute sécurité vers OpenClaw.
Option C : Cloudflare Tunnel
Configurez les règles d’ingress de votre tunnel pour acheminer uniquement le chemin du Webhook :
- Chemin :
/googlechat->http://localhost:18789/googlechat - Règle par défaut : HTTP 404 (Not Found)
Fonctionnement
- Google Chat envoie des POST de Webhook au Gateway. Chaque requête inclut un en-tête
Authorization: Bearer <token>.- OpenClaw vérifie l’authentification bearer avant de lire/analyser les corps complets de Webhook lorsque l’en-tête est présent.
- Les requêtes Google Workspace Add-on qui portent
authorizationEventObject.systemIdTokendans le corps sont prises en charge via un budget de corps de préauthentification plus strict.
- OpenClaw vérifie le jeton par rapport aux valeurs
audienceType+audienceconfigurées :audienceType: "app-url"→ l’audience est votre URL HTTPS de Webhook.audienceType: "project-number"→ l’audience est le numéro du projet Cloud.
- Les messages sont routés par espace :
- Les messages privés utilisent la clé de session
agent:<agentId>:googlechat:direct:<spaceId>. - Les espaces utilisent la clé de session
agent:<agentId>:googlechat:group:<spaceId>.
- Les messages privés utilisent la clé de session
- L’accès aux messages privés se fait par appairage par défaut. Les expéditeurs inconnus reçoivent un code d’appairage ; approuvez avec :
openclaw pairing approve googlechat <code>
- Les espaces de groupe exigent une @mention par défaut. Utilisez
botUsersi la détection des mentions a besoin du nom d’utilisateur de l’application. - Lorsqu’une demande d’approbation d’exécution ou de Plugin démarre depuis Google Chat et qu’un approbateur stable
users/<id>est configuré, OpenClaw publie une carte d’approbation Google Chat native dans l’espace ou le fil d’origine. Les boutons de la carte utilisent des jetons de rappel opaques, et l’invite manuelle/approve <id> <decision>n’est affichée que lorsque la livraison d’approbation native est indisponible.
Cibles
Utilisez ces identifiants pour la livraison et les listes d’autorisation :
- Messages privés :
users/<userId>(recommandé). - L’e-mail brut
name@example.comest mutable et utilisé uniquement pour la correspondance directe de liste d’autorisation lorsquechannels.googlechat.dangerouslyAllowNameMatching: true. - Obsolète :
users/<email>est traité comme un identifiant utilisateur, pas comme une liste d’autorisation d’e-mail. - Espaces :
spaces/<spaceId>.
Points clés de configuration
{ 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, }, },}Remarques :
- Les identifiants du compte de service peuvent aussi être passés en ligne avec
serviceAccount(chaîne JSON). serviceAccountRefest également pris en charge (SecretRef env/fichier), y compris les refs par compte souschannels.googlechat.accounts.<id>.serviceAccountRef.- Le chemin de Webhook par défaut est
/googlechatsiwebhookPathn’est pas défini. dangerouslyAllowNameMatchingréactive la correspondance de principaux e-mail mutables pour les listes d’autorisation (mode de compatibilité bris de glace).- Les réactions sont disponibles via l’outil
reactionsetchannels actionlorsqueactions.reactionsest activé. - Les cartes d’approbation natives utilisent les clics sur boutons Google Chat
cardsV2, pas les événements de réaction. Les approbateurs proviennent dedm.allowFromoudefaultToet doivent être des valeurs numériques stablesusers/<id>. - Les actions de message exposent
sendpour le texte etupload-filepour les envois explicites de pièces jointes.upload-fileacceptemedia/filePath/pathplus les optionsmessage,filenameet ciblage de fil. typingIndicatorprend en chargemessage(par défaut),noneetreaction(reactionnécessite OAuth utilisateur).- Les pièces jointes sont téléchargées via l’API Chat et stockées dans le pipeline média (taille plafonnée par
mediaMaxMb). - Les messages Google Chat rédigés par des bots sont ignorés par défaut. Si vous définissez intentionnellement
allowBots: true, les messages rédigés par des bots et acceptés utilisent la protection partagée contre les boucles de bots. Configurezchannels.defaults.botLoopProtection, puis remplacez avecchannels.googlechat.botLoopProtectionouchannels.googlechat.groups.<space>.botLoopProtectionlorsqu’un espace a besoin d’un budget différent.
Détails de référence des secrets : Gestion des secrets.
Dépannage
405 Method Not Allowed
Si Google Cloud Logs Explorer affiche des erreurs comme :
status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not AllowedCela signifie que le gestionnaire de Webhook n’est pas enregistré. Causes courantes :
-
Canal non configuré : la section
channels.googlechatest absente de votre configuration. Vérifiez avec :bash openclaw config get channels.googlechatSi cela renvoie « Config path not found », ajoutez la configuration (voir Points clés de configuration).
-
Plugin non activé : vérifiez le statut du Plugin :
bash openclaw plugins list | grep googlechatSi cela affiche « disabled », ajoutez
plugins.entries.googlechat.enabled: trueà votre configuration. -
Gateway non redémarré : après l’ajout de la configuration, redémarrez le Gateway :
bash openclaw gateway restart
Vérifiez que le canal est en cours d’exécution :
openclaw channels status# Should show: Google Chat default: enabled, configured, ...Autres problèmes
- Consultez
openclaw channels status --probepour les erreurs d’authentification ou la configuration d’audience manquante. - Si aucun message n’arrive, confirmez l’URL de Webhook + les abonnements aux événements de l’application Chat.
- Si le filtrage par mention bloque les réponses, définissez
botUsersur le nom de ressource utilisateur de l’application et vérifiezrequireMention. - Utilisez
openclaw logs --followpendant l’envoi d’un message de test pour voir si les requêtes atteignent le Gateway.
Docs connexes :
Connexe
- Présentation des canaux — tous les canaux pris en charge
- Appairage — authentification par DM et flux d’appairage
- Groupes — comportement des discussions de groupe et contrôle par mention
- Routage des canaux — routage de session pour les messages
- Sécurité — modèle d’accès et renforcement