Telegram Bot开发:如何发送带tg://协议的URL按钮?
解决Telegram Bot中
tg://协议URL按钮的400错误 我之前也踩过这个坑,给你梳理下具体的解决思路:
这个Bad Request: unsupported URL protocol错误,基本逃不出两个原因:要么你的tg://链接格式不符合Telegram官方要求,要么按钮的结构构造出了问题。
1. 先确认tg://链接的合法性
Telegram只支持官方定义的tg://协议路径,自定义的tg://链接会被API直接拒绝。常见合法的格式有:
- 跳转用户/频道:
tg://resolve?domain=你的用户名/频道名 - 打开Telegram设置:
tg://settings - 打开特定聊天消息:
tg://openmessage?chat_id=xxx&message_id=xxx
2. 正确构造InlineKeyboard按钮结构
你需要确保reply_markup是完整的InlineKeyboardMarkup结构,并且正确完成JSON序列化。给你修正后的代码示例:
TelegramBot.addListener('/button', function(command, username, original) { TelegramBot.method('sendMessage', { chat_id: original.chat.id, text: 'Here is your proxy!', parse_mode: "HTML", reply_markup: JSON.stringify({ inline_keyboard: [ // 每行是一个按钮组,可包含多个按钮 [ { text: 'Open Telegram Settings', url: 'tg://settings' }, { text: 'Visit My Channel', url: 'tg://resolve?domain=my_channel_username' } ] ] }) }); });
3. 如果是要触发回调逻辑而非跳转URL
如果你的按钮不是用来打开链接,而是要触发Bot的回调操作,别用url字段,改用callback_data:
{ text: 'Click to Trigger Action', callback_data: 'proxy_action_001' }
之后你需要监听callback_query事件来处理这个回调请求。
额外注意点
- 确保
JSON.stringify方法完整调用(你代码里的JSON.st...应该是没写完的JSON.stringify) - 部分旧版Telegram客户端可能对少数
tg://链接支持有限,但API层面只要是官方格式就可以正常通过。
内容的提问来源于stack exchange,提问作者Oysho Boy




