Java接入飞书发送通知消息

添加依赖

xml 复制代码
        <!--飞书推送-->
        <dependency>
            <groupId>com.larksuite.oapi</groupId>
            <artifactId>oapi-sdk</artifactId>
            <version>2.4.22</version>
        </dependency>

创建应用,添加机器人


开通权限

制作卡片

这里配置了一个变量,用来接收具体的消息内容

Java代码

java 复制代码
					//飞书推送消息
					List<String> targetUserIds = new ArrayList<>();//接收消息的open_id
					targetUserIds.add(iDictValue.getDictValue("jcNotice",underTakeId));
					String content = balanceUser+" 平衡的集中采购合同号("+poNo+"),已经生成,请及时处理!";
					feishuUserService.batchPushMessage(targetUserIds, content);
java 复制代码
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.lark.oapi.Client;
import com.lark.oapi.core.response.RawResponse;
import com.lark.oapi.core.token.AccessTokenType;
import com.lark.oapi.core.utils.Jsons;
import com.lark.oapi.service.im.v1.model.CreateMessageReq;
import com.lark.oapi.service.im.v1.model.CreateMessageReqBody;
import com.lark.oapi.service.im.v1.model.CreateMessageResp;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.nio.charset.StandardCharsets;
import java.util.List;

@Service
@Slf4j
public class FeishuUserServiceImpl implements IFeishuUserService{

	@Value("${feishu.app-id}")
	private String appId;

	@Value("${feishu.app-secret}")
	private String appSecret;


	//飞书消息推送
	public void pushMessage(String openId, String content) throws Exception {
		// 构建client
		Client client = Client.newBuilder(appId, appSecret).build();

		// 创建请求对象
		CreateMessageReq req = CreateMessageReq.newBuilder()
			.receiveIdType("open_id")
			.createMessageReqBody(CreateMessageReqBody.newBuilder()
				.receiveId(openId)
				.msgType("text")
				.content("{\"text\":\"" + content + "\"}")
				.build())
			.build();

		// 发起请求
		CreateMessageResp resp = client.im().v1().message().create(req);

		// 处理服务端错误
		if(!resp.success()) {
			log.error(String.format("code:%s,msg:%s,reqId:%s, resp:%s",
				resp.getCode(), resp.getMsg(), resp.getRequestId(), Jsons.createGSON(true, false).toJson(JsonParser.parseString(new String(resp.getRawResponse().getBody(), StandardCharsets.UTF_8)))));
			return;
		}

		// 业务数据处理
		log.info(Jsons.DEFAULT.toJson(resp.getData()));
	}

	//批量推送
	@Override
	public void batchPushMessage(List<String> openIds, String content) {
		// 构建client
		Client client = Client.newBuilder(appId, appSecret).build();

		// 检查参数有效性
		if (openIds == null || openIds.isEmpty()) {
			return;
		}

		if (content == null || content.trim().isEmpty()) {
			return;
		}

		try {
			// 构建接收者ID列表
			JsonArray ids = new JsonArray();
			for (String openId : openIds) {
				ids.add(openId);
			}

			// 构建消息内容
			JsonObject contentObj = new JsonObject();
			contentObj.addProperty("type", "template");
			JsonObject cardData = new JsonObject();
			cardData.addProperty("template_id", "AAqhywvSQImB5");//卡片ID
			JsonObject tampVar = new JsonObject();
			tampVar.addProperty("noticeInfo", content);//消息变量
			cardData.add("template_variable", tampVar);
			contentObj.add("data", cardData);

			// 构建请求体
			JsonObject body = new JsonObject();
			body.addProperty("msg_type", "interactive");
			body.add("open_ids", ids);
			body.add("card", contentObj);

			// 发送请求
			RawResponse rawResponse = client.post(
				"/open-apis/message/v4/batch_send/",
				body,
				AccessTokenType.Tenant
			);

			// 解析响应
			if (rawResponse.getStatusCode() == 200) {
				log.info("批量推送消息成功");
			} else {
				log.error("批量推送消息失败");
			}
		} catch (Exception e) {
			log.error("批量推送消息异常", e);
		}
	}
}

配置文件就是飞书中的应用凭证

最后效果

相关推荐
win x7 分钟前
Redis 主从复制
java·数据库·redis
weixin_4239950026 分钟前
unity 处理图片:截图,下载,保存
java·unity·游戏引擎
帅气的你29 分钟前
从零封装一个通用的 API 接口返回类:统一前后端交互格式
java·设计模式
qq_1780570731 分钟前
基于minio实现的分片上传-支持断点续传
java
高山上有一只小老虎34 分钟前
灵异背包?
java·算法
码农水水35 分钟前
大疆Java面试被问:TCC事务的悬挂、空回滚问题解决方案
java·开发语言·人工智能·面试·职场和发展·单元测试·php
qq_25183645740 分钟前
基于java Web 个人网站系统设计与实现
java·开发语言·数据库
帅气的你42 分钟前
Spring Boot 1.x 接口性能优化:从 3 秒到 200 毫秒的实战调优之路
java·spring boot
原神启动11 小时前
K8S(五)—— YAML文件解析
java·容器·kubernetes
周末吃鱼1 小时前
Lambda作用域
java·开发语言