

 [适用于 JavaScript 的 AWS SDK V3 API 参考指南](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/)详细描述了 适用于 JavaScript 的 AWS SDK 版本 3 (V3) 的所有 API 操作。

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

# 使用 Amazon SNS 发送 SMS 消息
<a name="sns-examples-sending-sms"></a>

![\[JavaScript code example that applies to Node.js execution\]](http://docs.aws.amazon.com/zh_cn/sdk-for-javascript/v3/developer-guide/images/nodeicon.png)

**此 Node.js 代码示例演示：**
+ 如何获取和设置 Amazon SNS 的 SMS 消息发送首选项。
+ 如何检查电话号码以确定是否选择退出接收 SMS 消息。
+ 如何获取已选择退出接收 SMS 消息的电话号码列表。
+ 如何发送 SMS 消息。

## 情景
<a name="sns-examples-sending-sms-scenario"></a>

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

在本示例中，您使用一系列 Node.js 模块将 SMS 文本消息从 Amazon SNS 发送到支持 SMS 的设备。Node.js 模块使用的 SDK 使用以下`SNS`客户端类的方法发布 SMS 消息： JavaScript 
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-sns/Class/GetSMSAttributesCommand/](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-sns/Class/GetSMSAttributesCommand/)
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-sns/Class/SetSMSAttributesCommand/](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-sns/Class/SetSMSAttributesCommand/)
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-sns/Class/CheckIfPhoneNumberIsOptedOutCommand/](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-sns/Class/CheckIfPhoneNumberIsOptedOutCommand/)
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-sns/Class/ListPhoneNumbersOptedOutCommand/](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-sns/Class/ListPhoneNumbersOptedOutCommand/)
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-sns/Class/PublishCommand/](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-sns/Class/PublishCommand/)

## 先决条件任务
<a name="sns-examples-sending-sms-prerequisites"></a>

要设置和运行此示例，您必须先完成以下任务：
+ 设置项目环境以运行这些 Node TypeScript 示例，并安装所需的模块 适用于 JavaScript 的 AWS SDK 和第三方模块。按照上的说明进行操作[ GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/sns/README.md)。
+ 使用用户凭证创建共享配置文件。有关提供共享凭据文件的更多信息，请参阅[和*工具参考指南中的共享配置AWS SDKs 和*凭据文件](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)。

**重要**  
这些示例演示了如何使用 ECMAScript6 (ES6) 来 import/export 客户端服务对象和命令。  
这需要使用 Node.js 版本 13.x 或更高版本。要下载并安装最新版本的 Node.js，请参阅 [Node.js 下载](https://nodejs.org/en/download)。
如果您更喜欢使用 CommonJS 语法，请参阅 [JavaScript ES6/CommonJS 语法](sdk-example-javascript-syntax.md)。

## 获取 SMS 属性
<a name="sending-sms-getattributes"></a>

使用 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({});
```

可以在此[处找到此](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/sns/libs/snsClient.js)示例代码 GitHub。

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

如前所示配置 SDK，包括下载所需的客户端和软件包。创建包含用于获取 SMS 属性的参数的对象，包括要获取的单个属性的名称。有关可用短信属性的详细信息，请参阅《亚马逊简单通知服务 API 参考》SMSAttributes中的 “[设置](https://docs.aws.amazon.com/sns/latest/api/API_SetSMSAttributes.html)”。

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

**注意**  
*ATTRIBUTE\$1NAME*替换为属性的名称。

```
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
```

可以在此[处找到此](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/sns/actions/get-sms-attributes.js)示例代码 GitHub。

## 设置 SMS 属性
<a name="sending-sms-setattributes"></a>

在本示例中，使用 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({});
```

可以在此[处找到此](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/sns/libs/snsClient.js)示例代码 GitHub。

 创建文件名为 `set-sms-attribute-type.js` 的 Node.js 模块。如前所示配置 SDK，包括安装所需的客户端和软件包。创建包含用于设置 SMS 属性的参数的对象，其中包括要设置的单个属性的名称以及为各个属性设置的值。有关可用短信属性的详细信息，请参阅《亚马逊简单通知服务 API 参考》SMSAttributes中的 “[设置](https://docs.aws.amazon.com/sns/latest/api/API_SetSMSAttributes.html)”。

此示例将 `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 
```

可以在此[处找到此](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/sns/actions/set-sms-attribute-type.js)示例代码 GitHub。

## 检查电话号码是否已选择不接收消息
<a name="sending-sms-checkifphonenumberisoptedout"></a>

在本示例中，使用 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({});
```

可以在此[处找到此](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/sns/libs/snsClient.js)示例代码 GitHub。

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

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

**注意**  

*PHONE\$1NUMBER*替换为电话号码。

```
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 
```

可以在此[处找到此](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/sns/actions/check-if-phone-number-is-opted-out.js)示例代码 GitHub。

## 列出已退出的电话号码
<a name="sending-sms-listphonenumbersoptedout"></a>

在本示例中，使用 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({});
```

可以在此[处找到此](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/sns/libs/snsClient.js)示例代码 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 
```

可以在此[处找到此](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/sns/actions/list-phone-numbers-opted-out.js)示例代码 GitHub。

## 发布 SMS 消息
<a name="sending-sms-publishsms"></a>

在本示例中，使用 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({});
```

可以在此[处找到此](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/sns/libs/snsClient.js)示例代码 GitHub。

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

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

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

**注意**  
*TEXT\$1MESSAGE*替换为*PHONE\$1NUMBER*短信和电话号码。

```
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
```

可以在此[处找到此](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascriptv3/example_code/sns/actions/publish-sms.js)示例代码 GitHub。