diff --git a/server/notification-providers/wecom.js b/server/notification-providers/wecom.js
index 1eb069095..529baa1b2 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,77 @@ 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) {
+        const address = this.extractAddress(monitorJSON);
+        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: address
+                        ? address
+                        : "https://github.com/louislam/uptime-kuma", // both card_action and card_action.url are mandatory
+                },
+            };
+            if (address) {
+                templateCard["jump_list"] = [
+                    {
+                        type: 1,
+                        url: address,
+                        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;