From a4bd417966ffc5a4ad1b25b84b6aa8e715c6d3e8 Mon Sep 17 00:00:00 2001 From: Cosmo Date: Fri, 6 Feb 2026 14:08:38 +0000 Subject: [PATCH] Update Pulse notifications: new workflow with Cosmo integration --- Projects/Pulse/Notifications.md | 109 +++++++++++++------------------- 1 file changed, 44 insertions(+), 65 deletions(-) diff --git a/Projects/Pulse/Notifications.md b/Projects/Pulse/Notifications.md index b74314c..779764b 100644 --- a/Projects/Pulse/Notifications.md +++ b/Projects/Pulse/Notifications.md @@ -2,86 +2,65 @@ ## Telegram бот +**Бот:** @pulse_tracking_bot +**Токен:** `8440343622:AAFM0gaI3Uaqj10WcEIPYf70zWo41kSB2So` + ### Функционал - При `/start` бот отправляет пользователю его `chat_id` -- Пользователь копирует ID и вставляет в профиль на сайте -- Бот отправляет уведомления о задачах и привычках - -### Реализация -- Часть homelab-api (отдельный goroutine) -- go-telegram-bot-api -- Long polling +- `/tasks` — задачи на сегодня с кнопками +- `/habits` — привычки на сегодня с кнопками +- Inline кнопки: "✅ Выполнено", "🗑 Удалить", "⏰ +30 мин" ## Профиль пользователя -### Новые поля в БД (таблица users) -```sql -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, вкл/выкл уведомления, часовой пояс +### Настройки +- Telegram Chat ID +- Уведомления вкл/выкл +- Часовой пояс +- Время утреннего уведомления (default: 09:00) +- Время вечернего уведомления (default: 21:00) ## Логика уведомлений -### Утреннее уведомление (9:00) -- Список **задач на сегодня** (due_date <= today, не выполнены) -- Отправляется один раз утром +### Утреннее уведомление +- Время: настраивается в профиле (default 09:00) +- Содержит: задачи на сегодня, привычки на сегодня + +### Вечернее уведомление (итоги дня) +- Время: настраивается в профиле (default 21:00) +- Содержит: + - 📋 Задачи: ✅ выполнено / ⬜ осталось + - 🎯 Привычки: ✅ выполнено / ⬜ осталось + - Список невыполненных привычек + - Мотивационное сообщение ### Индивидуальные напоминания -Для **каждой задачи** и **каждой привычки** можно установить время напоминания. +- Для каждой задачи/привычки можно установить `reminder_time` +- Если к этому времени не выполнено → push в Telegram +- Кнопки: "✅ Выполнено", "⏰ +30 мин" -**Логика:** -- Если задача/привычка НЕ выполнена к указанному времени → отправить уведомление -- Пример: привычка "гитара" выполнять в 18:00, напоминание в 17:00 - - Каждый день в 17:00 проверяем: выполнена ли сегодня? - - Если нет → отправляем "Не забудь: гитара 🎸" +## Интеграция с Cosmo (OpenClaw) -### Глобальный выключатель -- Если `notifications_enabled = false` в профиле → никакие уведомления не отправляются -- Если `telegram_chat_id` не заполнен → уведомления не отправляются +### Workflow +- **Задачи от Даниила** → Cosmo создаёт в Pulse API +- **Привычки** → 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 -ALTER TABLE tasks ADD COLUMN reminder_time TIME; +# Создать привычку +curl -X POST https://api.digital-home.site/habits \ + -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*