Приложения для подсчёта калорий удобны, но у них есть общая боль - ограниченная база данных. Введёшь "котлета по-домашнему" или творог конкретного производителя - и получишь в лучшем случае приблизительный аналог. В этой статье разберём, как собрать чат-бот для учёта КБЖУ в конструкторе Watbot, который вместо базы данных использует нейросеть. Она найдёт любое блюдо, любой продукт и вернёт точные числа.
Мессенджер для демонстрации - Max, но логика сборки универсальна.
Как устроен сценарий
В начале работы у вас есть один стартовый блок. Чтобы добавить следующий, наведите курсор на точку у блока - появится стрелка "продолжить". Зажмите курсор и потяните стрелку в любое пустое место, затем отпустите мышь. Появится меню выбора блока. Выбираете нужный тип - блок создаётся вместе со связью автоматически.
Удалить блок можно через три точки на нём: нажимаете "удалить", подтверждаете - удаляется и блок, и связь.
Справа посередине есть кнопки масштаба. По клику на цифру в центре можно задать масштаб вручную.
Перед сборкой бота подключите мессенджер. В правом верхнем углу нажмите на иконку управления мессенджерами и выберите Max. Если токена ещё нет - нажмите "получить токен" и пройдите регистрацию. После подключения можно приступать к сборке.
Шаг 1. Приветствие и запрос продукта
От стартового блока тяните стрелку в пустое место и выбираете "цепочка сообщений". Нажимаете на созданный блок - справа открывается панель редактирования.
Нажимаете на "текст" и вставляете первое сообщение:
"Привет, я бот подсчёта калорий. Чтобы начать, нажми на кнопку ниже."
Затем нажимаете "добавить ответ" и пишете слово "Начать". Блок готов, закрываете его.
Шаг 2. Блок запроса продукта
От кнопки "Начать" тяните стрелку в пустое место и снова выбираете "цепочка сообщений". Текст блока:
"Напиши блюдо или отдельный продукт, чтобы посчитать КБЖУ. Не забудь указать вес продукта."
Кнопок здесь нет - пользователь просто пишет свой продукт в ответ. Этот ответ нужно сохранить: включаете запись пользовательского ввода в переменную и называете её "продукт".
Шаг 3. Получение API-ключа
Прежде чем добавлять HTTP-запрос, нужно получить API-ключ нейросети. Регистрируетесь на платформе - можно через Google. Принимаете все разрешения и юридические согласия, затем покупаете кредиты и создаёте ключ.
При создании ключа задаёте: имя, кредитный лимит, ограничение и срок действия.
Чтобы понять, как правильно заполнить HTTP-запрос, переходите в документацию. Раздел с API-референсами для этого неудобен - лучше найти раздел "чат" и посмотреть пример запроса справа. Там видно: метод POST, URL-ссылка, три заголовка и тело в виде небольшого массива. По этому примеру и собирается запрос в конструкторе.
Шаг 4. Первый HTTP-запрос - калории
Возвращаетесь в сценарий. От ветки "любая другая фраза" второго блока тяните стрелку и выбираете блок "HTTP-запрос".
Заполняете его так:
- Метод: POST
- URL: копируете из документации
- Заголовки: три штуки. В заголовке Authorization пишете: Bearer [пробел] [ваш API-ключ из личного кабинета]
- Тело: JSON. Вставляете массив с промтом. Промт просит нейросеть написать, сколько калорий приходится на продукт из переменной "продукт", и уточняет: ответить только цифрой, без текста и лишних символов. Также указываете модель
- Тайм-аут: максимальный
- Сервер запросов: Европа
- Включаете "выводить тело ответа в чат" - это нужно для первичной проверки.
Запускаете бота в мессенджере Max, нажимаете "Начать", пишете продукт - например, "капуста". Бот возвращает сырой ответ в виде JSON.
Копируете этот ответ и вставляете в JSON-форматтер.
Ставите режим отображения "дерево" и находите нужный путь к ответу - он лежит в строке content. Путь к значению выглядит так: choices.0.message (угловые скобки из исходного пути заменяются на точки).
Возвращаетесь в блок HTTP-запроса:
- Отключаете "выводить тело ответа в чат"
- Включаете "записать ответ JSON в переменную"
- Добавляете переменную "калории"
- Вставляете найденный путь
Шаг 5. Ещё три HTTP-запроса - белки, жиры, углеводы
Копируете блок HTTP-запроса три раза. Зачем четыре отдельных запроса, а не один? Если спросить всё сразу, нейросеть вернёт текст с числами - и его нельзя будет суммировать. Чтобы считать дневной итог по каждому показателю, нужны отдельные числовые значения в отдельных переменных.
В каждой копии меняете только одно: вопрос в промте.
- Второй запрос: сколько белков в [продукт]? Ответить только цифрой. Переменная - "белки".
- Третий запрос: сколько жиров. Переменная - "жиры".
- Четвёртый запрос: сколько углеводов. Переменная - "углеводы".
Шаг 6. Блок с результатом
После четырёх HTTP-запросов добавляете ещё одну "цепочку сообщений". В ней собираете итоговое сообщение с подстановкой переменных:
Твой продукт: [переменная: продукт]
КБЖУ продукта:
Калорий: [переменная: калории]
Белков: [переменная: белки]
Жиров: [переменная: жиры]
Углеводов: [переменная: углеводы]
Шаг 7. Запись в Google Таблицу
Чтобы суммировать данные за день, результаты записываются в Google Таблицу. В настройках конструктора переходите в раздел "Интеграции" и подключаете Google-аккаунт - достаточно авторизоваться через Google.
Возвращаетесь в сценарий и добавляете блок "Запись в Google Таблицу" после последней цепочки сообщений. Связь идёт от ветки "продолжить".
В блоке создаёте новую таблицу - например, "БЖУ". Добавляете:
- Константу: ID пользователя
- Переменные: калории, белки, жиры, углеводы
При желании можно добавить и переменную "продукт" - тогда в таблице будет видно, в каком продукте сколько чего.
Следите, чтобы каждая переменная записывалась в отдельную ячейку своего столбца.
Проверка работы
Запускаете бота в Max, пишете продукт - например, "капуста". Бот быстро возвращает карточку с данными. Переходите в Google Таблицы - там автоматически создалась таблица "БЖУ" и появилась первая строка с данными.
Чтобы видеть дневной итог, достаточно один раз добавить формулу суммы в ячейку под каждым столбцом. При каждой новой записи сумма обновляется автоматически. Для проверки пишете боту ещё один продукт - например, "два варёных яйца" - и видите, как в таблице появляется вторая строка.
Что можно добавить
Заходить в таблицу вручную не обязательно. Можно расширить сценарий: добавить блок с вопросом "сколько я съел сегодня" и блок "Чтение записи в Google Таблице", который выведет суммы прямо в чат. Настраивается один раз - и бот сам покажет дневной итог по запросу пользователя.
Полезные ссылки
Документация нейросети:
JSON FORMATTER:
Наш Телеграмм канал:
Наше комьюнити в Мах:
Видео инструкция ЧАТ-БОТ С ПОДСЧЁТОМ КАЛОРИЙ И БЖУ В MAX