Сервис управления подпиской и оповещением об изменениях справочной информации (далее СПО) обеспечивает процесс управления подписками на изменения справочной информации клиентами и оператором сервиса, а также автоматическую рассылку сообщений-уведомлений по средствам SOCKET API, E-mail и telegram.
Сервис предусматривает уведомление подписчиков об изменениях в определенно установленное время (по расписанию), либо в режиме реального времени c опционально заданным минимальным периодом рассылки для каждой подписки.
Термин |
Определение |
Подписчик |
Пользователь или сторонняя ИС с базовыми параметрами подписки, имеющая учетную запись в сервисе НСИ. |
Подписка |
Совокупность всех данных подписки одного подписчика. |
Единица подписки |
Параметры подписки одного подписчика на один справочник. |
Событие нотификации |
Инициируемое извне событие, стартующее процесс оповещения. |
Итерация оповещения |
Процесс вычисления данных для рассылки оповещений и отправка сообщений-оповещений. Может выполняться по всему пространству справочников подписки или по заданному справочнику. |
Данные оповещения |
Содержание сообщения оповещения об изменениях справочных данных справочника. |
Для выполнения запросов необходимо иметь авторизационный токен (GUID-токен). В качестве авторизационного токена к сервису подписки и оповещения должен использоваться GUID-токен к сервису НСИ. Получение авторизаионного токена происходит по заявке в адрес оператора системы, в которой необходимо указать следующую информацию:
Последовательность действий для подписки на оповещения об изменениях справочной информации:
Параметр Наименование параметра Обязательность Тип Описание code Код Обязательный Текстовый атрибут GUID пользователя display Наименование Обязательный Текстовый атрибут Наименование подписчика: ФИО, название ИС descr Описание Не обязательный Текстовый атрибут Дополнительная информация о подписчике contact Контактная информация Не обязательный Текстовый атрибут Любая контактная информация: доп. Email, моб. телефон endpoint_status Активность API уведомления Не обязательный Логический Вкл/выкл использования канала для уведомления: endpoint Endpoint Не обязательный Текстовый атрибут Endpoint, на который будут приходить оповещения об изменениях email_status Активность email уведомления Не обязательный Логический Вкл/выкл использования канала для уведомления: email Email Не обязательный Текстовый атрибут E-mail адрес, на который будет осуществляться рассылка e-mail-оповещений rabbit_status Активность очереди Rabbit MQ Не обязательный Логический Вкл/выкл использования канала для уведомления: telegram_status Активность Telegram уведомления Не обязательный Логический Вкл/выкл использования канала для уведомления: telegram_bot_token Токен бота Telegram Не обязательный Текстовый атрибут Ключ авторизации в канале Telegram, на который будет осуществляться рассылка оповещений telegram_channel_identifier Идентификатор канала Telegram Не обязательный Текстовый атрибут Уникальный идентификатор, который принадлежит каналу Telegram event_notification Оповещение по событию Не обязательный Логический Вкл/выкл уведомлений по событию: timetable_notification Уведомление по расписанию Не обязательный Логический Вкл/выкл уведомлений по расписанию:
true - уведомления по API высылаются;
false- уведомления по API не высылаются;
true - уведомления по email высылаются;
false- уведомления по email не высылаются;
true - уведомления по Rabbit MQ высылаются;
false- уведомления по Rabbit MQ не высылаются;
true - уведомления по Telegram высылаются;
false- уведомления по Telegram не высылаются;
true - оповещения об изменениях высылаются по событию изменения справочных данных с учетом заданного минимального периода оповещения
true - оповещения об изменениях высылаются в рамках настроенного расписания рассылки
Либо путем POST-запроса в СПО: HEADERS: Authorization: авторизационный токен BODY: Ответ сервиса на выполняемый запрос: HTTP-статус: 201 Created HTTP-статус: 500 Internal Server Error Content-Type: text/plain; charset=utf-8 BODY: Нельзя создать подписчика, если он отсутствует в списке пользователей. HTTP-статус: 401 Unauthorized Примечание: нельзя создать подписчика, если в системе НСИ отсутствует соответствующая учетная запись.[base]/subscribers/
{
"code": "3cd4a3a1-2bb4-48c5-8919-adc5a7090418",
"display": "Васин Алексей",
"descr": "Описание Подписчика",
"contact": "+79111",
"endpoint": "http://endpointhere1",
"email": "email@email.com1",
"endpoint_status": true,
"email_status": true,
"timetable_notification": true,
"event_notification": true,
"rabbit_status": true,
"telegram_status": true,
"telegram_bot_token": "1149250835:AAHXM",
"telegram_channel_identifier": "-111166685932"
}
Для деактивации подписчика, то есть отключение его от оповещений по email и endpoint (без удаления записей о его подписках на конкретные справочники), необходимо установить значение «false» для параметров endpoint_status и email_status. Для изменения данных подписчика необходимо выполнить PUT-запрос по URL в формате: HEADERS: Authorization: авторизационный токен BODY: Ответ сервиса на выполняемый запрос: HTTP-статус: 200 OK HTTP-статус: 401 Unauthorized HTTP-статус: 500 Internal Server Error Content-Type: text/plain; charset=utf-8 BODY: Подписчик не найден.[base]/subscribers/[GUID подписчика]
{
"code": "3cd4a3a1-2bb4-48c5-8919-adc5a7090418",
"display": "Васин Алексей",
"descr": "Описание Подписчика",
"contact": "+79111",
"endpoint": "http://endpointhere1",
"email": "email@email.com1",
"endpoint_status": true,
"email_status": true,
"timetable_notification": true,
"event_notification": true,
"rabbit_status": false,
"telegram_status": true,
"telegram_bot_token": "1149250835:AAHXM",
"telegram_channel_identifier": "-111166685932"
}
HEADERS: Authorization: авторизационный токен Если подписчик был найден и у пользователя есть права на чтение данных о нем, будет получен следующий ответ: Ответ сервиса на выполняемый запрос: HTTP-статус: 404 Not Found Content-Type: text/plain; charset=utf-8 BODY: Подписчик не найден. HTTP-статус: 401 Unauthorized[base]/nsinotification/api/subscribers/[GUID подписчика]
{
"code": "3cd4a3a1-2bb4-48c5-8919-adc5a7090418",
"display": "Васин Алексей",
"descr": "Описание Подписчика",
"contact": "+79111",
"endpoint": "http://endpointhere1",
"email": "email@email.com1",
"endpoint_status": true,
"email_status": true,
"timetable_notification": true,
"event_notification": true,
"rabbit_status": false,
"telegram_status": true,
"telegram_bot_token": "1149250835:AAHXM",
"telegram_channel_identifier": "-111166685932"
}
HEADERS: Authorization: авторизационный токен Ответ сервиса на выполняемый запрос: HTTP- статус: 200 OK HTTP-статус: 401 Unauthorized HTTP-статус: 404 Not Found Content-Type: text/plain; charset=utf-8 BODY: Подписчик не найден.[base]/subscribers/[GUID подписчика]
Параметр Наименование параметра Обязательность Тип Описание code Код Обязательный Текстовый атрибут Автогенерируемый код display Наименование Обязательный Текстовый атрибут Наименование подписки oid OID справочника Не обязательный Текстовый атрибут OID справочника, на изменения которого идет подписка subscriber Подписчик Не обязательный Ссылка на справочник notification_subscriber Подписчик send_delta_data Полный список изменений Не обязательный Логический Управление содержанием данных нотификации: true - уведомление о факте изменения + статистика + информация по каждой измененной записи false - уведомление о факте изменения + статистика min_send_freq Минимальный интервал между уведомлениями (мин) Обязательный Числовой атрибут Период времени (в минутах) в течении которого в справочнике могут производиться изменения, но подписчику не будут формироваться оповещения об изменениях dictionary_version_old Младшая версия справочника Не обязательный Текстовый атрибут Последняя младшая версия справочника относительно которой подписчику были высланы изменения справочника error Ошибка Не обязательный Текстовый атрибут Расшифровка ошибки, если она возникла при попытке отправить уведомление об изменении справочника last_successful_notif_date Дата и время последней успешной нотификации Не обязательный Текстовый атрибут Автогенерируемое поле last_processing_date Дата и время последней обработки Не обязательный Логический Автогенерируемое поле
Создание и обновление подписок подписчика происходит типовым запросом. По переданному oid справочника, для которого предполагается создать подписку, сервис анализирует уже существующие подписки пользователя. Если для переданного oid уже существует подписка, происходит ее обновление, иначе – создается новая. Для создания или обновление подписки/подписок на справочники необходимо выполнить POST-запрос: HEADERS: Authorization: авторизационный токен BODY: Ответ сервиса на выполняемый запрос: HTTP-статус: 200 OK Content-Type: application/json; charset=utf-8 BODY: HTTP-статус: 401 Unauthorized[base]/subscribers/[GUID подписчика]/subscriptions/
[
{"display": "Подписка Васин Алексей ",
"oid": "1.2.643.5.1.13.13.99.2.225",
"subscriber": "3cd4a3a1-2bb4-48c5-8919-adc5a7090418",
"min_send_freq": 4},
{"display": "Подписка Васин Алексей ",
"oid": "1.2.643.5.1.13.13.11.1359",
"subscriber": "3cd4a3a1-2bb4-48c5-8919-adc5a7090418",
"min_send_freq": 0}
]
[
{"oid": "1.2.643.5.1.13.13.99.2.225",
"result": true,
"error": ""},
{"oid": "1.2.643.5.1.13.13.11.1359",
"result": false,
"error": "Справочник с oid 1.2.643.5.1.13.13.11.1359 не найден среди доступных подписчику 3cd4a3a1-2bb4-48c5-8919-adc5a7090418. Справочник отсутствует или нет прав на доступ к указанному справочнику."}
]
HEADERS: Authorization: авторизационный токен Ответ сервиса на выполняемый запрос: HTTP-статус: 200 OK BODY: , где: HTTP-статус: 401 Unauthorized[base]/nsinotification/api/dictionaries
[{
"uri": ["1.2.643.5.1.13.2.1.1.773"],
"guid": "84c82899-ef00-4f11-9634-cd8c86c6502e",
"name": "Ведомственая принадлежность в Российской Федерации",
"versioning": 0,
"has_hierarchy": true,
"id_dictionary": 293,
"dictionary_type": 0,
"dictionary_group": [0]
},
…
{
"uri": ["1.2.643.5.1.13.2.1.1.736"],
"guid": "bb11f504-e49c-43c9-8b3b-6894acc6b6c6",
"name": "Документы, удостоверяющие личность",
"versioning": 1,
"has_hierarchy": false,
"id_dictionary": 120,
"dictionary_type": 0,
"dictionary_group": [3]
}]
HEADERS: Authorization: авторизационный токен Для получения данных о всех подписках подписчика необходимо выполнить GET-запрос по URL в формате: HEADERS: Authorization: авторизационный токен Ответ сервиса на выполняемый запрос: HTTP-статус: 200 OK Content-Type: application/json; charset=utf-8 BODY: HTTP-статус: 401 Unauthorized HTTP-статус: 404 Not Found Content-Type: text/plain; charset=utf-8 BODY: Подписки не найдены.[base]/subscribers/[GUID подписчика]/subscriptions/[OID справочника]
[base]/subscribers/ [GUID подписчика]/subscriptions/
[
{"code": "5052ec58-78bf-496e-8148-6ee5518756a6",
"display": "Подписка Васин Алексей",
"oid": "1.2.643.5.1.13.13.99.2.225",
"subscriber": "Васин Алексей",
"send_delta_data_in_notification": "true",
"min_send_freq": 0,
"dic_version_old": "1.34",
"error": null,
"date_of_last_successful_notification": "2022-06-03 18:03:24",
"date_of_last_processing": "2022-06-03 18:03:24"},
{"code": "d91ff902-9166-4cd0-b24a-2afcfb2fc429",
"display": "Подписка Васин Алексей",
"oid": "1.2.643.5.1.13.13.11.1359",
"subscriber": "Васин Алексей",
"send_delta_data_in_notification": "true",
"min_send_freq": 5,
"dic_version_old": "84",
"error": null,
"date_of_last_successful_notification": "2022-05-30 18:57:43",
"date_of_last_processing": "2022-05-30 18:57:43"}
]
HEADERS: Authorization: авторизационный токен Ответ сервиса на выполняемый запрос: HTTP-статус: 200 OK HTTP-статус: 404 Not Found HTTP-статус: 401 Unauthorized[base]/subscribers/ [GUID подписчика]/subscriptions/[OID справочника]
Описание параметров данных нотификации: № Контейнер Параметр Тип Описание 1. Root 2. /entry array Блок данных с изменением версий 3. entry/resource object Блок данных 4. resource/parameter array Массив параметров блока данных 5. parameter name string Имя параметра «system» 6. parameter valueString string url справочника 7. parameter name string Имя параметра «version_old» 8. parameter valueString string Значение младшей версии справочника 9. parameter name string Имя параметра «version_new» 10. parameter valueString string Значение старшей версии справочника Пример структуры нотификации: Сообщение содержит данные нотификации в JSON-формате. Данные нотификации содержат уведомление об изменении версий справочника. Блок уведомления об изменении справочника содержит информацию с OID-ом справочника, старой и новой версией: Блок дельта-данных содержит информацию по изменениям записей справочника:
let socket = new WebSocket("ws://[base]/nsinotification/DictionaryChange?subscriberId=[GUID подписчика]");
Data received from server: {
"oid": "1.2.643.5.1.13.13.11.1359",
"version_old": "95",
"version_new": "96",
"serialized_bundle": {
"resourceType": "Bundle",
"type": "searchset",
"entry": [{
"resource": {
"resourceType": "Parameters",
"parameter": [
{ "name": "system",
"valueString": "urn:oid:1.2.643.5.1.13.13.11.1359"},
{ "name": "version_old",
"valueString": "95"},
{ "name": "version_new",
"valueString": "96"}]},
{
"resource": {
"parameter": [
{ "name": "operation",
"valueString": "created"},
{ "name": "CODE",
"valueString": "741"},
{ "name": "code",
"valueString": "741"},
{ "name": "display",
"valueString": "Аортокоронарное шунтирование"}],
"resourceType": "Parameters"}},
{
"resource": {
"parameter": [
{ "name": "operation",
"valueString": "updated"},
{ "name": "CODE",
"valueString": "7421"},
{ "name": "code",
"valueString": "7421"},
{ "name": "display",
"valueString": "Ангиопластика коронарных артерий"}],
"resourceType": "Parameters"}},
{
"resource": {
"parameter": [
{ "name": "operation",
"valueString": "delete"},
{ "name": "CODE",
"valueString": "912020"},
{ "name": "code",
"valueString": "912020"},
{ "name": "display",
"valueString": "Стентирование"}],
"resourceType": "Parameters"}}}]}}
"oid": "1.2.643.5.1.13.13.11.1359",
"version_old": "95",
"version_new": "96",
"serialized_bundle": {
"resourceType": "Bundle",
"type": "searchset",
"entry": [{
"resource": {
"resourceType": "Parameters",
"parameter": [
{ "name": "system",
"valueString": "urn:oid:1.2.643.5.1.13.13.11.1359"},
{ "name": "version_old",
"valueString": "95"},
{ "name": "version_new",
"valueString": "96"}]}
{
"resource": {
"parameter": [
{ "name": "operation",
"valueString": "created"},
{ "name": "CODE",
"valueString": "741"},
{ "name": "code",
"valueString": "741"},
{ "name": "display",
"valueString": "Аортокоронарное шунтирование"}],
"resourceType": "Parameters"}},
{
"resource": {
"parameter": [
{ "name": "operation",
"valueString": "updated"},
{ "name": "CODE",
"valueString": "7421"},
{ "name": "code",
"valueString": "7421"},
{ "name": "display",
"valueString": "Ангиопластика коронарных артерий"}],
"resourceType": "Parameters"}},
{
"resource": {
"parameter": [
{ "name": "operation",
"valueString": "delete"},
{ "name": "CODE",
"valueString": "912020"},
{ "name": "code",
"valueString": "912020"},
{ "name": "display",
"valueString": "Стентирование"}],
"resourceType": "Parameters"}}}]}}