引言
Telegram机器人开发者经常面临一个痛点:用户不知道机器人支持哪些命令。通过自定义Slash命令菜单(即输入/时弹出的命令列表),可以让用户一目了然地发现可用功能,大幅降低使用门槛。本文将从零开始,详细演示如何定义Slash命令菜单并使其显示在输入框,并提供两种实现方案:适合初学者的BotFather图形化操作和适合开发者的API调用方法。
什么是Slash命令菜单?
Slash命令菜单是Telegram客户端中的一项原生功能。当用户在聊天输入框中输入/时,客户端会自动拉取机器人预设的命令列表并显示为快捷选项。每个命令由斜杠+命令名+可选描述组成,例如:/start - 启动机器人。这个菜单可以极大提升机器人可发现性和交互效率。
方法一:通过BotFather设置命令菜单
BotFather是Telegram官方提供的机器人管理工具,无需编写代码即可快速配置命令菜单。
步骤1:打开与BotFather的对话
在Telegram中搜索@BotFather,点击Start开始对话。
步骤2:选择要设置的机器人
发送/mybots,选择你的机器人,然后点击Edit Bot,再选择Edit Commands。
步骤3:按格式输入命令列表
按照以下格式,每行一条命令:
start - 启动机器人
help - 查看帮助
settings - 打开设置注意:命令名必须小写,只能包含字母、数字和下划线,且不能以数字开头。描述建议简短(不超过50字符)。发送后,BotFather会返回成功提示。
步骤4:验证效果
回到与机器人的对话窗口,在输入框中输入/,即可看到刚才定义的命令菜单。
方法二:通过Bot API的setMyCommands方法
对于需要动态更新命令的开发者,可以使用setMyCommands接口,它允许通过编程方式定义命令,支持更多高级配置。
使用curl调用示例
curl -X POST "https://api.telegram.org/bot<BOT_TOKEN>/setMyCommands" -H "Content-Type: application/json" -d '{"commands":[{"command":"start","description":"启动机器人"},{"command":"help","description":"获取帮助"}]}'使用Python + python-telegram-bot库
from telegram.ext import Application, CommandHandler
app = Application.builder().token("BOT_TOKEN").build()
async def set_commands():
commands = [
("start", "启动机器人"),
("help", "获取帮助")
]
await app.bot.set_my_commands(commands)
app.run_until_disconnected()注意:如果使用旧版库,方法可能为set_my_commands或setMyCommands,请查阅对应文档。
进阶:设置多语言与作用范围
多语言支持
通过language_code参数,可以为不同语言用户显示不同描述。例如:
{"commands":[{"command":"start","description":"Start bot"}],"language_code":"en"}未指定语言时,用户看到的将是你设置的默认命令。
作用范围
使用scope参数可以控制命令显示在哪些聊天中(如群组、频道或私聊)。例如,只对私聊生效:
{"commands":[{"command":"start","description":"启动"}],"scope":{"type":"all_private_chats"}}常用类型:default、all_private_chats、all_group_chats、all_chat_administrators等。
注意事项与最佳实践
- 命令数量建议控制在10个以内,过长会降低可读性。
- 描述务必简洁明了,让用户能快速理解命令功能。
- 删除已失效的命令时,可调用
deleteMyCommands方法。 - 命令名称尽量使用英文,输入更快捷,但描述可以使用本地语言。
总结
通过BotFather或API定义Slash命令菜单,是提升Telegram机器人专业度的关键一步。无论你是普通用户还是开发者,都可以在5分钟内完成设置。掌握setMyCommands的进阶用法后,你还能根据用户语言与使用场景动态调整菜单,真正实现个性化体验。立即为你的机器人添加一个清晰的命令菜单吧!