Files
ospab.host/ospabhost/TEST_PUSH_NOTIFICATION.md
2025-11-23 14:35:16 +03:00

8.8 KiB
Raw Blame History

Тестовая отправка 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-уведомления

  1. Перейдите в Дашборд → Уведомления
  2. Нажмите "Включить уведомления" (синяя кнопка)
  3. Разрешите уведомления в браузере
  4. Дождитесь сообщения "Push-уведомления успешно подключены!"

2. Откройте админ-панель

  1. Перейдите в Дашборд → Админ-панель (👑 иконка в сайдбаре)
  2. В правом верхнем углу увидите кнопку "🧪 Тест Push-уведомления"

3. Нажмите кнопку

  1. Откройте DevTools → Console (F12)
  2. Нажмите "🧪 Тест Push-уведомления"
  3. Следите за логами в консоли браузера

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-уведомления не включены.

Решение:

  1. Перейдите в Дашборд → Уведомления
  2. Нажмите "Включить уведомления"
  3. Разрешите в браузере
  4. Попробуйте снова

"Уведомление создано в БД, но ошибка при отправке Push" (500)

Причины:

  1. Неправильные VAPID ключи
  2. Подписка устарела
  3. Проблема с 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

Пересоздайте подписку:

  1. Удалите старую: DELETE FROM PushSubscription WHERE userId = YOUR_USER_ID;
  2. Перейдите в Дашборд → Уведомления
  3. Включите уведомления заново

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

  1. Откройте сайт в браузере
  2. DevTools (F12) → Application → Service Workers
  3. Должен быть зарегистрирован /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'
  }
});

Файлы изменены

  1. backend/src/modules/notification/notification.controller.ts

    • Добавлен testPushNotification() с подробным логированием
  2. backend/src/modules/notification/notification.routes.ts

    • Добавлен роут POST /api/notifications/test-push
  3. 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