Add Pulse Telegram bot spec: commands, inline buttons, architecture
This commit is contained in:
148
Projects/Pulse/Telegram-Bot.md
Normal file
148
Projects/Pulse/Telegram-Bot.md
Normal file
@@ -0,0 +1,148 @@
|
||||
# Pulse — Telegram Bot
|
||||
|
||||
Бот как полноценный интерфейс к Pulse. Управление задачами и привычками без захода на сайт.
|
||||
|
||||
## Авторизация
|
||||
|
||||
### Связка аккаунта
|
||||
1. Пользователь отправляет `/start`
|
||||
2. Бот отвечает: "Привет! Твой chat_id: `123456789`. Добавь его в настройках профиля на сайте."
|
||||
3. После привязки бот может отправлять уведомления и принимать команды
|
||||
|
||||
### Альтернатива: Magic Link
|
||||
- `/login` → бот отправляет одноразовую ссылку для входа
|
||||
- Или код подтверждения, который вводишь на сайте
|
||||
|
||||
## Команды
|
||||
|
||||
### Задачи
|
||||
|
||||
| Команда | Описание |
|
||||
|---------|----------|
|
||||
| `/tasks` | Список задач на сегодня (все) |
|
||||
| `/tasks remaining` | Только невыполненные задачи |
|
||||
| `/tasks all` | Все активные задачи |
|
||||
| `/task <текст>` | Создать новую задачу |
|
||||
| `/done <id>` | Отметить задачу выполненной |
|
||||
| `/undone <id>` | Снять отметку выполнения |
|
||||
|
||||
**Примеры:**
|
||||
```
|
||||
/task Купить молоко
|
||||
/task Позвонить врачу !высокий @завтра
|
||||
/done 15
|
||||
```
|
||||
|
||||
**Флаги при создании:**
|
||||
- `!высокий` / `!средний` / `!низкий` — приоритет
|
||||
- `@сегодня` / `@завтра` / `@10.02` — дедлайн
|
||||
- `🔔17:00` — напоминание
|
||||
|
||||
### Привычки
|
||||
|
||||
| Команда | Описание |
|
||||
|---------|----------|
|
||||
| `/habits` | Привычки на сегодня |
|
||||
| `/habits all` | Все привычки |
|
||||
| `/check <id>` | Отметить привычку выполненной |
|
||||
| `/uncheck <id>` | Снять отметку |
|
||||
|
||||
**Примеры:**
|
||||
```
|
||||
/habits
|
||||
/check 3
|
||||
```
|
||||
|
||||
### Статистика
|
||||
|
||||
| Команда | Описание |
|
||||
|---------|----------|
|
||||
| `/stats` | Краткая статистика (выполнено сегодня, streak) |
|
||||
| `/stats week` | Статистика за неделю |
|
||||
|
||||
### Настройки
|
||||
|
||||
| Команда | Описание |
|
||||
|---------|----------|
|
||||
| `/settings` | Текущие настройки уведомлений |
|
||||
| `/notify on` / `/notify off` | Вкл/выкл уведомления |
|
||||
| `/morning 09:00` | Установить время утреннего уведомления |
|
||||
|
||||
## Inline кнопки
|
||||
|
||||
Для удобства бот отправляет сообщения с кнопками:
|
||||
|
||||
### Список задач
|
||||
```
|
||||
📋 Задачи на сегодня:
|
||||
|
||||
1. [ ] Купить молоко
|
||||
2. [ ] Позвонить врачу (!)
|
||||
3. [✓] Оплатить счета
|
||||
|
||||
[✅ Отметить] [➕ Новая задача]
|
||||
```
|
||||
|
||||
При нажатии "Отметить" → показать список для выбора.
|
||||
|
||||
### Уведомление о привычке
|
||||
```
|
||||
🔔 Напоминание: Гитара 🎸
|
||||
|
||||
Время заниматься! (17:00)
|
||||
|
||||
[✅ Выполнено] [⏰ Напомни через 30 мин]
|
||||
```
|
||||
|
||||
## Быстрые ответы
|
||||
|
||||
Бот понимает текст без команд в контексте:
|
||||
- После `/tasks` можно просто написать "купить хлеб" → создаст задачу
|
||||
- После показа списка можно написать "1" → отметит задачу #1
|
||||
|
||||
## Архитектура
|
||||
|
||||
### Хранение состояния
|
||||
- Redis или in-memory map для user states
|
||||
- Состояния: `idle`, `awaiting_task_text`, `awaiting_habit_check`
|
||||
|
||||
### Обработка команд
|
||||
```go
|
||||
type BotHandler struct {
|
||||
taskService *service.TaskService
|
||||
habitService *service.HabitService
|
||||
userService *service.UserService
|
||||
}
|
||||
|
||||
func (h *BotHandler) HandleUpdate(update tgbotapi.Update) {
|
||||
// роутинг команд
|
||||
}
|
||||
```
|
||||
|
||||
### Связь с основным API
|
||||
- Бот использует те же сервисы что и HTTP API
|
||||
- Авторизация по telegram_chat_id → user_id
|
||||
|
||||
## Безопасность
|
||||
|
||||
- Команды работают только для привязанных аккаунтов
|
||||
- Rate limiting на создание задач
|
||||
- Логирование действий через бота
|
||||
|
||||
## TODO
|
||||
|
||||
- [ ] Базовые команды: /start, /tasks, /habits
|
||||
- [ ] Создание задач через /task
|
||||
- [ ] Отметка выполнения: /done, /check
|
||||
- [ ] Inline кнопки для быстрых действий
|
||||
- [ ] Контекстные быстрые ответы
|
||||
- [ ] Настройки через бота
|
||||
|
||||
## Приоритет реализации
|
||||
|
||||
1. **MVP:** /start, /tasks, /habits, /done, /check
|
||||
2. **v1.1:** Создание задач, inline кнопки
|
||||
3. **v1.2:** Быстрые ответы, статистика, настройки
|
||||
|
||||
---
|
||||
*Создано: 2026-02-06*
|
||||
Reference in New Issue
Block a user