

 適用於 JavaScript 的 AWS SDK v2 已end-of-support。我們建議您遷移至 [適用於 JavaScript 的 AWS SDK v3](https://docs.aws.amazon.com//sdk-for-javascript/v3/developer-guide/)。如需如何遷移的其他詳細資訊和資訊，請參閱此[公告](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Amazon SNS 傳送簡訊
<a name="sns-examples-sending-sms"></a>

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

**這個 Node.js 程式碼範例會說明：**
+ 如何取得和設定 Amazon SNS 的簡訊偏好設定。
+ 如何檢查電話號碼是否選擇不要接收簡訊。
+ 如何取得選擇不要接收簡訊的電話號碼清單。
+ 如何傳送簡訊。

## 使用案例
<a name="sns-examples-sending-sms-scenario"></a>

您可以使用 Amazon SNS 傳送文字訊息或簡訊至啟用簡訊功能的裝置。您可以直接傳送訊息至一組電話號碼，或一次傳送一則訊息至多組電話號碼，只要訂閱那些電話號碼到主題並且傳送您的訊息到該主題即可。

在此範例中，您會使用一系列 Node.js 模組，將 SMS 文字訊息從 Amazon SNS 發佈至啟用 SMS 的裝置。Node.js 模組使用適用於 JavaScript 的 SDK，以`AWS.SNS`用戶端類別的下列方法發佈 SMS 訊息：
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html#getSMSAttributes-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html#getSMSAttributes-property)
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html#setSMSAttributes-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html#setSMSAttributes-property)
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html#checkIfPhoneNumberIsOptedOut-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html#checkIfPhoneNumberIsOptedOut-property)
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html#listPhoneNumbersOptedOut-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html#listPhoneNumbersOptedOut-property)
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html#publish-property](https://docs.aws.amazon.com/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)。

## 取得簡訊屬性
<a name="sending-sms-getattributes"></a>

使用 Amazon SNS 指定簡訊的偏好設定，例如如何最佳化交付 （用於成本或可靠交付）、每月花費限制、如何記錄訊息交付，以及是否訂閱每日簡訊用量報告。系統會擷取這些偏好設定，並將其設定為 Amazon SNS 的 SMS 屬性。

在此範例中，使用 Node.js 模組取得 Amazon SNS 中目前的 SMS 屬性。以檔名 `sns_getsmstype.js` 建立一個 Node.js 模組。依前述內容設定軟體開發套件。建立一個物件，其中包含用來取得簡訊屬性的參數，包括要擷取的個別屬性名稱。如需可用 SMS 屬性的詳細資訊，請參閱《Amazon Simple Notification Service API 參考》中的 [SetSMSAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetSMSAttributes.html)。

此範例會取得 `DefaultSMSType` 屬性，其可控制簡訊的傳送方式；`Promotional` 會將訊息交付最佳化以降低成本，而 `Transactional` 則會將訊息交付最佳化以達到最高的可靠性。接著，將參數傳遞至 `AWS.SNS` 用戶端類別的 `setTopicAttributes` 方法。若要呼叫 `getSMSAttributes`方法，請建立叫用 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)找到這個範本程式碼。

## 設定簡訊屬性
<a name="sending-sms-setattributes"></a>

在此範例中，使用 Node.js 模組取得 Amazon SNS 中目前的 SMS 屬性。以檔名 `sns_setsmstype.js` 建立一個 Node.js 模組。依前述內容設定軟體開發套件。建立一個物件，其中包含用來設定簡訊屬性的參數，包括要設定的個別屬性名稱，以及要為每個屬性設定的值。如需可用 SMS 屬性的詳細資訊，請參閱《Amazon Simple Notification Service API 參考》中的 [ SetSMSAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetSMSAttributes.html)。

此範例將 `DefaultSMSType` 屬性設為 `Transactional`，藉此將訊息交付最佳化為達成最高的可靠性。接著，將參數傳遞至 `AWS.SNS` 用戶端類別的 `setTopicAttributes` 方法。若要呼叫 `getSMSAttributes`方法，請建立叫用 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 模組來檢查電話號碼是否選擇不要接收簡訊。以檔名 `sns_checkphoneoptout.js` 建立一個 Node.js 模組。依前述內容設定軟體開發套件。建立一個物件，其中包含要以參數形式檢查的電話號碼。

此範例會設定 `PhoneNumber` 參數，藉此指定要檢查的電話號碼。接著，將物件傳遞至 `AWS.SNS` 用戶端類別的 `checkIfPhoneNumberIsOptedOut` 方法。若要呼叫 `checkIfPhoneNumberIsOptedOut`方法，請建立叫用 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 模組來取得選擇不要接收簡訊的電話號碼清單。以檔名 `sns_listnumbersoptedout.js` 建立一個 Node.js 模組。依前述內容設定軟體開發套件。建立空白物件做為參數。

接著，將物件傳遞至 `AWS.SNS` 用戶端類別的 `listPhoneNumbersOptedOut` 方法。若要呼叫 `listPhoneNumbersOptedOut`方法，請建立叫用 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)找到這個範本程式碼。

## 發佈簡訊
<a name="sending-sms-publishsms"></a>

在此範例中，Node.js 模組可用來傳送簡訊至電話號碼。以檔名 `sns_publishsms.js` 建立一個 Node.js 模組。依前述內容設定軟體開發套件。建立包含 `Message` 和 `PhoneNumber` 參數的物件。

當您傳送簡訊時，請指定使用 E.164 格式的電話號碼。E。164 是電話號碼結構的標準，用於國際電信通訊。遵照此格式的電話號碼可以有 15 位數的上限限制，前面加上加號 (\+) 字元和國碼。例如，E.164 格式的美國電話號碼顯示為 \+1001XXX5550100。

此範例會設定 `PhoneNumber` 參數，藉此指定要傳送訊息的電話號碼。接著，將物件傳遞至 `AWS.SNS` 用戶端類別的 `publish` 方法。若要呼叫 `publish`方法，請建立叫用 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)找到這個範本程式碼。