diff --git a/server/notification-providers/wecom.js b/server/notification-providers/wecom.js old mode 100644 new mode 100755 index ea30b26d..d24a35ec --- a/server/notification-providers/wecom.js +++ b/server/notification-providers/wecom.js @@ -3,7 +3,6 @@ const axios = require("axios"); const { DOWN, UP } = require("../../src/util"); class WeCom extends NotificationProvider { - name = "WeCom"; /** @@ -13,13 +12,15 @@ class WeCom extends NotificationProvider { let okMsg = "Sent Successfully."; try { - let WeComUrl = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=" + notification.weComBotKey; + 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); + let body = this.composeMessage(heartbeatJSON, monitorJSON, msg); await axios.post(WeComUrl, body, config); return okMsg; } catch (error) { @@ -30,27 +31,66 @@ 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; - if (msg != null && heartbeatJSON != null && heartbeatJSON["status"] === UP) { - title = "UptimeKuma Monitor Up"; - } - if (msg != null && heartbeatJSON != null && heartbeatJSON["status"] === DOWN) { - title = "UptimeKuma Monitor Down"; - } - if (msg != null) { - title = "UptimeKuma Message"; + composeMessage(heartbeatJSON, monitorJSON, msg) { + if (heartbeatJSON != null) { + return { + msgtype: "template_card", + template_card: { + 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 + }, + }, + }; } return { msgtype: "text", text: { - content: title + 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;