From c70ec1ea503a00262101cb70a4b9f6dfe6116575 Mon Sep 17 00:00:00 2001 From: darkclip Date: Thu, 31 Oct 2024 01:26:46 +0800 Subject: [PATCH] Use template_card instead of text messages for the WeCom notification provider --- server/notification-providers/wecom.js | 81 +++++++++++++++++++++----- 1 file changed, 68 insertions(+), 13 deletions(-) diff --git a/server/notification-providers/wecom.js b/server/notification-providers/wecom.js index 1eb069095..2b509c8a9 100644 --- a/server/notification-providers/wecom.js +++ b/server/notification-providers/wecom.js @@ -12,13 +12,16 @@ class WeCom extends NotificationProvider { const okMsg = "Sent Successfully."; try { + let WeComUrl = + "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=" + + notification.weComBotKey; let config = { headers: { - "Content-Type": "application/json" - } + "Content-Type": "application/json", + }, }; - let body = this.composeMessage(heartbeatJSON, msg); - await axios.post(`https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${notification.weComBotKey}`, body, config); + let body = this.composeMessage(heartbeatJSON, monitorJSON, msg); + await axios.post(WeComUrl, body, config); return okMsg; } catch (error) { this.throwGeneralAxiosError(error); @@ -28,24 +31,76 @@ class WeCom extends NotificationProvider { /** * Generate the message to send * @param {object} heartbeatJSON Heartbeat details (For Up/Down only) + * @param {object} monitorJSON Monitor details * @param {string} msg General message * @returns {object} Message */ - composeMessage(heartbeatJSON, msg) { - let title = "UptimeKuma Message"; - if (msg != null && heartbeatJSON != null && heartbeatJSON["status"] === UP) { - title = "UptimeKuma Monitor Up"; - } - if (msg != null && heartbeatJSON != null && heartbeatJSON["status"] === DOWN) { - title = "UptimeKuma Monitor Down"; + composeMessage(heartbeatJSON, monitorJSON, msg) { + if (heartbeatJSON != null) { + const templateCard = { + card_type: "text_notice", + main_title: { + title: this.statusToString( + heartbeatJSON["status"], + monitorJSON["name"] + ), + }, + sub_title_text: heartbeatJSON["msg"], + horizontal_content_list: [ + { + keyname: "Timezone", + value: heartbeatJSON["timezone"], + }, + { + keyname: "Time", + value: heartbeatJSON["localDateTime"], + }, + ], + card_action: { + type: 1, + url: monitorJSON["url"] + ? monitorJSON["url"] + : "https://github.com/louislam/uptime-kuma", // both card_action and card_action.url are mandatory + }, + }; + if (monitorJSON["url"]) { + templateCard["jump_list"] = [ + { + type: 1, + url: monitorJSON["url"], + title: "Monitor URL", + }, + ]; + } + return { + msgtype: "template_card", + template_card: templateCard, + }; } return { msgtype: "text", text: { - content: title + "\n" + msg - } + content: msg, + }, }; } + + /** + * Convert status constant to string + * @param {const} status The status constant + * @param {string} monitorName Name of monitor + * @returns {string} Status + */ + statusToString(status, monitorName) { + switch (status) { + case DOWN: + return `🔴 [${monitorName}] DOWN`; + case UP: + return `✅ [${monitorName}] UP`; + default: + return "Notification"; + } + } } module.exports = WeCom;