Spring Boot Maven Telegram Bot启动正常但无法接收聊天消息求助
问题:Spring Boot Telegram Bot无法接收聊天数据
我基于Spring Boot + Maven创建了Telegram Bot,一开始启动报错“Process finished with exit code 0”,添加@Component注解后问题仍未解决,随后在pom.xml中引入spring-boot-starter-tomcat和spring-boot-starter-web依赖,启动正常了,但Bot无法接收Telegram聊天中的数据,发送/start指令后控制台没有任何输出。
项目完整配置与代码
Pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>Najavnist</groupId> <artifactId>java-bot</artifactId> <version>0.0.1-SNAPSHOT</version> <name>java-bot</name> <description>Demo project for Spring Boot</description> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- Telegram Bots Spring Boot Starter --> <dependency> <groupId>org.telegram</groupId> <artifactId>telegrambots-spring-boot-starter</artifactId> <version>5.3.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${parent.version}</version> </plugin> </plugins> </build> </project>
Bot类代码
import org.springframework.stereotype.Component; import org.telegram.telegrambots.bots.TelegramLongPollingBot; import org.telegram.telegrambots.meta.api.objects.Update; @Component public class JavaBot extends TelegramLongPollingBot { @Override public String getBotUsername() { return "bot"; } @Override public String getBotToken() { return "uwu"; } @Override public void onUpdateReceived(Update update) { System.out.println(update.getMessage()); } }
启动类代码
package Najavnist.java.bot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class JavaBotApplication { public static void main(String[] args) { SpringApplication.run(JavaBotApplication.class, args); System.out.println("Hi"); } }
解决步骤
1. 修正Bot核心凭证
- Bot用户名:
getBotUsername()必须返回BotFather创建Bot时分配的完整用户名(通常以bot后缀结尾,例如MyDemoBot_bot),当前代码返回的"bot"是占位符,替换为真实用户名。 - Bot Token:
getBotToken()必须使用BotFather提供的有效Token,替换掉占位符"uwu",这是Bot与Telegram服务器通信的唯一凭证。
2. 清理不必要的依赖
你之前添加的spring-boot-starter-tomcat和spring-boot-starter-web属于Web容器依赖,而LongPolling模式的Bot不需要Web服务,telegrambots-spring-boot-starter已经包含了所有必要的运行依赖。移除这两个依赖,避免资源浪费和潜在冲突。
3. 确保Spring扫描到Bot类
检查Bot类所在包是否在启动类的扫描范围内:
- 启动类
JavaBotApplication的包是Najavnist.java.bot,如果Bot类在同一个包或其子包下,@Component会被自动扫描; - 如果Bot类在其他包,给
@SpringBootApplication添加scanBasePackages属性指定扫描路径,例如:@SpringBootApplication(scanBasePackages = {"Najavnist.java.bot", "com.your.bot.package"})
4. 完善Update处理逻辑
当前代码直接打印update.getMessage(),但部分Update可能不包含Message(如回调事件),添加空判断避免空指针,同时增强日志可读性:
@Override public void onUpdateReceived(Update update) { if (update.hasMessage() && update.getMessage().hasText()) { String messageText = update.getMessage().getText(); System.out.println("收到用户消息:" + messageText); } }
5. 验证Bot注册状态
启动项目后,查看控制台日志,若看到类似Registered Bot: [你的Bot用户名]的输出,说明Bot已成功注册并开始轮询Telegram服务器;若没有该日志,检查包扫描、@Component注解是否正确配置。
内容的提问来源于stack exchange,提问作者Богдан Дмитрук
相关产品推荐
相关产品推荐

