本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon 发送SMS消息 SNS
本节介绍如何使用 Amazon 发送SMS消息SNS,包括向主题发布消息、为主题订阅电话号码、设置消息属性以及直接发布到手机。
向 Amazon SNS 主题发布SMS消息
您可以将一条SMS消息同时发布到多个电话号码,方法是将这些电话号码订阅到 Amazon SNS 主题。SNS主题是一种沟通渠道,您可以向其中添加订阅者,然后向所有这些订阅者发布消息。在您取消订阅或订阅者选择不接收来自您的 AWS 账户的消息之前,订阅者会收到发布到该主题的所有SMS消息。
使用 AWS 控制台向主题发送消息
要创建主题,请执行以下操作
如果您还没有要向其发送SMS消息的主题,请完成以下步骤。
登录 Amazon SNS 控制台。
-
在控制台菜单中,选择支持消息SMS传递的区域。
-
在导航窗格中,选择 Topics(主题)。
-
在 Topics(主页)页面上,选择 Create topic(创建主题)。
-
在 Create topic(创建主题)页面上的 Details(详细信息)下,执行以下操作:
-
对于 Type(类型),选择 Standard(标准)。
-
对于 Name(名称),输入一个主题名称。
-
(可选)在 “显示名称” 中,输入SMS消息的自定义前缀。当您向该主题发送消息时,Amazon 会在显示名称SNS前面加上一个右尖括号 (>) 和一个空格。显示名称不区分大小写,Amazon SNS 会将显示名称转换为大写字符。例如,如果主题的显示名称是 MyTopic
,而消息是 Hello
World!
,则该消息会显示为:
MYTOPIC> Hello World!
-
选择创建主题。主题名称和 Amazon 资源名称 (ARN) 显示在主题页面上。
创建订SMS阅
您可以使用订阅将一条SMS消息发送给多个收件人,方法是只向您的主题发布一次消息。
当您开始使用 Amazon SNS 发送SMS消息时,您的 AWS 账户处于SMS沙箱中。SMS沙盒为您提供了一个安全的环境,让您可以试用 Amazon 的SNS功能,而不必冒发件人声誉的SMS风险。当您的账户处于SMS沙箱状态时,您可以使用 Amazon 的所有功能SNS,但只能向经过验证的目标电话号码发送SMS消息。有关更多信息,请参阅 使用 Amazon SNS SMS 沙箱。
登录 Amazon SNS 控制台。
-
在导航窗格中,选择订阅。
-
在 Subscriptions(订阅)页面上,选择 Create subscription(创建订阅)。
-
在 Create subscription(创建订阅)页面上的 Details(详细信息)下,执行以下操作:
-
对于主题 ARN,输入或选择您要向其发送SMS消息的主题的 Amazon 资源名称 (ARN)。
-
对于 Protocol(协议),选择 SMS。
-
对于 Endpoint(终端节点),输入要订阅主题的电话号码。
-
选择创建订阅。订阅信息显示在 Subscriptions(订阅)页面。
要添加更多电话号码,请重复以下步骤。您还可以添加其他类型的订阅,例如电子邮件。
发送邮件
当您向某个主题发布消息时,Amazon SNS 会尝试将该消息传送到订阅该主题的每个电话号码。
-
在 Amazon SNS 控制台的主题页面上,选择您要向其发送SMS消息的主题的名称。
-
在主题详细信息页面上,选择发布消息。
-
在 Publish message to topic(将消息发布到主题)页面上的 Message details(消息详细信息)下,执行以下操作:
-
对于 “主题”,除非您的主题包含电子邮件订阅并且您想同时发布到电子邮件和订阅,否则请将该字段留空。SMSAmazon SNS 使用您输入的主题作为电子邮件主题行。
-
(可选)在 Time to Live (TTL) 中,输入亚马逊SNS向任何移动应用程序终端节点订阅者发送SMS消息所需的秒数。
-
在 Message body(消息正文)下,执行以下操作:
-
对于 Message structure(消息结构),选择 Identical payload for all delivery protocols(所有传输协议的负载相同)向订阅了您的主题的所有协议类型发送相同消息。或者,选择 Custom payload for each delivery protocol(针对每个传输协议的自定义负载)为不同协议类型的订阅者自定义消息。例如,您可以输入电话号码订阅者的默认消息,以及电子邮件订阅者的自定义消息。
-
对于 Message body to send to the endpoint(要发送到终端节点的消息正文),输入您的消息或每个传输协议的自定义消息。
如果您的主题有显示名称,Amazon SNS 会将其添加到消息中,这会增加消息长度。显示名称的长度是名称中的字符数加上右尖括号 (>) 的两个字符以及亚马逊SNS添加的空格。
有关SMS消息大小配额的信息,请参阅使用 Amazon 向手机发布SMS消息 SNS。
-
(可选)在消息属性中,添加消息元数据,例如时间戳、签名和。IDs
-
选择发布消息。Amazon SNS 发送SMS消息并显示成功消息。
使用向主题发送消息 AWS
SDKs
要使用 AWS SDK,必须使用您的凭据对其进行配置。有关更多信息,请参阅和工具参考指南中的共享配置AWS SDKs和凭据文件。
以下代码示例展示了如何:
- Java
-
- SDK适用于 Java 2.x
-
创建一个主题并返回它ARN。
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.CreateTopicRequest;
import software.amazon.awssdk.services.sns.model.CreateTopicResponse;
import software.amazon.awssdk.services.sns.model.SnsException;
/**
* 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 CreateTopic {
public static void main(String[] args) {
final String usage = """
Usage: <topicName>
Where:
topicName - The name of the topic to create (for example, mytopic).
""";
if (args.length != 1) {
System.out.println(usage);
System.exit(1);
}
String topicName = args[0];
System.out.println("Creating a topic with name: " + topicName);
SnsClient snsClient = SnsClient.builder()
.region(Region.US_EAST_1)
.build();
String arnVal = createSNSTopic(snsClient, topicName);
System.out.println("The topic ARN is" + arnVal);
snsClient.close();
}
public static String createSNSTopic(SnsClient snsClient, String topicName) {
CreateTopicResponse result;
try {
CreateTopicRequest request = CreateTopicRequest.builder()
.name(topicName)
.build();
result = snsClient.createTopic(request);
return result.topicArn();
} catch (SnsException e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
return "";
}
}
为终端节点订阅主题。
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.SubscribeRequest;
import software.amazon.awssdk.services.sns.model.SubscribeResponse;
/**
* 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 SubscribeTextSMS {
public static void main(String[] args) {
final String usage = """
Usage: <topicArn> <phoneNumber>
Where:
topicArn - The ARN of the topic to subscribe.
phoneNumber - A mobile phone number that receives notifications (for example, +1XXX5550100).
""";
if (args.length < 2) {
System.out.println(usage);
System.exit(1);
}
String topicArn = args[0];
String phoneNumber = args[1];
SnsClient snsClient = SnsClient.builder()
.region(Region.US_EAST_1)
.build();
subTextSNS(snsClient, topicArn, phoneNumber);
snsClient.close();
}
public static void subTextSNS(SnsClient snsClient, String topicArn, String phoneNumber) {
try {
SubscribeRequest request = SubscribeRequest.builder()
.protocol("sms")
.endpoint(phoneNumber)
.returnSubscriptionArn(true)
.topicArn(topicArn)
.build();
SubscribeResponse result = snsClient.subscribe(request);
System.out.println("Subscription ARN: " + result.subscriptionArn() + "\n\n Status is "
+ result.sdkHttpResponse().statusCode());
} catch (SnsException e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
}
}
设置消息的属性,例如发件人的 ID、最高价格及其类型。消息属性是可选的。
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);
}
}
}
向主题发布消息。消息将会发送到每个订阅者。
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.PublishRequest;
import software.amazon.awssdk.services.sns.model.PublishResponse;
import software.amazon.awssdk.services.sns.model.SnsException;
/**
* 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 PublishTextSMS {
public static void main(String[] args) {
final String usage = """
Usage: <message> <phoneNumber>
Where:
message - The message text to send.
phoneNumber - The mobile phone number to which a message is sent (for example, +1XXX5550100).\s
""";
if (args.length != 2) {
System.out.println(usage);
System.exit(1);
}
String message = args[0];
String phoneNumber = args[1];
SnsClient snsClient = SnsClient.builder()
.region(Region.US_EAST_1)
.build();
pubTextSMS(snsClient, message, phoneNumber);
snsClient.close();
}
public static void pubTextSMS(SnsClient snsClient, String message, String phoneNumber) {
try {
PublishRequest request = PublishRequest.builder()
.message(message)
.phoneNumber(phoneNumber)
.build();
PublishResponse result = snsClient.publish(request);
System.out
.println(result.messageId() + " Message sent. Status was " + result.sdkHttpResponse().statusCode());
} catch (SnsException e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
}
}
使用 Amazon 向手机发布SMS消息 SNS
您可以使用 Amazon 将SMS消息直接发送SNS到手机,而无需将电话号码订阅到亚马逊SNS主题。
在发送消息时,您可以控制是否对消息进行成本或可靠性传输优化。您还可以指定发件人 ID 或源号码。如果您使用 Amazon SNS API 或,以编程方式发送消息 AWS SDKs,则可以为消息传输指定最高价格。
每SMS条消息最多可包含 140 字节,字符配额取决于编码方案。例如,一条SMS消息可以包含:
-
160 GSM 个字符
-
140 ASCII 个字符
-
70 UCS -2 个字符
如果您发布的消息超过了大小配额,Amazon SNS 会将其作为多条消息发送,每条消息都符合大小配额。消息以整个词为边界,而不会在一个词的中间截断。单个SMS发布操作的总大小配额为 1,600 字节。
发送SMS消息时,您可以使用 E.164 格式指定电话号码,这是一种用于国际电信的标准电话号码结构。遵循此格式的电话号码最多可包含 15 位数字,并以加号 (+) 和国家/地区代码作为前缀。例如,E.164 格式的美国电话号码显示为 +1 XXX555 0100。
发送消息(控制台)
登录 Amazon SNS 控制台。
-
在控制台菜单中,选择支持消息SMS传递的区域。
-
在导航窗格中,选择短信 (SMS)。
-
在移动短信 (SMS) 页面上,选择发布短信。
-
在 “发布SMS消息” 页面上,对于 “消息类型”,选择以下选项之一:
此消息级别的设置会覆盖您的账户级别的默认消息类型。您可以从移动短信 (SMS) 页面的短信偏好设置部分设置账户级别的默认消息类型。
有关促销和交易消息的定价信息,请参阅全球SMS定价。
-
对于 Destination phone number(目标电话号码),请输入您想要向其发送消息的电话号码。
-
对于 Message(消息),请输入要发送的消息。
-
(可选)在 Origination identities(源身份)下,指定如何向收件人识别自己:
-
要指定 Sender ID(发件人 ID),请键入包含 3-11 个字母数字字符的自定义 ID,其中包括至少一个字母,并且不能包含空格。该发件人 ID 在接收设备上显示为消息发件人。例如,您可以使用自己的企业品牌让消息来源更易于识别。
对发件人的支持因国家和/或地区IDs而异。例如,发送至美国电话号码的消息不显示发件人 ID。有关支持发件人的国家和地区IDs,请参阅《AWS End User Messaging SMS 用户指南》 AWS End User Messaging SMS中支持使用发送SMS消息的国家和地区。
如果您未指定发件人 ID,以下标识之一将显示为源身份:
此消息级别的发件人 ID 会覆盖您在 Text messaging preferences 页面中设置的默认发件人 ID。
-
要指定 Origination number(远啊号码),输入一个由 5-14 个数字组成的字符串,以显示为收件人设备上的发件人电话号码。此字符串必须与您在 AWS 账户 中为目的地国家/地区配置的起始号码相匹配。起始号码可以是 10 DLC 号码、免费电话号码、 person-to-person长码或短码。有关更多信息,请参阅 Amazon SNS SMS 消息的来源身份。
如果您未指定发件号,Amazon SNS 会根据您的 AWS 账户 配置选择用于SMS短信的发件号。
-
如果您要向印度的收件人发送SMS邮件,请展开特定国家/地区的属性,并指定以下属性:
-
实体 ID — 用于向印度收件人发送SMS消息的实体 ID 或委托人实体 (PE) ID。此 ID 是一个由 1-50 个字符组成的唯一字符串,由印度电信监管局 (TRAI) 提供,用于识别您在注册的实体。TRAI
-
模板 ID — 用于向印度收件人发送SMS消息的模板 ID。此 ID 是一个由 1-50 个字符组成的唯一字符串,用于标识您在中注册的模板。TRAI TRAI模板 ID 必须与您为邮件指定的发件人 ID 相关联。
有关向印度收件人发送SMS邮件的更多信息,请查看《AWS End User Messaging SMS 用户指南》中的印度发件人 ID 注册流程。
-
选择发布消息。
要从发件号码发送SMS消息,您还可以在亚马逊SNS控制台导航面板中选择发件号码。选择 “功能” 列SMS中包含的发件号码,然后选择 “发布短信”。
发送消息 (AWS SDKs)
要使用其中一个发送SMS消息 AWS SDKs,请使用与 SDK Amazon 中Publish
请求对应的API操作SNSAPI。通过此请求,您可以直接向电话号码发送SMS消息。您也可使用 MessageAttributes
参数设置以下属性名称的值:
AWS.SNS.SMS.SenderID
-
包含 3-11 个字母数字字符或连字符 (-) 的自定义 ID,其中包含至少一个字母,并且不能包含空格。该发件人 ID 在接收设备上显示为消息发件人。例如,您可以使用自己的企业品牌让消息来源更易于识别。
对发件人的支持因国家或地区IDs而异。例如,发送至美国电话号码的消息不显示发件人 ID。有关支持发件人的国家或地区的列表IDs,请参阅《AWS End User Messaging SMS 用户指南》 AWS End User Messaging SMS中支持使用发送SMS消息的国家和地区。
如果您未指定发件人 ID,则在支持的国家或地区中长代码会显示为发件人 ID。对于需要按字母顺序排列的发件人 ID 的国家或地区,NOTICE则显示为发件人 ID。
此消息级别的属性会覆盖您可以通过 SetSMSAttributes
请求设置的账户级别属性 DefaultSenderID
。
AWS.MM.SMS.OriginationNumber
-
一个由 5—14 个数字组成的自定义字符串,其中可以包括一个可选的前导加号 (+
)。此数字字串在接收设备上显示为发件人的电话号码。该字符串必须与您的 AWS 账户中为目的地国家/地区配置的发件人号码相匹配。发起号码可以是 10 号码、免费DLC电话号码、 person-to-person (P2P) 长码或短码。有关更多信息,请参阅《AWS End User Messaging SMS 用户指南》中的电话号码。
如果您未指定发货号,Amazon SNS 会根据您的 AWS 账户配置选择发货号。
AWS.SNS.SMS.MaxPrice
-
您愿意为USD发送SMS消息所花费的最高价格。如果 Amazon SNS 确定发送消息的费用将超过您的最高价格,则不会发送消息。
如果您的 month-to-dateSMS成本已经超过为该属性设置的配额,则此MonthlySpendLimit
属性无效。您可以使用 SetSMSAttributes
请求设置 MonthlySpendLimit
属性。
如果您要向 Amazon SNS 主题发送消息,则向订阅该主题的每个电话号码发送的每条消息均适用最高价格。
AWS.SNS.SMS.SMSType
-
要发送的消息类型:
此消息级别的属性会覆盖您可以通过 SetSMSAttributes
请求设置的账户级别属性 DefaultSMSType
。
AWS.MM.SMS.EntityId
-
只有向印度的收件人发送SMS邮件时才需要此属性。
这是您的实体 ID 或委托人实体 (PE) ID,用于向印度的收件人发送SMS消息。此 ID 是一个由 1-50 个字符组成的唯一字符串,由印度电信监管局 (TRAI) 提供,用于识别您在注册的实体。TRAI
AWS.MM.SMS.TemplateId
-
只有向印度的收件人发送SMS邮件时才需要此属性。
这是您向印度收件人发送SMS消息的模板。此 ID 是一个由 1-50 个字符组成的唯一字符串,用于标识您在中注册的模板。TRAI TRAI模板 ID 必须与您为邮件指定的发件人 ID 相关联。
发送消息
以下代码示例展示了如何使用 Amazon 发布SMS消息SNS。
- .NET
-
- AWS SDK for .NET
-
namespace SNSMessageExample
{
using System;
using System.Threading.Tasks;
using Amazon;
using Amazon.SimpleNotificationService;
using Amazon.SimpleNotificationService.Model;
public class SNSMessage
{
private AmazonSimpleNotificationServiceClient snsClient;
/// <summary>
/// Initializes a new instance of the <see cref="SNSMessage"/> class.
/// Constructs a new SNSMessage object initializing the Amazon Simple
/// Notification Service (Amazon SNS) client using the supplied
/// Region endpoint.
/// </summary>
/// <param name="regionEndpoint">The Amazon Region endpoint to use in
/// sending test messages with this object.</param>
public SNSMessage(RegionEndpoint regionEndpoint)
{
snsClient = new AmazonSimpleNotificationServiceClient(regionEndpoint);
}
/// <summary>
/// Sends the SMS message passed in the text parameter to the phone number
/// in phoneNum.
/// </summary>
/// <param name="phoneNum">The ten-digit phone number to which the text
/// message will be sent.</param>
/// <param name="text">The text of the message to send.</param>
/// <returns>Async task.</returns>
public async Task SendTextMessageAsync(string phoneNum, string text)
{
if (string.IsNullOrEmpty(phoneNum) || string.IsNullOrEmpty(text))
{
return;
}
// Now actually send the message.
var request = new PublishRequest
{
Message = text,
PhoneNumber = phoneNum,
};
try
{
var response = await snsClient.PublishAsync(request);
}
catch (Exception ex)
{
Console.WriteLine($"Error sending message: {ex}");
}
}
}
}
- C++
-
- SDK对于 C++
-
/**
* Publish SMS: use Amazon Simple Notification Service (Amazon SNS) to send an SMS text message to a phone number.
* Note: This requires additional AWS configuration prior to running example.
*
* NOTE: When you start using Amazon SNS to send SMS messages, your AWS account is in the SMS sandbox and you can only
* use verified destination phone numbers. See https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html.
* NOTE: If destination is in the US, you also have an additional restriction that you have use a dedicated
* origination ID (phone number). You can request an origination number using Amazon Pinpoint for a fee.
* See https://aws.amazon.com/blogs/compute/provisioning-and-using-10dlc-origination-numbers-with-amazon-sns/
* for more information.
*
* <phone_number_value> input parameter uses E.164 format.
* For example, in United States, this input value should be of the form: +12223334444
*/
//! Send an SMS text message to a phone number.
/*!
\param message: The message to publish.
\param phoneNumber: The phone number of the recipient in E.164 format.
\param clientConfiguration: AWS client configuration.
\return bool: Function succeeded.
*/
bool AwsDoc::SNS::publishSms(const Aws::String &message,
const Aws::String &phoneNumber,
const Aws::Client::ClientConfiguration &clientConfiguration) {
Aws::SNS::SNSClient snsClient(clientConfiguration);
Aws::SNS::Model::PublishRequest request;
request.SetMessage(message);
request.SetPhoneNumber(phoneNumber);
const Aws::SNS::Model::PublishOutcome outcome = snsClient.Publish(request);
if (outcome.IsSuccess()) {
std::cout << "Message published successfully with message id, '"
<< outcome.GetResult().GetMessageId() << "'."
<< std::endl;
}
else {
std::cerr << "Error while publishing message "
<< outcome.GetError().GetMessage()
<< std::endl;
}
return outcome.IsSuccess();
}
- 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.PublishRequest;
import software.amazon.awssdk.services.sns.model.PublishResponse;
import software.amazon.awssdk.services.sns.model.SnsException;
/**
* 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 PublishTextSMS {
public static void main(String[] args) {
final String usage = """
Usage: <message> <phoneNumber>
Where:
message - The message text to send.
phoneNumber - The mobile phone number to which a message is sent (for example, +1XXX5550100).\s
""";
if (args.length != 2) {
System.out.println(usage);
System.exit(1);
}
String message = args[0];
String phoneNumber = args[1];
SnsClient snsClient = SnsClient.builder()
.region(Region.US_EAST_1)
.build();
pubTextSMS(snsClient, message, phoneNumber);
snsClient.close();
}
public static void pubTextSMS(SnsClient snsClient, String message, String phoneNumber) {
try {
PublishRequest request = PublishRequest.builder()
.message(message)
.phoneNumber(phoneNumber)
.build();
PublishResponse result = snsClient.publish(request);
System.out
.println(result.messageId() + " Message sent. Status was " + result.sdkHttpResponse().statusCode());
} catch (SnsException e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
}
}
- Kotlin
-
- SDK对于 Kotlin 来说
-
suspend fun pubTextSMS(
messageVal: String?,
phoneNumberVal: String?,
) {
val request =
PublishRequest {
message = messageVal
phoneNumber = phoneNumberVal
}
SnsClient { region = "us-east-1" }.use { snsClient ->
val result = snsClient.publish(request)
println("${result.messageId} message sent.")
}
}
- PHP
-
- SDK for PHP
-
require 'vendor/autoload.php';
use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
/**
* Sends a text message (SMS message) directly to a phone number using Amazon SNS.
*
* This code expects that you have AWS credentials set up per:
* https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
*/
$SnSclient = new SnsClient([
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);
$message = 'This message is sent from a Amazon SNS code sample.';
$phone = '+1XXX5550100';
try {
$result = $SnSclient->publish([
'Message' => $message,
'PhoneNumber' => $phone,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}
- Python
-
- SDK适用于 Python (Boto3)
-
class SnsWrapper:
"""Encapsulates Amazon SNS topic and subscription functions."""
def __init__(self, sns_resource):
"""
:param sns_resource: A Boto3 Amazon SNS resource.
"""
self.sns_resource = sns_resource
def publish_text_message(self, phone_number, message):
"""
Publishes a text message directly to a phone number without need for a
subscription.
:param phone_number: The phone number that receives the message. This must be
in E.164 format. For example, a United States phone
number might be +12065550101.
:param message: The message to send.
:return: The ID of the message.
"""
try:
response = self.sns_resource.meta.client.publish(
PhoneNumber=phone_number, Message=message
)
message_id = response["MessageId"]
logger.info("Published message to %s.", phone_number)
except ClientError:
logger.exception("Couldn't publish message to %s.", phone_number)
raise
else:
return message_id