Table of Contents

Спецификация обмена сообщениями (Consumer)

Данный раздел описывает структуру данных и механизм обработки сообщений, поступающих из очереди RabbitMQ. Эта информация необходима для партнеров, которые планируют интегрироваться с SMS-шлюзом через брокер сообщений для обеспечения высокой пропускной способности.


1. Параметры подключения

Для подключения к брокеру сообщений используются следующие параметры (предоставляются администратором системы):

Параметр Описание Пример значения
Virtual Host Виртуальный хост партнера /partner-api
Exchange Точка обмена sms.exchange
Queue Очередь сообщений sms.outgoing.queue
Routing Key Ключ маршрутизации sms.text.#
Exchange Type Тип обменника topic

2. Контракт данных (JSON)

Система ожидает сообщения в формате JSON. Ниже приведена спецификация модели сообщения NotificationRequest.

Структура сообщения

{
  "Header": {
    "Protocol": {
      "Name": "SMS-Protocol",
      "Version": "2.0"
    },
    "MessageId": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
    "MessageDate": "2024-01-29T12:00:00Z",
    "Originator": {
      "System": "Partner-CRM"
    }
  },
  "Body": {
    "Notification": {
      "Id": 987654321,
      "CreationDate": "2024-01-29T12:00:00Z",
      "Channel": "SMS",
      "Receiver": "992900000000",
      "Content": "Ваш код подтверждения: 5544",
      "CustomAttributes": {
        "CustomAttribute": [
          {
            "Code": "Priority",
            "Value": "High"
          },
          {
             "Code": "Tag",
             "Value": "Marketing"
          }
        ]
      }
    }
  }
}

Описание полей модели

Header (Заголовок)

Служебная информация для трассировки и версионирования.

Поле Тип Обязательность Описание
MessageId UUID/String Да Уникальный идентификатор сообщения (Request ID). Используется для дедупликации и логирования.
MessageDate DateTime Да Время формирования сообщения (UTC).
Originator.System String Да Идентификатор системы-отправителя (выдается при регистрации).
Protocol Object Нет Информация о версии протокола.

Body (Тело)

Содержит полезную нагрузку уведомления.

Поле Тип Обязательность Описание
Notification.Id Long Да Внутренний ID уведомления в системе партнера.
Notification.Receiver String Да Номер телефона получателя в международном формате (без +). Пример: 992900123456.
Notification.Content String Да Текст SMS сообщения.
Notification.Channel String Нет Канал отправки. Значение по умолчанию: SMS.
CustomAttributes Array Нет Дополнительные атрибуты (ключ-значение) для настройки маршрутизации или приоритетов.

3. Логика обработки

  1. Прием: Сообщения вычитываются из очереди в асинхронном режиме.
  2. Валидация: Проверяется заполнение обязательных полей (Receiver, Content, MessageId).
  3. Маршрутизация: На основе Receiver и атрибутов сообщение передается соответствующему SMS-провайдеру.
  4. Подтверждение (Ack):
    • При успешной валидации и постановке во внутреннюю очередь отправляется BasicAck.
    • В случае неверного формата JSON сообщение отклоняется (BasicReject без возврата в очередь).
    • В случае временных сбоев сообщение может быть возвращено в очередь (BasicNack с requeue=true) или отправлено в Dead Letter Exchange.

4. Пример десериализации (C#)

Пример класса для маппинга входящего JSON:

public class NotificationRequest
{
    public HeaderModel Header { get; set; }
    public BodyModel Body { get; set; }
}

public class HeaderModel
{
    public string MessageId { get; set; }
    public OriginatorModel Originator { get; set; }
}

public class BodyModel
{
    public NotificationData Notification { get; set; }
}

public class NotificationData
{
    public string Receiver { get; set; }
    public string Content { get; set; }
}