Matrix (plugin)
Matrix es un protocolo de mensajería abierto y descentralizado. OpenClaw se conecta como un usuario de Matrix en cualquier homeserver, por lo que necesitas una cuenta de Matrix para el bot. Una vez autenticado, puedes enviar un DM al bot directamente o invitarlo a salas (los “grupos” de Matrix). Beeper también es una opción de cliente válida, pero requiere que E2EE esté habilitado.
Estado: compatible vía plugin (@vector-im/matrix-bot-sdk). Mensajes directos, salas, hilos, multimedia, reacciones, encuestas (envío + poll-start como texto), ubicación, y E2EE (con soporte de criptografía).
Plugin requerido
Matrix se distribuye como plugin y no viene incluido en la instalación base.
Instalar vía CLI (registro npm):
openclaw plugins install @openclaw/matrix
Checkout local (cuando se ejecuta desde un repositorio git):
openclaw plugins install ./extensions/matrix
Si eliges Matrix durante la configuración/onboarding y se detecta un checkout de git, OpenClaw ofrecerá la ruta de instalación local automáticamente.
Detalles: Plugins
Configuración
-
Instala el plugin de Matrix:
- Desde npm:
openclaw plugins install @openclaw/matrix - Desde un checkout local:
openclaw plugins install ./extensions/matrix
- Desde npm:
-
Crea una cuenta de Matrix en un homeserver:
- Explora opciones de hosting en https://matrix.org/ecosystem/hosting/
- O alójalo tú mismo.
-
Obtén un token de acceso para la cuenta del bot:
- Usa la API de login de Matrix con
curlen tu homeserver:
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" }'- Reemplaza
matrix.example.orgcon la URL de tu homeserver. - O configura
channels.matrix.userId+channels.matrix.password: OpenClaw llama al mismo endpoint de login, almacena el token de acceso en~/.openclaw/credentials/matrix/credentials.json, y lo reutiliza en el siguiente inicio.
- Usa la API de login de Matrix con
-
Configura las credenciales:
- Variable de entorno:
MATRIX_HOMESERVER,MATRIX_ACCESS_TOKEN(oMATRIX_USER_ID+MATRIX_PASSWORD) - O configuración:
channels.matrix.* - Si ambos están configurados, la configuración tiene prioridad.
- Con token de acceso: el ID de usuario se obtiene automáticamente vía
/whoami. - Cuando se configura,
channels.matrix.userIddebe ser el ID completo de Matrix (ejemplo:@bot:example.org).
- Variable de entorno:
-
Reinicia el gateway (o termina el onboarding).
-
Inicia un DM con el bot o invítalo a una sala desde cualquier cliente de Matrix (Element, Beeper, etc.; ver https://matrix.org/ecosystem/clients/). Beeper requiere E2EE, así que configura
channels.matrix.encryption: truey verifica el dispositivo.
Configuración mínima (token de acceso, ID de usuario auto-obtenido):
{
channels: {
matrix: {
enabled: true,
homeserver: "https://matrix.example.org",
accessToken: "syt_***",
dm: { policy: "pairing" },
},
},
}
Configuración con E2EE (cifrado de extremo a extremo habilitado):
{
channels: {
matrix: {
enabled: true,
homeserver: "https://matrix.example.org",
accessToken: "syt_***",
encryption: true,
dm: { policy: "pairing" },
},
},
}
Cifrado (E2EE)
El cifrado de extremo a extremo es compatible vía el SDK de criptografía en Rust.
Habilita con channels.matrix.encryption: true:
- Si el módulo de criptografía carga, las salas cifradas se descifran automáticamente.
- Los multimedia salientes se cifran al enviar a salas cifradas.
- En la primera conexión, OpenClaw solicita verificación de dispositivo a tus otras sesiones.
- Verifica el dispositivo en otro cliente de Matrix (Element, etc.) para habilitar el intercambio de claves.
- Si el módulo de criptografía no puede cargarse, E2EE se deshabilita y las salas cifradas no se descifrarán; OpenClaw registra una advertencia.
- Si ves errores de módulo de criptografía faltante (por ejemplo,
@matrix-org/matrix-sdk-crypto-nodejs-*), permite los scripts de build para@matrix-org/matrix-sdk-crypto-nodejsy ejecutapnpm rebuild @matrix-org/matrix-sdk-crypto-nodejso descarga el binario connode node_modules/@matrix-org/matrix-sdk-crypto-nodejs/download-lib.js.
El estado de criptografía se almacena por cuenta + token de acceso en
~/.openclaw/matrix/accounts/<account>/<homeserver>__<user>/<token-hash>/crypto/
(base de datos SQLite). El estado de sincronización está junto a él en bot-storage.json.
Si el token de acceso (dispositivo) cambia, se crea un nuevo almacén y el bot debe ser
re-verificado para las salas cifradas.
Verificación de dispositivo: Cuando E2EE está habilitado, el bot solicitará verificación de tus otras sesiones al iniciar. Abre Element (u otro cliente) y aprueba la solicitud de verificación para establecer confianza. Una vez verificado, el bot puede descifrar mensajes en salas cifradas.
Multi-cuenta
Soporte multi-cuenta: usa channels.matrix.accounts con credenciales por cuenta y name opcional. Consulta gateway/configuration para el patrón compartido.
Cada cuenta se ejecuta como un usuario de Matrix separado en cualquier homeserver. La configuración por cuenta
hereda de la configuración de nivel superior channels.matrix y puede anular cualquier opción
(política de DM, grupos, cifrado, etc.).
{
channels: {
matrix: {
enabled: true,
dm: { policy: "pairing" },
accounts: {
assistant: {
name: "Main assistant",
homeserver: "https://matrix.example.org",
accessToken: "syt_assistant_***",
encryption: true,
},
alerts: {
name: "Alerts bot",
homeserver: "https://matrix.example.org",
accessToken: "syt_alerts_***",
dm: { policy: "allowlist", allowFrom: ["@admin:example.org"] },
},
},
},
},
}
Notas:
- El inicio de cuentas se serializa para evitar condiciones de carrera con importaciones de módulos concurrentes.
- Las variables de entorno (
MATRIX_HOMESERVER,MATRIX_ACCESS_TOKEN, etc.) solo aplican a la cuenta default. - La configuración base del canal (política de DM, política de grupo, restricción por mención, etc.) aplica a todas las cuentas a menos que se anule por cuenta.
- Usa
bindings[].match.accountIdpara enrutar cada cuenta a un agente diferente. - El estado de criptografía se almacena por cuenta + token de acceso (almacenes de claves separados por cuenta).
Modelo de enrutamiento
- Las respuestas siempre vuelven a Matrix.
- Los DMs comparten la sesión principal del agente; las salas se mapean a sesiones de grupo.
Control de acceso (DMs)
- Predeterminado:
channels.matrix.dm.policy = "pairing". Los remitentes desconocidos reciben un código de emparejamiento. - Aprobar vía:
openclaw pairing list matrixopenclaw pairing approve matrix <CODE>
- DMs públicos:
channels.matrix.dm.policy="open"máschannels.matrix.dm.allowFrom=["*"]. channels.matrix.dm.allowFromacepta IDs completos de usuario de Matrix (ejemplo:@user:server). El asistente resuelve nombres para mostrar a IDs de usuario cuando la búsqueda de directorio encuentra una coincidencia exacta única.- No uses nombres para mostrar o localparts sin formato (ejemplo:
"Alice"o"alice"). Son ambiguos y se ignoran para la coincidencia de lista de acceso. Usa IDs completos@user:server.
Salas (grupos)
- Predeterminado:
channels.matrix.groupPolicy = "allowlist"(restricción por mención). Usachannels.defaults.groupPolicypara anular el predeterminado cuando no está configurado. - Nota de ejecución: si
channels.matrixfalta completamente, el runtime recurre agroupPolicy="allowlist"para verificaciones de salas (incluso sichannels.defaults.groupPolicyestá configurado). - Configura la lista de acceso de salas con
channels.matrix.groups(IDs de sala o alias; los nombres se resuelven a IDs cuando la búsqueda de directorio encuentra una coincidencia exacta única):
{
channels: {
matrix: {
groupPolicy: "allowlist",
groups: {
"!roomId:example.org": { allow: true },
"#alias:example.org": { allow: true },
},
groupAllowFrom: ["@owner:example.org"],
},
},
}
requireMention: falsehabilita auto-respuesta en esa sala.groups."*"puede establecer valores predeterminados para la restricción por mención en todas las salas.groupAllowFromrestringe qué remitentes pueden activar el bot en salas (IDs completos de usuario de Matrix).- Las listas de acceso
userspor sala pueden restringir aún más los remitentes dentro de una sala específica (usa IDs completos de usuario de Matrix). - El asistente de configuración solicita listas de acceso de salas (IDs de sala, alias o nombres) y resuelve nombres solo con coincidencia exacta y única.
- Al inicio, OpenClaw resuelve nombres de sala/usuario en las listas de acceso a IDs y registra el mapeo; las entradas no resueltas se ignoran para la coincidencia de lista de acceso.
- Las invitaciones se aceptan automáticamente por defecto; controla con
channels.matrix.autoJoinychannels.matrix.autoJoinAllowlist. - Para no permitir ninguna sala, configura
channels.matrix.groupPolicy: "disabled"(o mantén una lista de acceso vacía). - Clave legacy:
channels.matrix.rooms(misma estructura quegroups).
Hilos
- Las respuestas en hilo son compatibles.
channels.matrix.threadRepliescontrola si las respuestas permanecen en hilos:off,inbound(predeterminado),always
channels.matrix.replyToModecontrola los metadatos de reply-to cuando no se responde en un hilo:off(predeterminado),first,all
Capacidades
| Característica | Estado |
|---|---|
| Mensajes directos | Soportado |
| Salas | Soportado |
| Hilos | Soportado |
| Multimedia | Soportado |
| E2EE | Soportado (módulo de criptografía requerido) |
| Reacciones | Soportado (envío/lectura vía herramientas) |
| Encuestas | Envío soportado; los poll-start entrantes se convierten a texto (respuestas/finales ignorados) |
| Ubicación | Soportado (geo URI; altitud ignorada) |
| Comandos nativos | Soportado |
Resolución de problemas
Ejecuta esta secuencia primero:
openclaw status
openclaw gateway status
openclaw logs --follow
openclaw doctor
openclaw channels status --probe
Luego confirma el estado de emparejamiento de DM si es necesario:
openclaw pairing list matrix
Fallos comunes:
- Autenticado pero los mensajes de sala se ignoran: sala bloqueada por
groupPolicyo lista de acceso de salas. - DMs ignorados: remitente pendiente de aprobación cuando
channels.matrix.dm.policy="pairing". - Las salas cifradas fallan: soporte de criptografía o configuración de cifrado no coinciden.
Para el flujo de diagnóstico: /channels/troubleshooting.
Referencia de configuración (Matrix)
Configuración completa: Configuración
Opciones del proveedor:
channels.matrix.enabled: habilitar/deshabilitar inicio del canal.channels.matrix.homeserver: URL del homeserver.channels.matrix.userId: ID de usuario de Matrix (opcional con token de acceso).channels.matrix.accessToken: token de acceso.channels.matrix.password: contraseña para login (token almacenado).channels.matrix.deviceName: nombre de dispositivo para mostrar.channels.matrix.encryption: habilitar E2EE (predeterminado: false).channels.matrix.initialSyncLimit: límite de sincronización inicial.channels.matrix.threadReplies:off | inbound | always(predeterminado: inbound).channels.matrix.textChunkLimit: tamaño de fragmento de texto saliente (caracteres).channels.matrix.chunkMode:length(predeterminado) onewlinepara dividir en líneas en blanco (límites de párrafo) antes del fragmentado por longitud.channels.matrix.dm.policy:pairing | allowlist | open | disabled(predeterminado: pairing).channels.matrix.dm.allowFrom: lista de acceso de DM (IDs completos de usuario de Matrix).openrequiere"*". El asistente resuelve nombres a IDs cuando es posible.channels.matrix.groupPolicy:allowlist | open | disabled(predeterminado: allowlist).channels.matrix.groupAllowFrom: remitentes permitidos para mensajes de grupo (IDs completos de usuario de Matrix).channels.matrix.allowlistOnly: forzar reglas de lista de acceso para DMs + salas.channels.matrix.groups: lista de acceso de grupo + mapa de configuración por sala.channels.matrix.rooms: lista de acceso/configuración de grupo legacy.channels.matrix.replyToMode: modo reply-to para hilos/etiquetas.channels.matrix.mediaMaxMb: límite de multimedia entrante/saliente (MB).channels.matrix.autoJoin: manejo de invitaciones (always | allowlist | off, predeterminado: always).channels.matrix.autoJoinAllowlist: IDs/alias de sala permitidos para auto-join.channels.matrix.accounts: configuración multi-cuenta por ID de cuenta (cada cuenta hereda la configuración de nivel superior).channels.matrix.actions: control por acción de herramientas (reactions/messages/pins/memberInfo/channelInfo).