Открыть сервис

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 →