From 95838bc5e31888c792ef937cb2afbda74889fc86 Mon Sep 17 00:00:00 2001 From: xiao0yy Date: Wed, 15 Dec 2021 20:40:25 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A3=9E=E4=B9=A6=E4=BD=BF=E7=94=A8Card?= =?UTF-8?q?=E5=8F=91=E9=80=81=E9=80=9A=E7=9F=A5=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../idormy/sms/forwarder/SenderActivity.java | 2 +- .../idormy/sms/forwarder/sender/SendUtil.java | 2 +- .../sms/forwarder/sender/SenderFeishuMsg.java | 84 +++++++++++++++++-- 3 files changed, 80 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java b/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java index 02117e63..74bf093b 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/SenderActivity.java @@ -1293,7 +1293,7 @@ public class SenderActivity extends AppCompatActivity { String secret = editTextFeishuSecret.getText().toString().trim(); if (!token.isEmpty()) { try { - SenderFeishuMsg.sendMsg(0, handler, token, secret, getString(R.string.test_content) + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))); + SenderFeishuMsg.sendMsg(0, handler, token, secret, getString(R.string.test_phone_num), new Date(), getString(R.string.test_sms)); } catch (Exception e) { Toast.makeText(SenderActivity.this, getString(R.string.failed_to_fwd) + e.getMessage(), Toast.LENGTH_LONG).show(); e.printStackTrace(); diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java index 703491e5..babeb8c0 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java @@ -267,7 +267,7 @@ public class SendUtil { FeiShuSettingVo feiShuSettingVo = JSON.parseObject(senderModel.getJsonSetting(), FeiShuSettingVo.class); if (feiShuSettingVo != null) { try { - SenderFeishuMsg.sendMsg(logId, handError, feiShuSettingVo.getWebhook(), feiShuSettingVo.getSecret(), smsVo.getSmsVoForSend(smsTemplate, regexReplace)); + SenderFeishuMsg.sendMsg(logId, handError, feiShuSettingVo.getWebhook(), feiShuSettingVo.getSecret(), smsVo.getMobile(), smsVo.getDate(), smsVo.getSmsVoForSend(smsTemplate, regexReplace)); } catch (Exception e) { LogUtil.updateLog(logId, 0, e.getMessage()); Log.e(TAG, "senderSendMsg: feishu error " + e.getMessage()); diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java index d7f017d3..80b220fd 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java @@ -12,6 +12,8 @@ import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -35,7 +37,60 @@ public class SenderFeishuMsg extends SenderBaseMsg { static final String TAG = "SenderFeishuMsg"; - public static void sendMsg(final long logId, final Handler handError, String webhook, String secret, String content) throws Exception { + static final String MSG_TEMPLATE = "{\n" + + " \"config\": {\n" + + " \"wide_screen_mode\": true\n" + + " },\n" + + " \"elements\": [\n" + + " {\n" + + " \"fields\": [\n" + + " {\n" + + " \"is_short\": true,\n" + + " \"text\": {\n" + + " \"content\": \"**时间**\\n${MSG_TIME}\",\n" + + " \"tag\": \"lark_md\"\n" + + " }\n" + + " },\n" + + " {\n" + + " \"is_short\": true,\n" + + " \"text\": {\n" + + " \"content\": \"**来源**\\n${MSG_FROM}\",\n" + + " \"tag\": \"lark_md\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"tag\": \"div\"\n" + + " },\n" + + " {\n" + + " \"tag\": \"div\",\n" + + " \"text\": {\n" + + " \"content\": \"${MSG_CONTENT}\",\n" + + " \"tag\": \"lark_md\"\n" + + " }\n" + + " },\n" + + " {\n" + + " \"tag\": \"hr\"\n" + + " },\n" + + " {\n" + + " \"elements\": [\n" + + " {\n" + + " \"content\": \"[SmsForwarder](https://github.com/pppscn/SmsForwarder)\",\n" + + " \"tag\": \"lark_md\"\n" + + " }\n" + + " ],\n" + + " \"tag\": \"note\"\n" + + " }\n" + + " ],\n" + + " \"header\": {\n" + + " \"template\": \"turquoise\",\n" + + " \"title\": {\n" + + " \"content\": \"${MSG_TITLE}\",\n" + + " \"tag\": \"plain_text\"\n" + + " }\n" + + " }\n" + + "}"; + + public static void sendMsg(final long logId, final Handler handError, String webhook, String secret, String from, Date date, String content) throws Exception { Log.i(TAG, "sendMsg webhook:" + webhook + " secret:" + secret + " content:" + content); if (webhook == null || webhook.isEmpty()) { @@ -62,14 +117,12 @@ public class SenderFeishuMsg extends SenderBaseMsg { } //组装报文 - textMsgMap.put("msg_type", "text"); - Map contentMap = new HashMap(); - contentMap.put("text", content); - textMsgMap.put("content", contentMap); + textMsgMap.put("msg_type", "interactive"); + textMsgMap.put("card", "${CARD_BODY}"); final String requestUrl = webhook; Log.i(TAG, "requestUrl:" + requestUrl); - final String requestMsg = JSON.toJSONString(textMsgMap); + final String requestMsg = JSON.toJSONString(textMsgMap).replace("\"${CARD_BODY}\"", buildMsg(from, date, content)); Log.i(TAG, "requestMsg:" + requestMsg); Observable @@ -123,4 +176,23 @@ public class SenderFeishuMsg extends SenderBaseMsg { .subscribe(System.out::println); } + private static String buildMsg(String from, Date date, String content) { + String msgTitle = jsonInnerStr("【" + SettingUtil.getAddExtraDeviceMark().trim() + "】来自" + from + "的通知"); + String msgTime = jsonInnerStr(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)); + String msgFrom = jsonInnerStr(from); + String msgContent = jsonInnerStr(content); + return MSG_TEMPLATE.replace("${MSG_TITLE}", msgTitle) + .replace("${MSG_TIME}", msgTime) + .replace("${MSG_FROM}", msgFrom) + .replace("${MSG_CONTENT}", msgContent); + } + + private static String jsonInnerStr(String string) { + if (string == null) { + return "null"; + } + String jsonStr = JSON.toJSONString(string); + return jsonStr.length() >= 2 ? jsonStr.substring(1, jsonStr.length() - 1) : jsonStr; + } + }