From 40b70277c7a26ac64b880e5595f5ab69d55575d9 Mon Sep 17 00:00:00 2001 From: LeslieLeung Date: Sun, 26 Dec 2021 01:33:47 +0800 Subject: [PATCH] feat(*): support WeCom notification --- server/notification-providers/wecom.js | 47 ++++++++++++++++++++++++++ server/notification.js | 2 ++ src/components/notifications/WeCom.vue | 12 +++++++ src/components/notifications/index.js | 2 ++ 4 files changed, 63 insertions(+) create mode 100644 server/notification-providers/wecom.js create mode 100644 src/components/notifications/WeCom.vue diff --git a/server/notification-providers/wecom.js b/server/notification-providers/wecom.js new file mode 100644 index 000000000..7ba8c3783 --- /dev/null +++ b/server/notification-providers/wecom.js @@ -0,0 +1,47 @@ +const NotificationProvider = require("./notification-provider"); +const axios = require("axios"); +const { DOWN, UP } = require("../../src/util"); + +class WeCom extends NotificationProvider { + + name = "WeCom"; + + async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { + let 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" + } + }; + let body = this.composeMessage(heartbeatJSON, msg); + await axios.post(WeComUrl, body, config); + return okMsg; + } catch (error) { + this.throwGeneralAxiosError(error); + } + } + + 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"; + } + return { + msgtype: "text", + text: { + content: title + msg + } + }; + } +} + +module.exports = WeCom; diff --git a/server/notification.js b/server/notification.js index 3eb5f97bf..868e11fa7 100644 --- a/server/notification.js +++ b/server/notification.js @@ -25,6 +25,7 @@ const DingDing = require("./notification-providers/dingding"); const Bark = require("./notification-providers/bark"); const SerwerSMS = require("./notification-providers/serwersms"); const Stackfield = require("./notification-providers/stackfield"); +const WeCom = require("./notification-providers/wecom"); class Notification { @@ -62,6 +63,7 @@ class Notification { new Bark(), new SerwerSMS(), new Stackfield(), + new WeCom(), ]; for (let item of list) { diff --git a/src/components/notifications/WeCom.vue b/src/components/notifications/WeCom.vue new file mode 100644 index 000000000..cef3708d1 --- /dev/null +++ b/src/components/notifications/WeCom.vue @@ -0,0 +1,12 @@ + diff --git a/src/components/notifications/index.js b/src/components/notifications/index.js index 155a1ab26..15cc09c7e 100644 --- a/src/components/notifications/index.js +++ b/src/components/notifications/index.js @@ -24,6 +24,7 @@ import DingDing from "./DingDing.vue"; import Bark from "./Bark.vue"; import SerwerSMS from "./SerwerSMS.vue"; import Stackfield from './Stackfield.vue'; +import WeCom from "./WeCom.vue"; /** * Manage all notification form. @@ -57,6 +58,7 @@ const NotificationFormList = { "Bark": Bark, "serwersms": SerwerSMS, "stackfield": Stackfield, + "WeCom": WeCom, } export default NotificationFormList