每日整理高质量文章与实用指南
最新文章常见问题

Telegram 带按钮消息制作全指南:从BotFather到Inline Keyboard的完整实操

本文详细介绍了Telegram中带按钮消息的原理与制作方法,包括通过BotFather创建机器人、使用HTTP API发送内联键盘、回调按钮的交互处理等,帮助你打造交互式消息体验。

阅读提示建议先浏览文章结构,再按需深入阅读具体段落。

在Telegram的聊天中,我们经常看到一些消息下方带着可点击的按钮,点击后可以打开网页或触发特定动作。这种「带按钮的消息」并非普通用户可以直接发送,而是通过机器人(Bot)创建并推送的。对于社群管理者、内容运营者或技术爱好者来说,掌握这一功能可以显著提升消息的互动性与转化率。本文将从零开始,带你完成从创建机器人到发布带按钮消息的全过程,即使你不懂编程也能理解每一步的原理。

一、带按钮消息的基础:内联键盘与回复键盘

Telegram 机器人支持两种按钮交互形式:

  • 内联键盘(Inline Keyboard):附加在消息正文下方的按钮区,点击按钮后不发送消息,而是触发回调或打开链接。这是最常用的按钮类型,适合做菜单、快捷操作等。
  • 回复键盘(Reply Keyboard):显示在输入栏下方的虚拟键盘,用于快速回复预设文案。它更偏向于简化用户输入,而非交互动作。

本文重点讲解内联键盘,因为它能实现更丰富的交互场景,且视觉上更接近“带按钮的消息”。

二、准备工作:使用 BotFather 创建机器人

要发送带按钮的消息,首先需要一个机器人账号。Telegram 官方提供的 @BotFather 可以帮你完成创建。

  1. 在 Telegram 中搜索并打开 @BotFather,点击 START 开始对话。
  2. 发送指令 /newbot,BofFather 会要求你为机器人设置一个显示名称和用户名。
  3. 名称可以随意填写,例如 交互小助手;用户名必须以 bot 结尾,例如 my_interactive_bot
  4. 创建成功后,BotFather 会返回一个 Token(API密钥),类似 123456:ABC-DEF1234...。请妥善保存,它是控制机器人的唯一凭证。

如果你不熟悉命令行操作,可以先用一个支持 Bot API 的图形化客户端(如 BotFather 本身的测试工具),或直接使用下方示例中的编程方式。

三、通过 HTTP API 发送第一条带内联按钮的消息

Telegram Bot API 提供了 sendMessage 方法,通过附加 reply_markup 参数即可定义内联键盘。这里我们使用 Pythoncurl 两种方式演示。

3.1 Python 示例

import requests

# 替换成你的 Bot Token
TOKEN = "123456:ABC-DEF1234"
chat_id = "@your_target_channel"  # 可以是群组、频道或个人ID

url = f"https://api.telegram.org/bot/sendMessage"
payload = {
    "chat_id": chat_id,
    "text": "欢迎使用我们的服务!",
    "reply_markup": {
        "inline_keyboard": [
            [
                {"text": "访问官网", "url": "https://new-telegram.com.cn"},
                {"text": "联系客服", "url": "https://t.me/support"}
            ]
        ]
    }
}
response = requests.post(url, json=payload)
print(response.status_code)
print(response.text)

3.2 curl 示例(用于快速测试)

curl -X POST "https://api.telegram.org/bot<TOKEN>/sendMessage" \
  -H "Content-Type: application/json" \
  -d '{
        "chat_id": "@your_target_channel",
        "text": "点击下方按钮",
        "reply_markup": {
            "inline_keyboard": [
                [{"text": "打开网站", "url": "https://new-telegram.com.cn"}]
            ]
        }
    }'

运行脚本后,你会在指定对话中收到带有一个或两个按钮的消息。按钮的文本和链接都可以自定义。

四、按钮类型详解:URL按钮与回调按钮

在上面的例子中,我们使用了 url 字段,这类按钮称为 URL按钮,点击后直接打开浏览器跳转。另一种常用类型是 回调按钮(callback_data),点击后不会打开外部链接,而是向机器人发送一个回调数据,触发服务端逻辑。

URL按钮适用场景:推广网页、引导注册、跳转官方频道等。
回调按钮适用场景:菜单操作、投票、分页加载、状态切换等。

