Перейти к основному содержимому

Каналы

Каналы добавляют командные разговоры в Libre WebUI: публичные и закрытые комнаты, личные сообщения, ветки, реакции, закрепления, непрочитанное, вложения и ответы @model на той же долговечной шифрованной основе чата.

Типы и участники

ТипКто видитКто входит
publicВсе могут смотретьЛюбой вступает сам
privateТолько участникиВладелец приглашает
dmТолько двоеАвтоматически, всегда ровно двое

Участие — единственное основание доступа: каждое чтение/запись, загрузка вложения и живая доставка проверяют участника. Посторонний получает нераскрывающий 404. Глобальный администратор намеренно не имеет доступа к содержимому.

Создатель публичного/закрытого канала — владелец: переименовывает, архивирует, приглашает, удаляет участников, модерирует и удаляет канал; уходит удалением, не оставлением. DM дедуплицируется для пары.

Хронология

Сообщения — долговечная упорядоченная хронология с keyset-курсорами (created_at и ID) в обе стороны без пропусков/дублей.

  • Идемпотентная публикация. Клиент задаёт ID; повтор попадает в ту же запись один раз.
  • Удаление с tombstone. Содержимое стирается, запись остаётся, ветки и порядок стабильны. Автор удаляет своё, владелец любое.
  • Редактирование только автора с editedAt.
  • Ветка одного уровня. Ответ на ответ отклоняется; корень имеет живой счётчик.
  • Реакции уникальны для каждой пары пользователя и эмодзи, без дублей.
  • Закрепления управляются участниками.

Имена, описания и сообщения шифруются в той же границе, что чат.

Непрочитанное

Участник имеет монотонный курсор. Сервер считает непрочитанное отдельно для каждого канала, собственные сообщения не непрочитаны; POST /api/channels/:channelId/read идёт только вперёд, старый клиент не воскресит прочитанное.

Доставка в реальном времени

Изменения идут в channel:<id> и GET /api/channels/:channelId/events (SSE). Перед доставкой участие проверяется, удаление закрывает поток. SQL авторитетен: пропуск восстанавливается чтением, реестр — доставка, не истина.

Вложения

Файл сначала POST /api/channels/:channelId/attachments, ждёт в общей памяти claims и привязывается при сообщении. Claim одноразовый, истекает через 15 минут. Байтами и квотой владеет загрузивший; скачивание проверяет участие.

Ответы @model

Композитор направляет сообщение модели. Ответ сразу появляется ожидающим и завершается долговечным заданием строго от имени вызвавшего участника: его доступ, учётные данные и маршрут, никогда владельца. Удалённый из канала участник не сохранит очередь: перед генерацией проверка и видимая ошибка. Ошибки показаны в ответе.

Контекст — до 30 последних сообщений. Это единичные дополнения: инструменты, знания и веб-поиск пока не подключены.

Ограничения

ОграничениеЗначение
Каналов на пользователя50
Участников на канал200
Сообщений50,000
Длина сообщения8,000 символов
Вложений5 × 10 MB
Реакций200

Границы

  • Нет присутствия и набора текста.
  • Экспорт и хранение следуют правилам резервного копирования инстанции; отдельного экспорта для каждого канала пока нет.
  • Упоминания создают уведомления в приложении; отдельных настроек уведомлений для каждого канала, кроме выхода из него, пока нет.