使用Amazon SNS 发送 SMS 消息 - Amazon SDK for JavaScript
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon SDK for JavaScriptV3 API 参考指南详细描述了Amazon SDK for JavaScript版本 3 (V3) 的所有 API 操作。

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

使用Amazon SNS 发送 SMS 消息


                    JavaScript code example that applies to Node.js execution

此 Node.js 代码示例演示:

  • 如何获取和设置 Amazon SNS 的短信首选项。

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

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

  • 如何发送 SMS 消息。

情景

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

在此示例中,您使用一系列 Node.js 模块将来自 Amazon SNS 的 SMS 短信发布到支持 SMS 的设备。Node.js 模块使用的 SDK JavaScript 使用SNS客户端类的以下方法发布 SMS 消息:

先决条件任务

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

  • 设置项目环境以运行这些节点 TypeScript 示例,并安装所需的模块Amazon SDK for JavaScript和第三方模块。按照上的说明进行操作 GitHub

  • 使用用户凭证创建共享配置文件。有关提供凭证 JSON 文件的更多信息,请参阅从共享凭证文件加载 Node.js 中的凭证

重要

这些示例演示了如何使用 ECMAScript6 (ES6) 导入/导出客户端服务对象和命令。

获取 SMS 属性

使用 Amazon SNS 来指定 SMS 消息传送首选项,例如如何优化传送(成本或可靠传送)、您的每月支出限额、如何记录消息传送以及是否要订阅每日 SMS 使用情况报告。系统会检索这些首选项并将其设置为 Amazon SNS 的 SMS 属性。

在此示例中,使用 Node.js 模块获取 Amazon SNS 中的当前 SMS 属性。

创建一个libs目录,然后使用该文件名创建 Node.js 模块snsClient.js。将以下代码复制并粘贴到其中,这将创建 Amazon SNS 客户端对象。将 RE G ION 替换为您的Amazon区域。

import { SNSClient } from "@aws-sdk/client-sns"; // Set the AWS Region. const REGION = "REGION"; //e.g. "us-east-1" // Create SNS service object. const snsClient = new SNSClient({ region: REGION }); export { snsClient };

此示例代码可以在此处找到 GitHub

创建文件名为 sns_getsmstype.js 的 Node.js 模块。

如前所示配置 SDK,包括下载所需的客户端和软件包。创建包含用于获取 SMS 属性的参数的对象,包括要获取的单个属性的名称。有关可用 SmS 属性的详细信息,请参阅 Amazon Simple Notificat ion Service API 参考中的 SmSMS 特性。

此示例获取 DefaultSMSType 属性,该属性控制 SMS 消息是作为 Promotional 发送(这将优化消息传送以尽可能降低成本)还是作为 Transactional 发送(这将优化消息传送以实现最高的可靠性)。将参数传递到 SNS 客户端类的 SetTopicAttributesCommand 方法。要调用该SetSMSAttributesCommand方法,请创建一个调用 Amazon SNS 客户端服务对象并传递参数对象的异步函数。

注意

将 AT TRIBUTE_ NAME 替换为属性的名称。

// Import required AWS SDK clients and commands for Node.js import {GetSMSAttributesCommand } from "@aws-sdk/client-sns"; import {snsClient } from "./libs/snsClient.js"; // Set the parameters var params = { attributes: [ "DefaultSMSType", "ATTRIBUTE_NAME", /* more items */ ], }; const run = async () => { try { const data = await snsClient.send(new GetSMSAttributesCommand(params)); console.log("Success.", data); return data; // For unit tests. } catch (err) { console.log("Error", err.stack); } }; run();

要运行示例,请在命令提示符处输入以下内容。

node sns_getsmstype.js

此示例代码可以在此处找到 GitHub

设置 SMS 属性

在此示例中,使用 Node.js 模块获取 Amazon SNS 中的当前 SMS 属性。

创建一个libs目录,然后使用该文件名创建 Node.js 模块snsClient.js。将以下代码复制并粘贴到其中,这将创建 Amazon SNS 客户端对象。将 RE G ION 替换为您的Amazon区域。

import { SNSClient } from "@aws-sdk/client-sns"; // Set the AWS Region. const REGION = "REGION"; //e.g. "us-east-1" // Create SNS service object. const snsClient = new SNSClient({ region: REGION }); export { snsClient };

此示例代码可以在此处找到 GitHub

创建文件名为 sns_setsmstype.js 的 Node.js 模块。如前所示配置 SDK,包括安装所需的客户端和软件包。创建包含用于设置 SMS 属性的参数的对象,其中包括要设置的单个属性的名称以及为各个属性设置的值。有关可用 SmS 属性的详细信息,请参阅 Amazon Simple Notificat ion Service API 参考中的 SmSMS 特性。

此示例将 DefaultSMSType 属性设置为 Transactional,这会优化消息传送以实现最高的可靠性。将参数传递到 SNS 客户端类的 SetTopicAttributesCommand 方法。要调用该SetSMSAttributesCommand方法,请创建一个调用 Amazon SNS 客户端服务对象并传递参数对象的异步函数。

// Import required AWS SDK clients and commands for Node.js import {SetSMSAttributesCommand } from "@aws-sdk/client-sns"; import {snsClient } from "./libs/snsClient.js"; // Set the parameters const params = { attributes: { /* required */ DefaultSMSType: "Transactional" /* highest reliability */, //'DefaultSMSType': 'Promotional' /* lowest cost */ }, }; const run = async () => { try { const data = await snsClient.send(new SetSMSAttributesCommand(params)); console.log("Success.", data); return data; // For unit tests. } catch (err) { console.log("Error", err.stack); } }; run();

