Skip to main content

Inline-клавиатура

Кнопки внутри сообщения. При нажатии — отправляют callback или открывают URL/Mini App.

Пример

{
"chat_id": 12345,
"text": "Выберите вариант",
"reply_markup": {
"inline_keyboard": [
[
{"text": "✅ Да", "callback_data": "yes"},
{"text": "❌ Нет", "callback_data": "no"}
],
[
{"text": "🌐 Сайт", "url": "https://telefon.chat"}
]
]
}
}

Типы кнопок

ТипЧто делает
callback_dataШлёт боту callback_query с этой строкой (до 64 байт)
urlОткрывает ссылку
web_appОткрывает Mini App: {url: 'https://...'}
switch_inline_queryПереключает в inline-режим в новом чате
switch_inline_query_current_chatТо же, но в текущем чате
copy_textКопирует текст в буфер: {text: '...'}

Обработка callback

Юзер нажал кнопку → бот получает обновление:

{
"update_id": 123,
"callback_query": {
"id": "cb-id",
"from": {"id": 999, "first_name": "Иван"},
"message": {"message_id": 42, "chat": {"id": 12345}},
"data": "yes"
}
}

Обязательно ответьте через answerCallbackQuery (иначе у юзера крутится индикатор):

{
"callback_query_id": "cb-id",
"text": "Готово!",
"show_alert": false
}

show_alert: true — модальное окно с OK. false — короткий toast в верхней панели.

Динамическое обновление кнопок

Меняйте кнопки на ходу через editMessageReplyMarkup:

{
"chat_id": 12345,
"message_id": 42,
"reply_markup": {
"inline_keyboard": [[{"text": "Готово ✓", "callback_data": "done"}]]
}
}

Совет: callback_data

64 байта — мало. Не пихайте туда JSON. Используйте короткие коды (a:1, b:42) и храните полный контекст в БД на стороне бота.