avatar

Charlie的博客

学习进步 学习进步 学习进步

  • 首页
  • 后端
  • 前端
  • 移动端
  • 操作系统
Home 用 Java + Spring Boot 搞一个 Telegram 机器人?来,带你慢慢来搞!
文章

用 Java + Spring Boot 搞一个 Telegram 机器人?来,带你慢慢来搞!

Posted 10 days ago Updated 10 days ago
By Administrator
17~22 min read

前言:别被术语吓住,其实很简单

今天这篇教程就是写给像你这样有点 Java 基础的朋友看的,哪怕你之前没碰过 Telegram 机器人也没关系。

我们要做的就是一个可以接收消息、回复消息的 Telegram Bot,用的是你可能已经熟悉的 Spring Boot 框架。不炫技,只讲实的。

第一步:准备好 Telegram Bot 的访问权限

你得先在 Telegram 上注册一个自己的 Bot。方法很简单:

1. 打开 Telegram,搜索 @BotFather

这是 Telegram 官方用来创建 Bot 的机器人。

2. 发送 /newbot 给它

之后你会被要求设置 bot 的名字和用户名。一切搞定之后,你就能获得一个 token,长得像这样:

123456789:AAAqweqweqweqweqweqwe

这个 token 相当于你 Bot 的身份证,一定要保管好,别泄露给别人。

第二步:创建一个 Spring Boot 项目

你可以用 Spring Initializr 来生成初始项目,也可以用 IDE(比如 IntelliJ IDEA)直接创建。

选择以下依赖(如果你用 IDEA,这些可以直接勾选):

  • Spring Web(用来处理 HTTP 请求)

  • Lombok(可选,但推荐,能让你少写很多样板代码)

项目结构大致如下:

src
├── main
│   ├── java
│   │   └── com.example.telegrambot
│   │       ├── BotConfig.java(配置类)
│   │       ├── WebhookController.java(处理 Telegram 回调)
│   │       └── TelegramBotApplication.java(启动类)
│   └── resources
│       └── application.properties

第三步:配置你的 Bot Token

我们来加个配置类,专门保存你的 token。

在 BotConfig.java 里写:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class BotConfig {
    @Value("${telegram.bot.token}")
    private String botToken;
    public String getBotToken() {
        return botToken;
    }
}

然后在 application.properties 中添加:

telegram.bot.token=你的 token 在这

第四步:创建接收 Telegram 请求的控制器

Telegram 会以 HTTP POST 的方式把用户的消息发送到你配置的 webhook 地址。我们需要创建一个 controller 来处理这个请求。

创建 WebhookController.java:

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.web.bind.annotation.*;
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.api.objects.Message;
@RestController
@RequestMapping("/bot")
public class WebhookController {
    private final ObjectMapper objectMapper = new ObjectMapper();
    @PostMapping("/{botToken}")
    public void handleUpdate(@PathVariable String botToken, @RequestBody Update update) {
        try {
            // 这里简化了逻辑,实际建议抽象出更多方法来处理逻辑
            Message message = update.getMessage();
            if (message != null && message.hasText()) {
                long chatId = message.getChatId();
                String text = message.getText();
                // 准备回应
                SendMessage sendMessage = new SendMessage();
                sendMessage.setChatId(String.valueOf(chatId));
                sendMessage.setText("你刚说了:" + text);
                // 这边你可以调用 bot 的 execute 方法发送消息(我们后面再说这部分)
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return;
    }
}

别急着跑代码,我们现在只是处理接收的部分,发送消息还没完成。先把这个当作一个“接收器”来看。


第五步:如何把回复发回去?我们需要一个 Bot 发送逻辑

我们可以封装一个类来处理发送消息的逻辑。

创建一个 TelegramBotService.java:

import org.springframework.stereotype.Service;
import org.telegram.telegrambots.bots.DefaultAbsSender;
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
@Service
public class TelegramBotService extends DefaultAbsSender {
    private final String botToken;
    public TelegramBotService(BotConfig botConfig) {
        super();
        this.botToken = botConfig.getBotToken();
    }
    public void sendMessage(SendMessage message) {
        try {
            execute(message);
        } catch (TelegramApiException e) {
            e.printStackTrace();
        }
    }
    @Override
    public String getBotToken() {
        return botToken;
    }
}

然后改一下 controller 里面的逻辑:

@Autowired
private TelegramBotService telegramBotService;
@PostMapping("/{botToken}")
public void handleUpdate(@PathVariable String botToken, @RequestBody Update update) {
    Message message = update.getMessage();
    if (message != null && message.hasText()) {
        long chatId = message.getChatId();
        String text = message.getText();
        SendMessage response = new SendMessage();
        response.setChatId(String.valueOf(chatId));
        response.setText("你说的是:" + text);
        telegramBotService.sendMessage(response);
    }
}

第六步:启动你的服务 + 给 Telegram 设置 Webhook

1. 启动 Spring Boot 项目

你可以通过 IDEA 或命令行运行:

./mvnw spring-boot:run

2. 给 Telegram 设置 Webhook

Telegram 需要知道去哪调用你写的接口。你可以用 curl 来设置:

curl -F "url=https://你的公网地址/bot/你的bot token" https://api.telegram.org/bot你的bot token/setWebhook

你必须有一个公网地址,可以用 ngrok 做内网穿透,或者用上线的服务器。

到这里,你已经完成了你的第一个 Java + Spring Boot Telegram 机器人!

是的,你已经用 Java 成功写了一个能接收用户消息、并作出回应的 Telegram 机器人。

从申请 Bot 的 token,到搭建 Spring Boot 的项目结构;从接收消息到主动发送回复——你一步一步地实现了整个流程。现在你已经不再是那个“听说过 Telegram 机器人”的人了,你是一个亲手写出了第一个 bot 的开发者。

Java
License:  CC BY 4.0
Share

Further Reading

OLDER

MyBatis-Plus-Join 快速上手指南:让多表查询不再“复杂”,只需一点点魔法!

NEWER

Recently Updated

  • 用 Java + Spring Boot 搞一个 Telegram 机器人?来,带你慢慢来搞!
  • MyBatis-Plus-Join 快速上手指南:让多表查询不再“复杂”,只需一点点魔法!
  • iptables规则持久化
  • Win11的OOBE阶段启用Administrator账户并跳过账户创建步骤
  • 复刻iOS圆环时间选择器

Trending Tags

iOS HTML macOS Redis Java JS Swift Windows Linux JDK

Contents

©2025 Charlie的博客. Some rights reserved.

Using the Halo theme Chirpy