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
相关产品推荐
相关产品推荐

