使用 Amazon SNS 发送 SMS 消息 - AWS SDK for JavaScript

我们已宣布即将终止对 AWS SDK for JavaScript v2 的支持。建议您迁移到 AWS SDK for JavaScript v3。有关日期、其他详细信息以及如何迁移的信息,请参阅链接的公告。

使用 Amazon SNS 发送 SMS 消息

JavaScript code example that applies to Node.js execution

此 Node.js 代码示例演示:

  • 如何获取和设置 Amazon SNS 的 SMS 消息发送首选项。

  • 如何检查电话号码以确定是否选择退出接收 SMS 消息。

  • 如何获取已选择退出接收 SMS 消息的电话号码列表。

  • 如何发送 SMS 消息。

情景

您可以使用 Amazon SNS 将文本消息或 SMS 消息发送到支持 SMS 的设备上。您可以直接向电话号码发送消息,也可以使用多个电话号码订阅主题,然后通过向该主题发送消息来一次向这些电话号码发送消息。

在本示例中,您使用一系列 Node.js 模块将 SMS 文本消息从 Amazon SNS 发送到支持 SMS 的设备。这些 Node.js 模块使用 SDK for JavaScript,通过 AWS.SNS 客户端类的以下方法发布 SMS 消息:

先决条件任务

要设置和运行此示例,您必须先完成以下任务:

获取 SMS 属性

使用 Amazon SNS 来指定发送 SMS 消息的首选项,例如如何优化消息传输(在成本或可靠传输方面)、您的每月支出限额、如何记录消息传输以及是否要订阅每日 SMS 使用率报告。这些首选项通过检索得到,并设置为 Amazon SNS 的 SMS 属性。

本示例使用 Node.js 模块获取 Amazon SNS 中的当前 SMS 属性。创建文件名为 sns_getsmstype.js 的 Node.js 模块。按前面所示配置 SDK。创建包含用于获取 SMS 属性的参数的对象,包括要获取的单个属性的名称。有关可用 SMS 属性的详细信息,请参阅《Amazon Simple Notification Service API 参考》中的 SetSMSAttributes

此示例获取 DefaultSMSType 属性,该属性控制 SMS 消息是作为 Promotional 发送(这将优化消息传送以尽可能降低成本)还是作为 Transactional 发送(这将优化消息传送以实现最高的可靠性)。将参数传递到 AWS.SNS 客户端类的 setTopicAttributes 方法。要调用 getSMSAttributes 方法,请创建一个 promise 来调用 Amazon SNS 服务对象并传递参数对象。然后处理 promise 回调中的 response

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set region AWS.config.update({ region: "REGION" }); // Create SMS Attribute parameter you want to get var params = { attributes: [ "DefaultSMSType", "ATTRIBUTE_NAME", /* more items */ ], }; // Create promise and SNS service object var getSMSTypePromise = new AWS.SNS({ apiVersion: "2010-03-31" }) .getSMSAttributes(params) .promise(); // Handle promise's fulfilled/rejected states getSMSTypePromise .then(function (data) { console.log(data); }) .catch(function (err) { console.error(err, err.stack); });

要运行示例,请在命令行中键入以下内容。

node sns_getsmstype.js

此示例代码可在 GitHub 上的此处找到。

设置 SMS 属性

本示例使用 Node.js 模块获取 Amazon SNS 中的当前 SMS 属性。创建文件名为 sns_setsmstype.js 的 Node.js 模块。按前面所示配置 SDK。创建包含用于设置 SMS 属性的参数的对象,其中包括要设置的单个属性的名称以及为各个属性设置的值。有关可用 SMS 属性的详细信息,请参阅《Amazon Simple Notification Service API 参考》中的 SetSMSAttributes

此示例将 DefaultSMSType 属性设置为 Transactional,这会优化消息传送以实现最高的可靠性。将参数传递到 AWS.SNS 客户端类的 setTopicAttributes 方法。要调用 getSMSAttributes 方法,请创建一个 promise 来调用 Amazon SNS 服务对象并传递参数对象。然后处理 promise 回调中的 response

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set region AWS.config.update({ region: "REGION" }); // Create SMS Attribute parameters var params = { attributes: { /* required */ DefaultSMSType: "Transactional" /* highest reliability */, //'DefaultSMSType': 'Promotional' /* lowest cost */ }, }; // Create promise and SNS service object var setSMSTypePromise = new AWS.SNS({ apiVersion: "2010-03-31" }) .setSMSAttributes(params) .promise(); // Handle promise's fulfilled/rejected states setSMSTypePromise .then(function (data) { console.log(data); }) .catch(function (err) { console.error(err, err.stack); });

