很多人在搜「telegram文本按钮怎么做」,其实是想给自己的 TG 机器人加上一排可点击的文字按钮。结论先行:文本按钮主要分两种——回复键盘和内联键盘。前者替换手机输入法区域,后者附着在消息下方。两者都通过 Bot API 的键盘字段实现,不需要复杂前端,只要会发 HTTP 请求或使用现成库即可。

先分清两种文本按钮

在动手之前,先明确你要的是哪一种,避免做完才发现交互方式不对。

类型出现位置点击后行为适用场景
回复键盘(ReplyKeyboardMarkup)输入框上方,替代系统键盘发送按钮上的文字作为普通消息引导用户快捷输入、菜单式对话
内联键盘(InlineKeyboardMarkup)消息气泡下方触发回调或打开链接,不发送文字消息内操作、翻页、确认按钮

简单记:想让用户「发一句话」用回复键盘;想让用户「点一下执行动作」用内联键盘。下面分别给出创建步骤。

方法一:创建回复键盘文本按钮

回复键盘的本质是在调用 sendMessage 时附加一个 reply_markup 对象。以下步骤以直接调用 Bot API 为例,使用任意支持 HTTP 请求的工具即可。

  1. 获取机器人 token:在 TG 中找 @BotFather 创建机器人,拿到 token。
  2. 构造请求体,关键字段如下:
    • chat_id:目标会话 ID。
    • text:消息正文。
    • reply_markup:包含 keyboard 数组,每个子数组代表一行按钮。
  3. 发送 POST 请求到 https://api.telegram.org/bot<token>/sendMessage,Content-Type 为 application/json。
  4. 在聊天中看到按钮后,点击任意按钮,机器人会收到一条内容为按钮文字的新消息,你可在后续逻辑中按文字分支处理。

示例 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 的结构。

  1. 同样调用 sendMessage,但 reply_markup 使用 inline_keyboard 字段。
  2. 每个按钮对象可包含 text 和 callback_data(或 url)。callback_data 长度有限制,建议用短标识。
  3. 用户点击后,机器人会收到 callback_query 更新,你需要在代码中应答(answerCallbackQuery),否则客户端可能一直转圈。
  4. 应答时可附带提示文字,也可编辑原消息,实现「点击后按钮变化」的效果。

示例结构:

{
"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 机器人里做出清晰的文本按钮交互。建议先从回复键盘练手,熟悉请求结构后再尝试内联键盘的回调逻辑。