diff --git a/server/notification-providers/46elks.js b/server/notification-providers/46elks.js
new file mode 100644
index 0000000000..4b15e9fad7
--- /dev/null
+++ b/server/notification-providers/46elks.js
@@ -0,0 +1,35 @@
+const NotificationProvider = require("./notification-provider");
+const axios = require("axios");
+
+class Elks extends NotificationProvider {
+ name = "Elks";
+
+ /**
+ * @inheritdoc
+ */
+ async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
+ const okMsg = "Sent Successfully.";
+ const url = "https://api.46elks.com/a1/sms";
+
+ try {
+ let data = new URLSearchParams();
+ data.append("from", notification.elksFromNumber);
+ data.append("to", notification.elksToNumber );
+ data.append("message", msg);
+
+ const config = {
+ headers: {
+ "Authorization": "Basic " + Buffer.from(`${notification.elksUsername}:${notification.elksAuthToken}`).toString("base64")
+ }
+ };
+
+ await axios.post(url, data, config);
+
+ return okMsg;
+ } catch (error) {
+ this.throwGeneralAxiosError(error);
+ }
+ }
+}
+
+module.exports = Elks;
diff --git a/server/notification-providers/techulus-push.js b/server/notification-providers/techulus-push.js
index 230897f3ca..bf688b194d 100644
--- a/server/notification-providers/techulus-push.js
+++ b/server/notification-providers/techulus-push.js
@@ -10,11 +10,22 @@ class TechulusPush extends NotificationProvider {
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
const okMsg = "Sent Successfully.";
+ let data = {
+ "title": notification?.pushTitle?.length ? notification.pushTitle : "Uptime-Kuma",
+ "body": msg,
+ "timeSensitive": notification.pushTimeSensitive ?? true,
+ };
+
+ if (notification.pushChannel) {
+ data.channel = notification.pushChannel;
+ }
+
+ if (notification.pushSound) {
+ data.sound = notification.pushSound;
+ }
+
try {
- await axios.post(`https://push.techulus.com/api/v1/notify/${notification.pushAPIKey}`, {
- "title": "Uptime-Kuma",
- "body": msg,
- });
+ await axios.post(`https://push.techulus.com/api/v1/notify/${notification.pushAPIKey}`, data);
return okMsg;
} catch (error) {
this.throwGeneralAxiosError(error);
diff --git a/server/notification.js b/server/notification.js
index 60eae4d739..26daeb0428 100644
--- a/server/notification.js
+++ b/server/notification.js
@@ -11,6 +11,7 @@ const CallMeBot = require("./notification-providers/call-me-bot");
const SMSC = require("./notification-providers/smsc");
const DingDing = require("./notification-providers/dingding");
const Discord = require("./notification-providers/discord");
+const Elks = require("./notification-providers/46elks");
const Feishu = require("./notification-providers/feishu");
const FreeMobile = require("./notification-providers/freemobile");
const GoogleChat = require("./notification-providers/google-chat");
@@ -95,6 +96,7 @@ class Notification {
new SMSC(),
new DingDing(),
new Discord(),
+ new Elks(),
new Feishu(),
new FreeMobile(),
new GoogleChat(),
diff --git a/src/components/NotificationDialog.vue b/src/components/NotificationDialog.vue
index 864cbf5f4d..ec86d15f8a 100644
--- a/src/components/NotificationDialog.vue
+++ b/src/components/NotificationDialog.vue
@@ -118,6 +118,7 @@ export default {
"clicksendsms": "ClickSend SMS",
"CallMeBot": "CallMeBot (WhatsApp, Telegram Call, Facebook Messanger)",
"discord": "Discord",
+ "Elks": "46elks",
"GoogleChat": "Google Chat (Google Workspace)",
"gorush": "Gorush",
"gotify": "Gotify",
diff --git a/src/components/notifications/46elks.vue b/src/components/notifications/46elks.vue
new file mode 100644
index 0000000000..d29655bd51
--- /dev/null
+++ b/src/components/notifications/46elks.vue
@@ -0,0 +1,48 @@
+
+