Кнопки в Телеграм-ботах
Отправляя сообщение, бот может либо добавить к нему инлайн-кнопки (это кнопки под сообщением), либо показать клавиатурные кнопки (это кнопки вместо ввода сообщения).
Эти два вида кнопок работают по-разному.
Инлайн-кнопки
Инлайн-кнопки, они же inline keyboards или inline buttons, — это кнопки под сообщением.
Callback button
Просто кнопка, которая сама по себе ничего не делает.
Когда пользователь нажимает на такую кнопку, боту приходит апдейт. После этого бот может что-нибудь сделать: например, изменить сообщение.
После нажатия на кнопку бот может показать notification или alert.
Когда приходит апдейт, различать такие кнопки можно по специальному параметру, который указывается при создании кнопок.
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 кнопок.
Если вы ставите несколько кнопок в одном ряду, убедитесь, что их надписи видны в мобильных приложениях Телеграма. Слишком длинный текст на кнопках обрезается.