Canales
Los canales incorporan las conversaciones de equipo a Libre WebUI: salas públicas
y privadas, además de mensajes directos, con hilos, reacciones, mensajes fijados,
seguimiento de no leídos, archivos adjuntos y respuestas de @model, todo sobre los
mismos cimientos duraderos y cifrados que el chat.
Tipos de canal y pertenencia
| Tipo | Quién puede verlo | Quién se une |
|---|---|---|
public | Cualquiera puede explorarlo | Cada persona se une por sí misma |
private | Solo los miembros | El propietario invita a los miembros |
dm | Solo los dos participantes | Se abre automáticamente; siempre son dos |
La pertenencia es la única autoridad sobre el contenido del canal: cada lectura y escritura, incluidas las descargas de adjuntos y la entrega de eventos en directo, comprueba primero la pertenencia del solicitante. Quienes no son miembros reciben un 404 que no revela la existencia del recurso. El rol de administrador global no otorga deliberadamente acceso al contenido de los canales.
Quien crea un canal público o privado es su propietario. Los propietarios pueden cambiar el nombre, archivar, invitar (en canales privados), eliminar miembros, moderar mensajes y borrar el canal; un propietario se marcha eliminándolo, nunca abandonándolo. Los mensajes directos se deduplican por pareja: abrir un DM con la misma persona siempre lleva a la misma conversación.
La cronología
Los mensajes forman una cronología persistente y ordenada que se lee en ambas
direcciones con cursores por clave (created_at más el ID del mensaje), por lo que
la paginación nunca omite ni duplica entradas.
- Publicaciones idempotentes. El cliente proporciona la identidad del mensaje; una solicitud repetida llega exactamente una vez a la misma entrada.
- Eliminación con lápida. Borrar un mensaje elimina su contenido, pero conserva la entrada de la cronología, para que los hilos no queden colgando ni cambie el orden. Los autores borran sus propios mensajes; los propietarios pueden moderar cualquiera.
- Las ediciones son exclusivas del autor y llevan una marca
editedAt. - Los hilos tienen un solo nivel. Cualquier mensaje raíz puede alojar un hilo; se rechazan las respuestas a respuestas. Los mensajes raíz muestran recuentos de respuestas en directo.
- Las reacciones son por usuario y emoji, y se cuentan sin duplicados.
- Los mensajes fijados son gestionados por los miembros y se enumeran por canal.
Los nombres y las descripciones de los canales y el contenido de los mensajes se cifran en reposo con el mismo límite que los mensajes de chat.
Estado de lectura
Cada pertenencia mantiene un cursor de lectura monótono. El servidor calcula los no
leídos por canal (tus propios mensajes nunca se consideran sin leer) y
POST /api/channels/:channelId/read avanza el cursor, sin hacerlo retroceder jamás;
un cliente obsoleto no puede resucitar mensajes ya leídos.
Entrega en tiempo real
Cada cambio de la cronología se añade al flujo duradero channel:<id> y se
distribuye mediante GET /api/channels/:channelId/events (SSE). La pertenencia se
vuelve a comprobar antes de cada entrega, por lo que eliminar a un miembro cierra su
flujo de forma segura. La cronología SQL sigue siendo la autoridad: un suscriptor
que pierda eventos simplemente vuelve a leerla; el registro sirve para entregar, no
para establecer la verdad.
Archivos adjuntos
Los archivos se suben primero (POST /api/channels/:channelId/attachments), esperan
brevemente en una caché compartida de reclamaciones y se adjuntan cuando se publica
el mensaje. Una reclamación de subida es de un solo uso y caduca sin reclamar a los
15 minutos. Los bytes del blob pertenecen a quien los subió (y cuentan en su cuota),
y cada descarga vuelve a comprobar la pertenencia al canal.
Respuestas de @model
El redactor permite dirigir un mensaje a un modelo. La respuesta aparece de inmediato como un mensaje pendiente atribuido al modelo y se completa mediante un trabajo duradero que se ejecuta estrictamente con la identidad del miembro que lo invocó: su acceso a modelos, sus credenciales y su enrutamiento, nunca los del propietario ni otro miembro. Si se elimina a un miembro mientras su mención está en cola, no puede mantenerla viva: el trabajo vuelve a comprobar la pertenencia antes de generar y registra un fallo visible. Los fallos del modelo aparecen en la propia respuesta en lugar de desaparecer en una cola.
Las respuestas del modelo usan como contexto la conversación reciente del canal (hasta 30 mensajes). Se ejecutan como completados únicos: las herramientas de chat, la recuperación de conocimientos y la búsqueda web aún no están conectadas a las menciones de canal.
Límites
| Límite | Valor |
|---|---|
| Canales creados por usuario | 50 |
| Miembros por canal | 200 |
| Mensajes por canal | 50,000 |
| Longitud del mensaje | 8,000 caracteres |
| Adjuntos por mensaje | 5 × 10 MB |
| Reacciones por mensaje | 200 |
Restricciones
- No se han implementado los indicadores de presencia ni el estado de escritura.
- La exportación del contenido y las políticas de conservación de los canales siguen el mecanismo de copias de la instancia; aún no existe exportación por canal.
- Las menciones notifican mediante el servicio integrado; aún no hay preferencias por canal más allá de abandonarlo.