在 Amazon 中设置SMS消息偏好 SNS - Amazon Simple Notification Service
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

  1. 登录 Amazon SNS 控制台

  2. 选择支持SMS消息传递的区域

  3. 在导航面板上,选择手机,然后选择短信 (SMS)

  4. 移动短信 (SMS) 页面的短信偏好设置部分,选择编辑

  5. Edit text messaging preferences (编辑文本消息发送首选项) 页上,在 Details (详细信息) 部分中,执行以下操作:

    1. 对于默认消息类型,选择下列选项之一:

      • 促销(默认)– 非重要消息(例如营销消息)。Amazon SNS 优化消息传送以实现最低成本。

      • 事务性(默认)– 为客户事务处理提供支持的重要消息,例如多重身份验证的一次性密码。Amazon SNS 优化消息传送以实现最高的可靠性。

      有关促销和交易消息的定价信息,请参阅全球SMS定价

    2. (可选)在账户支出限额中,输入您想在每个日历月的SMS消息上花费的金额(单位USD)。

      重要
      • 默认情况下,支出配额设置为 1.00 USD。如果要提高服务配额,请提交请求

      • 如果控制台中设置的金额超过您的服务配额,Amazon 将SNS停止发布SMS消息。

      • 由于 Amazon SNS 是一个分布式系统,因此它会在超过支出配额后的几分钟内停止发送SMS消息。在此间隔内,如果您继续发送SMS消息,则可能会产生超出配额的费用。

  6. (可选)对于默认发件人 ID,请输入一个自定义 ID(如您的企业品牌),它显示为接收设备的发送者。

    注意

    对发件人的支持因国家/地区IDs而异。

  7. (可选)输入 Amazon S3 bucket name for usage reports(使用情况报告的 Amazon S3 存储桶名称)的名称。

    注意

    S3 存储桶策略必须授予对 Amazon 的写入权限SNS。

  8. 选择 Save changes(保存更改)

设置首选项 (Amazon SDKs)

要使用其中一个设置您的SMS首选项 Amazon SDKs,请使用与 SDK Amazon 中的SetSMSAttributes请求相对应的操作SNSAPI。通过此请求,您可以为不同的SMS属性分配值,例如您的每月支出配额和默认SMS类型(促销或交易)。有关所有SMS属性,请参阅《Amazon 简单通知服务API参考》etSMSAttributes中的 S

以下代码示例演示如何使用 SetSMSAttributes

C++
SDK对于 C++
注意

还有更多相关信息 GitHub。查找完整示例,学习如何在 Amazon 代码示例存储库中进行设置和运行。

如何使用亚马逊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(); }
  • 有关API详细信息,请参阅etSMSAttributes《Amazon SDK for C++ API参考资料》中的 S

CLI
Amazon CLI

设置SMS消息属性

以下set-sms-attributes示例将SMS邮件的默认发件人 ID 设置为MyName

aws sns set-sms-attributes \ --attributes DefaultSenderID=MyName

此命令不生成任何输出。

  • 有关API详细信息,请参阅etSMSAttributes《Amazon CLI 命令参考》中的 S

Java
SDK适用于 Java 2.x
注意

还有更多相关信息 GitHub。查找完整示例,学习如何在 Amazon 代码示例存储库中进行设置和运行。

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); } } }
  • 有关API详细信息,请参阅etSMSAttributes《Amazon SDK for Java 2.x API参考资料》中的 S

JavaScript
SDK对于 JavaScript (v3)
注意

还有更多相关信息 GitHub。查找完整示例,了解如何在 Amazon 代码示例存储库中进行设置和运行。

在单独的模块中创建客户端并将其导出。

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
注意

还有更多相关信息 GitHub。查找完整示例,学习如何在 Amazon 代码示例存储库中进行设置和运行。

$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 的保护配置来指定您想要允许或阻止的国家/地区。

  1. 打开 Amazon SMS 控制台,网址为https://console.aws.amazon.com/sms-voice/

  2. 在导航窗格的 “概述” 下的 “快速入门” 部分,选择 “创建保护配置”。

  3. 在 “保护配置详细信息” 下,为您的保护配置输入适合企业使用的名称(例如,仅允许-AU)。

  4. SMS国家/地区规则下,选中 “地区/国家” 复选框以阻止向所有支持的国家/地区发送消息。

  5. 取消选中您要向其发送消息的国家/地区的复选框。例如,要仅允许向澳大利亚发送消息,请取消选中澳大利亚的复选框。

  6. 在 “保护配置关联” 部分的 “关联类型” 下,选择 “账户默认”。这将确保 Prot Amazon End User Messaging SMS ect 配置影响通过亚马逊SNS、Amazon Cognito 和 Amazon Pinpoint 调用发送的所有消息。SendMessagesAPI

  7. 选择 “创建保护配置” 以保存您的设置。

    将显示以下确认消息:

    Success Protect configuration protect-abc0123456789 has been created.
  8. 登录 Amazon SNS 控制台

  9. 向其中一个被封锁的国家@@ 发布消息,例如印度。

    消息将不会被传送。您可以使用在传送失败日志中对此进行验证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" }