Перейти к основному содержимому

Переменные и данные

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

Чтобы вставить значение переменной, её имя пишут в фигурных скобках — {имя}. Когда бот отправляет сообщение пользователю, он заменяет {имя} на реальное значение. Например, текст Привет, {first_name}! превратится в Привет, Анна!.

Два типа переменных

ТипЧто этоНужно ли создавать
СистемныеГотовые переменные, которые бот заполняет сам: данные пользователя, чата, дата и времяНет, доступны всегда
ПользовательскиеПеременные, которые вы создаёте сами через ноды: ответы пользователя, результаты запросов, любые ваши значенияДа, создаются нодой

Системные переменные

Эти переменные доступны всегда — их не нужно создавать. Бот заполняет их автоматически на основе данных Telegram и текущего диалога.

Данные пользователя

ПеременнаяЧто содержит
{user_id}ID пользователя в Telegram
{username}Юзернейм пользователя (без @)
{first_name}Имя пользователя
{last_name}Фамилия пользователя
{user_name}Отображаемое имя (имя или юзернейм)
{language_code}Код языка пользователя (ru, en)
{user_registered_at}Дата регистрации пользователя
{user_last_interaction}Последнее взаимодействие с ботом
{user_interaction_count}Сколько раз пользователь взаимодействовал с ботом

Данные чата и сообщения

ПеременнаяЧто содержит
{chat_id}ID чата
{bot_name}Имя бота
{message_id}ID последнего сообщения
{message_text}Текст последнего сообщения от пользователя
{callback_data}Данные последней нажатой инлайн-кнопки
{button_text}Текст последней нажатой инлайн-кнопки

Дата и время

ПеременнаяЧто содержит
{current_date}Текущая дата (формат ГГГГ-ММ-ДД)
{current_time}Текущее время (формат ЧЧ:ММ:СС)
{current_datetime}Текущие дата и время вместе

Пользовательские переменные

Это переменные, которые вы создаёте сами. Их создают разные ноды — в их настройках есть поле «Сохранить в переменную» или они сами кладут результат в переменную с указанным именем.

НодаЧто сохраняет в переменную
Set VariableЛюбое значение, которое вы зададите или вычислите
Сбор ввода (Input)Ответ, который пользователь прислал боту
HTTP-запросОтвет от внешнего сервиса (можно разобрать по частям)
Запрос к таблице (Bot Table)Данные из таблицы бота
SQL-запрос (PSQL)Результат запроса к базе данных
Конвертация файлаИнформацию о готовом файле
Получение токена ботаТокен управляемого бота
Юзербот-нодыРезультаты действий от имени аккаунта

Кроме того, бот сам создаёт некоторые переменные по ходу диалога:

  • при нажатии инлайн-кнопки — {callback_data} и {button_text};
  • при сборе медиа (фото, видео, аудио, документ) — дополнительные переменные с информацией о файле (см. ниже);
  • динамические кнопки клавиатуры могут собираться из значений переменных.

Переменные медиафайлов

Когда пользователь присылает медиа, бот может сохранить не только сам файл, но и его характеристики. Они хранятся в переменных с тем же именем и специальным окончанием:

ОкончаниеЧто содержит
_file_idИдентификатор файла в Telegram
_file_sizeРазмер файла
_durationДлительность (для видео и аудио)
_widthШирина (для фото и видео)
_heightВысота (для фото и видео)
_mime_typeТип файла
_thumbnailПревью файла
_file_nameИмя файла

Например, если медиа сохранено в переменную photo, то размер файла будет в {photo_file_size}.

Как подставлять переменные

Обычная подстановка

Пишите имя переменной в фигурных скобках — {имя}. Это работает в большинстве полей:

  • в текстах сообщений;
  • в адресах (URL) и в запросах к внешним сервисам;
  • в SQL-запросах;
  • в условиях;
  • в тексте и данных кнопок.

Пример текста сообщения:

Здравствуйте, {first_name}! Ваш ID: {user_id}.
Сегодня {current_date}.

Доступ к части данных (через точку)

Если в переменной лежит сложный ответ (например, результат запроса к сервису), можно достать из него нужную часть через точку:

{response.data.user.name}
{profile.balance}
{item.field}

Фильтры для списков

Если в переменной лежит список, его можно «склеить» в строку с помощью фильтра join:

{tags|join:", "} → значения через запятую
{tags|join:"\n"} → значения в столбик

Вычисления прямо в тексте

Можно не только подставлять значения, но и считать прямо в тексте — для этого есть inline-выражения вида {=...}. Внутри них переменные пишутся без скобок:

{=thousands(balance)} → 1000000 превратится в 1 000 000
{=price * count} → перемножит два значения

Доступны округление, модуль, минимум, максимум, разделение на разряды и арифметика. Подробнее — на странице Inline-выражения и в справочнике нод.

Способы вставки переменной

Вставить переменную можно двумя способами:

  1. Вручную — просто напечатать имя в фигурных скобках: {user_id}.
  2. Через селектор переменных — нажать кнопку рядом с полем и выбрать переменную из списка. Это удобно, когда вы не помните точное имя. Подробнее — на странице Селектор переменных.

Связанные страницы