很多人在搜「telegram文本按钮怎么做」,其实是想给自己的 TG 机器人加上一排可点击的文字按钮。结论先行:文本按钮主要分两种——回复键盘和内联键盘。前者替换手机输入法区域,后者附着在消息下方。两者都通过 Bot API 的键盘字段实现,不需要复杂前端,只要会发 HTTP 请求或使用现成库即可。
先分清两种文本按钮
在动手之前,先明确你要的是哪一种,避免做完才发现交互方式不对。
| 类型 | 出现位置 | 点击后行为 | 适用场景 |
|---|---|---|---|
| 回复键盘(ReplyKeyboardMarkup) | 输入框上方,替代系统键盘 | 发送按钮上的文字作为普通消息 | 引导用户快捷输入、菜单式对话 |
| 内联键盘(InlineKeyboardMarkup) | 消息气泡下方 | 触发回调或打开链接,不发送文字 | 消息内操作、翻页、确认按钮 |
简单记:想让用户「发一句话」用回复键盘;想让用户「点一下执行动作」用内联键盘。下面分别给出创建步骤。
方法一:创建回复键盘文本按钮
回复键盘的本质是在调用 sendMessage 时附加一个 reply_markup 对象。以下步骤以直接调用 Bot API 为例,使用任意支持 HTTP 请求的工具即可。
- 获取机器人 token:在 TG 中找 @BotFather 创建机器人,拿到 token。
- 构造请求体,关键字段如下:
- chat_id:目标会话 ID。
- text:消息正文。
- reply_markup:包含 keyboard 数组,每个子数组代表一行按钮。
- 发送 POST 请求到 https://api.telegram.org/bot<token>/sendMessage,Content-Type 为 application/json。
- 在聊天中看到按钮后,点击任意按钮,机器人会收到一条内容为按钮文字的新消息,你可在后续逻辑中按文字分支处理。
示例 JSON 结构(仅示意字段,不包含真实 token):
{
"chat_id": 123456,
"text": "请选择操作",
"reply_markup": {
"keyboard": [[{"text": "查询余额"}, {"text": "联系客服"}]],
"resize_keyboard": true,
"one_time_keyboard": true
}
}
其中 resize_keyboard 让按钮适应屏幕宽度,one_time_keyboard 让键盘在用户选择后自动收起,适合一次性菜单。
方法二:创建内联键盘文本按钮
内联键盘的按钮不会发送文字,而是回传 callback_data 或打开 URL。步骤与上面类似,区别在 reply_markup 的结构。
- 同样调用 sendMessage,但 reply_markup 使用 inline_keyboard 字段。
- 每个按钮对象可包含 text 和 callback_data(或 url)。callback_data 长度有限制,建议用短标识。
- 用户点击后,机器人会收到 callback_query 更新,你需要在代码中应答(answerCallbackQuery),否则客户端可能一直转圈。
- 应答时可附带提示文字,也可编辑原消息,实现「点击后按钮变化」的效果。
示例结构:
{
"chat_id": 123456,
"text": "请确认操作",
"reply_markup": {
"inline_keyboard": [[
{"text": "确认", "callback_data": "confirm"},
{"text": "取消", "callback_data": "cancel"}
]]
}
}
如果你使用 Python 的 python-telegram-bot 或 Node 的 telegraf 等库,写法会更简洁,但底层字段与上面一致。
注意事项与常见坑
- 按钮文字不是命令:回复键盘点击后发送的是纯文本,不会自动带斜杠,别指望它触发 /start 这类命令。
- callback_data 有长度限制:通常不超过 64 字节,超长会报错,复杂数据建议存服务端用短 ID 映射。
- 必须应答回调:内联键盘点击后若不应答,用户端会显示加载状态,体验很差。
- 键盘不会自动消失:回复键盘需要用户手动收起,或发送 ReplyKeyboardRemove 移除。
- 隐私与权限:机器人只能收到用户主动发送的消息,按钮设计要符合平台规则,不要诱导分享或收集敏感信息。
常见问题
Q1:为什么我发的按钮不显示?
先检查 reply_markup 是否拼写正确、JSON 是否合法、是否放在 sendMessage 的请求体中。另外,部分客户端对键盘渲染有差异,建议在手机和桌面端各测一次。
Q2:文本按钮能跳转链接吗?
回复键盘的按钮只能发送文字;要跳转链接请用内联键盘的 url 按钮,或使用文字消息中的链接预览。
Q3:点击内联按钮后如何修改按钮文字?
在 callback_query 处理中调用 editMessageReplyMarkup 或 editMessageText,重新下发键盘结构即可,不需要删除原消息。
Q4:一个键盘最多放多少按钮?
官方未给出固定上限,但按钮过多会影响体验,建议每行不超过 3 个、总行数控制在合理范围,避免刷屏。
掌握以上两种键盘,你就能在 TG 机器人里做出清晰的文本按钮交互。建议先从回复键盘练手,熟悉请求结构后再尝试内联键盘的回调逻辑。