diff --git a/server/notification-providers/google-chat.js b/server/notification-providers/google-chat.js new file mode 100644 index 000000000..1610553c7 --- /dev/null +++ b/server/notification-providers/google-chat.js @@ -0,0 +1,47 @@ +const NotificationProvider = require("./notification-provider"); +const axios = require("axios"); +const { setting } = require("../util-server"); +const { getMonitorRelativeURL } = require("../../src/util"); +const { DOWN, UP } = require("../../src/util"); + +class GoogleChat extends NotificationProvider { + + name = "Google Chat"; + + async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { + let okMsg = "Sent Successfully."; + try { + // Google Chat message formatting: https://developers.google.com/chat/api/guides/message-formats/basic + + let textMsg = '' + if (heartbeatJSON && heartbeatJSON.status === UP) { + textMsg = `✅ Application is back online\n`; + } else if (heartbeatJSON && heartbeatJSON.status === DOWN) { + textMsg = `🔴 Application went down\n`; + } + + if (monitorJSON && monitorJSON.name) { + textMsg += `*${monitorJSON.name}*\n`; + } + + textMsg += `${msg}`; + + const baseURL = await setting("primaryBaseURL"); + if (baseURL) { + textMsg += `\n${baseURL + getMonitorRelativeURL(monitorJSON.id)}`; + } + + const data = { + "text": textMsg, + }; + + await axios.post(notification.googleChatWebhookURL, data); + return okMsg; + } catch (error) { + this.throwGeneralAxiosError(error); + } + + } +} + +module.exports = GoogleChat; diff --git a/server/notification.js b/server/notification.js index 3eb5f97bf..56a7e84d8 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 GoogleChat = require("./notification-providers/google-chat"); class Notification { @@ -62,6 +63,7 @@ class Notification { new Bark(), new SerwerSMS(), new Stackfield(), + new GoogleChat() ]; for (let item of list) { diff --git a/src/components/notifications/GoogleChat.vue b/src/components/notifications/GoogleChat.vue new file mode 100644 index 000000000..c19cae0de --- /dev/null +++ b/src/components/notifications/GoogleChat.vue @@ -0,0 +1,13 @@ + diff --git a/src/components/notifications/index.js b/src/components/notifications/index.js index 155a1ab26..9d870f91c 100644 --- a/src/components/notifications/index.js +++ b/src/components/notifications/index.js @@ -1,4 +1,4 @@ -import STMP from "./SMTP.vue" +import STMP from "./SMTP.vue"; import Telegram from "./Telegram.vue"; import Discord from "./Discord.vue"; import Webhook from "./Webhook.vue"; @@ -23,7 +23,8 @@ import AliyunSMS from "./AliyunSms.vue"; import DingDing from "./DingDing.vue"; import Bark from "./Bark.vue"; import SerwerSMS from "./SerwerSMS.vue"; -import Stackfield from './Stackfield.vue'; +import Stackfield from "./Stackfield.vue"; +import GoogleChat from "./GoogleChat.vue"; /** * Manage all notification form. @@ -57,6 +58,7 @@ const NotificationFormList = { "Bark": Bark, "serwersms": SerwerSMS, "stackfield": Stackfield, -} + "Google Chat (Google Workspace only)": GoogleChat +}; -export default NotificationFormList +export default NotificationFormList; diff --git a/src/languages/bg-BG.js b/src/languages/bg-BG.js index 180b766d1..a731ad09a 100644 --- a/src/languages/bg-BG.js +++ b/src/languages/bg-BG.js @@ -200,7 +200,7 @@ export default { "Primary Base URL": "Основен базов URL адрес", "Push URL": "Генериран Push URL адрес", needPushEvery: "Необходимо е да извършвате заявка към този URL адрес на всеки {0} секунди", - pushOptionalParams: "Допълнителни, но незадължителни параметри: {0}", + pushOptionalParams: "Допълнителни, но не задължителни параметри: {0}", defaultNotificationName: "Моето {notification} известяване ({number})", here: "тук", Required: "Задължително поле", @@ -351,4 +351,13 @@ export default { serwersmsPhoneNumber: "Телефон номер", serwersmsSenderName: "SMS Подател име (регистриран през клиентския портал)", stackfield: "Stackfield", + smtpDkimSettings: "DKIM Настройки", + smtpDkimDesc: "Моля, вижте Nodemailer DKIM {0} за инструкции.", + documentation: "документация", + smtpDkimDomain: "Домейн", + smtpDkimKeySelector: "Селектор на ключ", + smtpDkimPrivateKey: "Частен ключ", + smtpDkimHashAlgo: "Хеш алгоритъм (по желание)", + smtpDkimheaderFieldNames: "Хедър ключове за подписване (по желание)", + smtpDkimskipFields: "Хедър ключове, които да не се подписеат (по желание)", };