8.8 KiB
Тестовая отправка Push-уведомлений
Что добавлено
В админ-панели теперь есть кнопка "🧪 Тест Push-уведомления" с подробным логированием всего процесса отправки.
Backend endpoint
POST /api/notifications/test-push
- ✅ Требует авторизацию (Bearer token)
- ✅ Требует права администратора (
isAdmin: true) - ✅ Подробное логирование каждого шага
Frontend кнопка
Расположена в Админ-панели (правый верхний угол).
Логирование
Backend логи (консоль сервера)
🧪 [TEST PUSH] Запрос от пользователя: { userId: 1, username: 'admin' }
✅ [TEST PUSH] Пользователь является админом, продолжаем...
📊 [TEST PUSH] Найдено подписок для пользователя 1: 2
📱 Подписка 1: { id: 123, endpoint: 'https://fcm.googleapis...', userAgent: 'Mozilla/5.0...', ... }
📱 Подписка 2: { id: 124, endpoint: 'https://fcm.googleapis...', userAgent: 'Chrome...', ... }
📝 [TEST PUSH] Создаём тестовое уведомление в БД...
✅ [TEST PUSH] Уведомление создано в БД: 456
📤 [TEST PUSH] Отправляем Push-уведомление...
✅ [TEST PUSH] Push-уведомление успешно отправлено!
Frontend логи (консоль браузера)
🧪 [FRONTEND] Начинаем тестовую отправку Push-уведомления...
📝 [FRONTEND] Токен найден: Да
📤 [FRONTEND] Отправляем запрос на: https://ospab.host:5000/api/notifications/test-push
✅ [FRONTEND] Ответ от сервера: { success: true, message: '...', data: { notificationId: 456, subscriptionsCount: 2 } }
📊 [FRONTEND] Детали: { notificationId: 456, subscriptionsCount: 2 }
Как использовать
1. Включите Push-уведомления
- Перейдите в Дашборд → Уведомления
- Нажмите "Включить уведомления" (синяя кнопка)
- Разрешите уведомления в браузере
- Дождитесь сообщения "Push-уведомления успешно подключены!"
2. Откройте админ-панель
- Перейдите в Дашборд → Админ-панель (👑 иконка в сайдбаре)
- В правом верхнем углу увидите кнопку "🧪 Тест Push-уведомления"
3. Нажмите кнопку
- Откройте DevTools → Console (F12)
- Нажмите "🧪 Тест Push-уведомления"
- Следите за логами в консоли браузера
4. Проверьте сервер
Откройте консоль сервера (SSH):
pm2 logs ospab-backend --lines 50
Увидите подробные логи с эмодзи-маркерами.
5. Проверьте результат
Через несколько секунд должно прийти Push-уведомление:
- Заголовок: 🧪 Тестовое уведомление
- Текст: Это тестовое Push-уведомление. Если вы его видите — всё работает отлично!
- Иконка: /logo192.png
- Клик: Перенаправляет на /dashboard/notifications
Возможные ошибки
❌ "У вас нет прав администратора" (403)
Причина: Пользователь не является администратором.
Решение:
UPDATE User SET isAdmin = 1 WHERE id = YOUR_USER_ID;
❌ "У вас нет активных Push-подписок" (400)
Причина: Push-уведомления не включены.
Решение:
- Перейдите в Дашборд → Уведомления
- Нажмите "Включить уведомления"
- Разрешите в браузере
- Попробуйте снова
❌ "Уведомление создано в БД, но ошибка при отправке Push" (500)
Причины:
- Неправильные VAPID ключи
- Подписка устарела
- Проблема с web-push библиотекой
Решение:
Проверьте VAPID ключи:
cd /var/www/ospab-host/backend
cat .env | grep VAPID
Должны быть заполнены:
VAPID_PUBLIC_KEY=BPtLNi3TY1ifUWTkgZrhxoEH6ihDgknFcgzc3xzFQg07PeuJ1TsJDQZqA32VqlxUo03g_mG0yKCKqADb4r5fnsM
VAPID_PRIVATE_KEY=5uEJBxEzCLhcMBPyGEw_GDx9JDneb6poZiX8f3b0zNE
VAPID_SUBJECT=mailto:support@ospab.host
Пересоздайте подписку:
- Удалите старую:
DELETE FROM PushSubscription WHERE userId = YOUR_USER_ID; - Перейдите в Дашборд → Уведомления
- Включите уведомления заново
❌ 410 Gone - Подписка устарела
Причина: Push подписка больше недействительна (браузер её отозвал).
Решение: Сервис автоматически удаляет устаревшие подписки. Пересоздайте подписку (см. выше).
Диагностика проблем
Проверка подписок в БД
SELECT
ps.id,
ps.userId,
ps.endpoint,
ps.userAgent,
ps.createdAt,
ps.lastUsed,
u.username
FROM PushSubscription ps
JOIN User u ON ps.userId = u.id
ORDER BY ps.createdAt DESC;
Проверка уведомлений в БД
SELECT * FROM Notification
WHERE type = 'test'
ORDER BY createdAt DESC
LIMIT 10;
Проверка Service Worker
- Откройте сайт в браузере
- DevTools (F12) → Application → Service Workers
- Должен быть зарегистрирован
/service-worker.jsсо статусом Activated
Проверка VAPID ключа через API
curl https://ospab.host:5000/api/notifications/vapid-key \
-H "Authorization: Bearer YOUR_TOKEN"
Должен вернуть:
{
"success": true,
"publicKey": "BPtLNi3TY1ifUWTkgZrhxoEH6ihDgknFcgzc3xzFQg07PeuJ1TsJDQZqA32VqlxUo03g_mG0yKCKqADb4r5fnsM"
}
Что логируется
Backend
| Эмодзи | Описание |
|---|---|
| 🧪 | Начало тестовой отправки |
| ✅ | Успешный этап |
| ❌ | Ошибка |
| 📊 | Статистика/данные |
| 📱 | Информация о подписке |
| 📝 | Создание записи |
| 📤 | Отправка |
| ⚠️ | Предупреждение |
Frontend
| Эмодзи | Описание |
|---|---|
| 🧪 | Начало процесса |
| 📝 | Проверка данных |
| 📤 | Отправка запроса |
| ✅ | Успешный ответ |
| ❌ | Ошибка |
| 📊 | Детали ответа |
| 📋 | Детали ошибки |
Ручная отправка через код
Если нужно отправить тестовое уведомление программно:
import { sendPushNotification } from './modules/notification/push.service';
// В любом месте backend кода
await sendPushNotification(userId, {
title: 'Заголовок',
body: 'Текст уведомления',
icon: '/logo192.png',
badge: '/favicon.svg',
data: {
notificationId: 123,
actionUrl: '/dashboard'
}
});
Файлы изменены
-
✅
backend/src/modules/notification/notification.controller.ts- Добавлен
testPushNotification()с подробным логированием
- Добавлен
-
✅
backend/src/modules/notification/notification.routes.ts- Добавлен роут
POST /api/notifications/test-push
- Добавлен роут
-
✅
frontend/src/pages/dashboard/admin.tsx- Добавлена кнопка тестовой отправки
- Добавлен
handleTestPushNotification()с логированием - Состояние
testingPushдля индикации загрузки
Деплой
# Backend
cd /var/www/ospab-host/backend
npm run build
pm2 restart ospab-backend
# Frontend
cd /var/www/ospab-host/frontend
npm run build
# Скопируйте dist/ в web root
# Проверка логов
pm2 logs ospab-backend --lines 100
Статус: ✅ Готово к тестированию Дата: 2025-11-01