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);
		}
	}
}

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

最后效果

相关推荐
NMIXX爻8 分钟前
线程控制 下
java·开发语言·jvm
时艰.30 分钟前
JVM 垃圾收集器(G1&ZGC)
java·jvm·算法
iRuriCatt1 小时前
智慧景区管理系统 | 计算机毕设项目
java·前端·spring boot·vue·毕设
Eiceblue1 小时前
.NET框架下Windows、Linux、Mac环境C#打印PDF全指南
linux·windows·.net
天空属于哈夫克31 小时前
企业微信外部群运营升级:API 主动推送消息开发实战
java·数据库·mysql
qq_12498707531 小时前
基于springboot的会议室预订系统设计与实现(源码+论文+部署+安装)
java·vue.js·spring boot·后端·信息可视化·毕业设计·计算机毕业设计
愿你天黑有灯下雨有伞1 小时前
java动态渲染列导出以及分页列表
java
skywalk81631 小时前
Windows 下常见的 开源输入法(IME)
windows·开源·输入法
星火开发设计1 小时前
共用体 union:节省内存的特殊数据类型
java·开发语言·数据库·c++·算法·内存
yingdonglan1 小时前
鸿蒙跨端Flutter学习——GridView高级功能
linux·运维·windows