向主题发布 - Amazon Simple Notification Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

向主题发布

您可以通过使用 Amazon SNS 主题订阅这些电话号码,一次将一条 SMS 消息发布至多个电话号码。SNS 主题是您可以添加订户并随后向所有订户发布消息的通信渠道。订户会收到发布到该主题的所有消息,直到您取消订阅,或者直到订户选择不接收来自您的 SMS 消息。Amazonaccount.

向主题发送消息(控制台)

要创建主题,请执行以下操作

如果您还没有要发送 SMS 消息的主题,请完成以下步骤。

  1. 登录到Amazon SNS 主题

  2. 在控制台菜单中,选择Amazon支持 SMS 消息的区域

  3. 在导航窗格中,选择 Topics

  4. 在存储库的主题页面上,选择创建主题

  5. 在存储库的创建主题页面,在详细信息中,执行以下操作:

    1. 适用于类型中,选择标准

    2. 适用于名称中,输入主题名称。

    3. (可选)显示名称中,为您的 SMS 消息输入自定义前缀。当您向主题发送消息时,Amazon SNS 会在显示名称之前加上右尖括号 (>) 和空格。显示名称不区分大小写,Amazon SNS 会将显示名称转换为大写字符。例如,如果主题的显示名称是MyTopic,消息为Hello World!,则消息将显示为:

      MYTOPIC> Hello World!
  6. 选择 Create topic。主题的名称和 Amazon 资源名称 (ARN) 显示在主题页.

创建 SMS 订阅

您可以使用订阅向您的主题发布一次消息,从而使用 SMS 消息发送给多个收件人。

注意

当您开始使用 Amazon SNS 发送 SMS 消息时,您的Amazon帐户位于SMS 沙盒。SMS 沙箱为您提供了一个安全的环境,让您可以尝试 Amazon SNS 功能,而不会冒着您作为 SMS 发件人的声誉。在您的账户位于 SMS 沙盒时,您可以使用 Amazon SNS 的所有功能,但您只能向已验证的目标电话号码发送 SMS 消息。有关更多信息,请参阅SMS 沙盒

  1. 登录到Amazon SNS 主题

  2. 在导航窗格中,选择 Subscriptions

  3. 订阅页面上,选择创建订阅

  4. 在存储库的创建订阅页面,在详细信息中,执行以下操作:

    1. 适用于主题 ARN中,输入或选择您要发送 SMS 消息的主题的 Amazon 资源名称 (ARN)。

    2. 适用于协议中,选择SMS

    3. 适用于终端节点中,输入您想要订阅主题的电话号码。

  5. 选择 Create subscription。订阅信息显示在订阅页.

    要添加更多电话号码,请重复以下步骤。您也可以添加其他类型的订阅,例如电子邮件。

发送邮件

当您向主题发布消息时,Amazon SNS 会尝试将该消息传输至订阅该主题的每个电话号码。

  1. Amazon SNS 主题,在主题页面上,选择要将 SMS 消息发送到的主题的名称。

  2. 在主题详细信息页面上,选择发布消息

  3. 在存储库的将消息发布到主题页面,在消息详细信息中,执行以下操作:

    1. 适用于Subject,请将该字段留空,除非您的主题包含电子邮件订阅,并且您想要同时发布到电子邮件和 SMS 订阅。Amazon SNS 使用Subject作为电子邮件主题行输入。

    2. (可选)生存时间 (TTL)中,输入 Amazon SNS 向任何移动应用程序终端节点订阅者发送 SMS 消息所需的秒数。

  4. INDING消息正文中,执行以下操作:

    1. 适用于消息结构中,选择所有传递协议的有效载荷相同向订阅了您的主题的所有协议类型发送相同消息。或者,选择针对每个传输协议的自定义负载为不同协议类型的订阅者自定义消息。例如,您可以输入电话号码订阅者的默认消息,为电子邮件订阅者输入自定义消息。

    2. 适用于要发送到终端节点的消息正文,输入您的消息或每个传递协议的自定义消息。

      如果您的主题包含显示名称,Amazon SNS 会将其添加到消息,这会增加消息的长度。显示名称长度是名称中的字符数加上右尖括号 (>) 的两个字符以及 Amazon SNS 添加的空格。

      有关 SMS 消息大小配额的信息,请参阅 发布到移动电话

  5. (可选)消息属性中,添加消息元数据,如时间戳、签名和 ID。

  6. 选择发布消息。Amazon SNS 会发送 SMS 消息并显示成功消息。

向主题发送消息(Amazon开发工具包)

要使用其中一个向主题发送 SMS 消息Amazon开发工具包,请使用该 SDK 中对应 Amazon SNS API 中以下请求的 API 操作。

注意

