java集成telegram机器人
最近项目需要集成telegram机器人,来实现消息推送功能,以此记录下。
1.创建telegram账号
没有账号的可以去某宝上买一个,千万不要用自己的手机号+86去注册,你懂得。
2. 打开@BotFather对话创建机器人获取token
在搜索框里的输入@BotFather后进入对话框会看到如下界面
然后发送/start开始对话
发送/newbot创建机器人
发送机器人的name和 username,其中username有要求,需要以xxx_bot命名
以下就拿到机器人对应的token,后面我们将通过token给机器人发送消息,token不需要泄露出去了。
3.获取chatId会话ID
telegram中每个用户、群组、频道都是一个会话,会话ID就是chatId,通过会话ID和token就可以给机器人发送消息了。
通过搜索@getidsbot用户然后发送/start获取会话id
当然目前获取的为当前用户的会话ID,如果需要将消息通知到群里面,操作也是一样的,我们只需要将机器人和@getidsbot都拉进群里进行,这样拿到群的会话id。
4.发送请求
telegram官方有对应的api点击查看,将下方token、chatId、message替换即可。
https://api.telegram.org/bot${token}/sendMessage?chat_id=[chatId]&text=${message}
或者直接通过浏览器访问,用于测试
{
"ok": true,
"result": {
"message_id": 9,
"from": {
"id": 7662234082,
"is_bot": true,
"first_name": "test01",
"username": "pitiless223_bot"
},
"chat": {
"id": -4614960807,
"title": "z & test01",
"type": "group",
"all_members_are_administrators": true,
"accepted_gift_types": {
"unlimited_gifts": false,
"limited_gifts": false,
"unique_gifts": false,
"premium_subscription": false
}
},
"date": 1746695605,
"text": "hello"
}
}
5.java代码实现
github上直接有集成好了的插件java-telegram-bot-api
配置maven依赖
<dependency>
<groupId>com.github.pengrad</groupId>
<artifactId>java-telegram-bot-api</artifactId>
<version>8.3.0</version>
</dependency>
以下是我封装好的serve
package com.ruoyi.system.service.impl;
import com.pengrad.telegrambot.TelegramBot;
import com.pengrad.telegrambot.UpdatesListener;
import com.pengrad.telegrambot.model.Update;
import com.pengrad.telegrambot.request.SendMessage;
import com.pengrad.telegrambot.request.SendPhoto;
import com.pengrad.telegrambot.response.SendResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.List;
@Slf4j
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TelegramBotServiceImpl implements UpdatesListener {
/**
* token
*/
@Value("${custom.telegram_bot.token}")
private String telegramBotToken;
/**
* bot
*/
private TelegramBot bot;
@Override
public int process(List<Update> updates) {
updates.forEach(update -> {
log.info("机器人收到消息 -> {}", update);
});
return UpdatesListener.CONFIRMED_UPDATES_ALL;
}
@PostConstruct
public void run() {
// Create your bot passing the token received from @BotFather
this.bot = new TelegramBot(this.telegramBotToken);
// Register for updates
this.bot.setUpdatesListener(this);
}
/**
* 发送消息
*
* @param type 消息类型
* @param chatId 会话ID
* @param text 消息内容
*/
public void sendMessage(Byte type, long chatId, String text) {
SendResponse response;
if (type == 1) {
// 图片
response = bot.execute(new SendPhoto(chatId, text));
} else {
// 文本
response = bot.execute(new SendMessage(chatId, text));
}
log.info("发送消息 -> {}", response);
}
public void close() {
this.bot.removeGetUpdatesListener();
}
}
使用时直接调用即可
TelegramBotServiceImpl.sendMessage(Byte.valueOf("2"), 6576654010L, "请求测试")