AI-диспетчер задач
Telegram-бот для команды ивентов — превращает текст и голосовые в карточки задач в Notion с дедлайном, приоритетом и исполнителем.
- Роль
- Постановка, промпт-инжиниринг, разработка в Claude Code
- Период
- 2026.09
- Статус
- Готов
- Стек
- Python · FastAPI · aiogram / Telegram · LLM API · Whisper · Notion API · SQLite
Интерфейс
01 / 06Задача
В команде, которая делает крупные мероприятия, задачи ставятся в чатах на бегу — текстом и голосовыми, с «до пятницы» и «передай Кате». Переносить их в трекер вручную некому, поэтому часть теряется, а сроки и ответственные остаются в переписке.
Решение
Сотрудник пишет боту как коллеге. LLM разбивает сообщение на отдельные задачи и вытаскивает название, описание, срок, приоритет, исполнителя и категорию; точную дату считает отдельный модуль. Бот показывает черновик, его можно поправить прямо в Telegram, и только после подтверждения карточка уходит на канбан-доску в Notion, а исполнитель получает уведомление.
MVP, собранный за один день в Claude Code. Моя часть — постановка, правила разбора в промпте, решение считать даты кодом, а не моделью, и сценарии отказов. Ниже отдельно — замечания, которые я нашёл, разбирая код для портфолио.
Цели
- 01Поставить задачу одним сообщением — текстом или голосом
- 02Не терять сроки и ответственных из переписки
- 03Ничего не публиковать в трекер без проверки человеком
- 04Не терять задачи, даже когда Notion недоступен
Функции
Ключевые требования
| ID | Требование | Приоритет |
|---|---|---|
| FR-01 | Из одного сообщения создаётся столько задач, сколько в нём независимых дел; уточнения по ходу сообщения не дробят задачу. | Must |
| FR-02 | Срок считается от времени отправки сообщения; если фразу не удалось разобрать, она сохраняется текстом. | Must |
| FR-03 | Карточка создаётся только после подтверждения автора; любое поле можно изменить. | Must |
| FR-04 | Если Notion недоступен, задача сохраняется локально и досылается позже. | Must |
| FR-05 | Исполнитель получает уведомление, если он уже писал боту. | Should |
| NFR-01 | Бот отвечает только пользователям из белого списка. | Must |
| NFR-02 | Ответ модели проверяется схемой; при невалидном JSON — одна повторная попытка. | Must |
| NFR-03 | Ошибка внешнего сервиса не роняет бота: пользователь видит понятное сообщение. | Should |
Сценарии
- 01«Закажи капкейки до завтра, передай Кате доделать анонс к пятнице и напомни мне послезавтра утром созвониться с площадкой»
- 02Whisper распознаёт речь, LLM находит три задачи с разными сроками
- 03Бот по очереди показывает три черновика 1/3, 2/3, 3/3
- 04После подтверждения Катя получает уведомление о своей задаче
- 01Подтверждает черновик
- 02Запрос в Notion падает — задача сохраняется в SQLite
- 03Бот сообщает: «Notion недоступен — сохранено локально (id #12)»
- 04При следующей задаче или перезапуске outbox досылается в Notion
Сложности
Результат
Рабочий MVP примерно на 1 400 строк Python — бот, разбор через LLM, расчёт сроков, Notion с резервом в SQLite; проверен в Telegram на реальной базе Notion. Отдельно — разбор кода с 6 замечаниями и предложениями по доработке.
MVP завершён, бот запускается локально. Если развивать дальше — исправить замечания, хранить черновики вне памяти процесса и перейти на дату в Notion вместо текста.