

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

# 使用 AWS 最終使用者簡訊簡訊傳送簡訊或語音訊息的範例
<a name="send-sms-voice-message"></a>

您可以使用 AWS 最終使用者傳訊簡訊 API，直接從應用程式傳送訊息。交易訊息是您傳送給特定收件人的訊息。

本節包含傳送 [SMS 訊息](#sms-voice-v2-messages-sms)和[語音訊息](#sms-voice-v2-messages-voice)的程式碼範例。

**重要**  
若要使用共用資源，您必須使用完整的 Amazon Resource Name (ARN)。

**Topics**
+ [使用 AWS 最終使用者簡訊簡訊傳送簡訊](#sms-voice-v2-messages-sms)
+ [使用 AWS 最終使用者簡訊簡訊傳送語音訊息](#sms-voice-v2-messages-voice)

## 使用 AWS 最終使用者簡訊簡訊傳送簡訊
<a name="sms-voice-v2-messages-sms"></a>

如果您使用的是共用資源，則必須使用資源的完整 Amazon Resource Name (ARN)。您可以利用以下程式碼範例，使用 適用於 Python (Boto3) 的 AWS SDK傳送 SMS 訊息。

```
import boto3
from botocore.exceptions import ClientError


def send_sms_message(sms_voice_v2_client, configuration_set, context_keys,
                     country_parameters, destination_number, dry_run, keyword,
                     max_price, message_body, message_type, origination_number,
                     ttl):
    try:
        response = sms_voice_v2_client.send_text_message(
            ConfigurationSetName=configuration_set,
            Context=context_keys,
            DestinationCountryParameters=country_parameters,
            DestinationPhoneNumber=destination_number,
            DryRun=dry_run,
            Keyword=keyword,
            MaxPrice=max_price,
            MessageBody=message_body,
            MessageType=message_type,
            OriginationIdentity=origination_number,
            TimeToLive=ttl
        )

    except ClientError as e:
        print(e.response)
    else:
        return response['MessageId']


def main():
    configuration_set = "MyConfigurationSet"
    context_keys = {"key1": "value1"}
    country_parameters = {
        "IN_TEMPLATE_ID": "TEMPLATE01234",
        "IN_ENTITY_ID": "ENTITY98765"
    }
    destination_number = "+14255550168"
    dry_run = False
    keyword = "MyKeyword"
    max_price = "2.00"
    message_body = ("This is a test message sent from AWS End User Messaging SMS "
                    "using the AWS SDK for Python (Boto3). ")
    message_type = "TRANSACTIONAL"
    origination_number = "+12065550183"
    ttl = 120

    print(
        f"Sending text message to {destination_number}.")

    message_id = send_sms_message(
        boto3.client('pinpoint-sms-voice-v2'), configuration_set, context_keys,
        country_parameters, destination_number, dry_run, keyword, max_price,
        message_body, message_type, origination_number, ttl)

    print(f"Message sent!\nMessage ID: {message_id}")


if __name__ == '__main__':
    main()
```

在上述程式碼範例中，對 `main()` 函數進行以下變更：
+ 將 `configuration_set` 的值，改成您要用於傳送此訊息的組態集的名稱或 Amazon Resource Name (ARN)。
+ 將 `context_keys` 的值，改成您在傳送此訊息時，要使用的金鑰和值。這些金鑰出現在與此訊息相關聯的事件記錄中。
+ 如果您使用已註冊寄件者 ID 向印度客戶傳送訊息，請將 `country_parameters` 值改成您在註冊寄件者 ID 時收到的註冊實體 ID 和範本 ID。
**重要**  
如果您不會將已註冊寄件者 ID 用於傳送訊息給印度客戶，請完全省略此參數。如果要省略此參數，也必須移除 `send_sms_message` 函數中對應此參數的那一行。
+ 將 `destination_number` 的值，改成訊息目的地的電話號碼。
+ 若要執行此操作而不傳送任何訊息，請將 `dry_run` 的值改成 `True`。
+ 將 `max_price` 的值改成，您為了傳送此訊息的每個訊息部分，願意支出的金額上限 (以美元為單位)。一個訊息部分最多包含 140 位元組的資訊。如需詳細資訊，請參閱[簡訊字元限制](sms-limitations-character.md)。
+ 變更 `message_body` 的值，加入您要傳送的訊息。訊息的長度上限，視訊息包含的字元而定。如需簡訊字元編碼的詳細資訊，請參閱 [簡訊字元限制](sms-limitations-character.md)。
+ 變更 `message_type` 的值，以代表適當的訊息類別。有效值包括 TRANSACTIONAL (適用於關鍵或有時效性的訊息) 和 PROMOTIONAL (適用於非關鍵或沒有時效性的訊息)。
+ 將 `origination_number` 的值，改成您要用於傳送訊息的電話號碼。電話號碼必須為 E.164 格式。
+ 將 的值變更為 AWS 最終使用者傳訊簡訊應嘗試傳遞訊息的時間`ttl`量，以秒為單位。您可以將 TTL 值設為最多 259200 秒 (72 小時)。

## 使用 AWS 最終使用者簡訊簡訊傳送語音訊息
<a name="sms-voice-v2-messages-voice"></a>

您可以利用以下程式碼範例，使用 適用於 Python (Boto3) 的 AWS SDK傳送語音訊息。

```
import boto3
from botocore.exceptions import ClientError


def send_voice_message(sms_voice_v2_client, configuration_set, context_keys,
                       destination_number, dry_run, max_price, message_body,
                       message_type, origination_number, ttl, voice_id):
    try:
        response = sms_voice_v2_client.send_voice_message(
            ConfigurationSetName=configuration_set,
            Context=context_keys,
            DestinationPhoneNumber=destination_number,
            DryRun=dry_run,
            MaxPricePerMinute=max_price,
            MessageBody=message_body,
            MessageBodyTextType=message_type,
            OriginationIdentity=origination_number,
            TimeToLive=ttl,
            VoiceId=voice_id
        )

    except ClientError as e:
        print(e.response)
    else:
        return response['MessageId']


def main():
    configuration_set = "MyConfigurationSet"
    context_keys = {"key1":"value1"}
    destination_number = "+12065550123"
    dry_run = False
    max_price = "2.00"
    message_body = (
        "<speak>"
        "This is a test message sent from <emphasis>AWS End User Messaging SMS</emphasis>"
        "using the <break strength='weak'/> 適用於 Python (Boto3) 的 AWS SDK. "
        "<amazon:effect phonation='soft'>Thank you for listening."
        "</amazon:effect>"
        "</speak>")
    message_type = "SSML"
    origination_number = "+18445550142"
    ttl = 120
    voice_id = "MATTHEW"

    print(
        f"Sending voice message with AWS End User Messaging SMS from {origination_number} to {destination_number}.")

    message_id = send_voice_message(
        boto3.client('pinpoint-sms-voice-v2'), configuration_set, context_keys,
        destination_number, dry_run, max_price, message_body, message_type,
        origination_number, ttl, voice_id)

    print(f"Message sent!\nMessage ID: {message_id}")


if __name__ == '__main__':
    main()
```

在上述程式碼範例中，對 `main()` 函數進行以下變更：
+ 將 `configuration_set` 的值，改成您要用於傳送此訊息的組態集的名稱或 Amazon Resource Name (ARN)。
+ 將 `context_keys` 的值，改成您在傳送此訊息時，要使用的金鑰和值。這些金鑰出現在與此訊息相關聯的事件記錄中。
+ 將 `destination_number` 的值，改成訊息目的地的電話號碼。
+ 將 `max_price` 的值改成，您為了傳送此訊息，每分鐘願意支出的金額上限。
+ 變更 `message_body` 的值，加入您要傳送的訊息。訊息最多可包含 6,000 個字元。
+ 若要使用純文字指令碼 (而不是 SSML 格式的命令碼)，請將 `message_type` 的值改成 `TEXT`。
+ 將 `origination_number` 的值，改成您要用於傳送訊息的電話號碼。電話號碼必須為 E.164 格式。
+ 若要執行此操作而不傳送任何訊息，請將 `dry_run` 的值改成 `True`。
+ 將 的值變更為 AWS 最終使用者傳訊簡訊應嘗試傳遞訊息的時間`ttl`量，以秒為單位。您可以將 TTL 值設為最多 259200 秒 (72 小時)。
+ 將 `MATTHEW` 替換成您要用於傳送訊息的 Amazon Polly 語音的名稱。如需支援語音的完整清單，請參閱 *SMS 和語音第 2 版 API 參考*中的 [SendVoiceMessage](https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_SendVoiceMessage.html#pinpoint-SendVoiceMessage-request-VoiceId)。如果您未指定語音，則會使用 "MATTHEW" 語音傳送訊息。