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

Кнопки (Button)

Кнопки задаются в data.buttons[] узла. Тип клавиатуры задаётся в data.keyboardType:

  • "none" — без клавиатуры
  • "reply" — reply-клавиатура (под полем ввода)
  • "inline" — inline-кнопки (под сообщением)

Дополнительное поле "shuffleButtons": true — перемешивает порядок inline-кнопок при каждом показе (для мини-игр, капч, квизов).

{
"id": "btn_1",
"text": "Нажми меня",
"action": "goto",
"target": "node_id",
"buttonType": "normal",
"style": "primary",
"hideAfterClick": false,
"skipDataCollection": false
}

Флаг hideAfterClick​

ПолеТипПо умолчаниюРасположение
hideAfterClickbooleanfalsedata.buttons[i].hideAfterClick

Это поддерживаемое поле схемы кнопки (buttonSchema), а не неизвестное расширение JSON. Не размещай его непосредственно в data или рядом с type ноды.

При true у inline-кнопки с переходом снимается вся клавиатура исходного сообщения; текст сообщения сохраняется. Скрытие выполняется общим callback-обработчиком до запуска целевой ноды, независимо от её типа и включения БД. Цепочка продолжает работу и при ошибке снятия клавиатуры. При false общий обработчик клавиатуру не скрывает; последующие действия сценария могут изменить её явно.

Пример применения: кнопка «2 часа» с hideAfterClick: true → set_variable записывает period = "2 часа" → сообщение «Вы выбрали: {period}». Дополнительная нода для удаления меню не нужна. Полный JSON-пример: Keyboard-нода.

У кнопок url, web_app, copy_text и pay нет callback-нажатия, необходимого для этого поведения. Эти правила относятся к inline-клавиатуре. Флаг не является защитой от повторного выполнения: несколько быстрых нажатий могут попасть в обработку до снятия кнопок.

После обновления генератора существующие боты нужно заново сгенерировать и перезапустить. edit_message в режиме keep не восстанавливает клавиатуру, снятую этим флагом.