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

265 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Тестовая отправка 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):
```bash
pm2 logs ospab-backend --lines 50
```
Увидите подробные логи с эмодзи-маркерами.
### 5. Проверьте результат
Через несколько секунд должно прийти Push-уведомление:
- **Заголовок:** 🧪 Тестовое уведомление
- **Текст:** Это тестовое Push-уведомление. Если вы его видите — всё работает отлично!
- **Иконка:** /logo192.png
- **Клик:** Перенаправляет на /dashboard/notifications
## Возможные ошибки
### ❌ "У вас нет прав администратора" (403)
**Причина:** Пользователь не является администратором.
**Решение:**
```sql
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 ключи:**
```bash
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 подписка больше недействительна (браузер её отозвал).
**Решение:** Сервис автоматически удаляет устаревшие подписки. Пересоздайте подписку (см. выше).
## Диагностика проблем
### Проверка подписок в БД
```sql
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;
```
### Проверка уведомлений в БД
```sql
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
```bash
curl https://ospab.host:5000/api/notifications/vapid-key \
-H "Authorization: Bearer YOUR_TOKEN"
```
Должен вернуть:
```json
{
"success": true,
"publicKey": "BPtLNi3TY1ifUWTkgZrhxoEH6ihDgknFcgzc3xzFQg07PeuJ1TsJDQZqA32VqlxUo03g_mG0yKCKqADb4r5fnsM"
}
```
## Что логируется
### Backend
| Эмодзи | Описание |
|--------|----------|
| 🧪 | Начало тестовой отправки |
| ✅ | Успешный этап |
| ❌ | Ошибка |
| 📊 | Статистика/данные |
| 📱 | Информация о подписке |
| 📝 | Создание записи |
| 📤 | Отправка |
| ⚠️ | Предупреждение |
### Frontend
| Эмодзи | Описание |
|--------|----------|
| 🧪 | Начало процесса |
| 📝 | Проверка данных |
| 📤 | Отправка запроса |
| ✅ | Успешный ответ |
| ❌ | Ошибка |
| 📊 | Детали ответа |
| 📋 | Детали ошибки |
## Ручная отправка через код
Если нужно отправить тестовое уведомление программно:
```typescript
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` для индикации загрузки
## Деплой
```bash
# 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