Click send sms integration for notifications

pull/798/head
Tarun Singh 3 years ago
parent 8a481a1be0
commit bc68088350

@ -0,0 +1,43 @@
const NotificationProvider = require("./notification-provider");
const axios = require("axios");
class ClickSendSMS extends NotificationProvider {
name = "clicksendsms";
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
let okMsg = "Sent Successfully.";
try {
console.log({ notification });
let config = {
headers: {
"Content-Type": "application/json",
"Authorization": "Basic " + Buffer.from(notification.clicksendsmsLogin + ":" + notification.clicksendsmsPassword).toString('base64'),
"Accept": "text/json",
}
};
let data = {
messages: [
{
"body": msg.replace(/[^\x00-\x7F]/g, ""),
// TODO: To phone number concept to be added
"to": "+61411111111",
"source": "uptime-kuma",
"from": notification.clicksendsmsSenderName,
}
]
};
let resp = await axios.post("https://rest.clicksend.com/v3/sms/send", data, config);
if (resp.data.http_code !== 200) {
let error = "Something gone wrong. Api returned " + resp.data.response.status + ".";
this.throwGeneralAxiosError(error);
}
return okMsg;
} catch (error) {
this.throwGeneralAxiosError(error);
}
}
}
module.exports = ClickSendSMS;

@ -8,6 +8,7 @@ const Mattermost = require("./notification-providers/mattermost");
const Matrix = require("./notification-providers/matrix"); const Matrix = require("./notification-providers/matrix");
const Octopush = require("./notification-providers/octopush"); const Octopush = require("./notification-providers/octopush");
const PromoSMS = require("./notification-providers/promosms"); const PromoSMS = require("./notification-providers/promosms");
const ClickSendSMS = require("./notification-providers/clicksendsms");
const Pushbullet = require("./notification-providers/pushbullet"); const Pushbullet = require("./notification-providers/pushbullet");
const Pushover = require("./notification-providers/pushover"); const Pushover = require("./notification-providers/pushover");
const Pushy = require("./notification-providers/pushy"); const Pushy = require("./notification-providers/pushy");
@ -45,6 +46,7 @@ class Notification {
new Matrix(), new Matrix(),
new Octopush(), new Octopush(),
new PromoSMS(), new PromoSMS(),
new ClickSendSMS(),
new Pushbullet(), new Pushbullet(),
new Pushover(), new Pushover(),
new Pushy(), new Pushy(),

@ -0,0 +1,35 @@
<template>
<div class="mb-3">
<label for="clicksendsms-login" class="form-label">API Username</label>
<div class="form-text">
{{ $t("apiCredentials") }}
<a href="http://dashboard.clicksend.com/account/subaccounts" target="_blank">here</a>
</div>
<input id="clicksendsms-login" v-model="$parent.notification.clicksendsmsLogin" type="text" class="form-control" required>
<label for="clicksendsms-key" class="form-label">API Key</label>
<HiddenInput id="clicksendsms-key" v-model="$parent.notification.clicksendsmsPassword" :required="true" autocomplete="one-time-code"></HiddenInput>
</div>
<div class="mb-3">
<div class="form-text">
{{ $t("checkPrice", [$t("clicksendsms")]) }}
<a href="https://www.clicksend.com/us/pricing" target="_blank">here</a>
</div>
</div>
<div class="mb-3">
<label for="clicksendsms-sender-name" class="form-label">From Name/Number -
<a href="https://help.clicksend.com/article/4kgj7krx00-what-is-a-sender-id-or-sender-number" target="_blank">More Info</a>
</label>
<input id="clicksendsms-sender-name" v-model="$parent.notification.clicksendsmsSenderName" type="text" minlength="3" maxlength="11" class="form-control">
<div class="form-text">Leave blank to use a shared sender number.</div>
</div>
</template>
<script>
import HiddenInput from "../HiddenInput.vue";
export default {
components: {
HiddenInput,
},
};
</script>

@ -11,6 +11,7 @@ import Pushover from "./Pushover.vue";
import Pushy from "./Pushy.vue"; import Pushy from "./Pushy.vue";
import Octopush from "./Octopush.vue"; import Octopush from "./Octopush.vue";
import PromoSMS from "./PromoSMS.vue"; import PromoSMS from "./PromoSMS.vue";
import ClickSendSMS from "./ClickSendSMS.vue";
import LunaSea from "./LunaSea.vue"; import LunaSea from "./LunaSea.vue";
import Feishu from "./Feishu.vue"; import Feishu from "./Feishu.vue";
import Apprise from "./Apprise.vue"; import Apprise from "./Apprise.vue";
@ -40,6 +41,7 @@ const NotificationFormList = {
"pushy": Pushy, "pushy": Pushy,
"octopush": Octopush, "octopush": Octopush,
"promosms": PromoSMS, "promosms": PromoSMS,
"clicksendsms": ClickSendSMS,
"lunasea": LunaSea, "lunasea": LunaSea,
"Feishu": Feishu, "Feishu": Feishu,
"AliyunSMS": AliyunSMS, "AliyunSMS": AliyunSMS,

@ -191,6 +191,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Поддържа 50+ услуги за инвестяване)", apprise: "Apprise (Поддържа 50+ услуги за инвестяване)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -193,6 +193,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Support 50+ Notification services)", apprise: "Apprise (Support 50+ Notification services)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -192,6 +192,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Unterstützung für 50+ Benachrichtigungsdienste)", apprise: "Apprise (Unterstützung für 50+ Benachrichtigungsdienste)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -241,6 +241,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Support 50+ Notification services)", apprise: "Apprise (Support 50+ Notification services)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",
@ -257,6 +258,7 @@ export default {
octopushTypePremium: "Premium (Fast - recommended for alerting)", octopushTypePremium: "Premium (Fast - recommended for alerting)",
octopushTypeLowCost: "Low Cost (Slow - sometimes blocked by operator)", octopushTypeLowCost: "Low Cost (Slow - sometimes blocked by operator)",
checkPrice: "Check {0} prices:", checkPrice: "Check {0} prices:",
apiCredentials: "API credentials",
octopushLegacyHint: "Do you use the legacy version of Octopush (2011-2020) or the new version?", octopushLegacyHint: "Do you use the legacy version of Octopush (2011-2020) or the new version?",
"Check octopush prices": "Check octopush prices {0}.", "Check octopush prices": "Check octopush prices {0}.",
octopushPhoneNumber: "Phone number (intl format, eg : +33612345678) ", octopushPhoneNumber: "Phone number (intl format, eg : +33612345678) ",

@ -193,6 +193,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Admite más de 50 servicios de notificación)", apprise: "Apprise (Admite más de 50 servicios de notificación)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -192,6 +192,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (vahendab üle 65 teavitusteenust)", apprise: "Apprise (vahendab üle 65 teavitusteenust)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -200,6 +200,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Support 50+ Notification services)", apprise: "Apprise (Support 50+ Notification services)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -236,6 +236,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Support 50+ Notification services)", apprise: "Apprise (Support 50+ Notification services)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -191,6 +191,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Support 50+ Notification services)", apprise: "Apprise (Support 50+ Notification services)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -236,6 +236,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Mendukung 50+ layanan notifikasi)", apprise: "Apprise (Mendukung 50+ layanan notifikasi)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -192,6 +192,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Support 50+ Notification services)", apprise: "Apprise (Support 50+ Notification services)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -193,6 +193,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Support 50+ Notification services)", apprise: "Apprise (Support 50+ Notification services)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -235,6 +235,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (50개 이상 알림 서비스)", apprise: "Apprise (50개 이상 알림 서비스)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -236,6 +236,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Support 50+ Notification services)", apprise: "Apprise (Support 50+ Notification services)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -193,6 +193,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Support 50+ Notification services)", apprise: "Apprise (Support 50+ Notification services)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",
@ -203,5 +204,5 @@ export default {
Headers: "Headers", Headers: "Headers",
PushUrl: "Push URL", PushUrl: "Push URL",
HeadersInvalidFormat: "The request headers is geen geldige JSON: ", HeadersInvalidFormat: "The request headers is geen geldige JSON: ",
BodyInvalidFormat: "De request body is geen geldige JSON: " BodyInvalidFormat: "De request body is geen geldige JSON: ",
}; };

