

适用于 JavaScript 的 Amazon SDK v2 已终止支持。建议您迁移到 [适用于 JavaScript 的 Amazon SDK v3](https://docs.amazonaws.cn//sdk-for-javascript/v3/developer-guide/)。有关更多详情和如何迁移的信息，请参阅本[公告](https://www.amazonaws.cn/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/)。

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

![JavaScript code example that applies to Node.js execution](http://docs.amazonaws.cn/sdk-for-javascript/v2/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 for JavaScript，通过 `AWS.SNS` 客户端类的以下方法发布 SMS 消息：
+ [https://docs.amazonaws.cn/AWSJavaScriptSDK/latest/AWS/SNS.html#getSMSAttributes-property](https://docs.amazonaws.cn/AWSJavaScriptSDK/latest/AWS/SNS.html#getSMSAttributes-property)
+ [https://docs.amazonaws.cn/AWSJavaScriptSDK/latest/AWS/SNS.html#setSMSAttributes-property](https://docs.amazonaws.cn/AWSJavaScriptSDK/latest/AWS/SNS.html#setSMSAttributes-property)
+ [https://docs.amazonaws.cn/AWSJavaScriptSDK/latest/AWS/SNS.html#checkIfPhoneNumberIsOptedOut-property](https://docs.amazonaws.cn/AWSJavaScriptSDK/latest/AWS/SNS.html#checkIfPhoneNumberIsOptedOut-property)
+ [https://docs.amazonaws.cn/AWSJavaScriptSDK/latest/AWS/SNS.html#listPhoneNumbersOptedOut-property](https://docs.amazonaws.cn/AWSJavaScriptSDK/latest/AWS/SNS.html#listPhoneNumbersOptedOut-property)
+ [https://docs.amazonaws.cn/AWSJavaScriptSDK/latest/AWS/SNS.html#publish-property](https://docs.amazonaws.cn/AWSJavaScriptSDK/latest/AWS/SNS.html#publish-property)

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

要设置和运行此示例，您必须先完成以下任务：
+ 安装 Node.js。有关安装 Node.js 的更多信息，请参阅 [Node.js 网站](http://nodejs.org)。
+ 使用用户凭证创建共享配置文件。有关提供凭证 JSON 文件的更多信息，请参阅[从共享凭证文件加载 Node.js 中的凭证](loading-node-credentials-shared.md)。

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

使用 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](https://docs.amazonaws.cn/sns/latest/api/API_SetSMSAttributes.html)。

此示例获取 `DefaultSMSType` 属性，该属性控制 SMS 消息是作为 `Promotional` 发送（这将优化消息传送以尽可能降低成本）还是作为 `Transactional` 发送（这将优化消息传送以实现最高的可靠性）。将参数传递到 `setTopicAttributes` 客户端类的 `AWS.SNS` 方法。要调用 `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 上的此处](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javascript/example_code/sns/sns_getsmstype.js)找到。

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

本示例使用 Node.js 模块获取 Amazon SNS 中的当前 SMS 属性。创建文件名为 `sns_setsmstype.js` 的 Node.js 模块。按前面所示配置 SDK。创建包含用于设置 SMS 属性的参数的对象，其中包括要设置的单个属性的名称以及为各个属性设置的值。有关可用 SMS 属性的详细信息，请参阅《Amazon Simple Notification Service API 参考》中的 [SetSMSAttributes](https://docs.amazonaws.cn/sns/latest/api/API_SetSMSAttributes.html)。

此示例将 `DefaultSMSType` 属性设置为 `Transactional`，这会优化消息传送以实现最高的可靠性。将参数传递到 `setTopicAttributes` 客户端类的 `AWS.SNS` 方法。要调用 `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 上的此处](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javascript/example_code/sns/sns_setsmstype.js)找到。

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

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

此示例设置 `PhoneNumber` 参数以指定要检查的电话号码。将对象发布到 `checkIfPhoneNumberIsOptedOut` 客户端类的 `AWS.SNS` 方法。要调用 `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 上的此处](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javascript/example_code/sns/sns_checkphoneoptout.js)找到。

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

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

将对象发布到 `listPhoneNumbersOptedOut` 客户端类的 `AWS.SNS` 方法。要调用 `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 上的此处](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javascript/example_code/sns/sns_listnumbersoptedout.js)找到。

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

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

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

此示例设置 `PhoneNumber` 参数以指定将消息发送到的电话号码。将对象发布到 `publish` 客户端类的 `AWS.SNS` 方法。要调用 `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 上的此处](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javascript/example_code/sns/sns_publishsms.js)找到。