Обзор системы
Новые устройства по дням
Воронка доставки
Успешность по приложениям
Динамика уведомлений
Приложения
Список приложений
Новое приложение
Отправка уведомления
Тестовый режим
Массовая рассылка
Активные процессы
История рассылок
Новая рассылка
База устройств
Лог уведомлений
Настройки системы
Тёмные часы
В указанный период рассылки и досылки новым устройствам не отправляются. Планировщик проверяет время перед каждой отправкой.
Лимит пушей в сутки
Максимальное количество push-уведомлений на одно устройство в сутки. 0 = без ограничений. Применяется ко всем рассылкам.
0
— без ограничений
1
— не более 1 пуша в сутки
3
— не более 3 пушей в сутки
5
— умеренный режим
Текущий статус
Автоматические рассылки (Cron)
Кампании запускаются автоматически по расписанию и создают массовые рассылки на все устройства приложения. Тёмные часы и дневные лимиты применяются как обычно.
Дополнительные настройки
API для сервисов
Как подключить сервис за 5 шагов
- Откройте страницу Приложения и нажмите Ключи в карточке нужного приложения.
- Создайте ключ типа client — его можно встроить в мобильное приложение (только регистрация устройств).
- Создайте ключ типа server — храните его только на своём бэкенде (отправка пушей и статистика).
- Сохраните открытый ключ сразу — он показывается только один раз при создании.
- Проверьте ключ запросом
GET /api/v1/meи начинайте слать пуши черезPOST /api/v1/push.
Авторизация и два типа ключей
Все запросы к /api/v1/*
авторизуются заголовком
Authorization: Bearer psk_<client|server>_….
Приложение определяется по самому ключу — идентификаторы приложения в теле передавать не нужно.
| Тип | Где хранить | Скоупы |
|---|---|---|
| CLIENT | Можно в APK | devices:write |
| SERVER | Только на бэкенде | devices:write, push:send, stats:read (опц. push:bypass_quiet_hours) |
Справочник эндпоинтов
| Метод | Путь | Скоуп | Описание |
|---|---|---|---|
| GET | /api/v1/health | — | Проверка доступности |
| GET | /api/v1/me | любой | Информация о ключе и лимитах |
| POST | /api/v1/devices | devices:write | Регистрация/обновление устройства |
| DELETE | /api/v1/devices/:token | devices:write | Удаление устройства |
| GET | /api/v1/stats | stats:read | Статистика приложения |
| GET | /api/v1/notifications | stats:read | Последние отправки |
| POST | /api/v1/push | push:send | Отправка пуша (главный метод) |
| GET | /api/v1/push/:bulk_id | stats:read | Статус рассылки |
| GET | /api/v1/push | stats:read | Список рассылок |
| POST | /api/v1/push/:bulk_id/cancel | push:send | Отмена рассылки |
Коды ошибок
Формат любой ошибки:
{"error":"snake_code","message":"текст","request_id":"…"}.
Клиент различает ошибки по полю error, а не по тексту.
| HTTP | error | Значение |
|---|---|---|
| 400 | bad_request | Некорректное тело запроса |
| 400 | no_devices | Нет устройств для отправки |
| 401 | unauthorized | Нет / битый / отозванный ключ |
| 403 | forbidden | Не хватает скоупа (details.required_scopes) |
| 404 | not_found | Объект не найден |
| 409 | idempotency_conflict | Тот же Idempotency-Key с другим телом |
| 413 | payload_too_large | Тело >256 КБ или data >4 КБ |
| 429 | rate_limited | Превышен лимит запросов (Retry-After) |
| 429 | quiet_hours | Тихие часы (details.quiet_until) |
| 502 | upstream_error | RuStore вернул ошибку |
| 504 | upstream_timeout | Таймаут RuStore |
| 500 | internal_error | Внутренняя ошибка |
Тихие часы и суточный лимит
Тихие часы. Поле quiet_hours в теле /api/v1/push:
defer (по умолчанию — отложить до конца тихих часов),
reject (вернуть 429 quiet_hours),
ignore (отправить сразу — требует скоуп push:bypass_quiet_hours).
Массовая рассылка {all:true} при defer ставится в отложенную очередь и вернёт 202.
Суточный лимит. Если включён и respect_daily_limit=true,
устройства сверх лимита пропускаются со статусом skipped_limit и попадают в поле skipped ответа.
Для {topic} лимит не применяется.
Идемпотентность
Заголовок Idempotency-Key (≤128 символов) принимается на
POST /api/v1/push, POST /api/v1/devices и
DELETE /api/v1/devices/:token. Ключ хранится 24 часа.
Повтор с тем же ключом и телом вернёт тот же результат и заголовок
Idempotency-Replayed: true. Тот же ключ с другим телом — 409 idempotency_conflict.