Add aliyun sms notification

This commit is contained in:
wuwenjing 2021-10-13 11:55:01 +08:00
parent 1e5ce92917
commit a2f2253221
5 changed files with 99 additions and 0 deletions

View File

@ -52,6 +52,7 @@
"update-language-files": "cd extra/update-language-files && node index.js && eslint ../../src/languages/**.js --fix"
},
"dependencies": {
"@alicloud/pop-core": "^1.7.10",
"@fortawesome/fontawesome-svg-core": "~1.2.36",
"@fortawesome/free-regular-svg-icons": "~5.15.4",
"@fortawesome/free-solid-svg-icons": "~5.15.4",

View File

@ -0,0 +1,70 @@
const NotificationProvider = require("./notification-provider");
const { DOWN, UP } = require("../../src/util");
const Core = require("@alicloud/pop-core");
class AliyunSMS extends NotificationProvider {
name = "AliyunSMS";
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
let okMsg = "Sent Successfully.";
try {
var client = new Core({
accessKeyId: notification.accessKeyId,
accessKeySecret: notification.secretAccessKey,
endpoint: "https://dysmsapi.aliyuncs.com",
apiVersion: "2017-05-25",
});
var params = {
PhoneNumbers: notification.phonenumber,
TemplateCode: notification.templateCode,
SignName: notification.signName,
TemplateParam: JSON.stringify({
name: "",
time: "",
status: "",
msg: msg,
}),
};
if (heartbeatJSON != null) {
params.TemplateParam = JSON.stringify({
name: monitorJSON["name"],
time: heartbeatJSON["time"],
status: this.statusToString(heartbeatJSON["status"]),
msg: heartbeatJSON["msg"],
});
}
var requestOption = {
method: "POST",
};
await client.request("SendSms", params, requestOption).then(
(result) => {
console.log(JSON.stringify(result));
return okMsg;
},
(ex) => {
console.log(ex);
}
);
} catch (error) {
this.throwGeneralAxiosError(error);
}
}
statusToString(status) {
switch (status) {
case DOWN:
return "DOWN";
case UP:
return "UP";
default:
return status;
}
}
}
module.exports = AliyunSMS;

View File

@ -19,6 +19,7 @@ const Teams = require("./notification-providers/teams");
const Telegram = require("./notification-providers/telegram");
const Webhook = require("./notification-providers/webhook");
const Feishu = require("./notification-providers/feishu");
const AliyunSms = require("./notification-providers/aliyun-sms");
class Notification {
@ -31,6 +32,7 @@ class Notification {
const list = [
new Apprise(),
new AliyunSms(),
new Discord(),
new Teams(),
new Gotify(),

View File

@ -0,0 +1,24 @@
<template>
<div class="mb-3">
<label for="accessKeyId" class="form-label">{{ $t("AccessKeyId") }}<span style="color: red;"><sup>*</sup></span></label>
<input id="accessKeyId" v-model="$parent.notification.accessKeyId" type="text" class="form-control" required>
<label for="secretAccessKey" class="form-label">{{ $t("SecretAccessKey") }}<span style="color: red;"><sup>*</sup></span></label>
<input id="secretAccessKey" v-model="$parent.notification.secretAccessKey" type="text" class="form-control" required>
<label for="phonenumber" class="form-label">{{ $t("Phonenumber") }}<span style="color: red;"><sup>*</sup></span></label>
<input id="phonenumber" v-model="$parent.notification.phonenumber" type="text" class="form-control" required>
<label for="templateCode" class="form-label">{{ $t("TemplateCode") }}<span style="color: red;"><sup>*</sup></span></label>
<input id="templateCode" v-model="$parent.notification.templateCode" type="text" class="form-control" required>
<label for="signName" class="form-label">{{ $t("SignName") }}<span style="color: red;"><sup>*</sup></span></label>
<input id="signName" v-model="$parent.notification.signName" type="text" class="form-control" required>
<div class="form-text">
<i18n-t tag="p" keypath="Read more:">
<a href="https://help.aliyun.com/document_detail/101414.html" target="_blank">https://help.aliyun.com/document_detail/101414.html</a>
</i18n-t>
</div>
</div>
</template>

View File

@ -18,6 +18,7 @@ import Pushbullet from "./Pushbullet.vue";
import Line from "./Line.vue";
import Mattermost from "./Mattermost.vue";
import Matrix from "./Matrix.vue";
import AliyunSMS from "./AliyunSms.vue";
/**
* Manage all notification form.
@ -40,6 +41,7 @@ const NotificationFormList = {
"promosms": PromoSMS,
"lunasea": LunaSea,
"Feishu": Feishu,
"AliyunSMS":AliyunSMS,
"apprise": Apprise,
"pushbullet": Pushbullet,
"line": Line,