Кнопки

Типы кнопок

В конструкторе есть два принципиально разных типа кнопок:

  • Инлайн-кнопки — прикрепляются к конкретному сообщению и остаются на экране.
  • Кнопки клавиатуры (Reply) — появляются в нижней части экрана под полем ввода, как панель быстрых ответов.

Оба типа добавляются как опция к блокам Текст, Изображение, Видео, Аудио, Документ.

Инлайн-кнопки

Инлайн-кнопки располагаются непосредственно под текстом сообщения. Нажатие на кнопку переводит пользователя в другую ноду или выполняет действие.

Действие кнопки

Тип действия Описание
Перейти к ноде Переводит пользователя к указанной ноде сценария
Перейти к команде Переход по текстовому значению команды (например, /menu)
URL Открывает внешнюю ссылку
Выбор значения (Options) Устанавливает значение переменной без перехода к ноде
Удалить текущее сообщение Удаляет сообщение с кнопкой при нажатии, не переходя в другую ноду
💳 Ссылка на оплату Генерирует ссылку на оплату через внешний платёжный провайдер (Tinkoff, YooKassa, Stripe и др.)
🔄 Подписка (рекуррент) Оформляет подписку с автоматическим продлением через рекуррентные платежи
❌ Отменить подписку Отменяет активную подписку пользователя
Редактировать через ввод (ForceReply) Запрашивает у пользователя новое значение через ForceReply и сохраняет его в user_config или записи пользователя

Расположение кнопок

Кнопки можно располагать в ряд (несколько кнопок на одной строке) или в столбец (каждая на своей строке). Используйте для этого стрелки справа от кнопок, чтобы изменить порядок или перенести на другую строку.

Настройки инлайн-клавиатуры

Опция Описание
Удалять сообщение после выбора Сообщение с кнопками будет полностью удалено из чата сразу после нажатия на любую кнопку
Удалять кнопки после выбора Кнопки убираются из сообщения после нажатия, само сообщение остаётся в чате

«Удалять сообщение» и «Удалять кнопки» взаимоисключающие — приоритет у «Удалять сообщение». Обе опции несовместимы с «Обновить сообщение после выбора».

Кнопки клавиатуры (Reply)

Кнопки клавиатуры появляются у пользователя под полем ввода и работают как текстовые сообщения: нажатие отправляет боту текст кнопки, и бот реагирует, как на команду.

Используйте Reply-кнопки для навигации по меню, когда удобен «постоянный» список действий.

Настройки Reply-клавиатуры

Опция Описание
Выводить один раз Telegram автоматически скрывает клавиатуру после того, как пользователь нажал любую кнопку
Удалять клавиатуру После нажатия кнопки бот отправит следующее сообщение с флагом remove_keyboard: true, что окончательно убирает клавиатуру у пользователя. Если в следующей команде задана своя новая Reply-клавиатура, она заменит старую без удаления
Оптимизировать размер Делает кнопки более компактными

«Выводить один раз» и «Удалять клавиатуру» взаимоисключающие — включить можно только одну из них.

Кнопка «Выбор значения» (Options)

Позволяет предложить пользователю выбор из нескольких вариантов, не создавая отдельных нод для каждого варианта. При нажатии кнопки в переменную записывается заданное значение, а бот остаётся в той же ноде.

Пример: кнопки «Мужской», «Женский», «Не указывать» — каждая записывает своё значение в переменную gender. После ответа бот продолжает сценарий.

Динамические кнопки

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

Настройка динамических кнопок

Поле Описание
Переменная-массив Имя переменной, содержащей список элементов
Шаблон текста кнопки Как называть каждую кнопку, например {{item.name}}
Сохранить выбор в переменную (опционально) Записывает в переменную весь объект выбранного элемента списка
Целевая нода Куда переходить при нажатии
Удалять сообщение после выбора Сообщение с кнопками будет удалено из чата после нажатия
Удалять кнопки после выбора Кнопки убираются из сообщения после нажатия, само сообщение остаётся

После нажатия пользователем одной из кнопок в указанную переменную записывается payload соответствующего элемента, и бот переходит к целевой ноде.

Меню команд бота

Кроме кнопок внутри сообщений, у бота есть глобальное меню команд — список, который открывается при нажатии «/» в поле ввода или кнопки «Меню» рядом с полем ввода.

Команды настраиваются автоматически при публикации: все ноды с непустым полем «Команда» попадают в это меню.

