Переменные и данные
Переменные — это «ячейки памяти» бота. В них хранятся данные о пользователе и о ходе диалога: имя, ответы на вопросы, результаты запросов к внешним сервисам, любые промежуточные значения. Бот запоминает эти данные и подставляет их туда, где они нужны: в текст сообщения, в адрес запроса, в условие или в кнопку.
Чтобы вставить значение переменной, её имя пишут в фигурных скобках — {имя}. Когда бот отправляет сообщение пользователю, он заменяет {имя} на реальное значение. Например, текст Привет, {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-выражения и в справочнике нод.
Способы вставки переменной
Вставить переменную можно двумя способами:
- Вручную — просто напечатать имя в фигурных скобках:
{user_id}. - Через селектор переменных — нажать кнопку рядом с полем и выбрать переменную из списка. Это удобно, когда вы не помните точное имя. Подробнее — на странице Селектор переменных.
Связанные страницы
- Селектор переменных — как быстро вставлять переменные через интерфейс
- Inline-выражения — вычисления прямо в тексте
- Справочник нод — какие ноды создают переменные
- Условие (condition) — проверка переменных и ветвление