要运行示例,请在命令行中键入以下内容。

node sns_setsmstype.js

此示例代码可在 GitHub 上的此处找到。

检查电话号码是否已选择不接收消息

在本示例中,使用 Node.js 模块检查电话号码,确定该号码是否已退出接收 SMS 消息。创建文件名为 sns_checkphoneoptout.js 的 Node.js 模块。按前面所示配置 SDK。创建一个对象,其中将要检查的电话号码包含作为参数。

此示例设置 PhoneNumber 参数以指定要检查的电话号码。将对象发布到 AWS.SNS 客户端类的 checkIfPhoneNumberIsOptedOut 方法。要调用 checkIfPhoneNumberIsOptedOut 方法,请创建一个 promise 来调用 Amazon SNS 服务对象并传递参数对象。然后处理 promise 回调中的 response

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set region AWS.config.update({ region: "REGION" }); // Create promise and SNS service object var phonenumPromise = new AWS.SNS({ apiVersion: "2010-03-31" }) .checkIfPhoneNumberIsOptedOut({ phoneNumber: "PHONE_NUMBER" }) .promise(); // Handle promise's fulfilled/rejected states phonenumPromise .then(function (data) { console.log("Phone Opt Out is " + data.isOptedOut); }) .catch(function (err) { console.error(err, err.stack); });

要运行示例,请在命令行中键入以下内容。

node sns_checkphoneoptout.js

此示例代码可在 GitHub 上的此处找到。

列出已退出的电话号码

在本示例中,使用 Node.js 模块获取已退出接收 SMS 消息的电话号码列表。创建文件名为 sns_listnumbersoptedout.js 的 Node.js 模块。按前面所示配置 SDK。创建一个空对象作为参数。

将对象发布到 AWS.SNS 客户端类的 listPhoneNumbersOptedOut 方法。要调用 listPhoneNumbersOptedOut 方法,请创建一个 promise 来调用 Amazon SNS 服务对象并传递参数对象。然后处理 promise 回调中的 response

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set region AWS.config.update({ region: "REGION" }); // Create promise and SNS service object var phonelistPromise = new AWS.SNS({ apiVersion: "2010-03-31" }) .listPhoneNumbersOptedOut({}) .promise(); // Handle promise's fulfilled/rejected states phonelistPromise .then(function (data) { console.log(data); }) .catch(function (err) { console.error(err, err.stack); });

要运行示例,请在命令行中键入以下内容。

node sns_listnumbersoptedout.js

此示例代码可在 GitHub 上的此处找到。

发布 SMS 消息

在本示例中,使用 Node.js 模块将 SMS 消息发布到电话号码。创建文件名为 sns_publishsms.js 的 Node.js 模块。按前面所示配置 SDK。创建一个包含 MessagePhoneNumber 参数的对象。

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

此示例设置 PhoneNumber 参数以指定将消息发送到的电话号码。将对象发布到 AWS.SNS 客户端类的 publish 方法。要调用 publish 方法,请创建一个 promise 来调用 Amazon SNS 服务对象并传递参数对象。然后处理 promise 回调中的 response

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set region AWS.config.update({ region: "REGION" }); // Create publish parameters var params = { Message: "TEXT_MESSAGE" /* required */, PhoneNumber: "E.164_PHONE_NUMBER", }; // Create promise and SNS service object var publishTextPromise = new AWS.SNS({ apiVersion: "2010-03-31" }) .publish(params) .promise(); // Handle promise's fulfilled/rejected states publishTextPromise .then(function (data) { console.log("MessageID is " + data.MessageId); }) .catch(function (err) { console.error(err, err.stack); });

要运行示例,请在命令行中键入以下内容。

node sns_publishsms.js

此示例代码可在 GitHub 上的此处找到。