ReplyKeyboardMarkup
ReplyKeyboardMarkup — это объект в API мессенджера Telegram, используемый ботами для отображения пользователю набора предопределённых кнопок в виде обычной клавиатуры (вместо стандартной текстовой строки ввода). Данный тип клавиатуры позволяет упростить взаимодействие с ботом, ограничивая варианты ответов и снижая вероятность ошибок ввода.
Описание и назначение
ReplyKeyboardMarkup относится к классу объектов «клавиатуры ответа» (Reply Markup). В отличие от InlineKeyboardMarkup, кнопки ReplyKeyboardMarkup прикрепляются непосредственно к полю ввода сообщения в чате, заменяя собой системную клавиатуру устройства. После нажатия на такую кнопку текст, указанный на ней, отправляется в чат как обычное сообщение. Это позволяет боту получать структурированные данные (например, команды, варианты выбора, ответы на вопросы) без необходимости распознавать произвольный текст.
Клавиатура автоматически скрывается после отправки сообщения, если в параметре one_time_keyboard установлено значение true. Если параметр resize_keyboard равен true, размер кнопок подстраивается под содержимое (например, короткие тексты отображаются компактнее). Параметр selective позволяет показывать клавиатуру только определённым пользователям в групповых чатах.
Структура объекта
Объект ReplyKeyboardMarkup в JSON-формате содержит следующие ключевые поля:
keyboard(обязательное) — массив массивов объектовKeyboardButton. Каждый внутренний массив представляет собой ряд кнопок. Количество кнопок в ряду может варьироваться.resize_keyboard(необязательное, булево) — еслиtrue, высота кнопок уменьшается до минимально необходимой. По умолчаниюfalse.one_time_keyboard(необязательное, булево) — еслиtrue, клавиатура скрывается после первого использования. По умолчаниюfalse.input_field_placeholder(необязательное, строка) — текст-заполнитель, отображаемый в поле ввода, пока клавиатура активна. Максимальная длина — 64 символа.selective(необязательное, булево) — еслиtrue, клавиатура отображается только для пользователей, упомянутых в сообщении (@username), или для отправителя, если сообщение является ответом.
KeyboardButton
Каждая кнопка представляет собой объект KeyboardButton с полями:
text(обязательное) — текст, отображаемый на кнопке (до 64 символов).request_contact(необязательное) — еслиtrue, при нажатии бот получает номер телефона пользователя (требует разрешения пользователя).request_location(необязательное) — еслиtrue, при нажатии бот получает географические координаты пользователя.request_poll(необязательное) — еслиtrue, при нажатии открывается интерфейс создания опроса (квиза).web_app(необязательное) — объект, открывающий Web App при нажатии кнопки.
Применение
ReplyKeyboardMarkup широко используется для реализации пошаговых сценариев, меню, анкет, игр и любых других интерактивных диалогов, где требуется жёсткая структура ввода. Типичные примеры:
- Меню выбора действий: бот предлагает кнопки «Начать игру», «Помощь», «Настройки».
- Анкетирование: после вопроса «Какой ваш любимый цвет?» бот показывает кнопки «Красный», «Синий», «Зелёный».
- Ввод персональных данных: кнопка «Поделиться номером телефона» с параметром
request_contact. - Геолокационные сервисы: кнопка «Отправить местоположение» с
request_location. - Ограничение ввода в группах: клавиатура с
selectiveпозволяет дать возможность ответа только конкретному пользователю.
Различия с InlineKeyboardMarkup
Основное отличие заключается в способе отображения и обработки нажатий:
- InlineKeyboardMarkup встраивается непосредственно в сообщение (под текстом), а ReplyKeyboardMarkup заменяет системную клавиатуру.
- InlineKeyboardMarkup не отправляет текст в чат — бот получает callback-данные (callback_data), что позволяет выполнять действия без видимого сообщения.
- InlineKeyboardMarkup может содержать ссылки (URL), а ReplyKeyboardMarkup — нет.
- ReplyKeyboardMarkup чаще используется в сценариях, где пользователь должен явно выбрать один из вариантов, а InlineKeyboardMarkup — для кнопок управления внутри сообщений (например, пагинация, голосование).
Ограничения и особенности
- Максимальное количество кнопок — 100 (10 рядов × 10 столбцов). На практике рекомендуется не превышать 4–6 кнопок в ряду для удобства.
- Текст кнопки не может быть пустым.
- Клавиатура не поддерживает эмодзи в качестве единственного содержимого (хотя эмодзи можно включить в текст).
- В групповых чатах клавиатура видна всем участникам, если не указан
selective. - Пользователь может вручную скрыть клавиатуру, нажав на соответствующую кнопку в интерфейсе Telegram.
- На мобильных устройствах занимает значительную часть экрана, что может быть неудобно при большом количестве кнопок.
Пример реализации (псевдокод)
При отправке сообщения через Bot API используется параметр reply_markup:
``json { "chat_id": 123456789, "text": "Выберите действие:", "reply_markup": { "keyboard": [ [{"text": "Начать игру"}, {"text": "Помощь"}], [{"text": "Настройки"}, {"text": "О боте"}] ], "resize_keyboard": true, "one_time_keyboard": true, "input_field_placeholder": "Нажмите кнопку" } } ``
После нажатия на кнопку «Начать игру» бот получит сообщение с текстом «Начать игру» и сможет обработать его соответствующим образом.
История
ReplyKeyboardMarkup был представлен в Bot API с момента его запуска (2015 год). С тех пор функциональность расширялась: добавлены параметры resize_keyboard, one_time_keyboard, selective, а также новые типы кнопок (request_contact, request_location, request_poll, web_app). Объект остаётся одним из базовых инструментов для создания пользовательских интерфейсов в Telegram-ботах.
Источники
- Официальная документация Telegram Bot API (раздел «ReplyKeyboardMarkup»)
- Руководство по разработке ботов на Python (библиотека python-telegram-bot)
- Статьи на Хабре и Medium по созданию Telegram-ботов
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →