diff --git a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/SmsClientFactory.java b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/SmsClientFactory.java
index 0047d0f8fa..e1b525e082 100644
--- a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/SmsClientFactory.java
+++ b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/SmsClientFactory.java
@@ -23,7 +23,6 @@ import org.apache.hertzbeat.alert.service.impl.SmsLocalSmsClientImpl;
import org.apache.hertzbeat.alert.service.impl.AwsSmsClientImpl;
import org.apache.hertzbeat.alert.service.impl.TencentSmsClientImpl;
import org.apache.hertzbeat.alert.service.impl.TwilioSmsClientImpl;
-import org.apache.hertzbeat.alert.service.impl.UniSmsClientImpl;
import org.apache.hertzbeat.alert.service.impl.AlibabaSmsClientImpl;
import org.apache.hertzbeat.base.dao.GeneralConfigDao;
import org.apache.hertzbeat.common.constants.GeneralConfigTypeEnum;
@@ -37,7 +36,6 @@ import static org.apache.hertzbeat.common.constants.SmsConstants.ALIBABA;
import static org.apache.hertzbeat.common.constants.SmsConstants.AWS;
import static org.apache.hertzbeat.common.constants.SmsConstants.TENCENT;
import static org.apache.hertzbeat.common.constants.SmsConstants.TWILIO;
-import static org.apache.hertzbeat.common.constants.SmsConstants.UNISMS;
import static org.apache.hertzbeat.common.constants.SmsConstants.SMSLOCAL;
/**
@@ -129,9 +127,6 @@ public class SmsClientFactory {
case TENCENT:
currentSmsClient = new TencentSmsClientImpl(smsConfig.getTencent());
break;
- case UNISMS:
- currentSmsClient = new UniSmsClientImpl(smsConfig.getUnisms());
- break;
case ALIBABA:
currentSmsClient = new AlibabaSmsClientImpl(smsConfig.getAlibaba());
break;
diff --git a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/UniSmsClientImpl.java b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/UniSmsClientImpl.java
deleted file mode 100644
index 241229ea28..0000000000
--- a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/UniSmsClientImpl.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.hertzbeat.alert.service.impl;
-
-import lombok.extern.slf4j.Slf4j;
-import org.apache.hertzbeat.common.entity.dto.sms.UniSmsProperties;
-import org.apache.hertzbeat.alert.service.SmsClient;
-import org.apache.hertzbeat.common.entity.alerter.GroupAlert;
-import org.apache.hertzbeat.common.entity.alerter.NoticeReceiver;
-import org.apache.hertzbeat.common.entity.alerter.NoticeTemplate;
-import org.apache.hertzbeat.common.support.exception.SendMessageException;
-import org.apache.hertzbeat.common.util.JsonUtil;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.util.EntityUtils;
-import org.apache.hertzbeat.alert.util.CryptoUtils;
-
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.UUID;
-import java.util.stream.Collectors;
-import tools.jackson.databind.JsonNode;
-
-import static org.apache.hertzbeat.common.constants.SmsConstants.UNISMS;
-
-/**
- * UniSMS client implementation
- * doc:https://unisms.apistd.com/docs/api/send
- */
-@Slf4j
-public class UniSmsClientImpl implements SmsClient {
-
- private static final String API_URL = "https://uni.apistd.com";
- private static final String ACTION = "sms.message.send";
- private static final String SUCCESS_CODE = "0";
- private static final String HMAC_ALGORITHM = "hmac-sha256";
-
- private final UniSmsProperties config;
-
- public UniSmsClientImpl(UniSmsProperties config) {
- this.config = config;
- }
-
- @Override
- public void sendMessage(NoticeReceiver receiver, NoticeTemplate noticeTemplate, GroupAlert alert) {
- try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
- // build request parameters
- Map params = new HashMap<>();
- params.put("to", receiver.getPhone());
- params.put("signature", config.getSignature());
- params.put("templateId", config.getTemplateId());
-
- // build template data
- Map templateData = new HashMap<>();
- String instance = alert.getCommonLabels().getOrDefault("instance", alert.getGroupKey());
- String priority = alert.getCommonLabels().getOrDefault("priority", "unknown");
- String content = alert.getCommonAnnotations().get("summary");
- content = content == null ? alert.getCommonAnnotations().get("description") : content;
- if (content == null) {
- content = alert.getCommonAnnotations().values().stream().findFirst().orElse(null);
- }
-
- templateData.put("instance", instance);
- templateData.put("priority", priority);
- templateData.put("content", content);
- params.put("templateData", templateData);
-
- // build URL and request headers
- String url;
- if ("hmac".equalsIgnoreCase(config.getAuthMode())) {
- url = buildHmacUrl();
- } else {
- url = buildSimpleUrl();
- }
-
- // send HTTP request
- HttpPost httpPost = new HttpPost(url);
- httpPost.setHeader("Content-Type", "application/json");
- httpPost.setHeader("Accept", "application/json");
-
- String payload = JsonUtil.toJson(params);
- httpPost.setEntity(new StringEntity(payload, StandardCharsets.UTF_8));
-
- log.debug("Sending SMS request via UniSMS");
-
- try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
- handleResponse(response);
- }
- } catch (SendMessageException e) {
- log.warn("Failed to send SMS via UniSMS");
- throw e;
- } catch (Exception e) {
- log.warn("Failed to send SMS via UniSMS, failure type: {}", e.getClass().getSimpleName());
- throw SmsFailureMessages.requestFailed("UniSMS");
- }
- }
-
- private String buildSimpleUrl() {
- return String.format("%s/?action=%s&accessKeyId=%s",
- API_URL, ACTION, config.getAccessKeyId());
- }
-
- private String buildHmacUrl() {
- long timestamp = System.currentTimeMillis();
- String nonce = generateNonce();
-
- // build query parameters
- Map params = new TreeMap<>();
- params.put("accessKeyId", config.getAccessKeyId());
- params.put("action", ACTION);
- params.put("algorithm", HMAC_ALGORITHM);
- params.put("nonce", nonce);
- params.put("timestamp", String.valueOf(timestamp));
-
- // build sign text
- String signText = params.entrySet().stream()
- .map(entry -> entry.getKey() + "=" + entry.getValue())
- .collect(Collectors.joining("&"));
-
- // calculate signature
- String signature = CryptoUtils.hmacSha256Base64(config.getAccessKeySecret(), signText);
- return String.format("%s/?action=%s&accessKeyId=%s&algorithm=%s×tamp=%d&nonce=%s&signature=%s",
- API_URL, ACTION, config.getAccessKeyId(), HMAC_ALGORITHM, timestamp, nonce, signature);
- }
-
- private String generateNonce() {
- return UUID.randomUUID().toString().replace("-", "").substring(0, 16);
- }
-
- private void handleResponse(CloseableHttpResponse response) throws IOException {
- int statusCode = response.getStatusLine().getStatusCode();
- String responseBody = EntityUtils.toString(response.getEntity());
-
- log.debug("UniSMS response status: {}", statusCode);
-
- if (statusCode != 200) {
- throw SmsFailureMessages.httpStatus("UniSMS", statusCode);
- }
-
- JsonNode jsonResponse = JsonUtil.fromJson(responseBody);
- if (jsonResponse == null || jsonResponse.get("code") == null) {
- throw SmsFailureMessages.invalidResponse("UniSMS");
- }
- String code = jsonResponse.get("code").asText();
- if (!SUCCESS_CODE.equals(code)) {
- throw SmsFailureMessages.providerCode("UniSMS", code);
- }
-
- log.info("Successfully sent SMS via UniSMS");
- }
-
- @Override
- public String getType() {
- return UNISMS;
- }
-
- @Override
- public boolean checkConfig() {
- if (config == null
- || config.getAccessKeyId() == null
- || config.getAccessKeyId().isBlank()
- || config.getSignature() == null
- || config.getSignature().isBlank()
- || config.getTemplateId() == null
- || config.getTemplateId().isBlank()) {
- return false;
- }
-
- // HMAC mode requires additional check for accessKeySecret
- if ("hmac".equalsIgnoreCase(config.getAuthMode())
- && (config.getAccessKeySecret() == null || config.getAccessKeySecret().isBlank())) {
- return false;
- }
-
- return true;
- }
-}
diff --git a/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/impl/SmsClientLoggingTest.java b/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/impl/SmsClientLoggingTest.java
index fc365ff305..4929e5f693 100644
--- a/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/impl/SmsClientLoggingTest.java
+++ b/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/impl/SmsClientLoggingTest.java
@@ -34,7 +34,6 @@ import org.apache.hertzbeat.common.entity.dto.sms.AwsSmsProperties;
import org.apache.hertzbeat.common.entity.dto.sms.SmslocalSmsProperties;
import org.apache.hertzbeat.common.entity.dto.sms.TencentSmsProperties;
import org.apache.hertzbeat.common.entity.dto.sms.TwilioSmsProperties;
-import org.apache.hertzbeat.common.entity.dto.sms.UniSmsProperties;
import org.apache.hertzbeat.common.support.exception.SendMessageException;
import org.apache.http.StatusLine;
import org.apache.http.client.methods.CloseableHttpResponse;
@@ -78,11 +77,6 @@ class SmsClientLoggingTest {
withSuccessfulResponse("{\"Code\":\"OK\"}",
() -> new AlibabaSmsClientImpl(alibabaProperties).sendMessage(receiver, null, alert));
- UniSmsProperties uniProperties =
- new UniSmsProperties(ACCESS_KEY, "unisms-secret", "sign", "template", "hmac");
- withSuccessfulResponse("{\"code\":\"0\"}",
- () -> new UniSmsClientImpl(uniProperties).sendMessage(receiver, null, alert));
-
withSuccessfulResponse("{\"sid\":\"message-id\"}",
() -> new TwilioSmsClientImpl(twilioProperties()).sendMessage(receiver, null, alert));
@@ -108,8 +102,6 @@ class SmsClientLoggingTest {
() -> new AwsSmsClientImpl(awsProperties()).sendMessage(receiver(), null, alert()));
SendMessageException alibabaFailure = withResponse(502, body,
() -> new AlibabaSmsClientImpl(alibabaProperties()).sendMessage(receiver(), null, alert()));
- SendMessageException uniFailure = withResponse(429, body,
- () -> new UniSmsClientImpl(uniProperties()).sendMessage(receiver(), null, alert()));
SendMessageException twilioFailure = withResponse(429, body,
() -> new TwilioSmsClientImpl(twilioProperties()).sendMessage(receiver(), null, alert()));
SendMessageException tencentFailure = withResponse(429, body,
@@ -119,14 +111,12 @@ class SmsClientLoggingTest {
assertEquals("AWS SMS request failed with HTTP status 503", awsFailure.getMessage());
assertEquals("Alibaba Cloud SMS request failed with HTTP status 502", alibabaFailure.getMessage());
- assertEquals("UniSMS request failed with HTTP status 429", uniFailure.getMessage());
assertEquals("Twilio SMS request failed with HTTP status 429", twilioFailure.getMessage());
assertEquals("Tencent Cloud SMS request failed with HTTP status 429", tencentFailure.getMessage());
assertEquals("SMSLocal request failed with HTTP status 429", smslocalFailure.getMessage());
assertNoSensitiveSentinels(output.getAll()
+ awsFailure.getMessage()
+ alibabaFailure.getMessage()
- + uniFailure.getMessage()
+ twilioFailure.getMessage()
+ tencentFailure.getMessage()
+ smslocalFailure.getMessage());
@@ -138,10 +128,6 @@ class SmsClientLoggingTest {
200,
"{\"Code\":\"THROTTLED\",\"Message\":\"" + PROVIDER_BODY + "\"}",
() -> new AlibabaSmsClientImpl(alibabaProperties()).sendMessage(receiver(), null, alert()));
- SendMessageException uniFailure = withResponse(
- 200,
- "{\"code\":\"RATE_LIMITED\",\"message\":\"" + PROVIDER_BODY + "\"}",
- () -> new UniSmsClientImpl(uniProperties()).sendMessage(receiver(), null, alert()));
SendMessageException awsFailure = withResponse(
200,
"{\"message\":\"" + PROVIDER_BODY + "\"}",
@@ -161,14 +147,12 @@ class SmsClientLoggingTest {
() -> new SmsLocalSmsClientImpl(smslocalProperties()).sendMessage(receiver(), null, alert()));
assertEquals("Alibaba Cloud SMS request failed (code: THROTTLED)", alibabaFailure.getMessage());
- assertEquals("UniSMS request failed (code: RATE_LIMITED)", uniFailure.getMessage());
assertEquals("AWS SMS provider returned an invalid response", awsFailure.getMessage());
assertEquals("Twilio SMS request failed (code: 21608)", twilioFailure.getMessage());
assertEquals("Tencent Cloud SMS request failed (code: THROTTLED)", tencentFailure.getMessage());
assertEquals("SMSLocal request failed (code: RATE_LIMITED)", smslocalFailure.getMessage());
assertNoSensitiveSentinels(output.getAll()
+ alibabaFailure.getMessage()
- + uniFailure.getMessage()
+ awsFailure.getMessage()
+ twilioFailure.getMessage()
+ tencentFailure.getMessage()
@@ -181,8 +165,6 @@ class SmsClientLoggingTest {
() -> new AwsSmsClientImpl(awsProperties()).sendMessage(receiver(), null, alert()));
SendMessageException alibabaFailure = withNetworkFailure(
() -> new AlibabaSmsClientImpl(alibabaProperties()).sendMessage(receiver(), null, alert()));
- SendMessageException uniFailure = withNetworkFailure(
- () -> new UniSmsClientImpl(uniProperties()).sendMessage(receiver(), null, alert()));
SendMessageException twilioFailure = withNetworkFailure(
() -> new TwilioSmsClientImpl(twilioProperties()).sendMessage(receiver(), null, alert()));
SendMessageException tencentFailure = withNetworkFailure(
@@ -192,14 +174,12 @@ class SmsClientLoggingTest {
assertEquals("AWS SMS request failed", awsFailure.getMessage());
assertEquals("Alibaba Cloud SMS request failed", alibabaFailure.getMessage());
- assertEquals("UniSMS request failed", uniFailure.getMessage());
assertEquals("Twilio SMS request failed", twilioFailure.getMessage());
assertEquals("Tencent Cloud SMS request failed", tencentFailure.getMessage());
assertEquals("SMSLocal request failed", smslocalFailure.getMessage());
assertNoSensitiveSentinels(output.getAll()
+ awsFailure.getMessage()
+ alibabaFailure.getMessage()
- + uniFailure.getMessage()
+ twilioFailure.getMessage()
+ tencentFailure.getMessage()
+ smslocalFailure.getMessage());
@@ -273,10 +253,6 @@ class SmsClientLoggingTest {
return new AlibabaSmsProperties(ACCESS_KEY, "alibaba-secret", "sign", "template");
}
- private UniSmsProperties uniProperties() {
- return new UniSmsProperties(ACCESS_KEY, "unisms-secret", "sign", "template", "hmac");
- }
-
private TwilioSmsProperties twilioProperties() {
return new TwilioSmsProperties(ACCESS_KEY, "twilio-secret", "twilio-phone");
}
diff --git a/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/impl/UniSmsClientImplTest.java b/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/impl/UniSmsClientImplTest.java
deleted file mode 100644
index 86aff19e32..0000000000
--- a/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/impl/UniSmsClientImplTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.hertzbeat.alert.service.impl;
-
-import org.apache.hertzbeat.common.entity.dto.sms.UniSmsProperties;
-import org.apache.hertzbeat.common.entity.alerter.GroupAlert;
-import org.apache.hertzbeat.common.entity.alerter.NoticeReceiver;
-import org.apache.hertzbeat.common.support.exception.SendMessageException;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.Mockito.when;
-
-
-/**
- * Test case for {@link UniSmsClientImpl}
- */
-@ExtendWith(MockitoExtension.class)
-public class UniSmsClientImplTest {
-
- @Mock
- private UniSmsProperties uniSmsProperties;
-
- private UniSmsClientImpl uniSmsClient;
-
- @BeforeEach
- void setUp() {
- uniSmsClient = new UniSmsClientImpl(uniSmsProperties);
- when(uniSmsProperties.getSignature()).thenReturn("2");
- when(uniSmsProperties.getTemplateId()).thenReturn("any(String.class)");
- when(uniSmsProperties.getAuthMode()).thenReturn("hmac");
- when(uniSmsProperties.getAccessKeyId()).thenReturn("hmac");
- when(uniSmsProperties.getAccessKeySecret()).thenReturn("hmac");
- }
-
- @Test
- void testSendMessage() {
- assertEquals("unisms", uniSmsClient.getType());
- assertTrue(uniSmsClient.checkConfig());
- //
- NoticeReceiver noticeReceiver = new NoticeReceiver();
- noticeReceiver.setPhone("13888888888");
-
- Map commonLabels = new HashMap<>();
- commonLabels.put("instance", "");
- commonLabels.put("priority", "unknown");
-
- Map commonAnnotations = new HashMap<>();
- commonAnnotations.put("test", "test");
-
- GroupAlert groupAlert = new GroupAlert();
- groupAlert.setCommonLabels(commonLabels);
- groupAlert.setCommonAnnotations(commonAnnotations);
-
- assertThrows(SendMessageException.class,
- () -> uniSmsClient.sendMessage(noticeReceiver, null, groupAlert));
-
- }
-
-
-}
diff --git a/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/constants/SmsConstants.java b/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/constants/SmsConstants.java
index 7929035562..be7cf4eedf 100644
--- a/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/constants/SmsConstants.java
+++ b/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/constants/SmsConstants.java
@@ -27,9 +27,6 @@ public interface SmsConstants {
// Alibaba Cloud SMS
String ALIBABA = "alibaba";
- // UniSMS
- String UNISMS = "unisms";
-
// Smslocal SMS
String SMSLOCAL = "smslocal";
diff --git a/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/dto/sms/SmsConfig.java b/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/dto/sms/SmsConfig.java
index c689b91394..2027147f0d 100644
--- a/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/dto/sms/SmsConfig.java
+++ b/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/dto/sms/SmsConfig.java
@@ -51,11 +51,6 @@ public class SmsConfig {
*/
private AlibabaSmsProperties alibaba;
- /**
- * UniSMS configuration
- */
- private UniSmsProperties unisms;
-
/**
* Aws configuration
*/
diff --git a/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/dto/sms/UniSmsProperties.java b/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/dto/sms/UniSmsProperties.java
deleted file mode 100644
index ea32e4b4de..0000000000
--- a/hertzbeat-common-core/src/main/java/org/apache/hertzbeat/common/entity/dto/sms/UniSmsProperties.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.hertzbeat.common.entity.dto.sms;
-
-import jakarta.validation.constraints.NotBlank;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * UniSMS properties
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class UniSmsProperties {
- /**
- * UniSMS access key id
- */
- @NotBlank(message = "accessKeyId cannot be empty")
- private String accessKeyId;
-
- /**
- * UniSMS access key secret, required for HMAC mode
- */
- private String accessKeySecret;
-
- /**
- * SMS signature
- */
- @NotBlank(message = "signature cannot be null")
- private String signature;
-
- /**
- * SMS template ID
- */
- @NotBlank(message = "templateId cannot be null")
- private String templateId;
-
- /**
- * Authentication mode: simple or hmac, default is simple
- */
- @NotBlank(message = "authMode cannot be null")
- private String authMode = "simple";
-}
diff --git a/hertzbeat-startup/src/main/resources/application-test.yml b/hertzbeat-startup/src/main/resources/application-test.yml
index eaf3e299d2..9debdffa96 100644
--- a/hertzbeat-startup/src/main/resources/application-test.yml
+++ b/hertzbeat-startup/src/main/resources/application-test.yml
@@ -161,14 +161,6 @@ alerter:
access-key-secret:
sign-name:
template-code:
- unisms:
- # auth-mode: simple or hmac
- auth-mode: simple
- access-key-id: YOUR_ACCESS_KEY_ID
- # hmac mode need to fill in access-key-secret
- access-key-secret: YOUR_ACCESS_KEY_SECRET
- signature: YOUR_SMS_SIGNATURE
- template-id: YOUR_TEMPLATE_ID
smslocal:
api-key: YOUR_API_KEY_HERE
aws:
diff --git a/hertzbeat-startup/src/main/resources/application.yml b/hertzbeat-startup/src/main/resources/application.yml
index 8e13abbd72..c6cd53d4e1 100644
--- a/hertzbeat-startup/src/main/resources/application.yml
+++ b/hertzbeat-startup/src/main/resources/application.yml
@@ -315,14 +315,6 @@ alerter:
access-key-secret:
sign-name:
template-code:
- unisms:
- # auth-mode: simple or hmac
- auth-mode: simple
- access-key-id: YOUR_ACCESS_KEY_ID
- # hmac mode need to fill in access-key-secret
- access-key-secret: YOUR_ACCESS_KEY_SECRET
- signature: YOUR_SMS_SIGNATURE
- template-id: YOUR_TEMPLATE_ID
smslocal:
api-key: YOUR_API_KEY_HERE
aws:
diff --git a/home/docs/help/alert_sms.md b/home/docs/help/alert_sms.md
index 39da026cb5..ed08670b38 100644
--- a/home/docs/help/alert_sms.md
+++ b/home/docs/help/alert_sms.md
@@ -1,7 +1,7 @@
---
-id: alert_sms
-title: Alert SMS notification
-sidebar_label: Alert SMS notification
+id: alert_sms
+title: Alert SMS notification
+sidebar_label: Alert SMS notification
keywords: [open source monitoring tool, open source alerter, open source SMS alert notification]
---
@@ -9,11 +9,15 @@ keywords: [open source monitoring tool, open source alerter, open source SMS ale
## SMS Service Configuration
-Only when you successfully configure your own SMS service will the alert SMS triggered within the monitoring system be sent correctly.
+Only when you successfully configure your own SMS service will the alert SMS triggered within the monitoring system be sent correctly.
HertzBeat provides two ways to configure the SMS service: modifying the `application.yml` configuration file directly or configuring it through the HertzBeat frontend interface (Settings > Message Server Setting).
> ⚠️ Note: Only one method can be effective at a time. If both methods are configured and enabled, HertzBeat will prioritize the SMS service configured in the frontend interface.
+:::caution
+UniSMS officially shut down on 2026-09-15, so HertzBeat no longer supports it as an SMS provider. If your SMS service is configured with `type: unisms`, please switch to another provider below.
+:::
+
### Tencent Cloud SMS Configuration
Add/Fill in the following Tencent Cloud SMS server configuration to `application.yml` (replace parameters with your own SMS server configuration):
@@ -31,7 +35,7 @@ alerter:
template-id: 1343434
```
-1. Create a signature (sign-name) in Tencent Cloud SMS
+1. Create a signature (sign-name) in Tencent Cloud SMS

2. Create a message template (template-id) in Tencent Cloud SMS
@@ -42,10 +46,10 @@ alerter:

-3. Create an application (app-id) in Tencent Cloud SMS
+3. Create an application (app-id) in Tencent Cloud SMS

-4. Obtain Tencent Cloud Access Management credentials (secret-id, secret-key)
+4. Obtain Tencent Cloud Access Management credentials (secret-id, secret-key)

### Alibaba Cloud SMS Configuration
@@ -100,66 +104,6 @@ alerter:
Now you can configure this information in your hertzbeat application.
-### UniSMS Configuration
-
-UniSMS is an aggregated SMS service platform.
-
-:::caution
-UniSMS officially shut down on 2026-09-15, and its API and console are no longer available. Please switch to another SMS provider. The configuration below is kept for reference only.
-:::
-
-Add/Fill in the following UniSMS configuration to `application.yml` (replace parameters with your own SMS server configuration):
-
-```yaml
-alerter:
- sms:
- enable: true # Whether to enable
- type: unisms # SMS provider type, set to unisms
- unisms: # UniSMS configuration
- # auth-mode: simple or hmac
- auth-mode: simple
- access-key-id: YOUR_ACCESS_KEY_ID
- # hmac mode need to fill in access-key-secret
- access-key-secret: YOUR_ACCESS_KEY_SECRET
- signature: YOUR_SMS_SIGNATURE
- template-id: YOUR_TEMPLATE_ID
-```
-
-1. Register UniSMS account
- - Visit the UniSMS website
-
-2. Create signature
- - Log in to the UniSMS Console
- - Go to "SMS Filing - Signature Management" page
- - Click "Add Signature"
- - Fill in signature information and submit for review
- - Wait for signature approval
-
-3. Create message template
- - Go to "SMS Filing - Template Management" page
- - Click "Add Template"
- - Create a template with the following format:
-
- ```text
- Monitor: {instance}, Alert Level: {priority}. Content: {content}
- ```
-
- - Submit the template for review
-
-4. Obtain `access-key-id` and `access-key-secret`
- - Log in to the UniSMS Console
- - Go to "Credential Management" page
- - Get AccessKey ID and AccessKey Secret
- - Securely save the AccessKey ID and AccessKey Secret
-
- :::note
- UniSMS provides two authentication methods for developers to choose from, which can be set in Console - Credential Management, with Simple Mode as default.
- - Simple Mode [Default]: This mode only verifies AccessKey ID without request parameter signature, making it easier for developers to integrate quickly.
- - HMAC Mode: This mode requires signing request parameters with AccessKey Secret to enhance the security and authenticity of requests.
- :::
-
-Now you can configure this information in your hertzbeat application.
-
### Smslocal SMS Configuration
SMSLocal is an all-in-one SMS service for businesses, with features like multi-way sending, strong security, and 24/7 support. You can refer to smslocal's [Developer Documentation](https://www.smslocal.com/developer/) for configuration.
@@ -202,7 +146,7 @@ alerter:
aws: # AWS Cloud SMS configuration
access-key-id: # Your AccessKey ID
access-key-secret: # Your AccessKey Secret
- region: # Region Of Your AWS
+ region: # Region Of Your AWS
```
1. Create an AWS Cloud account
diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/alert_sms.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/alert_sms.md
index bc7a502f0f..b81d0c8afd 100644
--- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/alert_sms.md
+++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/alert_sms.md
@@ -1,7 +1,7 @@
---
-id: alert_sms
-title: 告警短信通知
-sidebar_label: 告警短信通知
+id: alert_sms
+title: 告警短信通知
+sidebar_label: 告警短信通知
keywords: [开源监控系统, 开源告警系统, 开源短信告警通知]
---
@@ -13,6 +13,10 @@ keywords: [开源监控系统, 开源告警系统, 开源短信告警通知]
hertzbeat有两种方式配置短信服务,一种是直接修改`application.yml`配置文件,另一种是通过hertzbeat前端界面(系统设置 > 消息服务配置)配置。
> 注意⚠️:两种方式配置的短信服务只能选择一种生效,当两种方式都配置并且开启时,hertzbeat将会优先使用前端界面配置的短信服务。
+:::caution
+UniSMS 合一短信已于 2026-09-15 正式闭站,hertzbeat 已不再支持该短信服务商。如果您的短信服务配置为 `type: unisms`,请改用下方其他服务商。
+:::
+
### 腾讯云短信配置
在`application.yml`新增/填写如下腾讯平台短信服务器配置(参数需替换为您的短信服务器配置)
@@ -99,64 +103,6 @@ alerter:
现在您可以把这些信息配置到您的hertzbeat应用中。
-### uni-sms配置
-
-uni-sms是一个聚合短信服务平台。
-
-:::caution
-UniSMS 合一短信已于 2026-09-15 正式闭站,API 与控制台均已无法使用。请改用其他短信服务商,以下配置仅作参考保留。
-:::
-
-在`application.yml`新增/填写如下uni-sms短信服务配置(参数需替换为您的短信服务器配置)
-
-```yaml
-alerter:
- sms:
- enable: true # 启用配置
- type: unisms # 短信服务商类型,设置为unisms
- unisms: # 填写uni-sms短信配置
- # auth-mode: simple or hmac
- auth-mode: simple
- access-key-id: YOUR_ACCESS_KEY_ID
- # hmac mode need to fill in access-key-secret
- access-key-secret: YOUR_ACCESS_KEY_SECRET
- signature: YOUR_SMS_SIGNATURE
- template-id: YOUR_TEMPLATE_ID
-```
-
-1. 注册uni-sms账号
- - 访问uni-sms官网
-
-2. 创建短信签名(signature)
- - 登录uni-sms控制台
- - 进入"短信报备-签名管理"页面
- - 点击"添加签名"
- - 填写签名信息并提交审核
- - 等待签名审核通过
-
-3. 创建短信模板(template-id)
- - 进入"短信报备-模板管理"页面
- - 点击"添加模板"
- - 创建如下格式的模板:
-
- ```text
- 监控项:{instance},告警级别:{priority}。内容:{content}
- ```
-
- - 提交模板等待审核
-
-4. 获取`access-key-id`和`access-key-secret`
- - 登录uni-sms控制台
- - 进入"凭证管理"页面
- - 获取AccessKey ID和AccessKey Secret
- - 安全保存AccessKey ID和AccessKey Secret
-
- :::note
- UniSMS 提供以下两种鉴权方式共开发者选择,可在控制台-凭证管理中设置,默认为简易模式。
- - 简易模式 [默认]:此模式仅核验 AccessKey ID,不对请求参数进行验签,方便开发者快速接入。
- - HMAC模式:此模式要求使用 AccessKey Secret 对请求参数进行验签,以加强保障请求的安全与真实性。
- :::
-
### AWS Cloud SMS配置
要激活和使用 AWS Cloud SMS 服务,请参考官方 AWS 文档: [SMS Getting Started Guide](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-sms-mms.html)
@@ -172,7 +118,7 @@ alerter:
aws: # AWS Cloud SMS configuration
access-key-id: # Your AccessKey ID
access-key-secret: # Your AccessKey Secret
- region: # Region Of Your AWS
+ region: # Region Of Your AWS
```
1. 创建 AWS 账户
diff --git a/script/application.yml b/script/application.yml
index 8e13abbd72..c6cd53d4e1 100644
--- a/script/application.yml
+++ b/script/application.yml
@@ -315,14 +315,6 @@ alerter:
access-key-secret:
sign-name:
template-code:
- unisms:
- # auth-mode: simple or hmac
- auth-mode: simple
- access-key-id: YOUR_ACCESS_KEY_ID
- # hmac mode need to fill in access-key-secret
- access-key-secret: YOUR_ACCESS_KEY_SECRET
- signature: YOUR_SMS_SIGNATURE
- template-id: YOUR_TEMPLATE_ID
smslocal:
api-key: YOUR_API_KEY_HERE
aws:
diff --git a/script/docker-compose/hertzbeat-mysql-iotdb/conf/application.yml b/script/docker-compose/hertzbeat-mysql-iotdb/conf/application.yml
index 2528df16bd..47be747361 100644
--- a/script/docker-compose/hertzbeat-mysql-iotdb/conf/application.yml
+++ b/script/docker-compose/hertzbeat-mysql-iotdb/conf/application.yml
@@ -216,14 +216,6 @@ alerter:
access-key-secret:
sign-name:
template-code:
- unisms:
- # auth-mode: simple or hmac
- auth-mode: simple
- access-key-id: YOUR_ACCESS_KEY_ID
- # hmac mode need to fill in access-key-secret
- access-key-secret: YOUR_ACCESS_KEY_SECRET
- signature: YOUR_SMS_SIGNATURE
- template-id: YOUR_TEMPLATE_ID
smslocal:
api-key: YOUR_API_KEY_HERE
aws:
diff --git a/script/docker-compose/hertzbeat-mysql-tdengine/conf/application.yml b/script/docker-compose/hertzbeat-mysql-tdengine/conf/application.yml
index e9b8f00d39..10c4df7d4e 100644
--- a/script/docker-compose/hertzbeat-mysql-tdengine/conf/application.yml
+++ b/script/docker-compose/hertzbeat-mysql-tdengine/conf/application.yml
@@ -213,14 +213,6 @@ alerter:
access-key-secret:
sign-name:
template-code:
- unisms:
- # auth-mode: simple or hmac
- auth-mode: simple
- access-key-id: YOUR_ACCESS_KEY_ID
- # hmac mode need to fill in access-key-secret
- access-key-secret: YOUR_ACCESS_KEY_SECRET
- signature: YOUR_SMS_SIGNATURE
- template-id: YOUR_TEMPLATE_ID
smslocal:
api-key: YOUR_API_KEY_HERE
aws:
diff --git a/script/docker-compose/hertzbeat-mysql-victoria-metrics/conf/application.yml b/script/docker-compose/hertzbeat-mysql-victoria-metrics/conf/application.yml
index 9f55355696..5e11381cfb 100644
--- a/script/docker-compose/hertzbeat-mysql-victoria-metrics/conf/application.yml
+++ b/script/docker-compose/hertzbeat-mysql-victoria-metrics/conf/application.yml
@@ -216,14 +216,6 @@ alerter:
access-key-secret:
sign-name:
template-code:
- unisms:
- # auth-mode: simple or hmac
- auth-mode: simple
- access-key-id: YOUR_ACCESS_KEY_ID
- # hmac mode need to fill in access-key-secret
- access-key-secret: YOUR_ACCESS_KEY_SECRET
- signature: YOUR_SMS_SIGNATURE
- template-id: YOUR_TEMPLATE_ID
smslocal:
api-key: YOUR_API_KEY_HERE
aws:
diff --git a/script/docker-compose/hertzbeat-postgresql-greptimedb/conf/application.yml b/script/docker-compose/hertzbeat-postgresql-greptimedb/conf/application.yml
index 7cbbc60802..4f4c476e86 100644
--- a/script/docker-compose/hertzbeat-postgresql-greptimedb/conf/application.yml
+++ b/script/docker-compose/hertzbeat-postgresql-greptimedb/conf/application.yml
@@ -213,14 +213,6 @@ alerter:
access-key-secret:
sign-name:
template-code:
- unisms:
- # auth-mode: simple or hmac
- auth-mode: simple
- access-key-id: YOUR_ACCESS_KEY_ID
- # hmac mode need to fill in access-key-secret
- access-key-secret: YOUR_ACCESS_KEY_SECRET
- signature: YOUR_SMS_SIGNATURE
- template-id: YOUR_TEMPLATE_ID
smslocal:
api-key: YOUR_API_KEY_HERE
aws:
diff --git a/script/docker-compose/hertzbeat-postgresql-victoria-metrics/conf/application.yml b/script/docker-compose/hertzbeat-postgresql-victoria-metrics/conf/application.yml
index 88b58c489b..961848fba3 100644
--- a/script/docker-compose/hertzbeat-postgresql-victoria-metrics/conf/application.yml
+++ b/script/docker-compose/hertzbeat-postgresql-victoria-metrics/conf/application.yml
@@ -215,14 +215,6 @@ alerter:
access-key-secret:
sign-name:
template-code:
- unisms:
- # auth-mode: simple or hmac
- auth-mode: simple
- access-key-id: YOUR_ACCESS_KEY_ID
- # hmac mode need to fill in access-key-secret
- access-key-secret: YOUR_ACCESS_KEY_SECRET
- signature: YOUR_SMS_SIGNATURE
- template-id: YOUR_TEMPLATE_ID
smslocal:
api-key: YOUR_API_KEY_HERE
aws:
diff --git a/web-app/src/app/pojo/SmsNoticeSender.ts b/web-app/src/app/pojo/SmsNoticeSender.ts
index 759502b2aa..737adfd0fa 100644
--- a/web-app/src/app/pojo/SmsNoticeSender.ts
+++ b/web-app/src/app/pojo/SmsNoticeSender.ts
@@ -22,7 +22,6 @@ import { AwsSmsConfig } from './AwsSmsConfig';
import { SmslocalSmsConfig } from './SmslocalSmsConfig';
import { TencentSmsConfig } from './TencentSmsConfig';
import { TwilioSmsConfig } from './TwilioSmsConfig';
-import { UniSmsConfig } from './UniSmsConfig';
import { SmsType } from './enums/sms-type.enum';
export class SmsNoticeSender {
@@ -30,7 +29,6 @@ export class SmsNoticeSender {
type: SmsType = SmsType.TENCENT;
tencent: TencentSmsConfig = new TencentSmsConfig();
alibaba: AlibabaSmsConfig = new AlibabaSmsConfig();
- unisms: UniSmsConfig = new UniSmsConfig();
smslocal: SmslocalSmsConfig = new SmslocalSmsConfig();
aws: AwsSmsConfig = new AwsSmsConfig();
twilio: TwilioSmsConfig = new TwilioSmsConfig();
diff --git a/web-app/src/app/pojo/UniSmsConfig.ts b/web-app/src/app/pojo/UniSmsConfig.ts
deleted file mode 100644
index 2832c0825c..0000000000
--- a/web-app/src/app/pojo/UniSmsConfig.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-export class UniSmsConfig {
- accessKeyId!: string;
- accessKeySecret!: string;
- signature!: string;
- authMode!: string;
- templateId!: string;
-}
diff --git a/web-app/src/app/pojo/enums/sms-type.enum.ts b/web-app/src/app/pojo/enums/sms-type.enum.ts
index 95dba15349..63ef41268f 100644
--- a/web-app/src/app/pojo/enums/sms-type.enum.ts
+++ b/web-app/src/app/pojo/enums/sms-type.enum.ts
@@ -20,13 +20,7 @@
export enum SmsType {
TENCENT = 'tencent',
ALIBABA = 'alibaba',
- UNISMS = 'unisms',
SMSLOCAL = 'smslocal',
AWS = 'aws',
TWILIO = 'twilio'
}
-
-export enum UniSmsAuthMode {
- HMAC = 'hmac',
- SIMPLE = 'simple'
-}
diff --git a/web-app/src/app/routes/setting/settings/message-server/message-server.component.html b/web-app/src/app/routes/setting/settings/message-server/message-server.component.html
index 57290b5203..b65a521344 100644
--- a/web-app/src/app/routes/setting/settings/message-server/message-server.component.html
+++ b/web-app/src/app/routes/setting/settings/message-server/message-server.component.html
@@ -64,14 +64,6 @@
{{ 'alert.notice.sender.sms.alibaba.templateCode' | i18n }}: {{ smsNoticeSender.alibaba.templateCode }}
-
-
- {{ 'alert.notice.sender.sms.unisms.signature' | i18n }}: {{ smsNoticeSender.unisms.signature }}
-
- {{ 'alert.notice.sender.sms.unisms.templateId' | i18n }}: {{ smsNoticeSender.unisms.templateId }}
-
- {{ 'alert.notice.sender.sms.unisms.authMode' | i18n }}: {{ smsNoticeSender.unisms.authMode }}
-
{{ 'alert.notice.sender.sms.twilio.accountSid' | i18n }}: {{ smsNoticeSender.twilio.accountSid }}
@@ -170,7 +162,6 @@
-
@@ -277,69 +268,6 @@
-
-
-
-
- {{ 'alert.notice.sender.sms.unisms.accessKeyId' | i18n }}
-
-
-
-
-
-
-
- {{ 'alert.notice.sender.sms.unisms.authMode' | i18n }}
-
-
-
-
-
-
-
-
-
-
-
-
- {{ 'alert.notice.sender.sms.unisms.accessKeySecret' | i18n }}
-
-
-
-
-
-
-
- {{ 'alert.notice.sender.sms.unisms.signature' | i18n }}
-
-
-
-
-
-
-
- {{ 'alert.notice.sender.sms.unisms.templateId' | i18n }}
-
-
-
-
-
-
-
diff --git a/web-app/src/app/routes/setting/settings/message-server/message-server.component.ts b/web-app/src/app/routes/setting/settings/message-server/message-server.component.ts
index c20b89cf68..f6bff3b6d2 100644
--- a/web-app/src/app/routes/setting/settings/message-server/message-server.component.ts
+++ b/web-app/src/app/routes/setting/settings/message-server/message-server.component.ts
@@ -27,8 +27,7 @@ import { finalize } from 'rxjs/operators';
import { AlibabaSmsConfig } from 'src/app/pojo/AlibabaSmsConfig';
import { SmsNoticeSender } from 'src/app/pojo/SmsNoticeSender';
import { TencentSmsConfig } from 'src/app/pojo/TencentSmsConfig';
-import { UniSmsConfig } from 'src/app/pojo/UniSmsConfig';
-import { SmsType, UniSmsAuthMode } from 'src/app/pojo/enums/sms-type.enum';
+import { SmsType } from 'src/app/pojo/enums/sms-type.enum';
import { AwsSmsConfig } from '../../../../pojo/AwsSmsConfig';
import { EmailNoticeSender } from '../../../../pojo/EmailNoticeSender';
@@ -57,7 +56,6 @@ export class MessageServerComponent implements OnInit {
smsType: SmsType = SmsType.TENCENT;
emailSender = new EmailNoticeSender();
smsNoticeSender = new SmsNoticeSender();
- uniSmsAuthModes = UniSmsAuthMode;
SmsType = SmsType;
private tempSmsType: SmsType = SmsType.TENCENT;
private tempSmsNoticeSender = new SmsNoticeSender();
@@ -144,7 +142,6 @@ export class MessageServerComponent implements OnInit {
this.smsNoticeSender = { ...newSender, ...message.data };
this.smsNoticeSender.tencent = { ...new TencentSmsConfig(), ...message.data.tencent };
this.smsNoticeSender.alibaba = { ...new AlibabaSmsConfig(), ...message.data.alibaba };
- this.smsNoticeSender.unisms = { ...new UniSmsConfig(), ...message.data.unisms };
this.smsNoticeSender.smslocal = { ...new SmslocalSmsConfig(), ...message.data.smslocal };
this.smsNoticeSender.aws = { ...new AwsSmsConfig(), ...message.data.aws };
this.smsNoticeSender.twilio = { ...new TwilioSmsConfig(), ...message.data.twilio };
@@ -171,7 +168,6 @@ export class MessageServerComponent implements OnInit {
...this.smsNoticeSender,
tencent: { ...this.smsNoticeSender.tencent },
alibaba: { ...this.smsNoticeSender.alibaba },
- unisms: { ...this.smsNoticeSender.unisms },
smslocal: { ...this.smsNoticeSender.smslocal },
aws: { ...this.smsNoticeSender.aws },
twilio: { ...this.smsNoticeSender.twilio }
@@ -185,7 +181,6 @@ export class MessageServerComponent implements OnInit {
...this.tempSmsNoticeSender,
tencent: { ...this.tempSmsNoticeSender.tencent },
alibaba: { ...this.tempSmsNoticeSender.alibaba },
- unisms: { ...this.tempSmsNoticeSender.unisms },
smslocal: { ...this.tempSmsNoticeSender.smslocal },
aws: { ...this.tempSmsNoticeSender.aws },
twilio: { ...this.tempSmsNoticeSender.twilio }
@@ -198,10 +193,6 @@ export class MessageServerComponent implements OnInit {
this.smsNoticeSender.type = value;
}
- isAccessKeySecretRequired(): boolean {
- return this.smsNoticeSender.unisms.authMode === UniSmsAuthMode.HMAC;
- }
-
onSaveSmsServer() {
if (this.senderForm?.invalid) {
Object.values(this.senderForm.controls).forEach(control => {
diff --git a/web-app/src/assets/i18n/en-US.json b/web-app/src/assets/i18n/en-US.json
index 0b5c837cc5..3b0607042b 100644
--- a/web-app/src/assets/i18n/en-US.json
+++ b/web-app/src/assets/i18n/en-US.json
@@ -158,11 +158,6 @@
"alert.notice.sender.sms.alibaba.accessKeySecret": "Alibaba SMS AccessKeySecret",
"alert.notice.sender.sms.alibaba.signName": "Alibaba SMS Sign Name",
"alert.notice.sender.sms.alibaba.templateCode": "Alibaba SMS Template Code",
- "alert.notice.sender.sms.unisms.accessKeyId": "UniSMS AccessKeyId",
- "alert.notice.sender.sms.unisms.accessKeySecret": "UniSMS AccessKeySecret",
- "alert.notice.sender.sms.unisms.signature": "UniSMS Signature",
- "alert.notice.sender.sms.unisms.templateId": "UniSMS TemplateId",
- "alert.notice.sender.sms.unisms.authMode": "UniSMS Authentication Mode",
"alert.notice.sender.sms.smslocal.apiKey": "Smslocal ApiKey",
"alert.notice.sender.sms.aws.accessKeyId": "Aws SMS AccessKeyId",
"alert.notice.sender.sms.aws.accessKeySecret": "Aws SMS AccessKeySecret",
@@ -173,7 +168,6 @@
"alert.notice.sender.sms.type": "Sms Type",
"alert.notice.sender.sms.type.alibaba": "Alibaba Sms",
"alert.notice.sender.sms.type.tencent": "Tencent Sms",
- "alert.notice.sender.sms.type.unisms": "UniSMS",
"alert.notice.sender.sms.type.smslocal": "Smslocal Sms",
"alert.notice.sender.sms.type.aws": "Aws Sms",
"alert.notice.sender.sms.type.twilio": "Twilio Sms",
diff --git a/web-app/src/assets/i18n/ja-JP.json b/web-app/src/assets/i18n/ja-JP.json
index 8df517eec8..e523c9d9ef 100644
--- a/web-app/src/assets/i18n/ja-JP.json
+++ b/web-app/src/assets/i18n/ja-JP.json
@@ -157,11 +157,6 @@
"alert.notice.sender.sms.alibaba.accessKeySecret": "Alibaba SMS AccessKeySecret",
"alert.notice.sender.sms.alibaba.signName": "Alibaba SMS SignName",
"alert.notice.sender.sms.alibaba.templateCode": "Alibaba SMS TemplateCode",
- "alert.notice.sender.sms.unisms.accessKeyId": "UniSMS AccessKeyId",
- "alert.notice.sender.sms.unisms.accessKeySecret": "UniSMS AccessKeySecret",
- "alert.notice.sender.sms.unisms.signature": "UniSMS Signature",
- "alert.notice.sender.sms.unisms.templateId": "UniSMS TemplateId",
- "alert.notice.sender.sms.unisms.authMode": "UniSMS認証モード",
"alert.notice.sender.sms.smslocal.apiKey": "Smslocal ApiKey",
"alert.notice.sender.sms.aws.accessKeyId": "Aws SMS AccessKeyId",
"alert.notice.sender.sms.aws.accessKeySecret": "Aws SMS AccessKeySecret",
@@ -172,7 +167,6 @@
"alert.notice.sender.sms.type": "SMSタイプ",
"alert.notice.sender.sms.type.alibaba": "Alibaba Sms",
"alert.notice.sender.sms.type.tencent": "Tencent Sms",
- "alert.notice.sender.sms.type.unisms": "UniSMS",
"alert.notice.sender.sms.type.smslocal": "Smslocal Sms",
"alert.notice.sender.sms.type.aws": "Aws Sms",
"alert.notice.sender.sms.type.twilio": "Twilio Sms",
diff --git a/web-app/src/assets/i18n/ko-KR.json b/web-app/src/assets/i18n/ko-KR.json
index 1a77de3774..8f4641fbd2 100644
--- a/web-app/src/assets/i18n/ko-KR.json
+++ b/web-app/src/assets/i18n/ko-KR.json
@@ -158,11 +158,6 @@
"alert.notice.sender.sms.alibaba.accessKeySecret": "Alibaba SMS AccessKeySecret",
"alert.notice.sender.sms.alibaba.signName": "Alibaba SMS Sign Name",
"alert.notice.sender.sms.alibaba.templateCode": "Alibaba SMS Template Code",
- "alert.notice.sender.sms.unisms.accessKeyId": "UniSMS AccessKeyId",
- "alert.notice.sender.sms.unisms.accessKeySecret": "UniSMS AccessKeySecret",
- "alert.notice.sender.sms.unisms.signature": "UniSMS Signature",
- "alert.notice.sender.sms.unisms.templateId": "UniSMS TemplateId",
- "alert.notice.sender.sms.unisms.authMode": "UniSMS 인증 방식",
"alert.notice.sender.sms.smslocal.apiKey": "Smslocal ApiKey",
"alert.notice.sender.sms.aws.accessKeyId": "AWS SMS AccessKeyId",
"alert.notice.sender.sms.aws.accessKeySecret": "AWS SMS AccessKeySecret",
@@ -173,7 +168,6 @@
"alert.notice.sender.sms.type": "SMS 유형",
"alert.notice.sender.sms.type.alibaba": "Alibaba SMS",
"alert.notice.sender.sms.type.tencent": "Tencent SMS",
- "alert.notice.sender.sms.type.unisms": "UniSMS",
"alert.notice.sender.sms.type.smslocal": "Smslocal SMS",
"alert.notice.sender.sms.type.aws": "AWS SMS",
"alert.notice.sender.sms.type.twilio": "Twilio SMS",
diff --git a/web-app/src/assets/i18n/pt-BR.json b/web-app/src/assets/i18n/pt-BR.json
index bf2a3e6e36..bec7bae3f7 100644
--- a/web-app/src/assets/i18n/pt-BR.json
+++ b/web-app/src/assets/i18n/pt-BR.json
@@ -1278,11 +1278,6 @@
"alert.notice.sender.sms.alibaba.accessKeySecret": "Alibaba SMS AccessKeySecret",
"alert.notice.sender.sms.alibaba.signName": "Nome da Assinatura Alibaba SMS",
"alert.notice.sender.sms.alibaba.templateCode": "Código do Template Alibaba SMS",
- "alert.notice.sender.sms.unisms.accessKeyId": "UniSMS AccessKeyId",
- "alert.notice.sender.sms.unisms.accessKeySecret": "UniSMS AccessKeySecret",
- "alert.notice.sender.sms.unisms.signature": "Assinatura UniSMS",
- "alert.notice.sender.sms.unisms.templateId": "UniSMS TemplateId",
- "alert.notice.sender.sms.unisms.authMode": "Modo de Autenticação UniSMS",
"alert.notice.sender.sms.smslocal.apiKey": "Smslocal ApiKey",
"alert.notice.sender.sms.aws.accessKeyId": "Aws SMS AccessKeyId",
"alert.notice.sender.sms.aws.accessKeySecret": "Aws SMS AccessKeySecret",
@@ -1290,7 +1285,6 @@
"alert.notice.sender.sms.twilio.accountSid": "Twilio Account SID",
"alert.notice.sender.sms.twilio.authToken": "Twilio Auth Token",
"alert.notice.sender.sms.twilio.twilioPhoneNumber": "Número de Telefone Twilio",
- "alert.notice.sender.sms.type.unisms": "UniSMS",
"alert.notice.sender.sms.type.smslocal": "Smslocal Sms",
"alert.notice.sender.sms.type.aws": "Aws Sms",
"alert.notice.sender.sms.type.twilio": "Twilio Sms",
diff --git a/web-app/src/assets/i18n/zh-CN.json b/web-app/src/assets/i18n/zh-CN.json
index 9c1059dbf0..54fc54453b 100644
--- a/web-app/src/assets/i18n/zh-CN.json
+++ b/web-app/src/assets/i18n/zh-CN.json
@@ -158,11 +158,6 @@
"alert.notice.sender.sms.alibaba.accessKeySecret": "阿里短信AccessKeySecret",
"alert.notice.sender.sms.alibaba.signName": "阿里短信SignName",
"alert.notice.sender.sms.alibaba.templateCode": "阿里短信TemplateCode",
- "alert.notice.sender.sms.unisms.accessKeyId": "合一短信AccessKeyId",
- "alert.notice.sender.sms.unisms.accessKeySecret": "合一短信AccessKeySecret",
- "alert.notice.sender.sms.unisms.signature": "合一短信Signature",
- "alert.notice.sender.sms.unisms.templateId": "合一短信TemplateId",
- "alert.notice.sender.sms.unisms.authMode": "合一短信鉴权方式",
"alert.notice.sender.sms.smslocal.apiKey": "Smslocal短信鉴权方式",
"alert.notice.sender.sms.aws.accessKeyId": "Aws SMS AccessKeyId",
"alert.notice.sender.sms.aws.accessKeySecret": "Aws SMS AccessKeySecret",
@@ -173,7 +168,6 @@
"alert.notice.sender.sms.type": "短信类型",
"alert.notice.sender.sms.type.alibaba": "阿里短信",
"alert.notice.sender.sms.type.tencent": "腾讯短信",
- "alert.notice.sender.sms.type.unisms": "合一短信(UniSMS)",
"alert.notice.sender.sms.type.smslocal": "当地短信(Smslocal)",
"alert.notice.sender.sms.type.aws": "Aws Sms",
"alert.notice.sender.sms.type.twilio": "Twilio Sms",
diff --git a/web-app/src/assets/i18n/zh-TW.json b/web-app/src/assets/i18n/zh-TW.json
index 8e4b95974a..145f01493b 100644
--- a/web-app/src/assets/i18n/zh-TW.json
+++ b/web-app/src/assets/i18n/zh-TW.json
@@ -157,11 +157,6 @@
"alert.notice.sender.sms.alibaba.accessKeySecret": "阿里短訊AccessKeySecret",
"alert.notice.sender.sms.alibaba.signName": "阿里短訊SignName",
"alert.notice.sender.sms.alibaba.templateCode": "阿里短訊TemplateCode",
- "alert.notice.sender.sms.unisms.accessKeyId": "合一簡訊AccessKeyId",
- "alert.notice.sender.sms.unisms.accessKeySecret": "合一簡訊AccessKeySecret",
- "alert.notice.sender.sms.unisms.signature": "合一簡訊Signature",
- "alert.notice.sender.sms.unisms.templateId": "合一簡訊TemplateId",
- "alert.notice.sender.sms.unisms.authMode": "合一簡訊驗證方式",
"alert.notice.sender.sms.smslocal.apiKey": "Smslocal短訊ApiKey",
"alert.notice.sender.sms.aws.accessKeyId": "Aws SMS AccessKeyId",
"alert.notice.sender.sms.aws.accessKeySecret": "Aws SMS AccessKeySecret",
@@ -172,7 +167,6 @@
"alert.notice.sender.sms.type": "騰訊類型",
"alert.notice.sender.sms.type.alibaba": "阿裏短訊",
"alert.notice.sender.sms.type.tencent": "騰訊短訊",
- "alert.notice.sender.sms.type.unisms": "合一簡訊(UniSMS)",
"alert.notice.sender.sms.type.smslocal": "当地短訊(Smslocal)",
"alert.notice.sender.sms.type.aws": "Aws Sms",
"alert.notice.template": "通知模板",