Update Pulse notifications: new workflow with Cosmo integration

This commit is contained in:
Cosmo
2026-02-06 14:08:38 +00:00
parent a24dc4452d
commit a4bd417966

View File

@@ -2,86 +2,65 @@
## Telegram бот ## Telegram бот
**Бот:** @pulse_tracking_bot
**Токен:** `8440343622:AAFM0gaI3Uaqj10WcEIPYf70zWo41kSB2So`
### Функционал ### Функционал
- При `/start` бот отправляет пользователю его `chat_id` - При `/start` бот отправляет пользователю его `chat_id`
- Пользователь копирует ID и вставляет в профиль на сайте - `/tasks` — задачи на сегодня с кнопками
- Бот отправляет уведомления о задачах и привычках - `/habits` — привычки на сегодня с кнопками
- Inline кнопки: "✅ Выполнено", "🗑 Удалить", "⏰ +30 мин"
### Реализация
- Часть homelab-api (отдельный goroutine)
- go-telegram-bot-api
- Long polling
## Профиль пользователя ## Профиль пользователя
### Новые поля в БД (таблица users) ### Настройки
```sql - Telegram Chat ID
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'; - Время утреннего уведомления (default: 09:00)
``` - Время вечернего уведомления (default: 21:00)
### API endpoints
- `GET /profile` — получить профиль
- `PUT /profile` — обновить профиль (telegram_chat_id, notifications_enabled, timezone)
### UI
- Страница /settings или /profile
- Поля: telegram chat ID, вкл/выкл уведомления, часовой пояс
## Логика уведомлений ## Логика уведомлений
### Утреннее уведомление (9:00) ### Утреннее уведомление
- Список **задач на сегодня** (due_date <= today, не выполнены) - Время: настраивается в профиле (default 09:00)
- Отправляется один раз утром - Содержит: задачи на сегодня, привычки на сегодня
### Вечернее уведомление (итоги дня)
- Время: настраивается в профиле (default 21:00)
- Содержит:
- 📋 Задачи: ✅ выполнено / ⬜ осталось
- 🎯 Привычки: ✅ выполнено / ⬜ осталось
- Список невыполненных привычек
- Мотивационное сообщение
### Индивидуальные напоминания ### Индивидуальные напоминания
Для **каждой задачи** и **каждой привычки** можно установить время напоминания. - Для каждой задачи/привычки можно установить `reminder_time`
- Если к этому времени не выполнено → push в Telegram
- Кнопки: "✅ Выполнено", "⏰ +30 мин"
**Логика:** ## Интеграция с Cosmo (OpenClaw)
- Если задача/привычка НЕ выполнена к указанному времени → отправить уведомление
- Пример: привычка "гитара" выполнять в 18:00, напоминание в 17:00
- Каждый день в 17:00 проверяем: выполнена ли сегодня?
- Если нет → отправляем "Не забудь: гитара 🎸"
### Глобальный выключатель ### Workflow
- Если `notifications_enabled = false` в профиле → никакие уведомления не отправляются - **Задачи от Даниила** → Cosmo создаёт в Pulse API
- Если `telegram_chat_id` не заполнен → уведомления не отправляются - **Привычки** → Cosmo создаёт в Pulse API
- **Встречи/события** → Google Calendar (gog)
- **Уведомления** → приходят в @pulse_tracking_bot
## Новые поля в БД ### API для Cosmo
```bash
# Создать задачу
curl -X POST https://api.digital-home.site/tasks \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"...", "due_date":"2026-02-10", "reminder_time":"09:00"}'
### tasks # Создать привычку
```sql curl -X POST https://api.digital-home.site/habits \
ALTER TABLE tasks ADD COLUMN reminder_time TIME; -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"...", "frequency":"daily", "reminder_time":"17:00"}'
``` ```
### habits
```sql
ALTER TABLE habits ADD COLUMN reminder_time TIME;
```
## Архитектура
### Scheduler (robfig/cron)
- Запускается каждую минуту
- Для каждого пользователя с notifications_enabled=true и telegram_chat_id:
1. Проверить, нужно ли отправить утреннее уведомление (9:00 по timezone)
2. Найти задачи с reminder_time = текущее время, не выполнены → отправить
3. Найти привычки с 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* *Обновлено: 2026-02-06*