Советы

  • Не перегружайте сообщение кнопками — 3–5 вариантов на экране достаточно для комфортного выбора.
  • Используйте динамические кнопки для списков, которые меняются в зависимости от данных пользователя.
  • Инлайн-кнопки предпочтительнее Reply-кнопок для многошаговых сценариев — они не занимают клавиатуру.

Выделение активной кнопки (Highlight)

Позволяет визуально отметить «активный» вариант среди нескольких кнопок символом (✅, ✔️, ☑️). Если условие выполнено — символ добавляется в начало текста кнопки.

Настройка: включите «Выделение кнопки» в инспекторе кнопки → укажите переменную, оператор сравнения и значение. Выберите символ.

Пример: кнопки «Светлая», «Тёмная» с {{user_config.theme}} = light / dark. При нажатии кнопки и сохранении темы в user_config клавиатура обновляется и активная тема отмечается ✅.

Выделение для динамических кнопок

В режиме динамических кнопок есть отдельная настройка «Выделение активной кнопки»: одно условие применяется ко всем кнопкам списка. В условии можно использовать {{item.поле}} для обращения к данным текущего элемента.

Пример: {{item.id}} = {{user_config.selected_id}} — помечает выбранный пользователем элемент.

Условный вывод кнопки

Позволяет показывать или скрывать кнопку в зависимости от значения переменной. Если хотя бы одно условие не выполнено (при логике «И») или ни одно не выполнено (при логике «ИЛИ»), кнопка не отрисовывается в клавиатуре.

Настройка: в инспекторе кнопки откройте раздел «Условный вывод» → добавьте одно или несколько правил → для каждого укажите переменную, оператор и значение → выберите логику объединения (И / ИЛИ).

Поддерживаемые операторы:

Оператор Описание
Равно / Не равно Точное совпадение строк (без учёта регистра)
Содержит / Не содержит Подстрока в значении переменной
Больше (>) / Меньше (<) Числовое сравнение
>= / <= Числовое сравнение с равенством
Длина строки (>) Количество символов в значении переменной больше указанного числа
Длина строки (<) Количество символов в значении переменной меньше указанного числа
Существует / Не существует Переменная определена (резолвится) или нет

Пример с длиной строки: показать кнопку «Сократить» только если {{user_input}} длиннее 100 символов — оператор «Длина строки (>)», значение 100. Если переменная пустая или не существует, длина считается равной 0.

Цвет кнопок (динамическая раскладка)

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

Значение Цвет кнопки
primary Синий (основной)
success Зелёный
danger Красный
secondary Серый

Пример: в поле «Цвет кнопок» укажите {{item.color}}, а в данных каждого элемента массива задайте поле color со значением danger, success, primary или secondary.

Если поле отсутствует или его значение не является одним из допустимых — кнопка отображается без цветовой метки.

Передача переменных при переходе (Pass Variables)

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

Настройка: включите «Передавать переменные» → добавьте пары ключ/значение. Значение поддерживает плейсхолдеры {{переменная}}.

Пример применения: несколько кнопок ведут в одну и ту же ноду-обработчик, но каждая передаёт свой код действия ({{action}} = buy / sell / info).

Пример с подсценарием: кнопка «Купить товар» передаёт {{product_id}} при входе в подсценарий оплаты, а кнопка возврата передаёт {{payment_status}} обратно в основной сценарий.

Обновление исходного сообщения (Auto-refresh)

Настройка на уровне ноды (раздел «Действия» → «Обновить исходное сообщение»). Если включено, после выполнения команды бот автоматически обновляет клавиатуру того сообщения, из которого был совершён переход.

Это позволяет реализовать «радио-кнопки» без повторной отправки сообщения: нажал кнопку — галочка переехала, сообщение не менялось.

Примечание: несовместимо с «Удалять предыдущее сообщение» и «Следующий шаг».

Редактирование через ввод (ForceReply)

Тип действия кнопки, позволяющий запросить у пользователя новое текстовое значение и сохранить его в профиль или записи.

Настройка кнопки:

Поле Описание
Текст запроса Сообщение бота, запрашивающее ввод
Подсказка в поле ввода Плейсхолдер в поле ввода Telegram (поддерживает {{user_config.ключ}})
Ключ для сохранения Имя ключа в user_config или name в user_logs
Источник данных user_config (конфиг) или user_logs (записи)
Команда для обновления Нода, клавиатура которой обновится после сохранения. Если не указана — обновляется исходная нода

После ввода пользователем значения бот удаляет оба сообщения (запрос + ответ) и обновляет клавиатуру исходной ноды.

