По реализации: живой канал строим на WebSocket, с корректным запасным механизмом и автоматическим восстановлением соединения после разрыва. Все реплики складываем в хранилище, чтобы при повторном входе история подгружалась в правильном порядке и без повторов даже при плохом соединении. Ожидаем индикатор того, что собеседник печатает, пометки «доставлено» и «прочитано» на уровне каждой реплики, счётчики новых сообщений по каждой переписке и отображение статуса присутствия. Отдельно — пересылка вложений: картинки и документы с миниатюрой и разумным ограничением по объёму. Если адресат не в сети или вкладка закрыта, о новом сообщении сообщает push. Модуль должен работать поверх наших действующих учёток и прав, без параллельной системы входа.
Защищённость закладываем сразу: сокеты открываются только для авторизованной сессии, доступ к переписке проверяется по участию, вывод текста экранируется от XSS, а частота отправки ограничивается, чтобы исключить флуд. От исполнителя ждём аккуратный код под наш стек, понятное описание по подключению и покрытие ключевых сценариев тестами.
— Приватные и групповые переписки с управлением составом
— Канал на WebSocket с реконнектом и запасным режимом
— Печатает-индикатор, отметки доставки и прочтения, счётчики новых, присутствие
— Пересылка изображений и документов с миниатюрой и лимитом
— Push-сигнал для получателей вне сети
— Хранение, порядок и защита от дублей сообщений
— Сокеты по сессии, доступ по участию, экранирование XSS, ограничение частоты