9.6 KiB
Уведомления
Minishop отправляет уведомления в Telegram и на email. Telegram-канал означает личные сообщения пользователю, сообщения администраторам из ADMIN_IDS или сообщения в LOG_CHAT_ID - зависит от события. Email работает только при настроенном SMTP и наличии email у получателя.
Для уведомлений жизненного цикла подписки есть отдельный флаг SUBSCRIPTION_EMAIL_NOTIFICATIONS_ENABLED. Если он включен, пользовательские уведомления об окончании подписки отправляются в Telegram при наличии привязанного Telegram-аккаунта и на email при наличии привязанной почты.
Сводная таблица
| Событие | Получатель | Telegram | Условия и ограничения | |
|---|---|---|---|---|
| Код входа по email и magic link | Пользователь | - | ✓ | Нужны SMTP_* и EMAIL_* настройки. Magic link также требует корректный SUBSCRIPTION_MINI_APP_URL. |
| Код установки или смены пароля | Пользователь | - | ✓ | Нужны SMTP_* и EMAIL_* настройки. |
| Успешная оплата подписки | Пользователь | ✓ | ✓ | Email отправляется, если SMTP настроен и у пользователя есть email. |
| Успешная покупка пакета трафика | Пользователь | ✓ | ✓ | Email отправляется, если SMTP настроен и у пользователя есть email. |
| Успешная покупка premium-трафика | Пользователь | ✓ | ✓ | Email отправляется, если SMTP настроен и у пользователя есть email. |
| Успешная покупка HWID-устройств | Пользователь | ✓ | - | Отправляется после оплаты hwid_devices или hwid_devices_renewal. |
| Ошибка оплаты по webhook провайдера | Пользователь | ✓ | - | Отправляется, когда платежный провайдер сообщает о неуспешном платеже. |
| Напоминание за 3 дня до окончания подписки | Пользователь | ✓ | ✓ | Управляется SUBSCRIPTION_NOTIFY_DAYS_BEFORE и SUBSCRIPTION_EMAIL_NOTIFICATIONS_ENABLED. |
| Напоминание за 2 дня до окончания подписки | Пользователь | ✓ | ✓ | Работает, если SUBSCRIPTION_NOTIFY_DAYS_BEFORE >= 2; email требует SUBSCRIPTION_EMAIL_NOTIFICATIONS_ENABLED=True. |
| Предупреждение о списании автопродления за 48 часов | Пользователь | ✓ | ✓ | Отправляется вместо обычного 48-часового напоминания для YooKassa-подписок с включенным автопродлением. |
| Напоминание за 1 день до окончания подписки | Пользователь | ✓ | ✓ | Работает, если SUBSCRIPTION_NOTIFY_DAYS_BEFORE >= 1. Для YooKassa auto-renew 24-часовой webhook сначала пытается списать продление и может не отправить напоминание. |
| Напоминание за несколько часов до окончания подписки | Пользователь | ✓ | ✓ | Отправляется локальным worker, если SUBSCRIPTION_NOTIFY_HOURS_BEFORE задан от 1 до 23. |
| Уведомление в день окончания подписки | Пользователь | ✓ | ✓ | Управляется SUBSCRIPTION_NOTIFY_ON_EXPIRE; email требует SUBSCRIPTION_EMAIL_NOTIFICATIONS_ENABLED=True. |
| Уведомление через сутки после окончания подписки | Пользователь | ✓ | ✓ | Управляется SUBSCRIPTION_NOTIFY_AFTER_EXPIRE; email требует SUBSCRIPTION_EMAIL_NOTIFICATIONS_ENABLED=True. |
| Исчерпан трафик пробного периода | Пользователь | ✓ | - | Отправляется локальным worker для trial-подписок. |
| Ответ администратора в тикете поддержки | Пользователь | ✓ | ✓ | Telegram отправляется пользователям с Telegram-аккаунтом, email - пользователям с привязанным email. |
| Закрытие тикета поддержки | Пользователь | ✓ | ✓ | Telegram отправляется пользователям с Telegram-аккаунтом, email - пользователям с привязанным email. |
| Слияние email- и Telegram-аккаунтов | Пользователь | - | ✓ | Email отправляется на итоговый email аккаунта после безопасного merge. |
| Новый тикет поддержки | Администраторы | ✓ | ✓ | Telegram/log уведомления зависят от LOG_SUPPORT; email включается через SUPPORT_ADMIN_EMAIL_NOTIFICATIONS_ENABLED. |
| Ответ пользователя в тикете поддержки | Администраторы | ✓ | ✓ | Telegram/log уведомления зависят от LOG_SUPPORT; email включается через SUPPORT_ADMIN_EMAIL_NOTIFICATIONS_ENABLED. |
| Новая регистрация через Telegram | Администраторы / лог-чат | ✓ | - | Управляется LOG_NEW_USERS. |
| Новая регистрация по email | Администраторы / лог-чат | ✓ | - | Управляется LOG_NEW_USERS. |
| Email привязан к Telegram-аккаунту | Администраторы / лог-чат | ✓ | - | Управляется LOG_NEW_USERS. |
| Telegram привязан к email-аккаунту | Администраторы / лог-чат | ✓ | - | Управляется LOG_NEW_USERS. |
| Email- и Telegram-аккаунты объединены | Администраторы / лог-чат | ✓ | - | Управляется LOG_NEW_USERS. |
| Успешная оплата | Администраторы / лог-чат | ✓ | - | Управляется LOG_PAYMENTS. |
| Активация trial | Администраторы / лог-чат | ✓ | - | Управляется LOG_TRIAL_ACTIVATIONS. |
| Активация промокода | Администраторы / лог-чат | ✓ | - | Управляется LOG_PROMO_ACTIVATIONS. |
| Подозрительная попытка промокода | Администраторы / лог-чат | ✓ | - | Управляется LOG_SUSPICIOUS_ACTIVITY. |
| Результат ручной синхронизации с Remnawave Panel | Администратор, запустивший синхронизацию | ✓ | - | Worker отправляет короткий результат в target_chat_id, если синхронизация запускалась через очередь. |
| Ошибка создания пользователя в Remnawave Panel | Администраторы | ✓ | - | Отправляется администраторам из ADMIN_IDS. |
| Архив бэкапа создан | Администраторы / backup-чат | ✓ | - | Архив отправляется в BACKUP_CHAT_ID, а если он пустой - в LOG_CHAT_ID. |
| Ошибка бэкапа | Администраторы / backup-чат | ✓ | - | Ошибка отправляется в BACKUP_CHAT_ID, а если он пустой - в LOG_CHAT_ID. |
Важно про окончание подписки
Если пользователь привязал email к Telegram-аккаунту, уведомления об окончании подписки дублируются в оба канала: Telegram и email. Если привязан только Telegram - уйдет только Telegram. Если есть только email - уйдет только email.
Email-доставка требует одновременно:
SUBSCRIPTION_EMAIL_NOTIFICATIONS_ENABLED=True;- настроенный SMTP-контур;
- email у пользователя.
Синхронизация каналов
Remnawave webhook и локальный SubscriptionNotificationWorker используют общий сервис отправки и общую таблицу дедупликации subscription_notifications.
Дедупликация ведется отдельно по каналам: например, before_3d:telegram и before_3d:email. Благодаря этому сбой одного канала не блокирует второй, а повторное событие из webhook или worker не отправляет уже доставленное уведомление повторно.
Старые записи без канала, например before_3d, считаются Telegram-историей. Они блокируют повторное Telegram-сообщение, но не мешают отправить email после обновления.