Telegram 机器人按钮类型大全

Telegram 机器人按钮类型大全
快乐星球Telegram 机器人按钮
Telegram 机器人按钮类型大全(2025 年最新版)
本文整理了 Telegram Bot API 中所有类型的按钮,包括 ReplyKeyboard(自定义键盘) 与 InlineKeyboard(内联按钮),并补充了文档未完全公开的隐藏按钮行为,如:复制按钮、回填输入框文本(不带 @bot) 等….
📌 按钮类型总览
分类 | 类型 | 字段 | 功能说明 |
---|---|---|---|
✅ 自定义键盘 | 文本键盘 | text | 替代输入框,点击后作为消息发出 |
✅ 自定义键盘 | 小程序键盘 | web_app | 用户点击后进入小程序 |
✅ 自定义键盘 | 请求联系人 | request_contact | 用户点击后分享手机联系人 |
✅ 自定义键盘 | 请求位置 | request_location | 用户点击后分享 GPS 定位 |
✅ 自定义键盘 | 请求用户 | request_users | 用户点击后从好友中选择一个用户(Bot API 6.7+) |
✅ 自定义键盘 | 请求聊天 | request_chat | 用户点击后选择一个群组/频道 |
🎛️ 内联按钮(InlineKeyboardMarkup)
类型 | 字段 | 功能说明 |
---|---|---|
🔗 链接按钮 | url | 打开外部网页或 Telegram 聊天链接(如频道、群组) |
🌐 WebApp 按钮 | web_app | 打开一个内嵌的 WebApp 网页 |
🔁 回调按钮 | callback_data | 回传数据到后台,不会发送消息 |
💳 支付按钮 | pay | 启动 Telegram 内置支付(需配合发票消息) |
🕹️ 游戏按钮 | callback_game | 启动 Telegram 游戏(需要预设游戏) |
🧾 登录按钮 | LoginUrl | 打开 Telegram 登录验证网页(带用户认证) |
🔍 内联查询(其他聊天) | switch_inline_query | ✅ |
🔍 内联查询(当前聊天) | switch_inline_query_current_chat | ✅ |
📋 复制按钮 | copy_text | Telegram 自动复制内容到剪贴板,弹出“已复制”提示(2024+) |
✍️ 回填纯文本(不带 @bot) | callback_data + answerCallbackQuery({ input_field_text }) | 回填纯文本到输入框,用户可编辑再发送(隐藏高级用法) |
🧑 请求用户按钮 | request_user | 用户点击后选择一个好友作为返回结果(Bot API 6.7+) |
📣 请求聊天按钮 | request_chat | 用户点击后选择频道或群组 |
🛡️ 管理权限请求按钮 | request_chat + bot_administrator_rights | 请求将机器人设置为管理员(带权限弹窗) |
📌 跳转到话题 | url 指向 https://t.me/c/<chat_id>/<topic_id> |
跳转到特定话题(需话题模式开启) |
🔗 深链接按钮(启动参数) | 外部链接,如 ?start=xxx |
启动机器人并传入参数,可实现推广、注册等 |
🧠 菜单填充按钮(输入框提示) | setChatMenuButton + text | 设置机器人左下角菜单项点击后填入输入框(不是按钮组件,但行为类似) |
📦 特殊行为说明
🔹 switch_inline_query
和 switch_inline_query_current_chat
- 本质是 启动内联模式搜索
- 一定会带上
@your_bot
前缀,调用内联查询 - 适合 bot 内搜索商品、指令、联系人等
🔹 callback_data
+ answerCallbackQuery
+ input_field_text
- 不会发送任何消息
- 用户点击按钮后,机器人通过 API 响应将文本填入输入框
- 无 @ 前缀
- 非公开功能,实测已被 Telegram 全客户端支持
🔹 copy_text
- 新增字段(2024 年底)
- 点击按钮后自动复制
copy_text
内容 - Telegram 弹出 toast:“已复制”
- 无需 WebApp,可直接在普通消息下使用
🎯 常见应用场景示例
场景 | 推荐按钮类型 |
---|---|
快速填入“您好,请问有什么可以帮您?” | 回填纯文本(input_field_text ) |
复制钱包地址 | copy_text |
跳转支付页面 | pay |
邀请好友 | switch_inline_query / 深链接 |
绑定群组/频道 | request_chat |
设置管理员 | request_chat + bot_administrator_rights |
搜索机器人功能 | switch_inline_query_current_chat |
启动 WebApp 小程序 | web_app |
打开自定义链接 | url |
✅ 最佳实践建议
- 按钮不要过多一行:最多 3 个按钮一行,避免手机端 UI 拥挤
- 使用 Emoji 强化识别感:如 📋 📎 📝 💬 等用于强调按钮意图
- 使用
callback_data
搭配数据库:进行动态菜单、确认操作、分页等高级功能 - 合理使用回填输入框(不带 @bot):对用户体验极好,可作为快捷回复入口
Telegram 机器人按钮
Telegram 机器人菜单按钮类型与命令菜单设置详解(2025)
Telegram 支持为机器人设置“聊天菜单按钮”(Chat Menu Button),显示在输入框左侧。这个按钮可以是:
- ✅ 一个自定义文字填充按钮(点击后将文字填入输入框)
- ✅ 一个打开 WebApp 的按钮
- ✅ 一个默认命令菜单(由 BotFather 或代码设置)
📌 菜单按钮类型总览
类型 | 字段 | 功能说明 |
---|---|---|
default |
type: "default" + text |
显示自定义文字按钮,点击后填入输入框(不带 @bot) |
web_app |
type: "web_app" + url |
打开 WebApp 网页 |
commands |
type: "commands" |
显示机器人命令菜单列表(BotFather 设置的命令) |
⚠️ 三种按钮 只能存在一种,互相排斥。
若设置了default
或web_app
,则命令菜单按钮会被覆盖。
✍️ 设置命令菜单(方式一):使用 BotFather
- 打开
@BotFather
- 输入命令
/setcommands
- 选择你的机器人
- 输入命令列表,格式如下:
start - 启动机器人
help - 查看帮助信息
wallet - 查看钱包地址
muban - 快捷模板回复
设置完成后,在聊天框左侧点击按钮即可看到命令菜单。
🧑💻 设置命令菜单(方式二):在代码中设置
你也可以在机器人代码中动态设置命令列表。
示例(Node.js + Telegraf):
设置命令菜单
1 | // 设置命令菜单 |
恢复为命令菜单:
1 | bot.telegram.setChatMenuButton({ |
或彻底删除自定义菜单按钮(回到默认状态):
1 | bot.telegram.deleteChatMenuButton(); |
💡setChatMenuButton 可以为不同用户或群组设置不同的菜单按钮
也就是说,你可以:
- 给 某个用户 设置专属菜单按钮(比如:VIP 用户菜单)
- 给 某个群组 设置不同的菜单行为(比如:群组显示 WebApp,普通用户显示命令菜单)
设置菜单按钮为自定义填充文字:
1 | //点击后,输入框会填入“📋 填写反馈模板”,供用户编辑发送。 |
1 | // 为某个用户设置菜单按钮(只对该 user_id 有效) |
- 第一个参数是 chat_id(可以是用户 ID 或群组 ID)
- 第二个参数是菜单按钮配置
菜单进阶
- 如果调用时带 chat_id,则是针对该聊天(用户或群组)设置菜单按钮,仅对该聊天生效
- 不带 chat_id 是全局菜单按钮,所有未特别设置聊天会默认用这个
代码示例(Node.js + Telegraf):
1 | async function setMenuButtonByContext(ctx) { |
你可以在机器人启动时,或者用户首次与机器人交互时调用这个函数,给当前聊天动态设置菜单,也可以定时或根据业务需求更新菜单按钮
VIP 用户「自动回填问候语」
由于菜单按钮是静态的文字按钮,不能动态插入用户名字,所以推荐用内联按钮回调实现:
1 | bot.command('start', (ctx) => { |
用户点按钮后,输入框就会自动填入带名字的 VIP 专属问候,用户可以编辑后发送。
层级 | 说明 | 代码示例 |
---|---|---|
全局 | bot.telegram.setChatMenuButton() 不传 chat_id | 设置全局命令菜单 |
群组 | bot.telegram.setChatMenuButton(groupChatId, menu) | 针对某个群组设置菜单 |
用户 | bot.telegram.setChatMenuButton(userChatId, menu) | 针对某个用户设置菜单(用户私聊) |
VIP回复 | 内联按钮回调动态填充按钮 | 通过 answerCbQuery({input_field_text}) |
设置菜单按钮为 WebApp 页面
1 | bot.telegram.setChatMenuButton({ |
点击后会打开内嵌 WebApp 页面。
使用内联按钮 + callback_data + answerCallbackQuery({ input_field_text })
1 | bot.command('template', (ctx) => { |
如需进一步查看按钮代码示例或搭建交互系统,可查看官方文档或联系维护者。