Gratheon должен уведомлять пчеловода о важных событиях в разных продуктах и функциях. Для этого нужен универсальный способ создавать, хранить, просматривать и доставлять уведомления. Уведомления хранятся в базе данных и отображаются в интерфейсе.
Пользовательская история - настройка каналов уведомлений
- Пользователь открывает страницу настроек.
- В разделе
Уведомления:- выбирает канал в поле
Уведомлять через: [email]:- push-уведомление на мобильный телефон, если используется мобильное приложение;
- email;
- SMS, например через Twilio;
- Telegram-бот;
- webhook-интеграция.
- выбирает канал в поле
- В разделе типов уведомлений пользователь выбирает чекбоксами, какие события он хочет получать:
- риск роения - распознавание маточников на стороне рамки;
- атаки шершней - обнаружение атаки шершней;
- матка отсутствует - распознавание матки;
- матка плохо откладывает яйца - обнаружение пятнистого расплода;
- доля трутневых ячеек слишком высокая - распознавание трутневого расплода;
- низкая или высокая температура в улье;
- роение уже произошло;
- пользовательская аномалия, связанная с аналитикой телеметрии в веб-приложении.
Пользовательская история - уведомление об отсутствии матки
- Пользователь загружает фотографии всех рамок улья.
- Все рамки обрабатываются.
- Матка не обнаружена.
- Создаётся уведомление.
- Уведомление показывается в шапке:
- По клику открывается всплывающее окно с деталями.
- В зависимости от выбранных каналов уведомление доставляется пользователю:
- по email пользователь получает письмо о том, что
в улье X отсутствует матка; - нужны качественные тексты, ссылки, изображения и дизайн сообщения.
- по email пользователь получает письмо о том, что
- После реакции на проблему пользователь подтверждает уведомление, фактически скрывая или закрывая его.
Предлагаемое техническое решение
Создать новый микросервис alerts:
- добавить отдельную базу данных для уведомлений;
- добавить GraphQL API:
- мутация
createAlert; - запрос
alerts;
- мутация
- сервис должен выступать прокси-слоем. Генерация уведомлений остаётся в сервисах, где находится бизнес-логика конкретной функции.