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

Telegram Bot发送消息异常:仅本人收到消息的问题排查

问题分析与解决方法

问题根源

你的代码逻辑存在错误:循环里只是不断覆盖sendMessage对象的chatId,但发送消息的sendMsg方法被放在了循环外部。这导致循环结束后,只会用最后一次设置的chatId发送一条消息,所以只有列表最后一个用户(也就是你自己)能收到消息。

修复方案

把发送消息的操作移到循环内部,确保每个用户的chatId设置完成后立即发送:

方案一:每次循环创建新的SendMessage实例(推荐)

else if(text.startsWith("/add")){
    String msgText = message.getText();
    String parseMode = "Markdown";
    
    for (Customer customer : Database.customerList) {
        System.out.println(customer);
        Long userId = customer.getId();
        
        // 为每个用户创建独立的SendMessage对象,避免复用导致的状态混乱
        SendMessage sendMessage = new SendMessage();
        sendMessage.setText(msgText);
        sendMessage.setParseMode(parseMode);
        sendMessage.setChatId(String.valueOf(userId));
        
        // 立即发送给当前用户
        ComponentContainer.MY_TELEGRAM_BOT.sendMsg(sendMessage);
    }
}

方案二:复用SendMessage对象

如果不想重复创建对象,也可以在循环内完成chatId设置和消息发送:

else if(text.startsWith("/add")){
    SendMessage sendMessage = new SendMessage();
    sendMessage.setText(message.getText());
    sendMessage.setParseMode("Markdown");
    
    for (Customer customer : Database.customerList) {
        System.out.println(customer);
        Long userId = customer.getId();
        
        sendMessage.setChatId(String.valueOf(userId));
        // 每次设置完chatId就发送消息
        ComponentContainer.MY_TELEGRAM_BOT.sendMsg(sendMessage);
    }
}

注意事项

如果用户数量较多,发送时要注意Telegram API的频率限制,建议在每次发送后添加100-500毫秒的延迟,避免触发限流导致消息发送失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:25:25