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.orgy 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.noticee ignora las notices y tus propios eventos. - Restringe la unión automática y respeta las respuestas de límite (
M_LIMIT_EXCEEDEDconretry_after_ms).