Разделы
Модель и веер доставки
Модели уведомления и персонального состояния получателя, сигнал при создании и разветвление доставки по каналам с учётом доступов сотрудников.
Создание и группировка
Фоновые задачи создания уведомлений: одиночные, обновление по объекту и сгруппированные в 30-минутном окне с накоплением счётчика и списка сообщений.
Каналы доставки
Транспортные задачи и сервис доставки: веб через сервис реального времени, мобильный push с деактивацией мёртвых токенов и рассылка в Telegram.
Чтение, архивация и список
Список уведомлений, счётчик непрочитанных, отметки прочтения и архивации, включая логику «первый выиграл» для клейм-раз уведомлений и фильтры.
Push-токены устройств
Регистрация и отписка push-токенов мобильных устройств сотрудника с уникальностью по устройству и типом платформы.
Привязка Telegram
Привязка и отвязка аккаунта сотрудника к Telegram-боту по одноразовому коду подтверждения.
Доступ и настройки
Матрица доступа «источник × тема» на каждого сотрудника, каталог каналов и тем и массовое редактирование настроек уведомлений.
Как всё устроено
Фундамент модуля — пара сущностей: событие компании (одно на факт) и персональное состояние получателя (одно на каждого сотрудника, у которого хранится признак прочтения и архивации). На этом фундаменте держится всё остальное. Персональное состояние устроено намеренно скупо: наличие строки означает «прочитано», а отдельный признак архива — более сильное состояние поверх него. Это описано в разделах «Модель и веер доставки» и «Чтение, архивация и список». Дальше идёт поток «сверху вниз». Прикладной код ставит одну из фоновых задач создания — разовую, обновление по объекту или сгруппированную в скользящем 30-минутном окне (см. «Создание и группировка»). Задача записывает уведомление в базу, и сам факт сохранения запускает веер доставки. Веер не рассылает ничего сам: он подбирает получателей по матрице доступа и ставит в очередь транспортные задачи — по одной на канал (см. «Каналы доставки»). Мобильный канал опирается на push-токены устройств, а Telegram — на предварительную привязку чата к сотруднику. Поперёк всего этого работает слой доступа. Матрица «источник × тема» на каждого сотрудника (см. «Доступ и настройки») — это предохранитель веерной рассылки: даже созданное событие дойдёт до конкретного человека по конкретному каналу только тогда, когда у него включена соответствующая ячейка.Тема события — сквозной ключ модуля. Одно и то же значение темы управляет тремя разными механизмами: отбором получателей в
веере доставки, объединением событий в
сгруппированное уведомление и переключателями в
матрице доступа. Поэтому корректно проставленная тема важнее, чем кажется на первый взгляд.