Кнопки (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
| Поле | Тип | По умолчанию | Расположение |
|---|---|---|---|
hideAfterClick | boolean | false | data.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 не восстанавливает клавиатуру, снятую этим флагом.