Кнопки в Телеграм-ботах
Отправляя сообщение, бот может показать кнопки одного из двух типов: инлайн-кнопки появляются под сообщением, а клавиатурные кнопки показываются рядом с полем ввода.
Оба вида кнопок могут отображаться в несколько рядов с несколькими кнопками в каждом ряду. Подробнее о расположении кнопок можно прочитать в конце этой страницы.
Эти два вида кнопок работают по-разному.
Инлайн-кнопки
Инлайн-кнопки, они же inline keyboards или inline buttons, — это кнопки под сообщением.
Callback button
Просто кнопка, которая сама по себе ничего не делает.
Когда пользователь нажимает на такую кнопку, боту приходит апдейт. После этого бот может сделать что угодно.
После нажатия бот может показать notification или alert. Чтобы пользователь заметил, что нажатие обработано, боту обычно стоит отредактировать сообщение или как-то ещё заметно отреагировать. Пока этого фидбека нет, на кнопке крутится анимация загрузки.
Когда приходит апдейт, отличить одну callback-кнопку от другой можно по специальному параметру, который вы указываете при создании кнопки.
URL button
Кнопка, которая работает как ссылка.
В Bot API эту кнопку можно использовать как упоминание пользователя, указав ссылку вида tg://user?id=123456789. В Telegram API для упоминания есть отдельный вид кнопок.

Switch-to-inline button
Кнопка для переключения в инлайн-режим. Можно создать кнопку, запускающую инлайн в том же чате или открывающую меню для выбора чата. Также при создании кнопки можно указать текстовый запрос, который появится рядом с юзернеймом бота (но пользователь сможет его отредактировать).
Request peer button
Когда пользователь нажимает на эту кнопку, у него открывается меню выбора чатов. Пользователь выбирает, о каком из чатов отправить информацию боту.
Создавая такую кнопку, вы можете гибко настроить, какие именно чаты увидит пользователь в списке: например, только каналы с юзернеймом или только группы, где он админ.
Другие инлайн-кнопки
Остальные виды кнопок связаны с более редкими фичами ботов:
- Callback game button — кнопка для открытия HTML-игры.
- Pay button — кнопка для платежей.
- Web view button — кнопка для открытия веб-интерфейса в боте.
- Login URL button — специальная кнопка для авторизации пользователей на сайте. Использовалась, например, в официальном боте @discussbot до появления в Telegram нативных комментариев. Работает примерно так же, как и Telegram Login Widget, но пользователю не нужно вводить номер телефона и подтверждать вход; достаточно нажать на кнопку.
Клавиатурные кнопки
Второй тип кнопок — это keyboard buttons. Они отображаются у пользователя под полем ввода сообщения как подсказки (в веб-версиях раскрываются по кнопке ⌘). Нажав на такую кнопку, пользователь отправит её текст.
В мобильных приложениях такие кнопки заменяют собой клавиатуру; но пользователь всегда может свернуть кнопки и увидеть клавиатуру снова.
Клавиатурная кнопка может не просто отправить текст, но также:
- запросить номер телефона пользователя,
- запросить геолокацию пользователя
- или открыть у пользователя меню создания опроса.
Есть опция resize_keyboard, которая определяет, должна ли эта клавиатура подстраиваться по высоте. Почему-то по умолчанию она выключена, из-за чего кнопки выглядят растянутыми:

Чтобы показать клавиатурные кнопки, бот должен отправить сообщение. Можно показать клавиатуру, которая свернётся (но не пропадёт) после нажатия на кнопку.
По умолчанию в группе клавиатурные кнопки видны всем участникам. Но вместо этого можно показать их только упомянутым пользователям, то есть:
- пользователям, юзернеймы которых были в тексте сообщения,
- и, если это ответ на другое сообщение, пользователю, который его отправил.
Ряды кнопок
И инлайн-кнопки, и клавиатурные кнопки могут составлять несколько рядов, в каждом из которых находится по несколько кнопок.
В ряду может быть до 8 кнопок, а всего, отправляя сообщение, можно показать до 100 кнопок.
Если вы ставите несколько кнопок в одном ряду, убедитесь, что их надписи видны в мобильных приложениях Телеграма. Слишком длинный текст на кнопках обрезается.
