Amazon Simple Notification Service
开发人员指南 (API Version 2010-03-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

发送 SMS 消息

您可以使用 Amazon SNS 将 SMS 消息发送到激活 SMS 的设备上。您可以将消息直接发布到这些设备的电话号码,并且不需要使用电话号码订阅 Amazon SNS 主题。

如果您想要将各条消息一次发布至多个电话号码,使用电话号码订阅主题会很有用。有关如何将 SMS 消息发布到主题的步骤,请参阅向多个电话号码发送 SMS 消息

在发送消息时,您可以控制是否对消息进行成本或可靠传输优化,并且可指定发件人 ID。如果您使用 Amazon SNS API 或 AWS 开发工具包以编程方式发送消息,则可以指定消息传输的最高价格。

每条 SMS 消息最多能包含 140 字节,字符限制则具体取决于编码方案。例如,SMS 消息 可以包含:

  • 160 个 GSM 字符

  • 140 个 ASCII 字符

  • 70 个 UCS-2 字符

如果您发布的消息超出大小限制,Amazon SNS 会将其作为多条消息发送,保证每条消息都符合大小限制。消息以整个词为边界,不会在一个词的中间截断。单个 SMS 发布操作的总大小上限为 1600 字节。

在发送 SMS 消息时,请使用 E.164 格式指定电话号码。E.164 国际电信的标准电话号码结构。遵循此格式的电话号码最多可包含 15 位,并以加号 (+) 和国家/地区代码作为前缀。例如,E.164 格式的美国电话号码将显示为 +1XXX5550100。

发送消息(控制台)

  1. 通过以下网址登录 AWS 管理控制台 并打开 Amazon SNS 控制台:https://console.amazonaws.cn/sns/v2/home

  2. 在控制台菜单上,将区域选择器设置为支持 SMS 消息的区域

  3. 在导航窗格中,选择 Text messaging (SMS)

  4. Text messaging (SMS) 页面上,选择 Send a text message (SMS)Send text message (SMS) 窗口打开。

  5. 对于 Message type,请选择下列选项之一:

    • Promotional – 不重要的消息,例如营销消息。Amazon SNS 以产生最低成本为基准来优化消息传输。

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

    此消息级别的设置会覆盖您在 Text messaging preferences 页面设置的默认消息类型。

    有关促销和事务处理消息的定价信息,请参阅全球 SMS 定价

  6. 对于 Number,请输入您想要向其发送消息的电话号码。

  7. 对于 Message,请输入要发送的消息内容。

  8. (可选)对于 Sender ID,请输入最多包含 11 个字母数字字符的自定义 ID,其中包括至少一个字母,不能有空格。该发件人 ID 在接收设备上显示为消息发件人。例如,您可以使用自己的企业品牌让消息来源更易于识别。

    对发件人 ID 的支持因国家/地区而异。例如,发送至美国电话号码的消息不显示发件人 ID。有关支持发件人 ID 的国家/地区,请参阅 支持的区域和国家/地区

    如果不指定发件人 ID,在支持的国家/地区,消息会显示一个长代码作为发件人 ID。对于要求使用字母作为发件人 ID 的国家/地区,消息的发件人 ID 显示为 NOTICE

    此消息级别的发件人 ID 会覆盖您在 Text messaging preferences 页面中设置的默认发件人 ID。

  9. 请选择 Send text message

发送消息(AWS 开发工具包)

要使用一个 AWS 开发工具包发送 SMS 消息,请使用该 SDK 中对应 Amazon SNS API 中的 Publish 请求的操作。通过此请求,您可以直接向电话号码发送 SMS 消息。您也可使用 MessageAttributes 参数设置以下属性名称的值:

AWS.SNS.SMS.SenderID

包含 11 个字母数字字符的自定义 ID,其中包括至少一个字母,不能有空格。该发件人 ID 在接收设备上显示为消息发件人。例如,您可以使用自己的企业品牌让消息来源更易于识别。

对发件人 ID 的支持因国家/地区而异。例如,发送至美国电话号码的消息不显示发件人 ID。有关支持发件人 ID 的国家/地区,请参阅 支持的区域和国家/地区

如果不指定发件人 ID,在支持的国家/地区,消息会显示一个长代码作为发件人 ID。对于要求使用字母作为发件人 ID 的国家/地区,消息的发件人 ID 显示为 NOTICE

此消息级别的属性会覆盖您通过 SetSMSAttributes 请求设置的账户级别属性 DefaultSenderID

AWS.SNS.SMS.MaxPrice

您愿意为发送 SMS 消息支付的最高金额,以 USD 为单位。如果 Amazon SNS 确定发送消息将产生超出该最高价格的成本,则它不会发送消息。

如果您的当月至今 SMS 成本已超过您通过 SetSMSAttributes 请求设置的 MonthlySpendLimit 属性限制,则此属性不起作用。

如果您发送消息至 Amazon SNS 主题,则该最高价格适用于传输给订阅该主题的每个电话号码的每条消息。

AWS.SNS.SMS.SMSType

要发送的消息类型:

  • Promotional(默认)– 不重要的消息,例如营销消息。Amazon SNS 以产生最低成本为基准来优化消息传输。

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

此消息级别的属性会覆盖您通过 SetSMSAttributes 请求设置的账户级别属性 DefaultSMSType

(可选)设置消息属性 (AWS SDK for Java)

您可以通过构建将属性键与 MessageAttributeValue 对象相关联的映射来设置消息的属性值。通过属性值来初始化每个 MessageAttributeValue 对象,并且由每个对象声明值的数据类型。以下示例将发件人 ID 设为“mySenderID”、最高价格为 0.50 USD 且 SMS 类型为 Promotional:

Copy
Map<String, MessageAttributeValue> smsAttributes = new HashMap<String, MessageAttributeValue>(); smsAttributes.put("AWS.SNS.SMS.SenderID", new MessageAttributeValue() .withStringValue("mySenderID") //The sender ID shown on the device. .withDataType("String")); smsAttributes.put("AWS.SNS.SMS.MaxPrice", new MessageAttributeValue() .withStringValue("0.50") //Sets the max price to 0.50 USD. .withDataType("Number")); smsAttributes.put("AWS.SNS.SMS.SMSType", new MessageAttributeValue() .withStringValue("Promotional") //Sets the type to promotional. .withDataType("String"));

在发送 SMS 消息时,您的属性将应用至 PublishRequest 对象。

发送消息 (AWS SDK for Java)

以下示例使用 AmazonSNSClient 类的 publish 方法直接向电话号码发送消息:

Copy
public static void main(String[] args) { AmazonSNSClient snsClient = new AmazonSNSClient(); String message = "My SMS message"; String phoneNumber = "+1XXX5550100"; Map<String, MessageAttributeValue> smsAttributes = new HashMap<String, MessageAttributeValue>(); //<set SMS attributes> sendSMSMessage(snsClient, message, phoneNumber, smsAttributes); } public static void sendSMSMessage(AmazonSNSClient snsClient, String message, String phoneNumber, Map<String, MessageAttributeValue> smsAttributes) { PublishResult result = snsClient.publish(new PublishRequest() .withMessage(message) .withPhoneNumber(phoneNumber) .withMessageAttributes(smsAttributes)); System.out.println(result); // Prints the message ID. }

运行此示例时,消息 ID 会显示在 IDE 控制台的输出窗口中:

Copy
{MessageId: 9b888f80-15f7-5c30-81a2-c4511a3f5229}