3.6 KiB
3.6 KiB
Pulse — Система уведомлений
Telegram бот
Функционал
- При
/startбот отправляет пользователю егоchat_id - Пользователь копирует ID и вставляет в профиль на сайте
- Бот отправляет уведомления о задачах и привычках
Реализация
- Часть homelab-api (отдельный goroutine)
- go-telegram-bot-api
- Long polling
Профиль пользователя
Новые поля в БД (таблица users)
ALTER TABLE users ADD COLUMN telegram_chat_id BIGINT;
ALTER TABLE users ADD COLUMN notifications_enabled BOOLEAN DEFAULT true;
ALTER TABLE users ADD COLUMN timezone VARCHAR(50) DEFAULT 'Europe/Moscow';
API endpoints
GET /profile— получить профильPUT /profile— обновить профиль (telegram_chat_id, notifications_enabled, timezone)
UI
- Страница /settings или /profile
- Поля: telegram chat ID, вкл/выкл уведомления, часовой пояс
Логика уведомлений
Утреннее уведомление (9:00)
- Список задач на сегодня (due_date <= today, не выполнены)
- Отправляется один раз утром
Индивидуальные напоминания
Для каждой задачи и каждой привычки можно установить время напоминания.
Логика:
- Если задача/привычка НЕ выполнена к указанному времени → отправить уведомление
- Пример: привычка "гитара" выполнять в 18:00, напоминание в 17:00
- Каждый день в 17:00 проверяем: выполнена ли сегодня?
- Если нет → отправляем "Не забудь: гитара 🎸"
Глобальный выключатель
- Если
notifications_enabled = falseв профиле → никакие уведомления не отправляются - Если
telegram_chat_idне заполнен → уведомления не отправляются
Новые поля в БД
tasks
ALTER TABLE tasks ADD COLUMN reminder_time TIME;
habits
ALTER TABLE habits ADD COLUMN reminder_time TIME;
Архитектура
Scheduler (robfig/cron)
- Запускается каждую минуту
- Для каждого пользователя с notifications_enabled=true и telegram_chat_id:
- Проверить, нужно ли отправить утреннее уведомление (9:00 по timezone)
- Найти задачи с reminder_time = текущее время, не выполнены → отправить
- Найти привычки с reminder_time = текущее время, не выполнены сегодня → отправить
Telegram Bot
- Long polling в отдельной goroutine
- Команды:
/start→ отправить chat_id
TODO
- Создать Telegram бота (@BotFather) → получить токен
- Миграция БД: поля в users, tasks, habits
- API: GET/PUT /profile
- API: Telegram bot handler (long polling)
- Backend: scheduler с robfig/cron
- UI: страница настроек профиля
- UI: поле reminder_time в формах задач и привычек
Создано: 2026-02-06 Обновлено: 2026-02-06