请务必在使用开发工具包之前配置您的 Amazon 凭证。有关更多信息,请参阅 。配置Amazon凭证中的Amazon SDK for .NET开发人员指南。或请参阅使用凭证中的Amazon SDK for Java开发人员指南

CreateTopic

创建您可以使用电话号码订阅的主题,然后一次将消息发布到所有订阅的电话号码。

Subscribe

使用电话号码订阅主题。

Publish

向已订阅主题的每个电话号码发送消息。

您可以使用 MessageAttributes 参数设置消息的几个属性(例如,最高价格)。有关更多信息,请参阅发送消息 (Amazon开发工具包)

创建主题

以下示例说明如何使用 Amazon SNS 客户端创建主题,Amazon软件开发工具包提供。

Amazon SDK for Java

以下示例使用createTopic的操作AmazonSNSClient类Amazon SDK for Java:

public static void main(String[] args) { AmazonSNSClient snsClient = new AmazonSNSClient(); String topicArn = createSNSTopic(snsClient); } public static String createSNSTopic(AmazonSNSClient snsClient) { CreateTopicRequest createTopic = new CreateTopicRequest("mySNSTopic"); CreateTopicResult result = snsClient.createTopic(createTopic); System.out.println("Create topic request: " + snsClient.getCachedResponseMetadata(createTopic)); System.out.println("Create topic result: " + result); return result.getTopicArn(); }

该示例使用getCachedResponseMetadata操作获取请求 ID。

运行此示例时,IDE 的控制台输出窗口会显示以下内容:

{TopicArn: arn:aws:sns:us-east-1:123456789012:mySNSTopic} CreateTopicRequest - {AWS_REQUEST_ID=93f7fc90-f131-5ca3-ab18-b741fef918b5}
Amazon SDK for .NET

以下示例使用createTopic的操作AmazonSimpleNotificationServiceClient类Amazon SDK for .NET:

static void Main(string[] args) { AmazonSimpleNotificationServiceClient snsClient = new AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.USWest2); String topicArn = CreateSNSTopic(snsClient); } public static String CreateSNSTopic(AmazonSimpleNotificationServiceClient snsClient) { //create a new SNS topic CreateTopicRequest createTopicRequest = new CreateTopicRequest("MyNewTopic200"); CreateTopicResponse createTopicResponse = snsClient.CreateTopic(createTopicRequest); //get request id for CreateTopicRequest from SNS metadata Console.WriteLine("CreateTopicRequest - " + createTopicResponse.ResponseMetadata.RequestId); return createTopicResponse.TopicArn; }

运行此示例时,IDE 的控制台输出窗口会显示以下内容:

{TopicArn: arn:aws:sns:us-east-1:123456789012:mySNSTopic} CreateTopicRequest - 93f7fc90-f131-5ca3-ab18-b741fef918b5

向您的主题添加 SMS 订阅

以下示例说明如何使用 Amazon SNS 客户端将 SMS 订阅添加到主题,Amazon软件开发工具包提供。

Amazon SDK for Java

以下示例使用subscribe的操作AmazonSNSClient类Amazon SDK for Java:

public static void main(String[] args) { AmazonSNSClient snsClient = new AmazonSNSClient(); String phoneNumber = "+1XXX5550100"; String topicArn = createSNSTopic(snsClient); subscribeToTopic(snsClient, topicArn, "sms", phoneNumber); } //<create SNS topic> public static void subscribeToTopic(AmazonSNSClient snsClient, String topicArn, String protocol, String endpoint) { SubscribeRequest subscribe = new SubscribeRequest(topicArn, protocol, endpoint); SubscribeResult subscribeResult = snsClient.subscribe(subscribe); System.out.println("Subscribe request: " + snsClient.getCachedResponseMetadata(subscribe)); System.out.println("Subscribe result: " + subscribeResult); }

此示例构建 subscribeRequest 对象并将其传递给以下参数:

  • topicArn— 您要向其添加订阅的主题的 Amazon 资源名称 (ARN)。

  • "sms"— SMS 订阅的协议选项。

  • endpoint— 订阅主题的电话号码。

该示例使用getCachedResponseMetadata操作以获取订阅请求的请求 ID。

运行此示例时,IDE 的控制台窗口会显示订阅请求 ID:

SubscribeRequest - {AWS_REQUEST_ID=f38fe925-8093-5bd4-9c19-a7c7625de38c}
Amazon SDK for .NET

以下示例使用subscribe对应的操作AmazonSimpleNotificationServiceClient类Amazon SDK for .NET:

static void Main(string[] args) { AmazonSimpleNotificationServiceClient snsClient = new AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.USWest2); String phoneNumber = "+1XXX5550100"; String topicArn = CreateSNSTopic(snsClient); SubscribeToTopic(snsClient, topicArn, "sms", phoneNumber); } //<create SNS topic> static public void SubscribeToTopic(AmazonSimpleNotificationServiceClient snsClient, String topicArn, String protocol, String endpoint) { SubscribeRequest subscribeRequest = new SubscribeRequest(topicArn, protocol, endpoint); SubscribeResponse subscribeResponse = snsClient.Subscribe(subscribeRequest); Console.WriteLine("Subscribe request: " + subscribeResponse.ResponseMetadata.RequestId); Console.WriteLine("Subscribe result: " + subscribeResponse.); }

