Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amazon 中设置SMS消息偏好 SNS
使用 Amazon SNS 来指定SMS消息收发偏好。例如,您可以指定是否根据成本或可靠性来优化交付、您的每月支出限额、如何记录交付以及是否订阅每日SMS使用报告。
这些偏好设置对您从账户发送的每SMS条消息生效,但是在发送个人消息时,您可以覆盖其中的一些偏好设置。有关更多信息,请参阅 使用 Amazon 向手机发布SMS消息 SNS。
使用设置SMS消息首选项 Amazon Web Services Management Console
登录 Amazon SNS 控制台。
-
选择支持SMS消息传递的区域。
-
在导航面板上,选择手机,然后选择短信 (SMS)。
-
在移动短信 (SMS) 页面的短信偏好设置部分,选择编辑。
-
在 Edit text messaging preferences (编辑文本消息发送首选项) 页上,在 Details (详细信息) 部分中,执行以下操作:
-
对于默认消息类型,选择下列选项之一:
有关促销和交易消息的定价信息,请参阅全球SMS定价。
-
(可选)在账户支出限额中,输入您想在每个日历月的SMS消息上花费的金额(单位USD)。
-
默认情况下,支出配额设置为 1.00 USD。如果要提高服务配额,请提交请求。
-
如果控制台中设置的金额超过您的服务配额,Amazon 将SNS停止发布SMS消息。
-
由于 Amazon SNS 是一个分布式系统,因此它会在超过支出配额后的几分钟内停止发送SMS消息。在此间隔内,如果您继续发送SMS消息,则可能会产生超出配额的费用。
-
(可选)对于默认发件人 ID,请输入一个自定义 ID(如您的企业品牌),它显示为接收设备的发送者。
-
(可选)输入 Amazon S3 bucket name for usage reports(使用情况报告的 Amazon S3 存储桶名称)的名称。
S3 存储桶策略必须授予对 Amazon 的写入权限SNS。
-
选择 Save changes(保存更改)。
设置首选项 (Amazon SDKs)
要使用其中一个设置您的SMS首选项 Amazon SDKs,请使用与 SDK Amazon 中的SetSMSAttributes
请求相对应的操作SNSAPI。通过此请求,您可以为不同的SMS属性分配值,例如您的每月支出配额和默认SMS类型(促销或交易)。有关所有SMS属性,请参阅《Amazon 简单通知服务API参考》etSMSAttributes中的 S。
以下代码示例演示如何使用 SetSMSAttributes
。
- C++
-
- SDK对于 C++
-
如何使用亚马逊SNS来设置 D efaultSMSType 属性。
//! Set the default settings for sending SMS messages.
/*!
\param smsType: The type of SMS message that you will send by default.
\param clientConfiguration: AWS client configuration.
\return bool: Function succeeded.
*/
bool AwsDoc::SNS::setSMSType(const Aws::String &smsType,
const Aws::Client::ClientConfiguration &clientConfiguration) {
Aws::SNS::SNSClient snsClient(clientConfiguration);
Aws::SNS::Model::SetSMSAttributesRequest request;
request.AddAttributes("DefaultSMSType", smsType);
const Aws::SNS::Model::SetSMSAttributesOutcome outcome = snsClient.SetSMSAttributes(
request);
if (outcome.IsSuccess()) {
std::cout << "SMS Type set successfully " << std::endl;
}
else {
std::cerr << "Error while setting SMS Type: '"
<< outcome.GetError().GetMessage()
<< "'" << std::endl;
}
return outcome.IsSuccess();
}
- CLI
-
- Amazon CLI
-
设置SMS消息属性
以下set-sms-attributes
示例将SMS邮件的默认发件人 ID 设置为MyName
。
aws sns set-sms-attributes \
--attributes DefaultSenderID=MyName
此命令不生成任何输出。
- Java
-
- SDK适用于 Java 2.x
-
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SetSmsAttributesRequest;
import software.amazon.awssdk.services.sns.model.SetSmsAttributesResponse;
import software.amazon.awssdk.services.sns.model.SnsException;
import java.util.HashMap;
/**
* Before running this Java V2 code example, set up your development
* environment, including your credentials.
*
* For more information, see the following documentation topic:
*
* https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
*/
public class SetSMSAttributes {
public static void main(String[] args) {
HashMap<String, String> attributes = new HashMap<>(1);
attributes.put("DefaultSMSType", "Transactional");
attributes.put("UsageReportS3Bucket", "janbucket");
SnsClient snsClient = SnsClient.builder()
.region(Region.US_EAST_1)
.build();
setSNSAttributes(snsClient, attributes);
snsClient.close();
}
public static void setSNSAttributes(SnsClient snsClient, HashMap<String, String> attributes) {
try {
SetSmsAttributesRequest request = SetSmsAttributesRequest.builder()
.attributes(attributes)
.build();
SetSmsAttributesResponse result = snsClient.setSMSAttributes(request);
System.out.println("Set default Attributes to " + attributes + ". Status was "
+ result.sdkHttpResponse().statusCode());
} catch (SnsException e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
}
}
- JavaScript
-
- SDK对于 JavaScript (v3)
-
在单独的模块中创建客户端并将其导出。
import { SNSClient } from "@aws-sdk/client-sns";
// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
导入SDK和客户端模块并调用API。
import { SetSMSAttributesCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";
/**
* @param {"Transactional" | "Promotional"} defaultSmsType
*/
export const setSmsType = async (defaultSmsType = "Transactional") => {
const response = await snsClient.send(
new SetSMSAttributesCommand({
attributes: {
// Promotional – (Default) Noncritical messages, such as marketing messages.
// Transactional – Critical messages that support customer transactions,
// such as one-time passcodes for multi-factor authentication.
DefaultSMSType: defaultSmsType,
},
}),
);
console.log(response);
// {
// '$metadata': {
// httpStatusCode: 200,
// requestId: '1885b977-2d7e-535e-8214-e44be727e265',
// extendedRequestId: undefined,
// cfId: undefined,
// attempts: 1,
// totalRetryDelay: 0
// }
// }
return response;
};
- PHP
-
- SDK for PHP
-
$SnSclient = new SnsClient([
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);
try {
$result = $SnSclient->SetSMSAttributes([
'attributes' => [
'DefaultSMSType' => 'Transactional',
],
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}
为特定国家/地区的配送设置SMS消息首选项
您可以通过仅向特定目的地国家/地区发送消息来管理和控制SMS流量。这样可以确保您的邮件仅发送到经批准的国家/地区,从而避免不必要的SMS费用。以下说明使用 Amazon Pinpoint 的保护配置来指定您想要允许或阻止的国家/地区。
打开 Amazon SMS 控制台,网址为https://console.aws.amazon.com/sms-voice/。
-
在导航窗格的 “概述” 下的 “快速入门” 部分,选择 “创建保护配置”。
-
在 “保护配置详细信息” 下,为您的保护配置输入适合企业使用的名称(例如,仅允许-AU)。
-
在SMS国家/地区规则下,选中 “地区/国家” 复选框以阻止向所有支持的国家/地区发送消息。
-
取消选中您要向其发送消息的国家/地区的复选框。例如,要仅允许向澳大利亚发送消息,请取消选中澳大利亚的复选框。
-
在 “保护配置关联” 部分的 “关联类型” 下,选择 “账户默认”。这将确保 Prot Amazon End User Messaging SMS ect 配置影响通过亚马逊SNS、Amazon Cognito 和 Amazon Pinpoint 调用发送的所有消息。SendMessages
API
-
选择 “创建保护配置” 以保存您的设置。
将显示以下确认消息:
Success Protect configuration protect-abc0123456789 has been created.
登录 Amazon SNS 控制台。
-
向其中一个被封锁的国家@@ 发布消息,例如印度。
消息将不会被传送。您可以使用在传送失败日志中对此进行验证CloudWatch。搜索日志组 sns/region/accountID/ DirectPublishToPhoneNumber /Failure 以获得与以下示例类似的响应:
{
"notification": {
"messageId": "bd59a509-XXXX-XXXX-82f8-fbdb8cb68217",
"timestamp": "YYYY-MM-DD XX:XX:XX.XXXX“
},
"delivery": {
"destination": "+91XXXXXXXXXX",
"smsType": "Transactional",
"providerResponse": "Cannot deliver message to the specified destination country",
"dwellTimeMs": 85
},
"status": "FAILURE"
}