Files

115 строки
3.6 KiB
Markdown

# Pulse Push Notifications
Дата: 2026-05-09
Репозиторий: viktor138irk/SWChat
Связанный клиент: viktor138irk/SWChat-App
## Цель
Добавить уведомления Pulse так, чтобы пользователь получал push на Android при новых сообщениях, но сервер Matrix/Synapse не зависел напрямую от клиентского UI.
## Важное решение
Уведомления делаем через отдельный серверный Push Gateway.
Схема:
```text
Synapse / Matrix
↓ Matrix push rules / pusher
Pulse Push Gateway
↓ FCM / Android push
Pulse Android App
```
Push Gateway должен жить в серверном репозитории `SWChat`, а клиентские настройки и регистрация pusher — в `SWChat-App`.
## Почему нужен Push Gateway
Matrix-клиент не получает push напрямую из Synapse в Firebase. Synapse отправляет push на gateway, а gateway уже отправляет уведомление в Firebase Cloud Messaging.
Это позволяет:
- не хранить Firebase-логику в Synapse;
- централизованно управлять push;
- позже добавить web push, desktop push, Telegram/dev alerts;
- контролировать payload и приватность;
- отключать/включать уведомления пользователям.
## MVP Push Gateway
Минимальные функции:
1. Endpoint приёма push от Synapse:
```text
POST /_matrix/push/v1/notify
```
2. Проверка входящего payload.
3. Извлечение event/user/room/pusher данных.
4. Отправка уведомления в FCM.
5. Логи отправки.
6. Healthcheck endpoint:
```text
GET /health
```
7. Конфигурация через `.env`.
8. Отдельный контейнер в `docker-compose.yml`.
## Предварительные домены
Рекомендуемый домен:
```text
push.stackworks.ru
```
Альтернатива внутри API:
```text
api-chat.stackworks.ru/push
```
На MVP лучше отдельный поддомен `push.stackworks.ru`, чтобы не мешать будущему backend API.
## Требования к Android-клиенту
В `SWChat-App` нужно:
- проверить наличие `google-services.json` под package `ru.stackworks.pulse`;
- проверить Firebase project;
- включить FCM token registration;
- убедиться, что `pushNotificationsAppId = ru.stackworks.pulse`;
- настроить pusher URL на Pulse Push Gateway;
- проверить уведомления на debug APK;
- проверить уведомления на release APK.
## Безопасность
Push Gateway не должен раскрывать текст сообщений без необходимости.
На MVP можно отправлять:
```text
Новое сообщение
```
или:
```text
Новое сообщение в Pulse
```
Без тела сообщения, пока не будет понятна политика приватности и E2EE.
## Следующий шаг
1. Проверить Android/Firebase config.
2. Создать каркас `push-gateway` в серверном репозитории.
3. Добавить сервис в `docker-compose.yml`.
4. Добавить `.env.example` переменные.
5. Настроить Synapse pusher/client pusher registration.
6. Проверить push на тестовом аккаунте.