From 8d37ea78ccb3de3c27f577c48cc5155d6eef29bc Mon Sep 17 00:00:00 2001 From: Wonder Date: Sun, 12 Oct 2025 20:58:20 +0800 Subject: [PATCH] =?UTF-8?q?=20=E2=9C=A8Feat:=20=E5=AE=9E=E7=8E=B0=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=8D=A1=E7=89=87=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- .../hezhaohui/lark/constant/AppConstant.java | 2 + .../cn/hezhaohui/lark/entity/CardData.java | 18 ++++++ .../java/cn/hezhaohui/lark/util/Lark.java | 60 +++++++++++++++++++ .../java/cn/hezhaohui/lark/util/LarkTest.java | 17 ++++++ pom.xml | 5 ++ 6 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 lark-sender/src/main/java/cn/hezhaohui/lark/entity/CardData.java diff --git a/.gitignore b/.gitignore index 6b53470..e5aa5b3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ .idea *.iml -/target \ No newline at end of file +target \ No newline at end of file diff --git a/lark-sender/src/main/java/cn/hezhaohui/lark/constant/AppConstant.java b/lark-sender/src/main/java/cn/hezhaohui/lark/constant/AppConstant.java index f10f0fd..aef9238 100644 --- a/lark-sender/src/main/java/cn/hezhaohui/lark/constant/AppConstant.java +++ b/lark-sender/src/main/java/cn/hezhaohui/lark/constant/AppConstant.java @@ -3,4 +3,6 @@ package cn.hezhaohui.lark.constant; public class AppConstant { public static final String APP_ID = "cli_a860966d8eb69013"; public static final String APP_SECRET = "srCSYZQDaglgSkLSs5MGrfEsCW4fCQE2"; + public static final String TEMPATE_ID = "AAqxBOlIDzI20"; + public static final String TEMPLATE_VERSION = "1.0.0"; } diff --git a/lark-sender/src/main/java/cn/hezhaohui/lark/entity/CardData.java b/lark-sender/src/main/java/cn/hezhaohui/lark/entity/CardData.java new file mode 100644 index 0000000..2f0f705 --- /dev/null +++ b/lark-sender/src/main/java/cn/hezhaohui/lark/entity/CardData.java @@ -0,0 +1,18 @@ +package cn.hezhaohui.lark.entity; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class CardData { + private String ai; + private String link; + private String msg; + private String repo; + private String subtitle; + private String tag; + private String title; + + +} diff --git a/lark-sender/src/main/java/cn/hezhaohui/lark/util/Lark.java b/lark-sender/src/main/java/cn/hezhaohui/lark/util/Lark.java index feaa0ba..c734d0b 100644 --- a/lark-sender/src/main/java/cn/hezhaohui/lark/util/Lark.java +++ b/lark-sender/src/main/java/cn/hezhaohui/lark/util/Lark.java @@ -2,6 +2,7 @@ package cn.hezhaohui.lark.util; import cn.hezhaohui.lark.constant.AppConstant; import cn.hezhaohui.lark.constant.UserConstant; +import cn.hezhaohui.lark.entity.CardData; import com.google.gson.JsonParser; import com.lark.oapi.Client; import com.lark.oapi.core.utils.Jsons; @@ -57,4 +58,63 @@ public class Lark { } +// SDK 使用文档:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/java-sdk-guide/preparations +// 复制该 Demo 后, 需要将 "YOUR_APP_ID", "YOUR_APP_SECRET" 替换为自己应用的 APP_ID, APP_SECRET. +// 以下示例代码默认根据文档示例值填充,如果存在代码问题,请在 API 调试台填上相关必要参数后再复制代码使用 + + + public static void sendCardMessage(CardData cardData) throws Exception { + // 构建client + Client client = Client.newBuilder(AppConstant.APP_ID, AppConstant.APP_SECRET).build(); + + // 生成uuid + String uuid = UUID.randomUUID().toString(); + + // 创建卡片内容 + Map cardContent = new HashMap<>(); + cardContent.put("ai", cardData.getAi()); + cardContent.put("link", cardData.getLink()); + cardContent.put("msg", cardData.getMsg()); + cardContent.put("repo", cardData.getRepo()); + cardContent.put("subtitle", cardData.getSubtitle()); + cardContent.put("tag", cardData.getTag()); + cardContent.put("title", cardData.getTitle()); +// String jsonCardContent = Jsons.DEFAULT.toJson(cardContent); + + Map templateData = new HashMap<>(); + templateData.put("template_id", AppConstant.TEMPATE_ID); + templateData.put("template_version_name", AppConstant.TEMPLATE_VERSION); + templateData.put("template_variable", cardContent); +// String jsonCardContent = Jsons.DEFAULT.toJson(templateData); + + Map jsonContent = new HashMap<>(); + jsonContent.put("data", templateData); + jsonContent.put("type", "template"); + String json = Jsons.DEFAULT.toJson(jsonContent); + + // 创建请求对象 + CreateMessageReq req = CreateMessageReq.newBuilder() + .receiveIdType("open_id") + .createMessageReqBody(CreateMessageReqBody.newBuilder() + .receiveId(UserConstant.USER_OPEN_ID) + .msgType("interactive") + .content(json) + .uuid(uuid) + .build()) + .build(); + + // 发起请求 + CreateMessageResp resp = client.im().v1().message().create(req); + + // 处理服务端错误 + if(!resp.success()) { + System.out.println(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; + } + + // 业务数据处理 + System.out.println(Jsons.DEFAULT.toJson(resp.getData())); + } + } diff --git a/lark-sender/src/test/java/cn/hezhaohui/lark/util/LarkTest.java b/lark-sender/src/test/java/cn/hezhaohui/lark/util/LarkTest.java index 789289a..ec68c9b 100644 --- a/lark-sender/src/test/java/cn/hezhaohui/lark/util/LarkTest.java +++ b/lark-sender/src/test/java/cn/hezhaohui/lark/util/LarkTest.java @@ -1,5 +1,6 @@ package cn.hezhaohui.lark.util; +import cn.hezhaohui.lark.entity.CardData; import org.junit.Test; public class LarkTest { @@ -9,4 +10,20 @@ public class LarkTest { public void sendTextMessage() throws Exception { Lark.sendTextMessage("测试消息"); } + + @Test + public void testSendCardMessage() throws Exception{ + CardData cardData = CardData.builder() + .ai("待开发") + .tag("PUSH") + .msg("[1d7e6a]✨Feat: 实现文本消息发送\n" + + "[c5e3bb]\uD83D\uDD27Chore: 构建 Maven 项目框架") + .title("[Gitea] 仓库状态变化") + .repo("lark-webhook-sender") + .link("http://47.121.181.112:3000/wonder/lark-webhook-sender") + .subtitle("Ciallo~(∠・ω< )⌒★") + .build(); + Lark.sendCardMessage(cardData); + + } } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 4e69b99..39030a7 100644 --- a/pom.xml +++ b/pom.xml @@ -32,6 +32,11 @@ junit test + + org.projectlombok + lombok + provided + \ No newline at end of file