Sumchenko Works
ENEnglish versionСменить тему
P—03 · РазработкаГотов

AI-диспетчер задач

Telegram-бот для команды ивентов — превращает текст и голосовые в карточки задач в Notion с дедлайном, приоритетом и исполнителем.

Роль
Постановка, промпт-инжиниринг, разработка в Claude Code
Период
2026.09
Статус
Готов
Стек
Python · FastAPI · aiogram / Telegram · LLM API · Whisper · Notion API · SQLite

Интерфейс

01 / 06
Одно сообщение — три задачи«Закажи капкейки до завтра до 15:00, передай Кате анонс к пятнице и напомни мне созвониться послезавтра»: первая задача уже в Notion, вторая ждёт подтверждения.

Задача

В команде, которая делает крупные мероприятия, задачи ставятся в чатах на бегу — текстом и голосовыми, с «до пятницы» и «передай Кате». Переносить их в трекер вручную некому, поэтому часть теряется, а сроки и ответственные остаются в переписке.

Решение

Сотрудник пишет боту как коллеге. LLM разбивает сообщение на отдельные задачи и вытаскивает название, описание, срок, приоритет, исполнителя и категорию; точную дату считает отдельный модуль. Бот показывает черновик, его можно поправить прямо в Telegram, и только после подтверждения карточка уходит на канбан-доску в Notion, а исполнитель получает уведомление.

MVP, собранный за один день в Claude Code. Моя часть — постановка, правила разбора в промпте, решение считать даты кодом, а не моделью, и сценарии отказов. Ниже отдельно — замечания, которые я нашёл, разбирая код для портфолио.

Цели

  1. 01Поставить задачу одним сообщением — текстом или голосом
  2. 02Не терять сроки и ответственных из переписки
  3. 03Ничего не публиковать в трекер без проверки человеком
  4. 04Не терять задачи, даже когда Notion недоступен

Функции

Текст и голосовые (Whisper)Несколько задач из одного сообщенияДедлайн из фраз «до пятницы», «послезавтра утром»Черновик с правкой любого поляКанбан-доска в NotionУведомление исполнителюРезерв в SQLite и досылка в 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

Сценарии

СотрудникГолосовое с тремя задачами
  1. 01«Закажи капкейки до завтра, передай Кате доделать анонс к пятнице и напомни мне послезавтра утром созвониться с площадкой»
  2. 02Whisper распознаёт речь, LLM находит три задачи с разными сроками
  3. 03Бот по очереди показывает три черновика 1/3, 2/3, 3/3
  4. 04После подтверждения Катя получает уведомление о своей задаче
СотрудникNotion недоступен
  1. 01Подтверждает черновик
  2. 02Запрос в Notion падает — задача сохраняется в SQLite
  3. 03Бот сообщает: «Notion недоступен — сохранено локально (id #12)»
  4. 04При следующей задаче или перезапуске outbox досылается в Notion

Сложности

Модель плохо считает датыLLM путает «эту пятницу» со «следующей». Модель только извлекает формулировку срока, а дату считает dateparser с нормализацией падежей, «утром»/«после обеда» и «на неделе».
Одна задача или несколько«…а ещё передай Кате» — это новая задача, а «в четверг… а нет, давай пятницу» — та же самая. Правила разбиения и примеры обоих случаев вынесены в промпт.
Бот не может написать первымTelegram запрещает боту начинать диалог. Бот запоминает всех, кто ему писал, ищет исполнителя по имени или @username и честно сообщает, если уведомить не получилось.
Notion недоступенЗадача не должна пропасть из-за внешнего сервиса: SQLite как outbox, досылка при старте и перед каждой новой задачей, остановка на первой сетевой ошибке.

Результат

Рабочий MVP примерно на 1 400 строк Python — бот, разбор через LLM, расчёт сроков, Notion с резервом в SQLite; проверен в Telegram на реальной базе Notion. Отдельно — разбор кода с 6 замечаниями и предложениями по доработке.

MVP завершён, бот запускается локально. Если развивать дальше — исправить замечания, хранить черновики вне памяти процесса и перейти на дату в Notion вместо текста.

Технологии

Следующий · P—04Website Health Monitor