Чат
Чат — встроенный механизм платформы для обмена текстовыми сообщениями между пользователями системы и для рассылки системных сообщений. Чат поддерживает групповые комнаты и личные диалоги, вложения файлов, ответы на сообщения, редактирование и удаление в ограниченном временном окне, отслеживание статуса прочтения и push-уведомления.
Чаты, диалоги и участники
Чат — это сущность с набором участников. Пользователь становится участником при включении его в чат; для каждого участника независимо хранится признак только чтение, запрещающий ему отправлять сообщения.
Диалог — частный случай чата ровно с двумя участниками. Диалог между двумя пользователями уникален: при попытке открыть диалог с собеседником, с которым он уже существует, используется существующий, новый не создаётся.
Сообщения
Сообщение характеризуется автором, форматированным текстом, моментом отправки и моментом последнего редактирования. Сообщение может быть ответом на другое сообщение того же чата — в этом случае оно ссылается на исходное и отображается с цитатой. К сообщению можно прикрепить ровно один файл с заданным именем.
Автор может отредактировать или удалить собственное сообщение в течение ограниченного временного окна — часа с момента отправки. Отредактированное сообщение помечается отметкой об изменении с моментом последнего редактирования. После выхода из окна редактирования сообщение становится неизменяемым.
Статусы и непрочитанные сообщения
Для каждой пары (сообщение, получатель) хранится статус доставки одного из трёх уровней:
| Статус | Что означает |
|---|---|
| Отправлено | Сообщение зафиксировано на сервере |
| Доставлено | Сообщение получено клиентом получателя |
| Прочитано | Получатель отметил сообщение прочитанным — как правило, открыв соответствующую форму чата |
В списке собственных сообщений автор видит агрегированный статус — наивысший уровень, до которого добрался хоть один получатель: прочитано, как только сообщение прочитал хотя бы один из них, иначе доставлено, если оно дошло хотя бы до одного, иначе отправлено.
Для каждого пользователя по каждому чату считается число непрочитанных сообщений — сообщений со статусом доставлено или отправлено, не отмеченных как прочитанные. Это число выводится в списке чатов и используется как индикатор требующих внимания диалогов.
Системные сообщения
Платформа использует чат для собственных уведомлений — например, о старте и перезапуске сервера приложений. Системные сообщения рассылаются всем пользователям в специальный системный чат; для них действует отдельное время хранения — 30 дней, чтобы лог сервисных событий не накапливался бесконечно.
Push-уведомления
При появлении нового сообщения подключённым в этот момент клиентам участников рассылается push-уведомление. Доставка идёт в отдельном потоке, чтобы не задерживать действие отправки. Получив уведомление, клиент перерисовывает список чатов и обновляет счётчик непрочитанных; если форма соответствующего чата открыта — сообщение появляется в ленте без перезагрузки.
Формы
Платформа предоставляет две формы для работы с чатом:
| Форма | Назначение |
|---|---|
| Полная форма | Список чатов, лента сообщений выбранного чата, поле ввода с прикреплением файла — основной интерфейс |
| Компактная форма | Всплывающее окно-уведомление с самыми свежими непрочитанными сообщениями из всех чатов пользователя — для быстрого ответа или для перехода в полный интерфейс на соответствующий чат |
Чат доступен как в web-, так и в desktop-клиенте и работает поверх одних и тех же данных. В ленте сообщений форматирование текста и ссылки отображаются автоматически.