Дополнительные кнопки в динамической раскладке

Кнопки, добавляемые под сгенерированным динамическим списком (например, «Назад», «Обновить»). Они теперь являются полноценными инлайн-кнопками:

  • Поддерживают все типы действий (переход, URL, удаление сообщения, ForceReply, и др.)
  • Могут располагаться в несколько рядов и несколько кнопок в ряду
  • Поддерживают выделение (Highlight)

Кнопка «Подписка» (рекуррентные платежи)

Доступно на платных тарифах.

Позволяет оформить подписку с автоматическим периодическим списанием через рекуррентные платежи. Пользователь один раз привязывает карту, а дальнейшее списание происходит автоматически.

Настройка

Нажмите кнопку в редакторе → выберите действие Подписка (рекуррент) → нажмите Настроить подписку.

Основные параметры:

Поле Описание
Провайдер Внешний платёжный провайдер с поддержкой рекуррента (управляется в настройках Оплата)
Сумма Сумма периодического списания. Поддерживает переменные: {{order_sum}}
Валюта RUB, USD, EUR, KZT, UAH
Период (дней) Интервал списания: 1 = ежедневно, 7 = еженедельно, 30 = ежемесячно
Макс. попыток списания Сколько раз повторить попытку при неудаче (1–5). Доступно только для провайдеров с пассивным списанием (T-Bank)
Описание платежа Текст в платёжной форме. Поддерживает переменные
Доп. параметры Произвольные пары ключ/значение, передаются в провайдер и доступны в переменных {{sub.payload.ключ}}

События жизненного цикла подписки

Каждое событие запускает указанную ноду и передаёт в неё переменные подписки.

Событие Описание
Первый платёж прошёл Первая оплата подтверждена, подписка активирована
Первый платёж не прошёл Первая оплата отклонена
Успешное продление Автосписание за следующий период прошло успешно
Подписка отменена Пользователь отменил подписку
Ошибка продления (лимит попыток) Автосписание не удалось и исчерпан лимит попыток

Переменные подписки

По умолчанию переменные доступны с префиксами payment.* (первый платёж) и sub.* (данные подписки). Префиксы можно изменить в настройках кнопки.

Переменные первого платежа (payment.*):

Переменная Значение
{{payment.amount}} Сумма первого платежа
{{payment.currency}} Валюта
{{payment.status}} Статус платежа

Переменные подписки (sub.*):

Переменная Значение
{{sub.id}} ID подписки
{{sub.status}} pending / active / past_due / failed / cancelled
{{sub.amount}} Сумма периодического списания
{{sub.currency}} Валюта
{{sub.period_days}} Период в днях
{{sub.card_mask}} Маска карты (4242****4242)
{{sub.card_type}} Тип карты (VISA, Mastercard...)
{{sub.charge_attempts}} Кол-во неудачных попыток
{{sub.max_attempts}} Макс. кол-во попыток
{{sub.next_charge_at}} Дата следующего списания
{{sub.last_charged_at}} Дата последнего списания
{{sub.payload.ключ}} Доп. параметр из блока Доп. параметры

Отмена подписки

Используйте кнопку с действием Отменить подписку и укажите ID подписки (например, {{sub.id}}). После отмены сработает нода «Подписка отменена», если она настроена.

Пример сценария

  1. Бот отправляет сообщение «Подписка Pro — 299 ₽/мес.» с кнопкой Подписаться.
  2. Пользователь нажимает кнопку → переходит на страницу оплаты провайдера и привязывает карту.
  3. Срабатывает нода «Первый платёж прошёл»: бот отправляет сообщение «Доступ открыт!» с переменными {{sub.card_mask}}, {{sub.next_charge_at}}.
  4. Каждые 30 дней система списывает оплату автоматически → срабатывает нода «Успешное продление».
  5. Если карта заблокирована — система повторяет попытку через 24 часа. После исчерпания лимита — нода «Ошибка продления».

Требования

  • Функция доступна только на платных тарифах.
  • Провайдер должен быть подключён в разделе «Платежки → Внешние провайдеры» с включённым флагом «Подписки».

Дополнительные кнопки в динамической разкладке

Кнопки, добавляемые под сгенерированным динамическим списком (например, «Назад», «Обновить»). Они теперь являются полноценными инлайн-кнопками:

  • Поддерживают все типы действий (переход, URL, удаление сообщения, ForceReply, и др.)
  • Могут располагаться в несколько рядов и несколько кнопок в ряду
  • Поддерживают выделение (Highlight)