diff --git a/server/notification-providers/google-chat.js b/server/notification-providers/google-chat.js
index 9f1b53b7b8..0b72fea95f 100644
--- a/server/notification-providers/google-chat.js
+++ b/server/notification-providers/google-chat.js
@@ -1,8 +1,7 @@
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");
+const { getMonitorRelativeURL, UP } = require("../../src/util");
class GoogleChat extends NotificationProvider {
name = "GoogleChat";
@@ -16,26 +15,71 @@ class GoogleChat extends NotificationProvider {
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";
- }
+ let chatHeader = {
+ title: "Uptime Kuma Alert",
+ };
- if (monitorJSON && monitorJSON.name) {
- textMsg += `*${monitorJSON.name}*\n`;
+ if (monitorJSON && heartbeatJSON) {
+ chatHeader["title"] =
+ heartbeatJSON["status"] === UP
+ ? `✅ ${monitorJSON["name"]} is back online`
+ : `🔴 ${monitorJSON["name"]} went down`;
}
- textMsg += `${msg}`;
+ // always show msg
+ let sectionWidgets = [
+ {
+ textParagraph: {
+ text: `Message:\n${msg}`,
+ },
+ },
+ ];
+ // add time if available
+ if (heartbeatJSON) {
+ sectionWidgets.push({
+ textParagraph: {
+ text: `Time (${heartbeatJSON["timezone"]}):\n${heartbeatJSON["localDateTime"]}`,
+ },
+ });
+ }
+
+ // add button for monitor link if available
const baseURL = await setting("primaryBaseURL");
- if (baseURL && monitorJSON) {
- textMsg += `\n${baseURL + getMonitorRelativeURL(monitorJSON.id)}`;
+ if (baseURL) {
+ const urlPath = monitorJSON ? getMonitorRelativeURL(monitorJSON.id) : "/";
+ sectionWidgets.push({
+ buttonList: {
+ buttons: [
+ {
+ text: "Visit Uptime Kuma",
+ onClick: {
+ openLink: {
+ url: baseURL + urlPath,
+ },
+ },
+ },
+ ],
+ },
+ });
}
- const data = {
- "text": textMsg,
+ let chatSections = [
+ {
+ widgets: sectionWidgets,
+ },
+ ];
+
+ // construct json data
+ let data = {
+ cardsV2: [
+ {
+ card: {
+ header: chatHeader,
+ sections: chatSections,
+ },
+ },
+ ],
};
await axios.post(notification.googleChatWebhookURL, data);