Wiki
猫Inline Keyboards and Payloads RU
English version: Inline-Keyboards-and-Payloads
Это краткая русскоязычная версия страницы про inline-клавиатуры и данные callback. Полная и наиболее актуальная страница: Inline-Keyboards-and-Payloads.
Главное сначала
InlineKeyboardстроит inline-клавиатуру ряд за рядом;- callback-кнопка хранит
CallbackDataс именем команды и аргументами; - данные callback могут кодироваться как JSON или Base64;
- у бота есть тип данных callback по умолчанию;
- конкретная клавиатура может переопределить его локально.
Как строить клавиатуру
Основные конструкторы:
NewInlineKeyboardJSON(maxRow)NewInlineKeyboardBase64(maxRow)NewInlineKeyboard(payloadType, maxRow)
Пример:
kb := laniakea.NewInlineKeyboardJSON(2).
AddCallbackButton("Open", "open", 42).
AddCallbackButton("Delete", "delete", 42).
AddURLButton("Docs", "https://example.com/docs")
maxRow определяет, сколько кнопок автоматически помещается в один ряд.
Что такое данные callback
Данные callback логически содержат:
- имя команды;
- список строковых аргументов.
Ты обычно не собираешь JSON вручную. Вместо этого используешь:
AddCallbackButton(...)AddCallbackButtonStyle(...)NewCallbackData(...)
Все аргументы через fmt.Sprint превращаются в строки, поэтому в обработчике ты читаешь их через ctx.Args.
ctx.Args, а не ctx.Payload
В текущем API нет отдельного ctx.Payload.
В обработчике данных callback разобранные аргументы доступны через:
ctx.Args
А выбор обработчика происходит по имени callback-команды.
JSON vs Base64
BotPayloadJSON:
- удобнее читать в логах и тестах;
- проще отлаживать.
BotPayloadBase64:
- более компактная транспортная форма;
- выглядит более “непрозрачно” в callback data.
Логическая структура данных callback при этом одна и та же.
Строгое и терпимое декодирование
По умолчанию бот работает в терпимом режиме:
- если основной декодер не сработал, может попробовать второй формат.
Строгий режим отключает этот запасной вариант:
bot.SetStrictPayloadType(true)
или через BotOpts.
Это полезно, если расхождение формата данных callback нужно считать настоящей ошибкой.
Локальное переопределение для клавиатуры
Даже если у бота есть тип данных callback по умолчанию, клавиатуру можно переопределить локально:
kb := ctx.NewInlineKeyboard(2).
SetPayloadType(laniakea.BotPayloadJSON)
Это удобно для сценариев миграции или отладки.
KeyboardLong(...)
Если текст длинный, используй KeyboardLong(...).
Клавиатура прикрепляется только к последней части, чтобы не дублировать кнопки на каждом фрагменте.
Что читать дальше
Navigation
Start here
Runtime and Architecture
- Bot-Lifecycle
- Webhook-Runtime
- Middleware
- Runners
- Error-Handling
- Logging
- Update-Routing-Model
- Policies
- Scenes
Interaction and Telegram API
- Inline-Keyboards-and-Payloads
- Auto-Generated-Commands
- Drafts
- Rich-Messages
- Localization
- Rate-Limiting
- tgapi-Overview