Matrix (plugin)
Matrix est un protocole de messagerie ouvert et decentralise. OpenClaw se connecte en tant quâutilisateur Matrix sur nâimporte quel serveur, vous avez donc besoin dâun compte Matrix pour le bot. Une fois connecte, vous pouvez envoyer des DMs au bot directement ou lâinviter dans des salons (les « groupes » Matrix). Beeper est aussi un client valide, mais il necessite lâactivation du E2EE.
Statut : pris en charge via plugin (@vector-im/matrix-bot-sdk). Messages directs, salons, fils, medias, reactions, sondages (envoi + poll-start en texte), localisation et E2EE (avec support crypto).
Plugin requis
Matrix est fourni comme plugin et nâest pas inclus dans lâinstallation de base.
Installation via CLI (registre npm) :
openclaw plugins install @openclaw/matrix
Checkout local (execution depuis un depot git) :
openclaw plugins install ./extensions/matrix
Si vous choisissez Matrix pendant la configuration/lâonboarding et quâun checkout git est detecte, OpenClaw proposera automatiquement le chemin dâinstallation local.
Details : Plugins
Configuration
-
Installez le plugin Matrix :
- Depuis npm :
openclaw plugins install @openclaw/matrix - Depuis un checkout local :
openclaw plugins install ./extensions/matrix
- Depuis npm :
-
Creez un compte Matrix sur un serveur :
- Parcourez les options dâhebergement sur https://matrix.org/ecosystem/hosting/
- Ou hebergez-le vous-meme.
-
Obtenez un jeton dâacces pour le compte bot :
- Utilisez lâAPI de connexion Matrix avec
curlsur votre serveur :
curl --request POST \ --url https://matrix.example.org/_matrix/client/v3/login \ --header 'Content-Type: application/json' \ --data '{ "type": "m.login.password", "identifier": { "type": "m.id.user", "user": "your-user-name" }, "password": "your-password" }'- Remplacez
matrix.example.orgpar lâURL de votre serveur. - Ou definissez
channels.matrix.userId+channels.matrix.password: OpenClaw appelle le meme point de connexion, stocke le jeton dâacces dans~/.openclaw/credentials/matrix/credentials.json, et le reutilise au prochain demarrage.
- Utilisez lâAPI de connexion Matrix avec
-
Configurez les identifiants :
- Env :
MATRIX_HOMESERVER,MATRIX_ACCESS_TOKEN(ouMATRIX_USER_ID+MATRIX_PASSWORD) - Ou config :
channels.matrix.* - Si les deux sont definis, la config a la priorite.
- Avec un jeton dâacces : lâID utilisateur est recupere automatiquement via
/whoami. - Quand defini,
channels.matrix.userIddevrait etre lâID Matrix complet (exemple :@bot:example.org).
- Env :
-
Redemarrez la gateway (ou terminez lâonboarding).
-
Demarrez un DM avec le bot ou invitez-le dans un salon depuis nâimporte quel client Matrix (Element, Beeper, etc. ; voir https://matrix.org/ecosystem/clients/). Beeper necessite le E2EE, definissez donc
channels.matrix.encryption: trueet verifiez lâappareil.
Configuration minimale (jeton dâacces, ID utilisateur auto-recupere) :
{
channels: {
matrix: {
enabled: true,
homeserver: "https://matrix.example.org",
accessToken: "syt_***",
dm: { policy: "pairing" },
},
},
}
Configuration E2EE (chiffrement de bout en bout active) :
{
channels: {
matrix: {
enabled: true,
homeserver: "https://matrix.example.org",
accessToken: "syt_***",
encryption: true,
dm: { policy: "pairing" },
},
},
}
Chiffrement (E2EE)
Le chiffrement de bout en bout est pris en charge via le SDK crypto Rust.
Activez avec channels.matrix.encryption: true :
- Si le module crypto se charge, les salons chiffres sont dechiffres automatiquement.
- Les medias sortants sont chiffres lors de lâenvoi dans des salons chiffres.
- A la premiere connexion, OpenClaw demande la verification de lâappareil depuis vos autres sessions.
- Verifiez lâappareil dans un autre client Matrix (Element, etc.) pour activer le partage de cles.
- Si le module crypto ne peut pas etre charge, le E2EE est desactive et les salons chiffres ne seront pas dechiffres ; OpenClaw journalise un avertissement.
- Si vous voyez des erreurs de module crypto manquant (par exemple,
@matrix-org/matrix-sdk-crypto-nodejs-*), autorisez les scripts de build pour@matrix-org/matrix-sdk-crypto-nodejset executezpnpm rebuild @matrix-org/matrix-sdk-crypto-nodejsou recuperez le binaire avecnode node_modules/@matrix-org/matrix-sdk-crypto-nodejs/download-lib.js.
Lâetat crypto est stocke par compte + jeton dâacces dans
~/.openclaw/matrix/accounts/<account>/<homeserver>__<user>/<token-hash>/crypto/
(base de donnees SQLite). Lâetat de synchronisation se trouve a cote dans bot-storage.json.
Si le jeton dâacces (appareil) change, un nouveau magasin est cree et le bot doit etre
re-verifie pour les salons chiffres.
Verification dâappareil : Quand le E2EE est active, le bot demandera la verification depuis vos autres sessions au demarrage. Ouvrez Element (ou un autre client) et approuvez la demande de verification pour etablir la confiance. Une fois verifie, le bot peut dechiffrer les messages dans les salons chiffres.
Multi-comptes
Support multi-comptes : utilisez channels.matrix.accounts avec des identifiants par compte et un name optionnel. Voir gateway/configuration pour le patron partage.
Chaque compte sâexecute comme un utilisateur Matrix separe sur nâimporte quel serveur. La config par compte
herite des parametres de niveau superieur channels.matrix et peut surcharger nâimporte quelle option
(politique DM, groupes, chiffrement, etc.).
{
channels: {
matrix: {
enabled: true,
dm: { policy: "pairing" },
accounts: {
assistant: {
name: "Assistant principal",
homeserver: "https://matrix.example.org",
accessToken: "syt_assistant_***",
encryption: true,
},
alerts: {
name: "Bot d'alertes",
homeserver: "https://matrix.example.org",
accessToken: "syt_alerts_***",
dm: { policy: "allowlist", allowFrom: ["@admin:example.org"] },
},
},
},
},
}
Remarques :
- Le demarrage des comptes est serialise pour eviter les conditions de concurrence avec les imports de modules concurrents.
- Les variables dâenv (
MATRIX_HOMESERVER,MATRIX_ACCESS_TOKEN, etc.) ne sâappliquent quâau compte par defaut. - Les parametres de base du canal (politique DM, politique de groupe, filtrage par mention, etc.) sâappliquent a tous les comptes sauf surcharge par compte.
- Utilisez
bindings[].match.accountIdpour router chaque compte vers un agent different. - Lâetat crypto est stocke par compte + jeton dâacces (magasins de cles separes par compte).
Modele de routage
- Les reponses retournent toujours a Matrix.
- Les DMs partagent la session principale de lâagent ; les salons correspondent a des sessions de groupe.
Controle dâacces (DMs)
- Par defaut :
channels.matrix.dm.policy = "pairing". Les expediteurs inconnus recoivent un code dâappairage. - Approbation via :
openclaw pairing list matrixopenclaw pairing approve matrix <CODE>
- DMs publics :
channels.matrix.dm.policy="open"pluschannels.matrix.dm.allowFrom=["*"]. channels.matrix.dm.allowFromaccepte les IDs utilisateur Matrix complets (exemple :@user:server). Lâassistant resout les noms dâaffichage en IDs utilisateur quand la recherche dâannuaire trouve une correspondance unique exacte.- Nâutilisez pas de noms dâaffichage ou de localparts nus (exemple :
"Alice"ou"alice"). Ils sont ambigus et sont ignores pour la correspondance de liste dâautorisation. Utilisez les IDs complets@user:server.
Salons (groupes)
- Par defaut :
channels.matrix.groupPolicy = "allowlist"(filtre par mention). Utilisezchannels.defaults.groupPolicypour surcharger la valeur par defaut quand non defini. - Remarque dâexecution : si
channels.matrixest completement absent, lâexecution se replie surgroupPolicy="allowlist"pour les verifications de salon (meme sichannels.defaults.groupPolicyest defini). - Autorisez les salons avec
channels.matrix.groups(IDs de salon ou alias ; les noms sont resolus en IDs quand la recherche dâannuaire trouve une correspondance unique exacte) :
{
channels: {
matrix: {
groupPolicy: "allowlist",
groups: {
"!roomId:example.org": { allow: true },
"#alias:example.org": { allow: true },
},
groupAllowFrom: ["@owner:example.org"],
},
},
}
requireMention: falseactive la reponse automatique dans ce salon.groups."*"peut definir les valeurs par defaut du filtrage par mention entre les salons.groupAllowFromrestreint quels expediteurs peuvent declencher le bot dans les salons (IDs utilisateur Matrix complets).- Les listes
userspar salon peuvent restreindre davantage les expediteurs a lâinterieur dâun salon specifique (utilisez les IDs utilisateur Matrix complets). - Lâassistant de configuration demande les listes dâautorisation de salon (IDs de salon, alias ou noms) et resout les noms uniquement sur une correspondance exacte et unique.
- Au demarrage, OpenClaw resout les noms de salon/utilisateur dans les listes dâautorisation en IDs et journalise la correspondance ; les entrees non resolues sont ignorees pour la correspondance de liste dâautorisation.
- Les invitations sont auto-acceptees par defaut ; controlez avec
channels.matrix.autoJoinetchannels.matrix.autoJoinAllowlist. - Pour nâautoriser aucun salon, definissez
channels.matrix.groupPolicy: "disabled"(ou gardez une liste dâautorisation vide). - Cle legacy :
channels.matrix.rooms(meme forme quegroups).
Fils
- Le threading des reponses est pris en charge.
channels.matrix.threadRepliescontrole si les reponses restent dans les fils :off,inbound(par defaut),always
channels.matrix.replyToModecontrole les metadonnees reply-to quand on ne repond pas dans un fil :off(par defaut),first,all
Fonctionnalites
| Fonctionnalite | Statut |
|---|---|
| Messages prives | Pris en charge |
| Salons | Pris en charge |
| Fils | Pris en charge |
| Medias | Pris en charge |
| E2EE | Pris en charge (module crypto requis) |
| Reactions | Pris en charge (envoi/lecture via outils) |
| Sondages | Envoi pris en charge ; les poll starts entrants sont convertis en texte (reponses/fins ignorees) |
| Localisation | Pris en charge (URI geo ; altitude ignoree) |
| Commandes natives | Pris en charge |
Depannage
Executez cette echelle en premier :
openclaw status
openclaw gateway status
openclaw logs --follow
openclaw doctor
openclaw channels status --probe
Puis confirmez lâetat dâappairage DM si necessaire :
openclaw pairing list matrix
Echecs courants :
- Connecte mais les messages de salon sont ignores : salon bloque par
groupPolicyou la liste dâautorisation de salon. - DMs ignores : expediteur en attente dâapprobation quand
channels.matrix.dm.policy="pairing". - Les salons chiffres echouent : support crypto ou parametres de chiffrement non concordants.
Pour le flux de triage : /channels/troubleshooting.
Reference de configuration (Matrix)
Configuration complete : Configuration
Options du fournisseur :
channels.matrix.enabled: activer/desactiver le demarrage du canal.channels.matrix.homeserver: URL du serveur.channels.matrix.userId: ID utilisateur Matrix (optionnel avec jeton dâacces).channels.matrix.accessToken: jeton dâacces.channels.matrix.password: mot de passe pour la connexion (jeton stocke).channels.matrix.deviceName: nom dâaffichage de lâappareil.channels.matrix.encryption: activer le E2EE (par defaut : false).channels.matrix.initialSyncLimit: limite de synchronisation initiale.channels.matrix.threadReplies:off | inbound | always(par defaut : inbound).channels.matrix.textChunkLimit: taille de decoupe du texte sortant (caracteres).channels.matrix.chunkMode:length(par defaut) ounewlinepour decouper sur les lignes vides (limites de paragraphe) avant la decoupe par longueur.channels.matrix.dm.policy:pairing | allowlist | open | disabled(par defaut : pairing).channels.matrix.dm.allowFrom: liste dâautorisation DM (IDs utilisateur Matrix complets).opennecessite"*". Lâassistant resout les noms en IDs quand possible.channels.matrix.groupPolicy:allowlist | open | disabled(par defaut : allowlist).channels.matrix.groupAllowFrom: expediteurs autorises pour les messages de groupe (IDs utilisateur Matrix complets).channels.matrix.allowlistOnly: forcer les regles de liste dâautorisation pour DMs + salons.channels.matrix.groups: liste dâautorisation de groupe + parametres par salon.channels.matrix.rooms: liste dâautorisation/config de groupe legacy.channels.matrix.replyToMode: mode reply-to pour les fils/tags.channels.matrix.mediaMaxMb: limite de media entrant/sortant (Mo).channels.matrix.autoJoin: gestion des invitations (always | allowlist | off, par defaut : always).channels.matrix.autoJoinAllowlist: IDs/alias de salon autorises pour lâauto-join.channels.matrix.accounts: configuration multi-comptes par ID de compte (chaque compte herite des parametres de niveau superieur).channels.matrix.actions: controle par action des outils (reactions/messages/pins/memberInfo/channelInfo).