Web Push Admin

Web Push Admin

Dashboard
Отправить
Подписчики
Динамика
Когорты
Сайты
Расписание
Цепочки
История
Логи
API
Подписчики
--
Всего пушей
--
Сайты
--
Теги
--
Уник. устройства
--
Uptime
--
Подписчики по сайтам
СайтПодписчики
Массовые сегодня
ДатаTitleTargetРезультатCTRДействия
Цепочки (итого)
НазваниеОтправленоКликовCTR

Отправить Push-уведомление

Креатив
Макросы для сквозной аналитики: используйте %utmSource% и %utmTerm% в GET-параметрах URL. Значения берутся из данных подписки каждого пользователя (last_subscribe_meta: utm_source, utm_term). Если данных нет — подставляется empty.
Пример: https://site.com/page?utm_source=%utmSource%&utm_term=%utmTerm%
Формат: массив объектов {action, title, url}. Кнопка "Отписаться" добавляется автоматически.
Если включено, каждое физическое устройство получит только один пуш, даже если подписано на нескольких сайтах.
Предпросмотр уведомления
🔔
example.com
Заголовок уведомления
Текст уведомления

Тестовый push (одному подписчику)

Подписчики
IDEndpointСайтDeviceТегиИсточникUTMUser IDДата
Динамика новых подписок

Календарные дни в часовом поясе сервера БД. Считаются только новые записи подписок (первая подписка по endpoint). Отписки в отчёте не учитываются.

Когорты и удержание

Активная база — подписчики с хотя бы одним переходом по ссылке из пуша; неактивные — без переходов. Ретеншен: доля когорты с первым кликом в течение 1, 5, 15, 30 или 90 дней после подписки (нужны рассылки со ссылкой и трекингом).

Управление сайтами

Добавить сайт

Теги

Зарегистрированные сайты

Инструкция подключения

Для каждого сайта необходимо:

1. Скопировать файл sw.js в корень сайта

// Скачайте sw.js с push-сервера и разместите по адресу: // https://your-site.com/sw.js

2. Добавить скрипт на страницы сайта:

<script src="/subscribe.js" data-tags=""></script>
Запланированные пуши

Новое расписание

Все запланированные отправки
Цепочки (Journey / Drip)
История отправок
С По
IDДатаTitleBodyTargetA/BSentFailedКликиCTRПрогрессДействия
External API

API Token

Токен задаётся через переменную окружения API_TOKEN в файле .env. Передаётся в заголовке Authorization: Bearer <token>.

IP Whitelist

Только IP-адреса из этого списка смогут использовать External API. Если список пуст — доступ разрешён с любого IP (только по токену).

IDIP адресДобавлен

Документация API

Внешний API позволяет сторонним серверам запускать push-рассылки по конкретному сайту или отдельному подписчику.

POST /api/external/sendSite

Запустить рассылку на всех подписчиков указанного сайта (фоновая задача).

Headers: Authorization: Bearer <API_TOKEN> Content-Type: application/json Body: { "siteId": 1, // ID сайта (обязательно) "title": "Заголовок", // Заголовок push (обязательно) "body": "Текст", // Текст push (обязательно) "url": "https://...", // URL при клике "icon": "https://...", // URL иконки "image": "https://...", // URL картинки "tag": "promo", // Push tag (группировка) "tagName": "news", // Фильтр по тегу подписчиков "deduplicate": true // Одно push на устройство } Response: { "jobId": "1", "historyId": 42, "target": "external:site:1", "totalTarget": 1500, "status": "running" }
POST /api/external/sendSubscriber

Отправить push одному подписчику по его ID (синхронно, мгновенный результат).

Headers: Authorization: Bearer <API_TOKEN> Content-Type: application/json Body: { "subscriberId": 24, // ID подписчика (обязательно) "title": "Заголовок", // Заголовок push (обязательно) "body": "Текст", // Текст push (обязательно) "url": "https://...", // URL при клике "icon": "https://...", // URL иконки "image": "https://...", // URL картинки "tag": "promo" // Push tag (группировка) } Response: { "historyId": 43, "totalSent": 1, "totalFailed": 0, "result": { "subscriptionId": 24, "success": true, "error": null } }
GET /api/external/job/:id

Проверить статус фоновой задачи (для sendSite). Поллить каждую 1-2 секунды.

Headers: Authorization: Bearer <API_TOKEN> Response: { "id": "1", "status": "done", // "running" | "done" | "failed" | "cancelled" "totalSent": 1480, "totalFailed": 20, "totalTarget": 1500, "startedAt": 1710000000000, "finishedAt": 1710000060000, "error": null }

Примеры запросов (cURL)

Рассылка на сайт:

curl -X POST /api/external/sendSite \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "siteId": 1, "title": "Новая акция!", "body": "Скидка 50% на все товары", "url": "https://example.com/promo" }'

Отправка одному подписчику:

curl -X POST /api/external/sendSubscriber \ -H "Authorization: Bearer <YOUR_TOKEN>" \ -H "Content-Type: application/json" \ -d '{ "subscriberId": 24, "title": "Персональное предложение", "body": "Только для вас — скидка 70%!", "url": "https://example.com/personal" }'
Логи сервиса
IDДатаУровеньИсточникСообщение

Подтверждение