Sommaire
Installation de la passerelle et jeton
Adoptez la topologie passerelle d’abord décrite dans le guide de déploiement multi-nœuds MeshMac : un hôte stable (petite VM Linux, bastion ou Mac désigné) exécute les services OpenClaw, détient les webhooks sortants et lit les secrets dans un répertoire scellé. Les builders enregistrent des événements ; ils ne doivent pas chacun conserver une copie de l’URL Chat.
Après installation, fixez OPENCLAW_CONFIG_ROOT, terminez l’onboarding et lancez les contrôles de santé pour que le démon démarre avec le même environnement que votre pipeline. Placez la cible webhook dans un fichier du type /etc/openclaw/secrets.d/google-chat/build-status.url en mode 0440, propriétaire root, groupe openclaw-notify. Centralisez la livraison interne depuis plusieurs Mac via le modèle de déploiement unifié et file de tâches synchronisée afin qu’aucun runner ne duplique la logique d’émission.
Point de contrôle A — permissions fichier.
sudo install -d -m 0750 -o root -g openclaw-notify /etc/openclaw/secrets.d/google-chat
sudo sh -c 'umask 077; cat > /etc/openclaw/secrets.d/google-chat/build-status.url' <<'EOF'
https://chat.googleapis.com/v1/spaces/SPACE/messages?key=KEY&token=TOKEN
EOF
sudo chown root:openclaw-notify /etc/openclaw/secrets.d/google-chat/build-status.url
sudo chmod 0440 /etc/openclaw/secrets.d/google-chat/build-status.url
Tutoriel multi-plateformes : pour Teams, autorisez les hôtes Microsoft et des cartes MessageCard ; pour Matrix, jetons de salle ou appservice. La table de champs normalisés et la file unique restent identiques — seuls le moteur de rendu et l’endpoint changent.
Configuration du webhook entrant Google Chat
Dans l’espace Google Chat cible, ajoutez l’intégration Webhook entrant (nommez-la d’après le dépôt ou le pool), choisissez l’espace et copiez l’URL générée une fois. Les paramètres de requête key et token jouent le rôle d’un secret porteur : en cas de fuite, révoquez et recréez le webhook — pas de rotation partielle.
- Espaces séparés par environnement pour qu’un workflow de préproduction ne poste pas un faux « vert » dans l’espace exécutif.
- Sortie réseau : depuis le shell de la passerelle, vérifiez le TLS vers
chat.googleapis.comavec les mêmes variablesHTTPS_PROXYque le démon. - Politique admin : si Workspace bloque les webhooks personnalisés, passez par une application Chat approuvée ou un point de terminaison HTTP (Apps Script) tout en conservant un seul émetteur passerelle.
Point de contrôle B — joignabilité.
export HTTPS_PROXY="${HTTPS_PROXY:-}"
curl -sS -o /dev/null -w "%{http_code}\n" -I "https://chat.googleapis.com/"
Une réponse contrôlée par Google (souvent 404 sur GET nu) est acceptable ; en revanche, des échecs de poignée TLS ou un 403 proxy indiquent un problème de politique à résoudre avant de déboguer le JSON applicatif.
Gabarit de charge des messages
Le corps minimal fiable pour du texte généré par application est du JSON UTF-8 avec un champ text. Les cartes et widgets peuvent attendre que la livraison texte soit prouvée.
export CHAT_URL="$(sudo cat /etc/openclaw/secrets.d/google-chat/build-status.url)"
curl -sS -X POST "$CHAT_URL" \
-H 'Content-Type: application/json; charset=UTF-8' \
-d '{"text":"Sonde passerelle MeshMac : OK depuis '"$(hostname -s)"'"}'
Point de contrôle C — message visible. La ligne de sonde doit apparaître dans l’espace en quelques secondes. Si l’API renvoie un objet d’erreur JSON, corrigez le corps avant d’activer l’automatisation complète.
En production, formatez une ligne avec emoji ou libellés pour state, ajoutez mesh_node_id et un hash de commit court ; respectez les limites de longueur Chat et renvoyez vers run_url plutôt que de coller des journaux. Pour Teams ou Matrix, adaptez uniquement le schéma JSON et l’hôte — la passerelle et la file restent les mêmes.
Exemple d’agrégation d’état multi-nœuds
Imaginez trois builders MeshMac qui terminent dans la même minute. Chaque runner publie un enregistrement normalisé vers Redis, NATS ou le tissu de tâches OpenClaw. Le consommateur passerelle mappe les charges fournisseur vers une forme interne commune avant de produire le champ text :
| Clé normalisée | Exemples | Usage ligne Chat |
|---|---|---|
workflow | ios-release | Préfixe ou premier segment du message |
state | succeeded / failed | Emoji ou libellé convenu d’équipe |
mesh_node_id | mm-pool-2 | Pied de ligne : quel Mac a exécuté le job |
provider_run_id | 18451203 | Clé d’idempotence avec state |
Exemple de ligne rendue (un seul POST) :
✅ ios-release · main · abc1234 · <https://github.com/org/repo/actions/runs/18451203> · nœud mm-pool-2
Si deux nœuds rapportent le même provider_run_id et state, la passerelle doit dédupliquer sur une fenêtre (souvent 24 à 72 h) pour éviter le spam. Alignez la mécanique avec le guide file de tâches et étapes de retry pour la file interne, distincte du « relancer le build ».
FAQ : authentification et nouvelles tentatives
- L’URL du webhook est-elle un jeton OAuth ?
- Non : c’est un secret d’endpoint HTTPS non scopes. Protégez-la comme une clé API : ACL disque, pas de Git, journaux réduits (hôte plus quatre derniers caractères du paramètre token).
- Quels codes HTTP doivent déclencher un retry ?
- Retry
429et5xxavec backoff exponentiel, jitter et plafond (par exemple cinq tentatives sur deux minutes). Ne retry pas400ou401: corrigez le JSON ou régénérez le webhook. Un404répété signifie souvent « webhook supprimé ». - Comment éviter les messages Chat en double ?
- Stockez les livraisons réussies sous
provider_run_id + statedans SQLite, Redis ou un cache local passerelle. Ignorez un second POST si la clé existe dans la fenêtre de déduplication. - Les builders peuvent-ils appeler Chat directement « le temps de tester » ?
- Cela multiplie les secrets et les règles d’egress. Consolidez sur un processus passerelle unique pour que rotation, audit et exercices de bascule restent prévisibles.
Résumé
Installez OpenClaw sur une passerelle unique, conservez l’URL Google Chat en 0440, vérifiez la sortie vers chat.googleapis.com, envoyez un JSON texte minimal, normalisez mesh_node_id et provider_run_id sur chaque nœud, et combinez retries bornés et déduplication. L’accueil, l’index du blog et le centre d’aide restent consultables sans compte.
Choisir forfaits et nœuds, puis un espace Chat unique
Comparez les forfaits et offres multi-nœuds publiques sans connexion, ajustez la capacité builder à la profondeur de votre file, et ouvrez le centre d’aide pour SSH, VNC et accès passerelle. L’accueil et le blog restent lisibles sans inscription.