You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telegram Bot调用editMessageReplyMarkup移除内联键盘报错问题

核心报错原因
  • 两类400错误本质都是参数取值错误:原代码混淆了账号ID、聊天ID、消息ID三类独立参数,把消息发送者的账号ID当消息ID传入、把点击按钮的用户ID当聊天ID传入,Telegram接口匹配不到要修改的目标消息,直接返回400错误
  • 第二段实现额外存在参数格式错误:不符合node-telegram-bot-api模块editMessageReplyMarkup方法的传参规则,且误将内联键盘字段写为普通自定义键盘字段,接口无法识别到合法的消息ID参数
可直接运行的正确代码
bot.on('callback_query', async (callbackQuery) => {
    const action = callbackQuery.data;
    // 从原消息对象下取正确的参数
    const chatId = callbackQuery.message.chat.id;
    const messageId = callbackQuery.message.message_id;
    const queryId = callbackQuery.id;

    if (action === 'FM') {
        // 先响应按钮点击,关闭按钮加载状态
        await bot.answerCallbackQuery(queryId);
        // 清空内联键盘实现按钮消失效果
        await bot.editMessageReplyMarkup({
            inline_keyboard: []
        }, {
            chat_id: chatId,
            message_id: messageId
        });
    }
});
实现注意事项
  • 点击内联按钮后必须调用answerCallbackQuery接口给Telegram服务端返回响应,否则按钮会一直保持加载中的旋转动画
  • 移除内联键盘只需要将inline_keyboard字段赋值为空数组即可,不需要构造多层空嵌套结构,也不需要手动做JSON序列化,node-telegram-bot-api模块会自动处理参数格式
  • 编辑消息相关接口需要的chat_id、message_id都要从callbackQuery.message对象下取值,不要从callbackQuery.from(点击按钮的用户信息)、callbackQuery.message.from(原消息发送者信息)对象下取ID,这类ID是用户账号ID,不是接口需要的聊天/消息ID
  • 该逻辑在私聊、群聊、频道场景下通用,不需要针对不同聊天类型做特殊调整

内容的提问来源于stack exchange,提问作者Dummy Cron

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 23:57:35