@ -236,6 +236,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Obsługuje 50+ usług powiadomień)", apprise: "Apprise (Obsługuje 50+ usług powiadomień)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -192,6 +192,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Support 50+ Notification services)", apprise: "Apprise (Support 50+ Notification services)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -197,6 +197,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Поддержка 50+ сервисов уведомлений)", apprise: "Apprise (Поддержка 50+ сервисов уведомлений)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -193,6 +193,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Support 50+ Notification services)", apprise: "Apprise (Support 50+ Notification services)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -193,6 +193,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Support 50+ Notification services)", apprise: "Apprise (Support 50+ Notification services)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -193,6 +193,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Support 50+ Notification services)", apprise: "Apprise (Support 50+ Notification services)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -192,6 +192,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (Support 50+ Notification services)", apprise: "Apprise (Support 50+ Notification services)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -1,285 +1,286 @@
export default { export default {
languageName: "Vietnamese", languageName: "Vietnamese",
checkEverySecond: "Kiểm tra mỗi {0} giây.", checkEverySecond: "Kiểm tra mỗi {0} giây.",
retryCheckEverySecond: "Thử lại mỗi {0} giây.", retryCheckEverySecond: "Thử lại mỗi {0} giây.",
retriesDescription: "Số lần thử lại tối đa trước khi dịch vụ được đánh dấu là down và gửi thông báo.", retriesDescription: "Số lần thử lại tối đa trước khi dịch vụ được đánh dấu là down và gửi thông báo.",
ignoreTLSError: "Bỏ qua lỗi TLS/SSL với các web HTTPS.", ignoreTLSError: "Bỏ qua lỗi TLS/SSL với các web HTTPS.",
upsideDownModeDescription: "Trạng thái đảo ngược, nếu dịch vụ có thể truy cập được nghĩa là DOWN.", upsideDownModeDescription: "Trạng thái đảo ngược, nếu dịch vụ có thể truy cập được nghĩa là DOWN.",
maxRedirectDescription: "Số lần chuyển hướng (redirect) tối đa. Đặt thành 0 để tắt chuyển hướng", maxRedirectDescription: "Số lần chuyển hướng (redirect) tối đa. Đặt thành 0 để tắt chuyển hướng",
acceptedStatusCodesDescription: "Chọn mã code trạng thái được coi là phản hồi thành công.", acceptedStatusCodesDescription: "Chọn mã code trạng thái được coi là phản hồi thành công.",
passwordNotMatchMsg: "Mật khẩu nhập lại không khớp.", passwordNotMatchMsg: "Mật khẩu nhập lại không khớp.",
notificationDescription: "Vui lòng chỉ định một kênh thông báo.", notificationDescription: "Vui lòng chỉ định một kênh thông báo.",
keywordDescription: "Từ khoá tìm kiếm phản hồi ở dạng html hoặc JSON, có phân biệt chữ HOA - thường", keywordDescription: "Từ khoá tìm kiếm phản hồi ở dạng html hoặc JSON, có phân biệt chữ HOA - thường",
pauseDashboardHome: "Tạm dừng", pauseDashboardHome: "Tạm dừng",
deleteMonitorMsg: "Bạn chắc chắn muốn xóa monitor này chứ?", deleteMonitorMsg: "Bạn chắc chắn muốn xóa monitor này chứ?",
deleteNotificationMsg: "Bạn có chắc chắn muốn xóa kênh thông báo này cho tất cả monitor?", deleteNotificationMsg: "Bạn có chắc chắn muốn xóa kênh thông báo này cho tất cả monitor?",
resoverserverDescription: "Cloudflare là máy chủ mặc định, bạn có thể thay đổi bất cứ lúc nào.", resoverserverDescription: "Cloudflare là máy chủ mặc định, bạn có thể thay đổi bất cứ lúc nào.",
rrtypeDescription: "Hãy chọn RR-Type mà bạn muốn giám sát", rrtypeDescription: "Hãy chọn RR-Type mà bạn muốn giám sát",
pauseMonitorMsg: "Bạn chắc chắn muốn tạm dừng chứ?", pauseMonitorMsg: "Bạn chắc chắn muốn tạm dừng chứ?",
enableDefaultNotificationDescription: "Bật làm mặc định cho mọi monitor mới về sau. Bạn vẫn có thể tắt thông báo riêng cho từng monitor.", enableDefaultNotificationDescription: "Bật làm mặc định cho mọi monitor mới về sau. Bạn vẫn có thể tắt thông báo riêng cho từng monitor.",
clearEventsMsg: "Bạn chắc chắn muốn xoá TẤT CẢ sự kiện cho monitor này chứ?", clearEventsMsg: "Bạn chắc chắn muốn xoá TẤT CẢ sự kiện cho monitor này chứ?",
clearHeartbeatsMsg: "Bạn chắc chắn muốn xoá TẤT CẢ heartbeats cho monitor này chứ?", clearHeartbeatsMsg: "Bạn chắc chắn muốn xoá TẤT CẢ heartbeats cho monitor này chứ?",
confirmClearStatisticsMsg: "Bạn chắc chắn muốn xoá TẤT CẢ số liệu thống kê?", confirmClearStatisticsMsg: "Bạn chắc chắn muốn xoá TẤT CẢ số liệu thống kê?",
importHandleDescription: "Chọn 'Skip existing' nếu bạn muốn bỏ qua mọi monitor và kênh thông báo trùng tên. 'Overwrite' sẽ ghi đè lên tất cả các monitor và kênh thông báo.", importHandleDescription: "Chọn 'Skip existing' nếu bạn muốn bỏ qua mọi monitor và kênh thông báo trùng tên. 'Overwrite' sẽ ghi đè lên tất cả các monitor và kênh thông báo.",
confirmImportMsg: "Bạn có chắc chắn muốn khôi phục bản bản sao lưu này không?.", confirmImportMsg: "Bạn có chắc chắn muốn khôi phục bản bản sao lưu này không?.",
twoFAVerifyLabel: "Vui lòng nhập mã token của bạn để xác minh rằng 2FA đang hoạt động", twoFAVerifyLabel: "Vui lòng nhập mã token của bạn để xác minh rằng 2FA đang hoạt động",
tokenValidSettingsMsg: "Mã token hợp lệ! Bạn có thể lưu cài đặt 2FA bây giờ.", tokenValidSettingsMsg: "Mã token hợp lệ! Bạn có thể lưu cài đặt 2FA bây giờ.",
confirmEnableTwoFAMsg: "Bạn chắc chắn muốn bật 2FA chứ?", confirmEnableTwoFAMsg: "Bạn chắc chắn muốn bật 2FA chứ?",
confirmDisableTwoFAMsg: "Bạn chắc chắn muốn tắt 2FA chứ?", confirmDisableTwoFAMsg: "Bạn chắc chắn muốn tắt 2FA chứ?",
Settings: "Cài đặt", Settings: "Cài đặt",
Dashboard: "Dashboard", Dashboard: "Dashboard",
"New Update": "Bản cập nhật mới", "New Update": "Bản cập nhật mới",
Language: "Ngôn ngữ", Language: "Ngôn ngữ",
Appearance: "Giao diện", Appearance: "Giao diện",
Theme: "Theme", Theme: "Theme",
General: "Chung", General: "Chung",
Version: "Phiên bản", Version: "Phiên bản",
"Check Update On GitHub": "Kiểm tra bản cập nhật mới trên GitHub", "Check Update On GitHub": "Kiểm tra bản cập nhật mới trên GitHub",
List: "List", List: "List",
Add: "Thêm", Add: "Thêm",
"Add New Monitor": "Thêm mới Monitor", "Add New Monitor": "Thêm mới Monitor",
"Quick Stats": "Thống kê nhanh", "Quick Stats": "Thống kê nhanh",
Up: "Lên", Up: "Lên",
Down: "Xuống", Down: "Xuống",
Pending: "Chờ xử lý", Pending: "Chờ xử lý",
Unknown: "Không xác định", Unknown: "Không xác định",
Pause: "Tạm dừng", Pause: "Tạm dừng",
Name: "Tên", Name: "Tên",
Status: "Trạng thái", Status: "Trạng thái",
DateTime: "Ngày tháng", DateTime: "Ngày tháng",
Message: "Tin nhắn", Message: "Tin nhắn",
"No important events": "Không có sự kiện quan trọng nào", "No important events": "Không có sự kiện quan trọng nào",
Resume: "Khôi phục", Resume: "Khôi phục",
Edit: "Sửa", Edit: "Sửa",
Delete: "Xoá", Delete: "Xoá",
Current: "Hiện tại", Current: "Hiện tại",
Uptime: "Uptime", Uptime: "Uptime",
"Cert Exp.": "Cert hết hạn", "Cert Exp.": "Cert hết hạn",
days: "ngày", days: "ngày",
day: "ngày", day: "ngày",
"-day": "-ngày", "-day": "-ngày",
hour: "giờ", hour: "giờ",
"-hour": "-giờ", "-hour": "-giờ",
Response: "Phản hồi", Response: "Phản hồi",
Ping: "Ping", Ping: "Ping",
"Monitor Type": "Kiểu monitor", "Monitor Type": "Kiểu monitor",
Keyword: "Từ khoá", Keyword: "Từ khoá",
"Friendly Name": "Tên dễ hiểu", "Friendly Name": "Tên dễ hiểu",
URL: "URL", URL: "URL",
Hostname: "Hostname", Hostname: "Hostname",
Port: "Port", Port: "Port",
"Heartbeat Interval": "Tần suất heartbeat", "Heartbeat Interval": "Tần suất heartbeat",
Retries: "Thử lại", Retries: "Thử lại",
"Heartbeat Retry Interval": "Tần suất thử lại của Heartbeat", "Heartbeat Retry Interval": "Tần suất thử lại của Heartbeat",
Advanced: "Nâng cao", Advanced: "Nâng cao",
"Upside Down Mode": "Trạng thái đảo ngược", "Upside Down Mode": "Trạng thái đảo ngược",
"Max. Redirects": "Chuyển hướng tối đa", "Max. Redirects": "Chuyển hướng tối đa",
"Accepted Status Codes": "Codes trạng thái chấp nhận", "Accepted Status Codes": "Codes trạng thái chấp nhận",
Save: "Lưu", Save: "Lưu",
Notifications: "Thông báo", Notifications: "Thông báo",
"Not available, please setup.": "Chưa sẵn sàng, hãy cài đặt.", "Not available, please setup.": "Chưa sẵn sàng, hãy cài đặt.",
"Setup Notification": "Cài đặt thông báo", "Setup Notification": "Cài đặt thông báo",
Light: "Sáng", Light: "Sáng",
Dark: "Tối", Dark: "Tối",
Auto: "Tự động", Auto: "Tự động",
"Theme - Heartbeat Bar": "Theme - Heartbeat Bar", "Theme - Heartbeat Bar": "Theme - Heartbeat Bar",
Normal: "Bình thường", Normal: "Bình thường",
Bottom: "Dưới", Bottom: "Dưới",
None: "Không có", None: "Không có",
Timezone: "Múi giờ", Timezone: "Múi giờ",
"Search Engine Visibility": "Hiển thị với các công cụ tìm kiếm", "Search Engine Visibility": "Hiển thị với các công cụ tìm kiếm",
"Allow indexing": "Cho phép indexing", "Allow indexing": "Cho phép indexing",
"Discourage search engines from indexing site": "Ngăn chặn các công cụ tìm kiếm indexing trang", "Discourage search engines from indexing site": "Ngăn chặn các công cụ tìm kiếm indexing trang",
"Change Password": "Thay đổi mật khẩu", "Change Password": "Thay đổi mật khẩu",
"Current Password": "Mật khẩu hiện tại", "Current Password": "Mật khẩu hiện tại",
"New Password": "Mật khẩu mới", "New Password": "Mật khẩu mới",
"Repeat New Password": "Lặp lại mật khẩu mới", "Repeat New Password": "Lặp lại mật khẩu mới",
"Update Password": "Cập nhật mật khẩu", "Update Password": "Cập nhật mật khẩu",
"Disable Auth": "Tắt xác minh", "Disable Auth": "Tắt xác minh",
"Enable Auth": "Bật xác minh", "Enable Auth": "Bật xác minh",
Logout: "Đăng xuất", Logout: "Đăng xuất",
Leave: "Rời", Leave: "Rời",
"I understand, please disable": "Tôi hiểu, làm ơn hãy tắt!", "I understand, please disable": "Tôi hiểu, làm ơn hãy tắt!",
Confirm: "Xác nhận", Confirm: "Xác nhận",
Yes: "Có", Yes: "Có",
No: "Không", No: "Không",
Username: "Tài khoản", Username: "Tài khoản",
Password: "Mật khẩu", Password: "Mật khẩu",
"Remember me": "Lưu phiên đăng nhập", "Remember me": "Lưu phiên đăng nhập",
Login: "Đăng nhập", Login: "Đăng nhập",
"No Monitors, please": "Không có monitor nào", "No Monitors, please": "Không có monitor nào",
"add one": "Thêm mới", "add one": "Thêm mới",
"Notification Type": "Kiểu thông báo", "Notification Type": "Kiểu thông báo",
Email: "Email", Email: "Email",
Test: "Thử", Test: "Thử",
"Certificate Info": "Thông tin Certificate", "Certificate Info": "Thông tin Certificate",
"Resolver Server": "Máy chủ Resolver", "Resolver Server": "Máy chủ Resolver",
"Resource Record Type": "Loại bản ghi", "Resource Record Type": "Loại bản ghi",
"Last Result": "Kết quả cuối cùng", "Last Result": "Kết quả cuối cùng",
"Create your admin account": "Tạo tài khoản quản trị", "Create your admin account": "Tạo tài khoản quản trị",
"Repeat Password": "Lặp lại mật khẩu", "Repeat Password": "Lặp lại mật khẩu",
"Import Backup": "Khôi phục bản sao lưu", "Import Backup": "Khôi phục bản sao lưu",
"Export Backup": "Xuất bản sao lưu", "Export Backup": "Xuất bản sao lưu",
Export: "Xuất", Export: "Xuất",
Import: "Khôi phục", Import: "Khôi phục",
respTime: "Thời gian phản hồi (ms)", respTime: "Thời gian phản hồi (ms)",
notAvailableShort: "N/A", notAvailableShort: "N/A",
"Default enabled": "Mặc định bật", "Default enabled": "Mặc định bật",
"Apply on all existing monitors": "Áp dụng cho tất cả monitor đang có", "Apply on all existing monitors": "Áp dụng cho tất cả monitor đang có",
Create: "Tạo", Create: "Tạo",
"Clear Data": "Xoá dữ liệu", "Clear Data": "Xoá dữ liệu",
Events: "Sự kiện", Events: "Sự kiện",
Heartbeats: "Heartbeats", Heartbeats: "Heartbeats",
"Auto Get": "Tự động lấy", "Auto Get": "Tự động lấy",
backupDescription: "Bạn có thể sao lưu tất cả các màn hình và tất cả các thông báo vào một file JSON.", backupDescription: "Bạn có thể sao lưu tất cả các màn hình và tất cả các thông báo vào một file JSON.",
backupDescription2: "PS: Không bao gồm dữ liệu lịch sử các sự kiện.", backupDescription2: "PS: Không bao gồm dữ liệu lịch sử các sự kiện.",
backupDescription3: "Hãy lưu giữ file này cẩn thận vì trong file đó chứa cả các mã token thông báo.", backupDescription3: "Hãy lưu giữ file này cẩn thận vì trong file đó chứa cả các mã token thông báo.",
alertNoFile: "Hãy chọn file để khôi phục.", alertNoFile: "Hãy chọn file để khôi phục.",
alertWrongFileType: "Hãy chọn file JSON.", alertWrongFileType: "Hãy chọn file JSON.",
"Clear all statistics": "Xoá tất cả thống kê", "Clear all statistics": "Xoá tất cả thống kê",
"Skip existing": "Skip existing", "Skip existing": "Skip existing",
Overwrite: "Ghi đè", Overwrite: "Ghi đè",
Options: "Tuỳ chọn", Options: "Tuỳ chọn",
"Keep both": "Giữ lại cả hai", "Keep both": "Giữ lại cả hai",
"Verify Token": "Xác minh Token", "Verify Token": "Xác minh Token",
"Setup 2FA": "Cài đặt 2FA", "Setup 2FA": "Cài đặt 2FA",
"Enable 2FA": "Bật 2FA", "Enable 2FA": "Bật 2FA",
"Disable 2FA": "Tắt 2FA", "Disable 2FA": "Tắt 2FA",
"2FA Settings": "Cài đặt 2FA", "2FA Settings": "Cài đặt 2FA",
"Two Factor Authentication": "Xác thực hai yếu tố", "Two Factor Authentication": "Xác thực hai yếu tố",
Active: "Hoạt động", Active: "Hoạt động",
Inactive: "Ngừng hoạt động", Inactive: "Ngừng hoạt động",
Token: "Token", Token: "Token",
"Show URI": "Hiển thị URI", "Show URI": "Hiển thị URI",
Tags: "Tags", Tags: "Tags",
"Add New below or Select...": "Thêm mới ở dưới hoặc Chọn...", "Add New below or Select...": "Thêm mới ở dưới hoặc Chọn...",
"Tag with this name already exist.": "Tag với tên đã tồn tại.", "Tag with this name already exist.": "Tag với tên đã tồn tại.",
"Tag with this value already exist.": "Tag với value đã tồn tại.", "Tag with this value already exist.": "Tag với value đã tồn tại.",
color: "Màu sắc", color: "Màu sắc",
"value (optional)": "Value (tuỳ chọn)", "value (optional)": "Value (tuỳ chọn)",
Gray: "Xám", Gray: "Xám",
Red: "Đỏ", Red: "Đỏ",
Orange: "Cam", Orange: "Cam",
Green: "Xanh lá", Green: "Xanh lá",
Blue: "Xanh da trời", Blue: "Xanh da trời",
Indigo: "Chàm", Indigo: "Chàm",
Purple: "Tím", Purple: "Tím",
Pink: "Hồng", Pink: "Hồng",
"Search...": "Tìm kiếm...", "Search...": "Tìm kiếm...",
"Avg. Ping": "Ping Trung bình", "Avg. Ping": "Ping Trung bình",
"Avg. Response": "Phản hồi trung bình", "Avg. Response": "Phản hồi trung bình",
"Entry Page": "Entry Page", "Entry Page": "Entry Page",
statusPageNothing: "Không có gì, hãy thêm nhóm monitor hoặc monitor.", statusPageNothing: "Không có gì, hãy thêm nhóm monitor hoặc monitor.",
"No Services": "Không có dịch vụ", "No Services": "Không có dịch vụ",
"All Systems Operational": "Tất cả các hệ thống hoạt động", "All Systems Operational": "Tất cả các hệ thống hoạt động",
"Partially Degraded Service": "Dịch vụ xuống cấp một phần", "Partially Degraded Service": "Dịch vụ xuống cấp một phần",
"Degraded Service": "Degraded Service", "Degraded Service": "Degraded Service",
"Add Group": "Thêm nhóm", "Add Group": "Thêm nhóm",
"Add a monitor": "Thêm monitor", "Add a monitor": "Thêm monitor",
"Edit Status Page": "Sửa trang trạng thái", "Edit Status Page": "Sửa trang trạng thái",
"Go to Dashboard": "Đi tới Dashboard", "Go to Dashboard": "Đi tới Dashboard",
"Status Page": "Trang trạng thái", "Status Page": "Trang trạng thái",
// Start notification form // Start notification form
defaultNotificationName: "My {notification} Alerts ({number})", defaultNotificationName: "My {notification} Alerts ({number})",
here: "tại đây", here: "tại đây",
"Required": "Bắt buộc", "Required": "Bắt buộc",
"telegram": "Telegram", "telegram": "Telegram",
"Bot Token": "Bot Token", "Bot Token": "Bot Token",
"You can get a token from": "Bạn có thể lấy mã token từ", "You can get a token from": "Bạn có thể lấy mã token từ",
"Chat ID": "Chat ID", "Chat ID": "Chat ID",
supportTelegramChatID: "Hỗ trợ chat trực tiếp / Nhóm / Kênh Chat ID", supportTelegramChatID: "Hỗ trợ chat trực tiếp / Nhóm / Kênh Chat ID",
wayToGetTelegramChatID: "Bạn có thể lấy chat id của mình bằng cách gửi tin nhắn tới bot và truy cập url này để xem chat_id:", wayToGetTelegramChatID: "Bạn có thể lấy chat id của mình bằng cách gửi tin nhắn tới bot và truy cập url này để xem chat_id:",
"YOUR BOT TOKEN HERE": "MÃ BOT TOKEN CỦA BẠN", "YOUR BOT TOKEN HERE": "MÃ BOT TOKEN CỦA BẠN",
chatIDNotFound: "Không tìm thấy Chat ID, vui lòng gửi tin nhắn cho bot này trước", chatIDNotFound: "Không tìm thấy Chat ID, vui lòng gửi tin nhắn cho bot này trước",
"webhook": "Webhook", "webhook": "Webhook",
"Post URL": "URL đăng", "Post URL": "URL đăng",
"Content Type": "Loại nội dung", "Content Type": "Loại nội dung",
webhookJsonDesc: "{0} phù hợp với bất kỳ máy chủ http hiện đại nào như express.js", webhookJsonDesc: "{0} phù hợp với bất kỳ máy chủ http hiện đại nào như express.js",
webhookFormDataDesc: "{multipart} phù hợp với PHP, bạn chỉ cần phân tích cú pháp json bằng {decodeFunction}", webhookFormDataDesc: "{multipart} phù hợp với PHP, bạn chỉ cần phân tích cú pháp json bằng {decodeFunction}",
"smtp": "Email (SMTP)", "smtp": "Email (SMTP)",
secureOptionNone: "None / STARTTLS (25, 587)", secureOptionNone: "None / STARTTLS (25, 587)",
secureOptionTLS: "TLS (465)", secureOptionTLS: "TLS (465)",
"Ignore TLS Error": "Bỏ qua lỗi TLS", "Ignore TLS Error": "Bỏ qua lỗi TLS",
"From Email": "Từ Email", "From Email": "Từ Email",
"To Email": "Tới Email", "To Email": "Tới Email",
smtpCC: "CC", smtpCC: "CC",
smtpBCC: "BCC", smtpBCC: "BCC",
"discord": "Discord", "discord": "Discord",
"Discord Webhook URL": "Discord Webhook URL", "Discord Webhook URL": "Discord Webhook URL",
wayToGetDiscordURL: "Để lấy Discord, hãy vào: Server Settings -> Integrations -> Create Webhook", wayToGetDiscordURL: "Để lấy Discord, hãy vào: Server Settings -> Integrations -> Create Webhook",
"Bot Display Name": "Tên hiển thị của Bot", "Bot Display Name": "Tên hiển thị của Bot",
"Prefix Custom Message": "Tiền tố tin nhắn tuỳ chọn", "Prefix Custom Message": "Tiền tố tin nhắn tuỳ chọn",
"Hello @everyone is...": "Xin chào {'@'} mọi người đang...", "Hello @everyone is...": "Xin chào {'@'} mọi người đang...",
"teams": "Microsoft Teams", "teams": "Microsoft Teams",
"Webhook URL": "Webhook URL", "Webhook URL": "Webhook URL",
wayToGetTeamsURL: "Bạn có thể học cách tạo webhook url {0}.", wayToGetTeamsURL: "Bạn có thể học cách tạo webhook url {0}.",
"signal": "Signal", "signal": "Signal",
"Number": "Số", "Number": "Số",
"Recipients": "Người nhận", "Recipients": "Người nhận",
needSignalAPI: "Bạn cần một tín hiệu client với REST API.", needSignalAPI: "Bạn cần một tín hiệu client với REST API.",
wayToCheckSignalURL: "Bạn có thể kiểm tra url này để xem cách thiết lập:", wayToCheckSignalURL: "Bạn có thể kiểm tra url này để xem cách thiết lập:",
signalImportant: "QUAN TRỌNG: Bạn không thể kết hợp các nhóm và số trong người nhận!", signalImportant: "QUAN TRỌNG: Bạn không thể kết hợp các nhóm và số trong người nhận!",
"gotify": "Gotify", "gotify": "Gotify",
"Application Token": "Mã Token ứng dụng", "Application Token": "Mã Token ứng dụng",
"Server URL": "URL máy chủ", "Server URL": "URL máy chủ",
"Priority": "Mức ưu tiên", "Priority": "Mức ưu tiên",
"slack": "Slack", "slack": "Slack",
"Icon Emoji": "Icon Emoji", "Icon Emoji": "Icon Emoji",
"Channel Name": "Tên Channel", "Channel Name": "Tên Channel",
"Uptime Kuma URL": "Uptime Kuma URL", "Uptime Kuma URL": "Uptime Kuma URL",
aboutWebhooks: "Thông tin thêm về webhook trên: {0}", aboutWebhooks: "Thông tin thêm về webhook trên: {0}",
aboutChannelName: "Nhập tên kênh trên {0} trường Channel Name nếu bạn muốn bỏ qua kênh webhook. vd: #other-channel", aboutChannelName: "Nhập tên kênh trên {0} trường Channel Name nếu bạn muốn bỏ qua kênh webhook. vd: #other-channel",
aboutKumaURL: "Nếu bạn để trống trường Uptime Kuma URL, mặc định sẽ là trang Project Github.", aboutKumaURL: "Nếu bạn để trống trường Uptime Kuma URL, mặc định sẽ là trang Project Github.",
emojiCheatSheet: "Bảng tra cứu Emoji: {0}", emojiCheatSheet: "Bảng tra cứu Emoji: {0}",
"rocket.chat": "Rocket.chat", "rocket.chat": "Rocket.chat",
pushover: "Pushover", pushover: "Pushover",
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
lunasea: "LunaSea", clicksendsms: "ClickSend SMS",
apprise: "Thông báo (Hỗ trợ 50+ dịch vụ thông báo)", lunasea: "LunaSea",
pushbullet: "Pushbullet", apprise: "Thông báo (Hỗ trợ 50+ dịch vụ thông báo)",
line: "Line Messenger", pushbullet: "Pushbullet",
mattermost: "Mattermost", line: "Line Messenger",
"User Key": "User Key", mattermost: "Mattermost",
"Device": "Thiết bị", "User Key": "User Key",
"Message Title": "Tiêu đề tin nhắn", "Device": "Thiết bị",
"Notification Sound": "Âm thanh thông báo", "Message Title": "Tiêu đề tin nhắn",
"More info on:": "Thông tin chi tiết tại: {0}", "Notification Sound": "Âm thanh thông báo",
pushoverDesc1: "Mức ưu tiên khẩn cấp (2) có thời gian chờ mặc định là 30 giây giữa các lần thử lại và sẽ hết hạn sau 1 giờ.", "More info on:": "Thông tin chi tiết tại: {0}",
pushoverDesc2: "Nếu bạn muốn gửi thông báo đến các thiết bị khác nhau, hãy điền vào trường Thiết bị.", pushoverDesc1: "Mức ưu tiên khẩn cấp (2) có thời gian chờ mặc định là 30 giây giữa các lần thử lại và sẽ hết hạn sau 1 giờ.",
"SMS Type": "SMS Type", pushoverDesc2: "Nếu bạn muốn gửi thông báo đến các thiết bị khác nhau, hãy điền vào trường Thiết bị.",
octopushTypePremium: "Premium (Nhanh - Khuyến nghị nên dùng cho cảnh báo)", "SMS Type": "SMS Type",
octopushTypeLowCost: "Giá rẻ (Chậm, thỉnh thoảng bị chặn)", octopushTypePremium: "Premium (Nhanh - Khuyến nghị nên dùng cho cảnh báo)",
"Check octopush prices": "Kiểm tra giá octopush {0}.", octopushTypeLowCost: "Giá rẻ (Chậm, thỉnh thoảng bị chặn)",
octopushPhoneNumber: "Số điện thoại (Định dạng intl, vd : +33612345678) ", "Check octopush prices": "Kiểm tra giá octopush {0}.",
octopushSMSSender: "SMS người gửi : 3-11 ký tự chữ, số và dấu cách (a-zA-Z0-9)", octopushPhoneNumber: "Số điện thoại (Định dạng intl, vd : +33612345678) ",
"LunaSea Device ID": "LunaSea ID thiết bị", octopushSMSSender: "SMS người gửi : 3-11 ký tự chữ, số và dấu cách (a-zA-Z0-9)",
"Apprise URL": "Apprise URL", "LunaSea Device ID": "LunaSea ID thiết bị",
"Example:": "Ví dụ: {0}", "Apprise URL": "Apprise URL",
"Read more:": "Đọc thêm: {0}", "Example:": "Ví dụ: {0}",
"Status:": "Trạng thái: {0}", "Read more:": "Đọc thêm: {0}",
"Read more": "Đọc thêm", "Status:": "Trạng thái: {0}",
appriseInstalled: "Đã cài đặt Apprise.", "Read more": "Đọc thêm",
appriseNotInstalled: "Chưa cài đặt Apprise. {0}", appriseInstalled: "Đã cài đặt Apprise.",
"Access Token": "Token truy cập", appriseNotInstalled: "Chưa cài đặt Apprise. {0}",
"Channel access token": "Token kênh truy cập", "Access Token": "Token truy cập",
"Line Developers Console": "Line Developers Console", "Channel access token": "Token kênh truy cập",
lineDevConsoleTo: "Line Developers Console - {0}", "Line Developers Console": "Line Developers Console",
"Basic Settings": "Cài đặt cơ bản", lineDevConsoleTo: "Line Developers Console - {0}",
"User ID": "User ID", "Basic Settings": "Cài đặt cơ bản",
"Messaging API": "Messaging API", "User ID": "User ID",
wayToGetLineChannelToken: "Trước tiên, hãy truy cập {0},tạo nhà cung cấp và kênh (Messaging API), sau đó bạn có thể nhận mã token truy cập kênh và id người dùng từ các mục menu được đề cập ở trên.", "Messaging API": "Messaging API",
"Icon URL": "Icon URL", wayToGetLineChannelToken: "Trước tiên, hãy truy cập {0},tạo nhà cung cấp và kênh (Messaging API), sau đó bạn có thể nhận mã token truy cập kênh và id người dùng từ các mục menu được đề cập ở trên.",
aboutIconURL: "Bạn có thể cung cấp liên kết đến ảnh trong \"Icon URL\" để ghi đè ảnh hồ sơ mặc định. Sẽ không được sử dụng nếu Biểu tượng cảm xúc được thiết lập.", "Icon URL": "Icon URL",
aboutMattermostChannelName: "Bạn có thể ghi đè kênh mặc định mà webhook đăng lên bằng cách nhập tên kênh vào trường \"Channel Name\". Điều này cần được bật trong cài đặt Mattermost webhook. Ví dụ: #other-channel", aboutIconURL: "Bạn có thể cung cấp liên kết đến ảnh trong \"Icon URL\" để ghi đè ảnh hồ sơ mặc định. Sẽ không được sử dụng nếu Biểu tượng cảm xúc được thiết lập.",
"matrix": "Matrix", aboutMattermostChannelName: "Bạn có thể ghi đè kênh mặc định mà webhook đăng lên bằng cách nhập tên kênh vào trường \"Channel Name\". Điều này cần được bật trong cài đặt Mattermost webhook. Ví dụ: #other-channel",
promosmsTypeEco: "SMS ECO - rẻ nhưng chậm và thường xuyên quá tải. Chỉ dành cho người Ba Lan.", "matrix": "Matrix",
promosmsTypeFlash: "SMS FLASH - Tin nhắn sẽ tự động hiển thị trên thiết bị của người nhận. Chỉ dành cho người Ba Lan.", promosmsTypeEco: "SMS ECO - rẻ nhưng chậm và thường xuyên quá tải. Chỉ dành cho người Ba Lan.",
promosmsTypeFull: "SMS FULL - SMS cao cấp, Bạn có thể sử dụng Tên Người gửi (Bạn cần đăng ký tên trước). Đáng tin cậy cho các cảnh báo.", promosmsTypeFlash: "SMS FLASH - Tin nhắn sẽ tự động hiển thị trên thiết bị của người nhận. Chỉ dành cho người Ba Lan.",
promosmsTypeSpeed: "SMS SPEED - Ưu tiên cao nhất trong hệ thống. Rất nhanh chóng và đáng tin cậy nhưng tốn kém, (giá gấp đôi SMS FULL).", promosmsTypeFull: "SMS FULL - SMS cao cấp, Bạn có thể sử dụng Tên Người gửi (Bạn cần đăng ký tên trước). Đáng tin cậy cho các cảnh báo.",
promosmsPhoneNumber: "Số điện thoại (Bỏ qua mã vùng với người Ba Lan)", promosmsTypeSpeed: "SMS SPEED - Ưu tiên cao nhất trong hệ thống. Rất nhanh chóng và đáng tin cậy nhưng tốn kém, (giá gấp đôi SMS FULL).",
promosmsSMSSender: "SMS Tên người gửi: Tên đã đăng ký trước hoặc tên mặc định: InfoSMS, SMS Info, MaxSMS, INFO, SMS", promosmsPhoneNumber: "Số điện thoại (Bỏ qua mã vùng với người Ba Lan)",
"Feishu WebHookUrl": "Feishu WebHookUrl", promosmsSMSSender: "SMS Tên người gửi: Tên đã đăng ký trước hoặc tên mặc định: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
// End notification form "Feishu WebHookUrl": "Feishu WebHookUrl",
}; // End notification form
};

@ -197,6 +197,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (支持50+种通知服务)", apprise: "Apprise (支持50+种通知服务)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

@ -193,6 +193,7 @@ export default {
pushy: "Pushy", pushy: "Pushy",
octopush: "Octopush", octopush: "Octopush",
promosms: "PromoSMS", promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea", lunasea: "LunaSea",
apprise: "Apprise (支援 50 多種通知)", apprise: "Apprise (支援 50 多種通知)",
pushbullet: "Pushbullet", pushbullet: "Pushbullet",

Loading…
Cancel
Save