Sommaire
- Objectif : une timeline pour tout le maillage
- Webhook entrant rapide ou Application Service
- Installation de la passerelle et jetons
- Étapes Matrix Webhook et Application Service
- Signature des messages ou validation à moindre privilège
- Tableau de correspondance des champs d’état CI
- FAQ dépannage : aucun message reçu
Objectif : notifier la collaboration multi-nœuds dans un seul salon
L’erreur fréquente est de laisser chaque Mac poster sous un compte ou un pont différent : la timeline devient illisible et les états se contredisent. La bonne pratique 2026 consiste à centraliser l’émission Matrix dans une passerelle unique qui consomme la même file de tâches que tous les workers, comme dans notre guide déploiement unifié et synchronisation de la file sur MeshMac. Ainsi, que le build tourne sur le nœud A ou B, l’équipe voit la même progression et les mêmes transitions queued → running → succeeded ou failed.
Pour cadrer les webhooks HTTP en amont (validation, Bearer, idempotence), recoupez avec webhook OpenClaw MeshMac : build partagé et notifications : les mêmes garde-fous s’appliquent avant d’atteindre Matrix.
Webhook Matrix entrant ou Application Service : que choisir ?
Démarrez par un POST HTTP vers un bridge qui transforme le JSON en m.room.message : c’est le plus rapide sur un homeserver unique. Passez à une Application Service lorsque vous avez besoin d’utilisateurs fantômes, de transactions riches ou d’un routage multi-salles stable — au prix d’un fichier d’enregistrement yaml, de paires de jetons et d’une discipline de rechargement Synapse.
| Modèle | Idéal pour | Compromis |
|---|---|---|
| HTTP entrant → bridge | Mise en route immédiate, une salle d’état CI | Peu de contrôle de schéma côté Matrix ; validez le JSON vous-même avant émission |
| Application Service enregistrée | Routage stable, utilisateurs dédiés, charge utile structurée | Plus de pièces mobiles : yaml, as_token / hs_token, espaces de noms |
Installation de la passerelle et jetons
Exécutez la passerelle OpenClaw sur un hôte stable joignable depuis Synapse et depuis la sortie réseau de votre CI. Fixez OPENCLAW_CONFIG_ROOT, montez la configuration en lecture seule et gardez les secrets Matrix hors Git. Créez un utilisateur « bot » de build, faites-le rejoindre la salle d’équipe une fois, stockez son jeton d’accès avec des permissions fichiers du type 0440 pour l’utilisateur système de la passerelle uniquement : les workers sur les Mac du pool restent sans jeton Matrix et ne font qu’exécuter la file. Redémarrez la passerelle après chaque rotation de secret pour que tous les nœuds partagent le même chemin de notification. La cadence de rotation et le lien avec les canaux type IM sont détaillés dans canaux d’alerte, rotation des jetons et droits minimaux.
- URL du homeserver : TLS vérifié ; en auto-hébergé, épinglage d’empreinte si besoin.
- Identifiant de salle : préférer l’id complet
!xxx:domainà seul un alias. - Identifiant de corrélation : propagez de la CI → OpenClaw → corps Matrix pour joindre les journaux multi-nœuds.
Étapes Matrix Webhook et Application Service
- Exposer une route TLS du type
/hooks/matrix/build-statusderrière votre reverse proxy. - Enregistrer l’intégration via le gestionnaire d’intégrations ou
app_service_config_filespointant vers votre yaml d’Application Service. - Renseigner
id,url,as_token,hs_token, et les espaces de noms (ex. préfixe localbuildbot_). - Recharger Synapse, envoyer un POST de test signé ou authentifié, vérifier la présence d’un
m.room.messagedans la salle cible. - Documenter dans le sujet ou le pin que chaque notification doit inclure
mesh_node_idpour la lisibilité du pool multi-Mac.
Signature des messages ou validation à moindre privilège
Chaque POST vers la passerelle doit être authentifié : calculez un HMAC-SHA256 sur les octets bruts du corps et comparez avec une primitive en temps constant (équivalent de crypto.timingSafeEqual). Si le fournisseur CI ne signe pas, combinez secret Bearer et liste d’IP de sortie des runners. Rejetez les horodatages trop anciens (par ex. plus de cinq minutes) pour limiter la relecture.
Côté Matrix, restreignez le jeton utilisateur à l’envoi dans une seule salle : pas d’invitations globales ni d’administration de comptes. Ne logguez jamais l’en-tête Authorization en clair. Effectuez la vérification uniquement sur la passerelle, pas sur chaque nœud exécuteur : les Mac distants restent des workers à faible surface d’attaque.
Tableau de correspondance des champs d’état CI
Normalisez le JSON fournisseur (GitHub Actions, GitLab CI, outil interne) avant de formater le message Matrix en Markdown ou texte brut. Le tableau suivant fixe une convention unique pour toute l’équipe et pour tous les nœuds du pool.
| Champ source CI | Clé passerelle | Usage dans le message Matrix |
|---|---|---|
| Nom du workflow / pipeline | workflow | Première ligne en gras pour identifier l’automatisation |
| Statut ou conclusion | state | Mapper vers file, en cours, succès ou échec avec emojis convenus par l’équipe |
| Branche ou ref de tête | branch | Deuxième ligne : visibilité release vs fonctionnalité |
| SHA de commit | commit | Préfixe court (7 caractères) lié à l’URL du run |
html_url / URL web du job | run_url | Lien cliquable pour creuser les journaux du nœud |
| Nom du runner ou label MeshMac | mesh_node_id | Pied de message : quel Mac du pool a exécuté le job |
FAQ dépannage : aucun message reçu
- La CI indique 200/202 mais la salle Matrix reste vide
- Vérifiez l’appartenance du bot à la salle, les journaux du bridge (corps vide, template avec conclusion nulle), et rejouez avec un workflow de test minimal.
- Erreurs de signature Application Service
- Diff des valeurs
hs_tokenentre Synapse et le yaml disque, supprimez les retours ligne parasites dans les secrets, testez encurldepuis l’hôte homeserver pour écarter un proxy TLS intermédiaire. - Seuls certains nœuds « notifient »
- Des runners contournent la passerelle partagée : unifiez la variable d’environnement d’URL webhook et restreignez la sortie CI vers l’ingress approuvé.
- Doublons à chaque transition
- Dédupliquez avec une clé
run_id + stateconservée environ 72 h dans Redis ou SQLite avant d’émettre le texte Matrix.
En bref
Émettez vers Matrix uniquement depuis la passerelle, vérifiez chaque appelant HTTP, mappez les champs CI une fois pour toutes et affichez systématiquement mesh_node_id pour que la collaboration multi-nœuds reste lisible. Pour la suite : accueil Meshmac, blog, centre d’aide et page OpenClaw.
Une salle Matrix pour tout le pool Mac
Branchez Matrix une fois : chaque nœud distant contribue à la même timeline d’état de build. Parcourez l’accueil pour comparer les offres, le blog pour les guides cluster, le centre d’aide pour SSH/VNC, puis louez le Mac adapté à votre équipe.