此示例构建 SubscribeRequest 对象并将其传递给以下参数:

  • topicArn— 您要向其添加订阅的主题的 Amazon 资源名称 (ARN)。

  • "sms"— SMS 订阅的协议选项。

  • endpoint— 订阅主题的电话号码。

运行此示例时,IDE 的控制台窗口会显示订阅请求 ID:

SubscribeRequest - f38fe925-8093-5bd4-9c19-a7c7625de38c

(可选)设置消息属性

以下示例说明如何使用 Amazon SNS 客户端设置消息属性,Amazon软件开发工具包提供。

Amazon SDK for Java

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

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"));

有关消息属性的更多信息,请参阅发送消息 (Amazon开发工具包)

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

Amazon SDK for .NET

随着Amazon SDK for .NET中,您可以通过添加属性键以及MessageAttributeValue对象添加到MessageAttributes字段PublishRequest对象。通过属性值来初始化每个 MessageAttributeValue 对象,并且由每个对象声明值的数据类型。以下示例将发件人 ID 设为 “mySenderID”、最高价格为 “0.50” USD 且 SMS 类型为 “Promacy”:

PublishRequest pubRequest = new PublishRequest(); pubRequest.MessageAttributes["AWS.SNS.SMS.SenderID"] = new MessageAttributeValue{ StringValue = "mySenderId", DataType = "String"}; pubRequest.MessageAttributes["AWS.SNS.SMS.MaxPrice"] = new MessageAttributeValue { StringValue = "0.50", DataType = "Number" }; pubRequest.MessageAttributes["AWS.SNS.SMS.SMSType"] = new MessageAttributeValue { StringValue = "Promotional", DataType = "String" };

有关消息属性的更多信息,请参阅发送消息 (Amazon开发工具包)

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

向主题发布消息

以下示例说明如何使用 Amazon SNS 客户端将消息发布到主题,Amazon软件开发工具包提供。

Amazon SDK for Java

以下示例使用publish对应的操作AmazonSNSClient类Amazon SDK for Java:

public static void main(String[] args) { AmazonSNSClient snsClient = new AmazonSNSClient(); String message = "My SMS message"; Map<String, MessageAttributeValue> smsAttributes = new HashMap<String, MessageAttributeValue>(); //<set SMS attributes> String topicArn = createSNSTopic(snsClient); //<subscribe to topic> sendSMSMessageToTopic(snsClient, topicArn, message, smsAttributes); } //<create topic operation> //<subscribe to topic operation> public static void sendSMSMessageToTopic(AmazonSNSClient snsClient, String topicArn, String message, Map<String, MessageAttributeValue> smsAttributes) { PublishResult result = snsClient.publish(new PublishRequest() .withTopicArn(topicArn) .withMessage(message) .withMessageAttributes(smsAttributes)); System.out.println(result); }

Amazon SNS 会尝试将该消息传输至订阅该主题的每个电话号码。

此示例构造publishRequest对象,并将主题 ARN 和消息作为参数传递。这些区域有:publishResult对象会捕获 Amazon SNS 返回的消息 ID。

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

{MessageId: 9b888f80-15f7-5c30-81a2-c4511a3f5229}
Amazon SDK for .NET

以下示例使用Publish对应的操作AmazonSimpleNotificationServiceClient类Amazon SDK for .NET:

public static void main(string[] args) { AmazonSimpleNotificationServiceClient snsClient = new AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.USWest2); String topicArn = createSNSTopic(snsClient); PublishRequest pubRequest = new PublishRequest(); pubRequest.Message = "My SMS message"; pubRequest.TopicArn = topicArn; // add optional MessageAttributes... // pubRequest.MessageAttributes["AWS.SNS.SMS.SenderID"] = // new MessageAttributeValue{ StringValue = "mySenderId", DataType = "String"}; PublishResponse pubResponse = snsClient.Publish(pubRequest); Console.WriteLine(pubResponse.MessageId); } //<create topic operation> //<subscribe to topic operation>

Amazon SNS 会尝试将该消息传输至订阅该主题的每个电话号码。

此示例构造publishRequest对象,并分配主题 ARN 和消息。这些区域有:publishResponse对象会捕获 Amazon SNS 返回的消息 ID。

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

9b888f80-15f7-5c30-81a2-c4511a3f5229