要运行示例,请在命令提示符处输入以下内容。

node sns_setsmstype.js

此示例代码可以在此处找到 GitHub

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

在本示例中,使用 Node.js 模块检查电话号码,确定该号码是否已退出接收 SMS 消息。

创建一个libs目录,然后使用该文件名创建 Node.js 模块snsClient.js。将以下代码复制并粘贴到其中,这将创建 Amazon SNS 客户端对象。将 RE G ION 替换为您的Amazon区域。

import { SNSClient } from "@aws-sdk/client-sns"; // Set the AWS Region. const REGION = "REGION"; //e.g. "us-east-1" // Create SNS service object. const snsClient = new SNSClient({ region: REGION }); export { snsClient };

此示例代码可以在此处找到 GitHub

创建文件名为 sns_checkphoneoptout.js 的 Node.js 模块。按前面所示配置开发工具包。创建一个对象,其中将要检查的电话号码包含作为参数。

此示例设置 PhoneNumber 参数以指定要检查的电话号码。将对象发布到 SNS 客户端类的 CheckIfPhoneNumberIsOptedOutCommand 方法。要调用该CheckIfPhoneNumberIsOptedOutCommand方法,请创建一个调用 Amazon SNS 客户端服务对象并传递参数对象的异步函数。

注意

PHONE_NUM BER 替换为电话号码。

// Import required AWS SDK clients and commands for Node.js import {CheckIfPhoneNumberIsOptedOutCommand } from "@aws-sdk/client-sns"; import {snsClient } from "./libs/snsClient.js"; // Set the parameters const params = { phoneNumber: "353861230764" }; //PHONE_NUMBER, in the E.164 phone number structure const run = async () => { try { const data = await snsClient.send( new CheckIfPhoneNumberIsOptedOutCommand(params) ); console.log("Success.", data); return data; // For unit tests. } catch (err) { console.log("Error", err.stack); } }; run();

要运行示例,请在命令提示符处输入以下内容。

node sns_checkphoneoptout.js

此示例代码可以在此处找到 GitHub

列出已退出的电话号码

在本示例中,使用 Node.js 模块获取已退出接收 SMS 消息的电话号码列表。

创建一个libs目录,然后使用该文件名创建 Node.js 模块snsClient.js。将以下代码复制并粘贴到其中,这将创建 Amazon SNS 客户端对象。将 RE G ION 替换为您的Amazon区域。

import { SNSClient } from "@aws-sdk/client-sns"; // Set the AWS Region. const REGION = "REGION"; //e.g. "us-east-1" // Create SNS service object. const snsClient = new SNSClient({ region: REGION }); export { snsClient };

此示例代码可以在此处找到 GitHub

创建文件名为 sns_listnumbersoptedout.js 的 Node.js 模块。按前面所示配置开发工具包。创建一个空对象作为参数。

将对象发布到 SNS 客户端类的 ListPhoneNumbersOptedOutCommand 方法。要调用该ListPhoneNumbersOptedOutCommand方法,请创建一个调用 Amazon SNS 客户端服务对象并传递参数对象的异步函数。

// Import required AWS SDK clients and commands for Node.js import {ListPhoneNumbersOptedOutCommand } from "@aws-sdk/client-sns"; import {snsClient } from "./libs/snsClient.js"; const run = async () => { try { const data = await snsClient.send(new ListPhoneNumbersOptedOutCommand({})); console.log("Success.", data); return data; // For unit tests. } catch (err) { console.log("Error", err.stack); } }; run();

要运行示例,请在命令提示符处输入以下内容。

node sns_listnumbersoptedout.js

此示例代码可以在此处找到 GitHub

发布 SMS 消息

在本示例中,使用 Node.js 模块将 SMS 消息发布到电话号码。

创建一个libs目录,然后使用该文件名创建 Node.js 模块snsClient.js。将以下代码复制并粘贴到其中,这将创建 Amazon SNS 客户端对象。将 RE G ION 替换为您的Amazon区域。

import { SNSClient } from "@aws-sdk/client-sns"; // Set the AWS Region. const REGION = "REGION"; //e.g. "us-east-1" // Create SNS service object. const snsClient = new SNSClient({ region: REGION }); export { snsClient };

此示例代码可以在此处找到 GitHub

创建文件名为 sns_publishsms.js 的 Node.js 模块。如前所示配置 SDK,包括安装所需的客户端和软件包。创建一个包含 MessagePhoneNumber 参数的对象。

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

此示例设置 PhoneNumber 参数以指定将消息发送到的电话号码。将对象发布到 SNS 客户端类的 PublishCommand 方法。要调用该PublishCommand方法,请创建一个调用 Amazon SNS 服务对象并传递参数对象的异步函数。

注意

TEXT_MES SAGE 替换为短信,将 PHONE_N UMBER 替换为电话号码。

// Import required AWS SDK clients and commands for Node.js import {PublishCommand } from "@aws-sdk/client-sns"; import {snsClient } from "./libs/snsClient.js"; // Set the parameters const params = { Message: "MESSAGE_TEXT" /* required */, PhoneNumber: "PHONE_NUMBER", //PHONE_NUMBER, in the E.164 phone number structure }; const run = async () => { try { const data = await snsClient.send(new PublishCommand(params)); console.log("Success.", data); return data; // For unit tests. } catch (err) { console.log("Error", err.stack); } }; run();

要运行示例,请在命令提示符处输入以下内容。

node sns_publishsms.js

此示例代码可以在此处找到 GitHub