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

AWS SDK for JavaScript V3 API 参考指南详细描述了 AWS 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 消息的电话号码列表。

  • 如何发送 SMS 消息。

情景

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

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

先决条件任务

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

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

  • 使用用户凭证创建共享配置文件。有关提供共享凭证文件的更多信息,请参阅《AWS SDK 和工具参考指南》 中的共享配置和凭证文件

重要

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

获取 SMS 属性

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

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

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

import { SNSClient } from "@aws-sdk/client-sns"; // The AWS Region can be provided here using the `region` property. If you leave it blank // the SDK will default to the region set in your AWS config. export const snsClient = new SNSClient({});

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

创建文件名为 get-sms-attributes.js 的 Node.js 模块。

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

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

注意

ATTRIBUTE_NAME 替换为属性的名称。

import { GetSMSAttributesCommand } from "@aws-sdk/client-sns"; import { snsClient } from "../libs/snsClient.js"; export const getSmsAttributes = async () => { const response = await snsClient.send( // If you have not modified the account-level mobile settings of SNS, // the DefaultSMSType is undefined. For this example, it was set to // Transactional. new GetSMSAttributesCommand({ attributes: ["DefaultSMSType"] }), ); console.log(response); // { // '$metadata': { // httpStatusCode: 200, // requestId: '67ad8386-4169-58f1-bdb9-debd281d48d5', // extendedRequestId: undefined, // cfId: undefined, // attempts: 1, // totalRetryDelay: 0 // }, // attributes: { DefaultSMSType: 'Transactional' } // } return response; };

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

node get-sms-attributes.js

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

设置 SMS 属性

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

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

import { SNSClient } from "@aws-sdk/client-sns"; // The AWS Region can be provided here using the `region` property. If you leave it blank // the SDK will default to the region set in your AWS config. export const snsClient = new SNSClient({});

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

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

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

import { SetSMSAttributesCommand } from "@aws-sdk/client-sns"; import { snsClient } from "../libs/snsClient.js"; /** * @param {"Transactional" | "Promotional"} defaultSmsType */ export const setSmsType = async (defaultSmsType = "Transactional") => { const response = await snsClient.send( new SetSMSAttributesCommand({ attributes: { // Promotional – (Default) Noncritical messages, such as marketing messages. // Transactional – Critical messages that support customer transactions, // such as one-time passcodes for multi-factor authentication. DefaultSMSType: defaultSmsType, }, }), ); console.log(response); // { // '$metadata': { // httpStatusCode: 200, // requestId: '1885b977-2d7e-535e-8214-e44be727e265', // extendedRequestId: undefined, // cfId: undefined, // attempts: 1, // totalRetryDelay: 0 // } // } return response; };

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

node set-sms-attribute-type.js

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

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

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

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

import { SNSClient } from "@aws-sdk/client-sns"; // The AWS Region can be provided here using the `region` property. If you leave it blank // the SDK will default to the region set in your AWS config. export const snsClient = new SNSClient({});

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

创建文件名为 check-if-phone-number-is-opted-out.js 的 Node.js 模块。按前面所示配置 SDK。创建一个对象,其中将要检查的电话号码包含作为参数。

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

注意

PHONE_NUMBER 替换为电话号码。

import { CheckIfPhoneNumberIsOptedOutCommand } from "@aws-sdk/client-sns"; import { snsClient } from "../libs/snsClient.js"; export const checkIfPhoneNumberIsOptedOut = async ( phoneNumber = "5555555555", ) => { const command = new CheckIfPhoneNumberIsOptedOutCommand({ phoneNumber, }); const response = await snsClient.send(command); console.log(response); // { // '$metadata': { // httpStatusCode: 200, // requestId: '3341c28a-cdc8-5b39-a3ee-9fb0ee125732', // extendedRequestId: undefined, // cfId: undefined, // attempts: 1, // totalRetryDelay: 0 // }, // isOptedOut: false // } return response; };

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

node check-if-phone-number-is-opted-out.js

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

列出已退出的电话号码

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

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

import { SNSClient } from "@aws-sdk/client-sns"; // The AWS Region can be provided here using the `region` property. If you leave it blank // the SDK will default to the region set in your AWS config. export const snsClient = new SNSClient({});

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

创建文件名为 list-phone-numbers-opted-out.js 的 Node.js 模块。按前面所示配置 SDK。创建一个空对象作为参数。

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

import { ListPhoneNumbersOptedOutCommand } from "@aws-sdk/client-sns"; import { snsClient } from "../libs/snsClient.js"; export const listPhoneNumbersOptedOut = async () => { const response = await snsClient.send( new ListPhoneNumbersOptedOutCommand({}), ); console.log(response); // { // '$metadata': { // httpStatusCode: 200, // requestId: '44ff72fd-1037-5042-ad96-2fc16601df42', // extendedRequestId: undefined, // cfId: undefined, // attempts: 1, // totalRetryDelay: 0 // }, // phoneNumbers: ['+15555550100'] // } return response; };

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

node list-phone-numbers-opted-out.js

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

发布 SMS 消息

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

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

import { SNSClient } from "@aws-sdk/client-sns"; // The AWS Region can be provided here using the `region` property. If you leave it blank // the SDK will default to the region set in your AWS config. export const snsClient = new SNSClient({});

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

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

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

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

注意

TEXT_MESSAGE 替换为文本消息,将 PHONE_NUMBER 替换为电话号码。

import { PublishCommand } from "@aws-sdk/client-sns"; import { snsClient } from "../libs/snsClient.js"; /** * @param {string | Record<string, any>} message - The message to send. Can be a plain string or an object * if you are using the `json` `MessageStructure`. * @param {*} phoneNumber - The phone number to send the message to. */ export const publish = async ( message = "Hello from SNS!", phoneNumber = "+15555555555", ) => { const response = await snsClient.send( new PublishCommand({ Message: message, // One of PhoneNumber, TopicArn, or TargetArn must be specified. PhoneNumber: phoneNumber, }), ); console.log(response); // { // '$metadata': { // httpStatusCode: 200, // requestId: '7410094f-efc7-5f52-af03-54737569ab77', // extendedRequestId: undefined, // cfId: undefined, // attempts: 1, // totalRetryDelay: 0 // }, // MessageId: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' // } return response; };

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

node publish-sms.js

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