You need to enable JavaScript to run this app. 如何用Telegraf JS内联键盘在Telegram内置浏览器打开URL并解决400报错
优惠活动
大模型
产品
解决方案
定价
更多

如何用Telegraf JS内联键盘在Telegram内置浏览器打开URL并解决400报错

Telegraf JS 内联URL按钮400错误修复方案

报错原因

该400 Bad Request异常大多是因为Telegraf版本语法不匹配、遗漏必填参数导致的:

  • Telegraf v3版本中,Markup生成的键盘配置必须调用.extra()方法转换为API可识别的参数格式,直接传入会触发参数校验失败
  • 少部分情况是URL没有完整携带HTTP/HTTPS协议,或包含未转义的特殊字符

修复代码

Telegraf v3 版本修复

在inlineKeyboard调用后追加.extra()即可:

ctx.reply(
    `Hi! ${ctx.from.first_name} 👋 \n \n Shall we start? 👇 `,
    Markup.inlineKeyboard(
      [
        Markup.button.url(
          "Covid-19 🇮🇳 IN",
          "https://www.covid19india.org/"
        ),
        Markup.button.url("WHO 🌎", "https://covid19.who.int/"),
      ],
      { columns: 2 }
    ).extra()
);

Telegraf v4+ 版本修复

v4已经废弃了extra()方法,确保正确导入Markup即可,标准写法如下:

const { Telegraf, Markup } = require('telegraf')

// 业务逻辑中的回复代码
ctx.reply(
    `Hi! ${ctx.from.first_name} 👋 \n \n Shall we start? 👇 `,
    Markup.inlineKeyboard(
      [
        Markup.button.url(
          "Covid-19 🇮🇳 IN",
          "https://www.covid19india.org/"
        ),
        Markup.button.url("WHO 🌎", "https://covid19.who.int/"),
      ],
      { columns: 2 }
    )
);

内置浏览器打开说明

Telegram默认点击内联URL按钮就是用内置浏览器打开,不需要额外配置,上述修复完成后即可满足需求。如果遇到部分设备跳外部浏览器的情况,是用户个人Telegram设置的问题,无法通过机器人代码强制修改。

其他排查点

  • 确认使用的URL是完整的HTTPS/HTTP开头,不能省略协议直接写域名
  • 检查是否有其他中间件篡改了ctx.reply的传参结构
  • 确认Telegraf版本和参考的开发文档版本一致,避免语法不兼容

内容的提问来源于stack exchange,提问作者Tushar Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 19:24:02