mirror of
				https://github.com/louislam/uptime-kuma.git
				synced 2025-10-25 07:39:22 +08:00 
			
		
		
		
	Added support for SMSEagle device API notifications
This commit is contained in:
		
							
								
								
									
										71
									
								
								server/notification-providers/smseagle.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								server/notification-providers/smseagle.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | ||||
| const NotificationProvider = require("./notification-provider"); | ||||
| const axios = require("axios"); | ||||
|  | ||||
| class SMSEagle extends NotificationProvider { | ||||
|  | ||||
|     name = "SMSEagle"; | ||||
|  | ||||
|     async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { | ||||
|         let okMsg = "Sent Successfully."; | ||||
|  | ||||
|         try { | ||||
|             let config = { | ||||
|                 headers: { | ||||
|                     "Content-Type": "application/json", | ||||
|                 } | ||||
|             }; | ||||
|  | ||||
|             let postData; | ||||
|             let sendMethod; | ||||
|             let recipientType; | ||||
|  | ||||
|             let encoding = (notification.smseagleEncoding) ? "1" : "0"; | ||||
|             let priority = (notification.smseaglePriority) ? notification.smseaglePriority : "0"; | ||||
|  | ||||
|             if (notification.smseagleRecipientType === "smseagle-contact") { | ||||
|                 recipientType = "contactname"; | ||||
|                 sendMethod = "sms.send_tocontact"; | ||||
|             } | ||||
|             if (notification.smseagleRecipientType === "smseagle-group") { | ||||
|                 recipientType = "groupname"; | ||||
|                 sendMethod = "sms.send_togroup"; | ||||
|             } | ||||
|             if (notification.smseagleRecipientType === "smseagle-to") { | ||||
|                 recipientType = "to"; | ||||
|                 sendMethod = "sms.send_sms"; | ||||
|             } | ||||
|  | ||||
|             let params = { | ||||
|                 access_token: notification.smseagleToken, | ||||
|                 [recipientType]: notification.smseagleRecipient, | ||||
|                 message: msg, | ||||
|                 responsetype: "extended", | ||||
|                 unicode: encoding, | ||||
|                 highpriority: priority | ||||
|             }; | ||||
|  | ||||
|             postData = { | ||||
|                 method: sendMethod, | ||||
|                 params: params | ||||
|             }; | ||||
|  | ||||
|             let resp = await axios.post(notification.smseagleUrl + "/jsonrpc/sms", postData, config); | ||||
|  | ||||
|             if ((JSON.stringify(resp.data)).indexOf("message_id") === -1) { | ||||
|                 let error = ""; | ||||
|                 if (resp.data.result && resp.data.result.error_text) { | ||||
|                     error = `SMSEagle API returned error: ${JSON.stringify(resp.data.result.error_text)}`; | ||||
|                 } else { | ||||
|                     error = "SMSEagle API returned an unexpected response"; | ||||
|                 } | ||||
|                 throw new Error(error); | ||||
|             } | ||||
|  | ||||
|             return okMsg; | ||||
|         } catch (error) { | ||||
|             this.throwGeneralAxiosError(error); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| module.exports = SMSEagle; | ||||
| @@ -32,6 +32,7 @@ const RocketChat = require("./notification-providers/rocket-chat"); | ||||
| const SerwerSMS = require("./notification-providers/serwersms"); | ||||
| const Signal = require("./notification-providers/signal"); | ||||
| const Slack = require("./notification-providers/slack"); | ||||
| const SMSEagle = require("./notification-providers/smseagle"); | ||||
| const SMTP = require("./notification-providers/smtp"); | ||||
| const Squadcast = require("./notification-providers/squadcast"); | ||||
| const Stackfield = require("./notification-providers/stackfield"); | ||||
| @@ -89,6 +90,7 @@ class Notification { | ||||
|             new Signal(), | ||||
|             new SMSManager(), | ||||
|             new Slack(), | ||||
|             new SMSEagle(), | ||||
|             new SMTP(), | ||||
|             new Squadcast(), | ||||
|             new Stackfield(), | ||||
|   | ||||
							
								
								
									
										40
									
								
								src/components/notifications/SMSEagle.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/components/notifications/SMSEagle.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| <template> | ||||
|     <div class="mb-3"> | ||||
|         <label for="smseagle-url" class="form-label">{{ $t("smseagleUrl") }}</label> | ||||
|         <input id="smseagle-url" v-model="$parent.notification.smseagleUrl" type="text" minlength="7" class="form-control" placeholder="http://127.0.0.1" required> | ||||
|     </div> | ||||
|     <div class="mb-3"> | ||||
|         <label for="smseagle-token" class="form-label">{{ $t("smseagleToken") }}</label> | ||||
|         <HiddenInput id="smseagle-token" v-model="$parent.notification.smseagleToken" :required="true"></HiddenInput> | ||||
|     </div> | ||||
|     <div class="mb-3"> | ||||
|         <label for="smseagle-recipient-type" class="form-label">{{ $t("smseagleRecipientType") }}</label> | ||||
|         <select id="smseagle-recipient-type" v-model="$parent.notification.smseagleRecipientType" class="form-select"> | ||||
|             <option value="smseagle-to" selected>{{ $t("smseagleTo") }}</option> | ||||
|             <option value="smseagle-group">{{ $t("smseagleGroup") }}</option> | ||||
|             <option value="smseagle-contact">{{ $t("smseagleContact") }}</option> | ||||
|         </select> | ||||
|     </div> | ||||
|     <div class="mb-3"> | ||||
|         <label for="smseagle-recipient" class="form-label">{{ $t("smseagleRecipient") }}</label> | ||||
|         <input id="smseagle-recipient" v-model="$parent.notification.smseagleRecipient" type="text" class="form-control" required> | ||||
|     </div> | ||||
|     <div class="mb-3"> | ||||
|         <label for="smseagle-priority" class="form-label">{{ $t("smseaglePriority") }}</label> | ||||
|         <input id="smseagle-priority" v-model="$parent.notification.smseaglePriority" type="number" class="form-control" min="0" max="9" step="1" placeholder="0"> | ||||
|     </div> | ||||
|     <div class="mb-3 form-check form-switch"> | ||||
|         <label for="smseagle-encoding" class="form-label">{{ $t("smseagleEncoding") }}</label> | ||||
|         <input id="smseagle-encoding" v-model="$parent.notification.smseagleEncoding" type="checkbox" class="form-check-input"> | ||||
|     </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import HiddenInput from "../HiddenInput.vue"; | ||||
|  | ||||
| export default { | ||||
|     components: { | ||||
|         HiddenInput, | ||||
|     }, | ||||
| }; | ||||
| </script> | ||||
| @@ -33,6 +33,7 @@ import Signal from "./Signal.vue"; | ||||
| import SMSManager from "./SMSManager.vue"; | ||||
| import Slack from "./Slack.vue"; | ||||
| import Squadcast from "./Squadcast.vue"; | ||||
| import SMSEagle from "./SMSEagle.vue"; | ||||
| import Stackfield from "./Stackfield.vue"; | ||||
| import STMP from "./SMTP.vue"; | ||||
| import Teams from "./Teams.vue"; | ||||
| @@ -83,6 +84,7 @@ const NotificationFormList = { | ||||
|     "SMSManager": SMSManager, | ||||
|     "slack": Slack, | ||||
|     "squadcast": Squadcast, | ||||
|     "SMSEagle": SMSEagle, | ||||
|     "smtp": STMP, | ||||
|     "stackfield": Stackfield, | ||||
|     "teams": Teams, | ||||
|   | ||||
| @@ -378,6 +378,16 @@ export default { | ||||
|     serwersmsAPIPassword: "API Password", | ||||
|     serwersmsPhoneNumber: "Phone number", | ||||
|     serwersmsSenderName: "SMS Sender Name (registered via customer portal)", | ||||
|     smseagle: "SMSEagle", | ||||
|     smseagleTo: "Phone number(s)", | ||||
|     smseagleGroup: "Phonebook group name(s)", | ||||
|     smseagleContact: "Phonebook contact name(s)", | ||||
|     smseagleRecipientType: "Recipient type", | ||||
|     smseagleRecipient: "Recipient(s) (multiple must be separated with comma)", | ||||
|     smseagleToken: "API Access token", | ||||
|     smseagleUrl: "Your SMSEagle device URL", | ||||
|     smseagleEncoding: "Send as Unicode", | ||||
|     smseaglePriority: "Message priority (0-9, default = 0)", | ||||
|     stackfield: "Stackfield", | ||||
|     Customize: "Customize", | ||||
|     "Custom Footer": "Custom Footer", | ||||
|   | ||||
| @@ -359,6 +359,16 @@ export default { | ||||
|     serwersmsAPIPassword: "Hasło API", | ||||
|     serwersmsPhoneNumber: "Numer telefonu", | ||||
|     serwersmsSenderName: "Nazwa nadawcy (zatwierdzona w panelu klienta)", | ||||
|     smseagle: "SMSEagle", | ||||
|     smseagleTo: "Numer/y telefonu", | ||||
|     smseagleGroup: "Grupa/y z Książki adresowej", | ||||
|     smseagleContact: "Kontakt/y z Książki adresowej", | ||||
|     smseagleRecipientType: "Typ odbiorcy", | ||||
|     smseagleRecipient: "Odbiorca/y (wiele musi być oddzielone przecinkami)", | ||||
|     smseagleToken: "Klucz dostępu API", | ||||
|     smseagleUrl: "URL Twojego urządzenia SMSEagle", | ||||
|     smseagleEncoding: "Wyślij jako Unicode", | ||||
|     smseaglePriority: "Priorytet wiadomości (0-9, domyślnie = 0)", | ||||
|     stackfield: "Stackfield", | ||||
|     Customize: "Dostosuj", | ||||
|     "Custom Footer": "Niestandardowa stopka", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user