⚡️ УПРОЩЕНИЕ ЖИЗНИ • Шаблон 22 из 25
Краткое содержание:
Бот распознает еду по фото, считает КБЖУ и ведет дневник питания. Система построена на нескольких взаимосвязанных сценариях: основной отвечает за мгновенное взаимодействие с пользователем (обработка фото, команд и сообщений), а фоновый — за ежедневную аналитику рациона и отправку отчетов. В качестве памяти бота, где хранится вся история питания и профили пользователей, используется база данных Supabase.
Архитектура и принцип работы:
В основе лежит принцип разделения логики на независимые, но связанные между собой модули. Это делает систему надежной и легко масштабируемой. Главный воркфлоу (callbacks) выступает в роли маршрутизатора. Он принимает все входящие события от Telegram (текст, фото, нажатия кнопок) и с помощью ноды Switch определяет, что именно прислал пользователь. В зависимости от типа события, он передает управление одному из специализированных воркфлоу, каждый из которых отвечает за свою задачу.
Ключевых сценариев три:
Обработка фото Если пользователь отправляет изображение, запускается цепочка его скачивания, конвертации в формат Base64 и отправки в Vision-модель GPT. Модель возвращает несколько вариантов блюд с примерным весом. Эти варианты отправляются пользователю в Telegram с кнопками для подтверждения. После выбора и подтверждения веса, данные о приеме пищи (название, КБЖУ, время) сохраняются в базу данных.
Обработка текста и команд Если приходит текстовое сообщение, оно перенаправляется в другой воркфлоу (text). Здесь логика также ветвится: это может быть ручной ввод еды (команда /v), который парсится и сразу сохраняется, или обычное сообщение для AI-агента. Агент, в свою очередь, имеет доступ к инструменту — который делает запрос в базу данных. Это позволяет ему вспоминать предыдущие приемы пищи и отвечать на вопросы вроде "Что я сегодня ел?".
Ежедневный дайджест Это полностью автономный процесс, реализованный в отдельном воркфлоу (digest). Он запускается по таймеру (Schedule Trigger) раз в сутки. Сценарий делает запрос в Supabase, чтобы получить все приемы пищи пользователя за день, агрегирует их, а затем отправляет эту сводку в GPT-модель с задачей проанализировать рацион и дать рекомендации. Таким образом, ресурсоемкая аналитическая задача вынесена в отдельный процесс и не мешает основной работе бота.