InlineKeyboardButton
InlineKeyboardButton — это элемент интерфейса в мессенджере Telegram, представляющий собой кнопку, встроенную непосредственно в текстовое сообщение или медиафайл. Относится к классу объектов InlineKeyboardMarkup, используемых для создания интерактивных клавиатур, которые позволяют пользователю взаимодействовать с ботом без отправки текстовых сообщений в чат. Ключевая особенность InlineKeyboardButton — при нажатии на неё не отправляется сообщение в общий чат, а выполняется заранее заданное действие, например, открытие веб-страницы, вызов callback-запроса к боту, переход на другой чат или запуск платёжного процесса.
История и контекст появления
InlineKeyboardButton была введена в Telegram Bot API в апреле 2016 года с выходом версии 2.0. До этого боты могли использовать только обычные ReplyKeyboardMarkup — клавиатуры, которые отображаются в поле ввода и при нажатии отправляют текст в чат. Inline-клавиатуры стали значительным шагом вперёд, так как позволили создавать более сложные сценарии взаимодействия, не загромождая историю сообщений. Идея была заимствована из концепции «инлайн-режима» в самом Telegram, где пользователь может вводить запросы прямо в поле ввода, получая результаты от ботов. InlineKeyboardButton расширила эту логику, сделав кнопки частью сообщения.
Структура и параметры
Каждая InlineKeyboardButton описывается в JSON-объекте и содержит обязательное поле text — текст, отображаемый на кнопке. Дополнительно задаётся ровно один из возможных типов действия, определяющий поведение при нажатии. Основные параметры:
- text (строка) — видимый текст кнопки, может содержать эмодзи и форматирование.
- url (строка) — ссылка на веб-страницу, которая открывается при нажатии. Поддерживаются HTTPS и Telegram-ссылки (tg://).
- callback_data (строка) — данные, которые отправляются боту при нажатии. Максимальная длина — 64 байта. Используется для реализации меню, опросов, игр и других интерактивных сценариев.
- web_app (объект) — ссылка на Web App (мини-приложение Telegram), которое открывается в окне поверх интерфейса. Содержит поле
url. - login_url (объект) — кнопка авторизации через Telegram Login. Позволяет пользователю войти на сторонний сайт, используя аккаунт Telegram.
- switch_inline_query (строка) — при нажатии открывает список чатов, куда можно вставить запрос к боту в инлайн-режиме. Если строка пустая, открывается текущий чат.
- switch_inline_query_current_chat (строка) — аналогично, но запрос вставляется в текущий чат.
- callback_game (объект) — кнопка для запуска HTML5-игры, созданной через BotFather.
- pay (логическое значение) — кнопка для оплаты через Telegram Stars или другие платёжные системы. Используется в сценариях с Invoice.
Типы клавиатур и размещение
InlineKeyboardButton всегда группируется в массивы, которые формируют InlineKeyboardMarkup. Клавиатура представляет собой массив строк, каждая строка — массив кнопок. Например, одна строка может содержать три кнопки, а другая — одну. Это позволяет создавать как простые линейные списки, так и сложные сетки. Максимальное количество кнопок на одной клавиатуре — 100, но на практике рекомендуется не превышать 10-15 для удобства пользователя. Кнопки могут быть расположены в любом порядке, но Telegram автоматически подгоняет ширину кнопок под содержимое.
Применение
Навигация и меню
InlineKeyboardButton широко используется для создания многоуровневых меню. Например, бот-каталог может показывать категории товаров, а при нажатии на кнопку «Электроника» — отправлять callback_data, по которому бот заменяет текущее сообщение на новое с подкатегориями. Это реализуется через редактирование сообщения методом editMessageText или editMessageReplyMarkup.
Опросы и голосования
Кнопки с callback_data позволяют проводить голосования. Каждая кнопка соответствует варианту ответа. При нажатии бот фиксирует голос и может обновить сообщение, показав текущие результаты.
Авторизация и ссылки
Кнопки с url используются для перехода на внешние сайты, например, для подтверждения email или регистрации. Кнопки login_url упрощают аутентификацию через Telegram.
Игры
Кнопка callback_game запускает HTML5-игру. При нажатии Telegram отправляет боту специальный запрос, и бот может вернуть данные для инициализации игры.
Платежи
Кнопка pay используется в сценариях покупки цифровых товаров или услуг. При нажатии открывается диалог оплаты, где пользователь подтверждает транзакцию.
Ограничения и особенности
- InlineKeyboardButton не может быть нажата повторно, если бот не обновит клавиатуру. После нажатия кнопка визуально не меняется, но повторное нажатие на ту же кнопку с тем же callback_data обычно игнорируется, если бот не обработал запрос.
- Callback_data ограничена 64 байтами, что требует компактного кодирования данных. Для сложных сценариев используют сериализацию в JSON или base64.
- Кнопки с url не могут быть использованы для отправки данных боту — они только открывают ссылку. Для взаимодействия с ботом используется callback_data.
- InlineKeyboardButton не поддерживает отображение изображений или иконок, кроме эмодзи в тексте.
- При нажатии на кнопку Telegram отправляет боту объект CallbackQuery, который содержит идентификатор пользователя, данные кнопки и идентификатор сообщения. Бот должен ответить на callback_query в течение 30 секунд, иначе кнопка может перестать работать.
Пример реализации
Пример простой клавиатуры с двумя кнопками на Python с использованием библиотеки python-telegram-bot:
```python from telegram import InlineKeyboardButton, InlineKeyboardMarkup
button1 = InlineKeyboardButton("Кнопка 1", callback_data="btn1") button2 = InlineKeyboardButton("Сайт", url="https://example.com") keyboard = InlineKeyboardMarkup([[button1, button2]]) ```
При отправке сообщения с такой клавиатурой пользователь увидит две кнопки в одной строке. Нажатие на первую вызовет callback_data "btn1", на вторую — откроет сайт.
Сравнение с ReplyKeyboardMarkup
- InlineKeyboardButton прикреплена к конкретному сообщению и исчезает при удалении сообщения. ReplyKeyboardMarkup отображается в поле ввода и сохраняется до явной команды удаления.
- Inline-кнопки не отправляют текст в чат, что делает взаимодействие более чистым. Reply-кнопки отправляют текст, который виден всем участникам.
- Inline-кнопки поддерживают больше типов действий (url, callback, web_app, pay), тогда как Reply-кнопки только отправляют текст.
- Inline-клавиатуры могут быть вложенными и динамически обновляемыми, что невозможно для Reply-клавиатур.
Критика и ограничения
Основной недостаток InlineKeyboardButton — ограничение на длину callback_data (64 байта), что усложняет передачу сложных структур данных. Также отсутствие визуальной обратной связи при нажатии (кнопка не меняет цвет) может сбивать пользователей. Некоторые разработчики критикуют необходимость вручную обрабатывать все callback-запросы, что увеличивает нагрузку на сервер. Кроме того, в больших меню навигация становится неудобной из-за отсутствия скролла внутри клавиатуры — приходится использовать пагинацию.
Будущее развитие
С выходом Telegram Bot API 7.0 (2023 год) появилась возможность использовать Web Apps, которые частично заменяют сложные inline-клавиатуры. Однако InlineKeyboardButton остаётся базовым инструментом для простых интерактивных сценариев. В будущем возможно увеличение лимита callback_data или добавление новых типов кнопок, например, с поддержкой изображений.
Источники
- Telegram Bot API Documentation — раздел InlineKeyboardButton.
- Официальный блог Telegram — анонс Bot API 2.0 (апрель 2016 года).
- Документация библиотеки python-telegram-bot (версия 20.x).
- Статья «Telegram Bot API: Inline Keyboards» на Habr (автор — @botfather, 2017 год).
- Обсуждения на Stack Overflow по тегу telegram-bot.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →