You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

开发Telegram填空Bot时遭遇[400] Bad Request无法编辑消息问题求助

解决Telegram Bot编辑消息时的[400] Bad Request错误

我帮你梳理几个常见的排查方向和解决办法,应该能帮你搞定这个[400] Bad Request: message can't be edited错误:

  • 先确认消息类型是否支持编辑
    Telegram不是所有消息都能直接用EditMessageText修改的:

    • 如果你的初始消息是带媒体的(比如用sendPhotosendDocument发送的图片/文件),必须用对应的EditMessageMediaEditMessageCaption来修改,直接调用EditMessageText肯定会失败。
    • 测试时先确保发送的是纯文本消息(用sendMessage方法),再尝试编辑,排除媒体类型的问题。
  • 核对chat_id是否完全正确
    你代码里用user_id作为chat_id,这里容易踩坑:

    • 如果消息是发在群聊/超级群里,chat_id应该是群的ID(负数格式),而不是单个用户的ID。哪怕你是在群里和Bot一对一聊天,群ID和用户ID是完全不同的。
    • 建议直接从发送消息返回的Message对象里获取getChatId(),而不是手动传入user_id,避免填错。
  • 检查Bot在群聊中的权限(如果是群场景)
    如果消息是发在群聊里:

    • 确保Bot有编辑消息的权限,有些群默认会限制Bot的编辑权限,需要群管理员给Bot开启这个权限。
    • 如果群设置了「仅管理员可编辑消息」,那Bot必须是群管理员才能编辑自己发的消息。
  • 确认API库版本是否兼容
    你用的Java Telegram Bots库如果版本太旧,可能和Telegram最新的API规范不兼容,导致编辑请求被拒绝。建议升级到库的最新版本后再测试。

  • 用更严谨的测试代码排查
    可以试试下面的修正版测试代码,确保所有参数都直接从发送结果中获取,避免手动赋值出错:

try {
    // 发送纯文本测试消息
    SendMessage sendMsgReq = new SendMessage(user_id, "Original test message");
    Message sentMessage = execute(sendMsgReq);
    
    int targetMsgId = sentMessage.getMessageId();
    long targetChatId = sentMessage.getChatId(); // 直接用返回的chatId,避免错误
    
    Thread.sleep(10000);
    
    // 编辑消息
    EditMessageText editReq = new EditMessageText()
            .setChatId(targetChatId)
            .setMessageId(targetMsgId)
            .setText("I'm trying!!!");
    execute(editReq);
} catch (TelegramApiException e) {
    e.printStackTrace();
} catch (InterruptedException e) {
    e.printStackTrace();
}

先从这几个方向排查,应该能定位到问题所在。

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

火山引擎 最新活动