Guía 16

Bots de Matrix: la API Client-Server, cifrado de extremo a extremo y application services

Matrix no tiene una plataforma central de bots. Un bot es simplemente un cliente de Matrix, lo que da control total y algunas responsabilidades extra.

Guía2 min de lecturaActualizado

El modelo

Matrix es un estándar abierto de comunicación en tiempo real federada. Los usuarios viven en homeservers (por ejemplo Synapse, Dendrite o Conduit) que se federan entre sí. Un bot es una cuenta de usuario normal que habla con su homeserver mediante la API Client-Server.

  • Los IDs de usuario son como @helper:example.org. Comprueba las reglas de la parte local con el validador de usernames.
  • Las salas tienen IDs como !abc123:example.org y alias opcionales como #soporte:example.org.
  • Todo en una sala es un evento: mensajes, cambios de membresía, estado.

Obtener un token

Registra una cuenta dedicada para el bot, inicia sesión una vez con POST /_matrix/client/v3/login y guarda el token como secreto. Evita iniciar sesión en cada arranque: cada inicio crea un dispositivo nuevo, lo que importa para el cifrado.

Recibir eventos

Llama a GET /_matrix/client/v3/sync en bucle con un timeout (long polling) y pasa el token next_batch como since en la siguiente llamada. Guarda ese token para que un reinicio no repita ni pierda historial. Usa un filtro para recibir solo los tipos de evento que necesitas.

Enviar mensajes

PUT /_matrix/client/v3/rooms/{roomId}/send/m.room.message/{txnId}
Authorization: Bearer <token>

{"msgtype": "m.text", "body": "Hola", "format": "org.matrix.custom.html", "formatted_body": "<b>Hola</b>"}

El ID de transacción hace la petición idempotente: reintentar con el mismo txnId no duplica el mensaje. Usa m.notice como msgtype para respuestas automáticas; los clientes pueden mostrarlas distinto y, por convención, otros bots no responden a ellas, lo que evita bucles entre bots.

Invitaciones y permisos

Los bots suelen unirse solos a las salas a las que se les invita. Limítalo a servidores o usuarios de confianza o cualquiera podrá meter tu bot en salas de spam. Los niveles de poder de la sala deciden si el bot puede expulsar, redactar o cambiar el estado.

Cifrado

Muchas salas están cifradas de extremo a extremo. Para leerlas, el bot necesita una implementación de Olm/Megolm, claves de dispositivo persistentes y un almacén criptográfico. SDKs como matrix-bot-sdk, matrix-nio (Python), mautrix (Go y Python) o matrix-rust-sdk se encargan de ello. Haz copia del almacén criptográfico; perderlo significa perder el acceso al historial cifrado.

Application services

Para puentes o bots que necesitan muchos usuarios virtuales, registra un application service en el homeserver. Recibe los eventos que el servidor le envía para los espacios de nombres que posee y no tiene los límites de un cliente. Requiere acceso a la configuración del homeserver, así que encaja en instalaciones propias.

Lista de comprobación

  • Guarda el token de sync y el almacén de dispositivo y criptográfico.
  • Envía m.notice e ignora las notices y tus propios eventos.
  • Restringe la unión automática y respeta las respuestas de límite (M_LIMIT_EXCEEDED con retry_after_ms).

Comprueba lo aprendido

1. ¿Por qué enviar respuestas automáticas como m.notice?
2. ¿Qué hace idempotente una petición de envío?