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

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,提问作者Богдан Дмитрук

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:19:57