Сервис рассылки уведомлений
Сервис рассылки уведомлений используется для приема, обработки и отправки уведомлений пользователям.
Работа сервиса реализуется на основе веб-сокетов, при работе сервиса используется SignalR.
Сервис взаимодействует с пользовательским интерфейсом через клиентскую библиотеку.
Сервис рассылает пользователю уведомления о различных типах событий в Платформе:
- о входе пользователя в Платформу;
- о завершении какой-либо операции (например, завершение формирования отчета);
- о прогрессе формирования задачи (например, на текущий момент завершено 80 %, демонстрируется при помощи соответствующего индикатора выполнения).
Уведомления
Типы уведомлений
Сервис поддерживает следующие типы уведомлений:
- системные: сообщения отправленные платформой, например, пользователь вошел в платформу, через 10 минут начнется техническое обслуживание;;
- прикладной области: отчет выполнен, прогресс выполнения отчета;
- пользовательские уведомления: сообщения, отправленные пользователем другим пользователям. Эти сообщения создаются и отправляются через административную консоль, подробнее см. здесь.
Уведомления отображаются в пользовательском интерфейсе в виде всплывающего окна с темой и текстом сообщения. Уведомления могут быть как с обязательным прочтением так и без него.
Если поддерживаются уведомления с обязательным прочтением, то пока пользователь не нажмет кнопку Прочтено, уведомление будет постоянно всплывать на экране.
В административном интерфейсе сервиса рассылки уведомлений предусмотрена возможность просмотра истори и сообщений (уведомлений) и активных пользователей в разделе меню Notification.
Параметры уведомлений
Для каждого уведомления обязательны все перечисленные параметры:
- обязательность прочтения сообщения: пользователь всегда будет видеть нотификацию, пока не нажмет кнопку подтверждения получения Прочтено;
- флаг сохранения: сохранение сообщение для истории или нет;
- ID источника;
- Тип источника: none, user, system;
- ID пользователя: user;
- Тип получателя: none, System, User (ID пользователя обязателен для заполнения), Broadcast (отправить всем пользователям);
- Тип нотификации: none, information, statustask;
- Данные типа: dynamic (для обработки нотификации).
Разработчик может не использовать нотификацию. Если нотификация не используется, то в административной консоли история и активные пользователи не отображаются.
Методы API
Методы API сервиса, к которым обращаются сервисы для отправки уведомлений, описаны на страницах этого сервиса.
Работа с клиентской библиотекой
Для работы с сервисом необходимо добавить в свой проект клиентскую библиотеку ASE.MD.Platform.Infrastructure.WebNotification.Client.
Клиентская библиотека предоставляет метод Send.
Метод Send
Метод осуществляет отправку уведомления и имеет две реализации:
- Принимает объект сообщения _ASE.MD.Platform.Infrastructure.WebNotification.Client.Models.Message_и объект уведомления информации_ASE.MD.Platform.Infrastructure.WebNotification.Client.Models.Notification.Information._
- Принимает объект сообщения _ASE.MD.Platform.Infrastructure.WebNotification.Client.Models.Message_
 и объект уведомления задачи_ASE.MD.Platform.Infrastructure.WebNotification.Client.Models.Notification.Information.Task_
Возвращаемый тип: void.
Модели взаимодействия
Сервис рассылки уведомлений поддерживает следующие модели взаимодействия:
- отправка уведомления типа Информация;
- отправка уведомления типа Задача (может использоваться индикатор выполнения для отображения прогресса выполнения задачи).
- При отправке уведомления (нотификации) типа Информация или Задача должна быть реализована модель данных сервиса  _ASE.MD.Platform.Infrastructure.WebNotification.Models.Message.Info_.
| имя поля | тип | описание | 
|---|---|---|
| Mandatory | boolean | Параметр, описывающий обязательность доставки данной нотификации получателю. Отображается пользователю до тех пор, пока не нажата кнопка Прочтено. | 
| SaveHistory | boolean | Сохранение сообщения в истории | 
| SourceId | string | Идентификатор источника нотификации. Источником может быть сервис или пользователь | 
| SourceType | string | Поле, определяющее тип источника нотификации (система,пользователь) | 
| TargetId | string | Идентификатор получателя нотификации | 
| TargetType | string | Поле, определяющее тип получателя нотификации (System, User, Broadcast). При использовании типа User, TargetId является обязательным и должен содержать ID пользователя для получения нотификации | 
| Type | string | Тип нотификации: Info (1) и TaskStatus (2). Если type = 0, то поле Data остается пустым. | 
| Data | dynamic | дочерняя структура данных, зависящая от NotifType | 
- При отправке уведомления (нотификации) типа Информация (NotifType = Info) должна быть реализована структура для поля Data
_ASE.MD.Platform.Infrastructure.WebNotification.Client.Models.Notification.Information_.
| имя поля | тип | описание | 
|---|---|---|
| MessageId | string | Идентификатор сообщения | 
| Priority | enum | Приоритет отправки нотификации (High/Normal/Low) | 
| Title | string | Заголовок нотификации | 
| Text | string | Текст нотификации | 
- При отправке уведомления (нотификации) типа Задача (NotifType = TaskStatus) быть реализована структура для поля Data
_ASE.MD.Platform.Infrastructure.WebNotification.Client.Models.Notification.Task_.
| имя поля | тип | описание | 
|---|---|---|
| Id | string | Идентификатор нотификации | 
| Status | enum | Статус нотификации (InProgress/Done/Error/PreLaunch/Suspend) | 
| Percent | int | процент выполнения | 
| Title | string | Заголовок нотификации | 
| Extra | string | дополнительная информация | 
- Пользователь
_ASE.MD.Platform.Infrastructure.WebNotification.Client.Models.User.Info_.
| имя поля | тип | описание | 
|---|---|---|
| Id | int | идентификатор пользователя | 
| Login | string | логин пользователя | 
| ConnectionsID | ConcurrentDictionary<string, string> | словарь подключений |