回调按钮的定义方式如下:

{
  "inline_keyboard": [
    [
      {"text": "喜欢", "callback_data": "like"},
      {"text": "不喜欢", "callback_data": "dislike"}
    ]
  ]
}

注意,callback_data 长度不能超过 64 字节,且只能由字母、数字、下划线等基本字符组成。

五、处理回调按钮的交互:Webhook 或长轮询

当用户点击回调按钮时,Telegram 会将更新发送到你的服务器(或本地程序)。你需要在代码中响应的 callback_query,并使用 answerCallbackQuery 方法返回提示。

简单示例(使用 python-telegram-bot 框架):

from telegram import Update
from telegram.ext import Application, CallbackQueryHandler, CommandHandler

async def button_callback(update: Update, context):
    query = update.callback_query
    await query.answer()  # 必须响应,否则按钮会一直转圈
    data = query.data
    if data == "like":
        await query.message.reply_text("感谢你的喜欢!")
    elif data == "dislike":
        await query.message.reply_text("我们会改进的。")

async def start(update: Update, context):
    await update.message.reply_text("请选择:", reply_markup={
        "inline_keyboard": [
            [{"text": "喜欢", "callback_data": "like"},
             {"text": "不喜欢", "callback_data": "dislike"}]
        ]
    })

app = Application.builder().token("YOUR_TOKEN").build()
app.add_handler(CommandHandler("start", start))
app.add_handler(CallbackQueryHandler(button_callback))
app.run_polling()

如果只用 API 而不使用框架,也可以设置 Webhook 让 Telegram 将更新推送给你。无论哪种方法,核心是解析 callback_query 并执行对应的动作。

六、进阶技巧:多行布局、动态按钮与消息编辑

6.1 多行布局

内联键盘的 inline_keyboard 是一个二维数组。每个内部数组表示一行,每行可以放置多个按钮。例如:

"inline_keyboard": [
    [{"text": "A", "callback_data": "a"}, {"text": "B", "callback_data": "b"}],
    [{"text": "C", "callback_data": "c"}]
]

这样第一行有两个按钮,第二行有一个按钮。

6.2 动态按钮

你可以根据用户状态动态生成按钮,例如分页浏览、按需加载。只需要在发送请求前构建 Python 列表即可。

6.3 编辑已有消息

当用户点击按钮后,你可以使用 editMessageText 改变消息内容或按钮布局,实现菜单切换效果。例如:

await query.message.edit_text("新内容", reply_markup=new_keyboard)

七、常见错误与故障排查

  • 按钮不显示:检查 reply_markup 是否拼写错误,JSON 格式是否正确。
  • 点击按钮后无反应:回调按钮必须通过 answerCallbackQuery 响应,否则客户端会一直显示加载。
  • 提示“Bot token invalid”:确认 Token 是否正确,以及是否在创建后复制了多余字符。
  • 无法在频道里发送:如果频道开启了“评论”权限,可能需要机器人有相应权限;个人对话则无限制。
  • callback_data 超长:务必控制在 64 字节以内。

总结

制作带按钮的消息并非难事,核心掌握三步:创建机器人、构造 inline_keyboard 参数、发送请求。无论你是想打造频道互动菜单,还是构建完整的 Bot 服务,学会这一技能都会让消息更专业、更高效。建议你先在小号或测试群中尝试,再逐步应用到真实场景。

如果你对 Bot API 有更多疑问,欢迎参考官方文档或关注本站后续教程。

FAQ

安卓手机下载安装

常见问题

普通用户能否直接发送带按钮的消息?

不能。只有机器人可以通过 Bot API 发送带内联键盘的消息。如果你想在频道或群组中展示这种效果,需要先创建机器人,再通过机器人发送。

URL按钮和回调按钮有什么区别?

URL按钮点击后会打开指定的网页链接,不需要后端处理;回调按钮(callback_data)点击后会向机器人发送一种回调数据,需要在服务器或本地程序中响应该交互,常用于菜单、投票等动态场景。

如何在不编写代码的情况下制作带按钮的消息?

你可以尝试一些第三方机器人(如 @ButtonBot 或 @InlineKeyboardBot),它们提供图形化界面来生成带按钮的消息。但这种方法灵活性和定制性有限,学习 API 仍是根本。