Перейти к основному содержимому

API Push-уведомлений: Работа с RuStore, FCM и HMS

API разрабатывалось с целью предоставлять возможность отправки push-уведомлений по топикам через нескольких push-провайдеров одновременно.

Для отправки push-уведомления необходимо использовать метод POST https://vkpns-universal.rustore.ru/v1/send/topic.

Чтобы отправить push-уведомление в топик необходимо указать ID проекта и Авторизационный токен для каждого провайдера, по которому планируется отправка push-уведомлений.

Используйте project_id (ID проекта) и ss_token (сервисный токен). Эти значения вы можете получить в системе Консоль RuStore. Для этого на странице приложения перейдите в раздел Push-уведомления и выберите Проекты. Отправка push-уведомлений.

Тело запроса

ПараметрТипОбязательноеОписание
providersobject (providers)даПровайдеры для отправки push-уведомлений.
topicstringдаИмя топика.
messageobject (message)даСтруктура push-уведомления.

providers

ПараметрТипОбязательноеОписание
rustoreobject (provider)нетПровайдер RuStore.
fcmobject (provider)нетПровайдер Firebase.
hmsobject (provider)нетПровайдер Huawei.

providers.provider

ПараметрТипОбязательноеОписание
project_idstringдаID проекта.
auth_tokenstringдаАвторизационный токен.

message

ПараметрТипОбязательноеОписание
datamapнетОбъект, содержащий пары "key": value.
notificationobject (message.notification)даБазовый шаблон уведомления для использования на всех платформах.
androidobject (message.android)только в HMSСпециальные параметры Android для сообщений.

message.notification

ПараметрТипОбязательноеОписание
titlestringдаНазвание уведомления.
bodystringдаОсновной текст уведомления.
imagestringнетСодержит URL-адрес изображения, которое будет отображаться в уведомлении.

message.android

ПараметрТипОбязательноеОписание
ttlstring (duration format)нетКак долго (в секундах) сообщение должно храниться в хранилище.
Пример: 3.5s.
notificationobject (message.android.notification)только в HMSУведомление для отправки на устройства Android.

message.android.notification

ПараметрТипОбязательноеОписание
titlestringдаНазвание уведомления.
bodystringдаОсновной текст уведомления.
iconstringнетЗначок уведомления.
colorstringнетЦвет значка уведомления в формате #rrggbb.
imagestringнетСодержит URL-адрес изображения, которое будет отображаться в уведомлении.
channel_idstringнетИдентификатор канала уведомления.
click_actionstringнетДействие, связанное с кликом пользователя по уведомлению.
В HMS по умолчанию стоит тип 1 (intent).
к сведению

В структуре message поддерживаются только представленные выше поля.

Тело успешного ответа

ПараметрТипОписание
statusstringВ случае успешного ответа возвращается сообщение со статусом OK.

Тело ошибки

ПараметрТипОписание
codeintЧисловой код ошибки (404, 400, 403, 401, ...).
statusstringОбщее описание ошибки.
errorsarray (string)Ошибки по провайдерам или ошибки валидации.

HTTP status соответствует полю code.

Ошибки делятся на три типа

  • Ошибки валидации сообщения.
  • Ошибки отправки по провайдерам.
  • Ошибки сервиса.

Возможные ошибки при отправке сообщения

  • VALIDATION_ERROR — неправильно указаны параметры запроса при отправке сообщения.
  • PROVIDER_ERROR — ошибка отправки в провайдер пушей.
  • INTERNAL_ERROR — внутренняя ошибка сервиса.

Возможные ошибки валидации при отправке сообщения

  • providers.%provider_name% — ошибка в провайдере.
  • message.%field% — ошибка в сообщении.

Возможные ошибки провайдеров при отправке сообщения, имеют формат %provider_name%: %error%

  • internal — внутренняя ошибка провайдера.
  • validation error — ошибка валидации на стороне провадейра.
  • invalid auth token — ошибка auth-токена.
  • too many requests — слишком много запросов.

Алгоритм валидации

Провайдер обязан иметь токены.

providers

Должен быть хотя бы один провайдер, без провайдеров запрос не валиден.

message

  • Если есть непустой payload message.data (то есть хотя бы одна пара ключ-значение внутри), то сообщение валидно. Секции message.notification и message.android могут отсутствовать.
  • Если поля message.data нет, то обязательно должен быть notification. В этом случае проверяется наличие либо поля message.notification, либо message.android.notification. Хотя бы что-то одно из этих полей должно присутствовать, но могут присутствовать оба (если присутствуют оба, то некоторые поля перезаписываются).

Ограничения

  • Если в уведомлении нет поля ttl или оно равно 0, то учитывается стандартное значение, равное 4 неделям. Если отсутствует секция message.android, то она добавляется с полем ttl.
  • Максимальный объем сообщения — 4096 байт.