如何使用telegraf为Telegram Bot添加Menu菜单按钮?
你要实现的输入框旁固定Menu按钮样式参考如下:
以下是基于Telegraf v4版本的实现方法,无需额外安装第三方插件,直接调用Telegram原生接口即可完成配置:
基础准备
首先初始化Telegraf实例:
const { Telegraf } = require('telegraf') // 替换为你从@BotFather获取的Bot Token const bot = new Telegraf('YOUR_BOT_TOKEN')
常用菜单配置
1. 全局默认菜单(所有用户可见)
直接调用setChatMenuButton方法,不传chat_id参数时配置对所有用户生效:
- 配置点击打开Web App的菜单(和参考图效果一致)
bot.telegram.setChatMenuButton({ menuButton: { type: 'web_app', text: 'Menu', // 按钮显示的文字,可自定义 web_app: { url: 'https://your-domain.com' // 必须为HTTPS协议地址,且提前在@BotFather处完成域名绑定 } } })
- 配置点击展开Bot指令列表的菜单
bot.telegram.setChatMenuButton({ menuButton: { type: 'commands' } })
- 配置点击跳转普通网页的菜单
bot.telegram.setChatMenuButton({ menuButton: { type: 'default', text: '访问官网', url: 'https://your-official-site.com' } })
2. 给指定用户/群组单独配置菜单
传入chat_id参数即可为特定会话单独设置菜单,优先级高于全局配置:
// 替换为目标用户/群组的实际ID const targetChatId = 123456789 bot.telegram.setChatMenuButton({ chat_id: targetChatId, menuButton: { type: 'web_app', text: '专属功能', web_app: { url: 'https://your-domain.com/exclusive' } } })
3. 移除菜单按钮
将菜单类型设为默认值即可移除已配置的按钮:
// 移除全局菜单 bot.telegram.setChatMenuButton({ menuButton: { type: 'default' } }) // 移除指定用户的专属菜单(会自动回退到全局菜单配置) bot.telegram.setChatMenuButton({ chat_id: targetChatId, menuButton: { type: 'default' } })
注意事项
- 配置修改后不会立刻在客户端生效,受Telegram缓存机制影响,一般等待5-10分钟或重启客户端即可看到更新
- Web App类型的菜单需要提前找@BotFather,发送
/setmenubutton指令后按提示绑定对应域名,否则会触发权限报错 - 菜单按钮的文字长度上限为30字符,过长会被自动截断
内容的提问来源于stack exchange,提问作者Miloud Mokkedem
相关产品推荐
相关产品推荐

