

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

# Speak
<a name="speak"></a>

您可以透過提供文字，在任何通話腿部播放語音。您可以使用純文字或語音合成標記語言 (SSML)。SSML 可透過新增暫停、強調特定單字或變更說話風格，進一步控制 Amazon Chime SDK 如何產生語音。

Amazon Chime SDK 使用 Amazon Polly 服務將text-to-speech。Amazon Polly 可讓您選擇標準或神經引擎，以提升語音品質。Amazon Polly 支援超過 20 種語言和 60 種語音，以自訂應用程式的使用者體驗。Amazon Chime SDK 免費提供語音功能，但您需付費使用 Amazon Polly。如需定價資訊，請參閱 Amazon Polly [定價頁面](https://aws.amazon.com/polly/pricing/)或帳單儀表板。

**重要**  
使用 Amazon Polly 受 [ AWS 服務條款 ](https://aws.amazon.com/service-terms/)的約束，包括 AWS Machine Learning 和人工智慧服務的特定條款。

**Topics**
+ [使用 Speak動作](#speak-action)
+ [處理ACTION\$1SUCCESSFUL事件](#speak-action-success)
+ [處理ACTION\$1FAILED事件](#speak-action-fail)
+ [程式流程](#speak-flow)

## 使用 Speak動作
<a name="speak-action"></a>

下列範例顯示 `Speak`動作的典型使用方式。

```
{
    "SchemaVersion": "1.0",
    "Actions":[
        {
            "Type": "Speak",
            "Parameters": {
                "Text": "Hello, World!",        // required
                "CallId": "call-id-1",          // required
                "Engine": "neural",             // optional. Defaults to standard
                "LanguageCode": "en-US",        // optional
                "TextType": "text",             // optional
                "VoiceId": "Joanna"             // optional. Defaults to Joanna
            }
        }
    ]
}
```

**CallId**  
*描述* – Lambda 函數調用 `CallId` 中的參與者`CallDetails`的  
*允許的值* – 有效的呼叫 ID  
*必要* – 是  
*預設值* — 無

**Text**  
*描述* – 指定要合成為語音的輸入文字。如果您將 指定`ssml`為 `TextType`，請遵循輸入文字的 SSML 格式。  
*允許的值* – 字串  
*必要* – 是  
*預設值* — 無

**Engine**  
*描述* – 指定處理語音合成文字時要使用的引擎 - 標準或神經。  
*允許的值* – 標準 \$1 神經  
*必要* – 否  
*預設值* – 標準

**LanguageCode**  
*描述* – 指定語言代碼。只有在使用雙語語音時才需要。如果您使用不含語言代碼的雙語語音，則會使用雙語語音的預設語言。  
*允許的值* – [ Amazon Polly 語言代碼](https://docs.aws.amazon.com/polly/latest/dg/API_SynthesizeSpeech.html#polly-SynthesizeSpeech-request-LanguageCode)  
*必要* – 否  
*預設值* — 無

**TextType**  
*描述* – 指定輸入文字、純文字或 SSML 的類型。如果未指定輸入類型，則會使用純文字做為預設值。如需 SSML 的詳細資訊，請參閱《*Amazon Polly 開發人員指南*》中的[從 SSML 文件產生語音](https://docs.aws.amazon.com/polly/latest/dg/ssml.html)。  
*允許的值* – ssml \$1 文字  
*必要* – 否  
*預設值* — 無

**VoiceId**  
*描述* – 指定您要使用的語音 ID。  
*允許的值* – [Amazon Polly IDs](https://docs.aws.amazon.com/polly/latest/dg/API_SynthesizeSpeech.html#polly-SynthesizeSpeech-request-VoiceId)  
*必要* – 否  
*預設值* – Joanna

## 處理ACTION\$1SUCCESSFUL事件
<a name="speak-action-success"></a>

以下範例顯示動作的典型`ACTION_SUCCESSFUL`事件，該動作使用 Amazon Polly 的`Joanna`語音，將文字 "Hello World" 合成為英文語音。

```
{
    "SchemaVersion": "1.0",
    "Sequence": 3,
    "InvocationEventType": "ACTION_SUCCESSFUL",
    "ActionData": {
       "Type": "Speak",
       "Parameters": {
          "CallId": "call-id-1",          
          "Engine":  "neural",             
          "LanguageCode":  "en-US",        
          "Text": "Hello World",          
          "TextType":  "text",             
          "VoiceId":  "Joanna"        
       }
    },
    "CallDetails":{       
       ...
    }
}
```

## 處理ACTION\$1FAILED事件
<a name="speak-action-fail"></a>

下列範例顯示與上一個範例中使用之相同`ACTION_FAILED`事件的典型事件。

```
{
    "SchemaVersion": "1.0",
    "Sequence":2,
    "InvocationEventType": "ACTION_FAILED",
    "ActionData":{
       "Type": "Speak",
       "Parameters": {
          "CallId": "call-id-1",          
          "Engine":  "neural",             
          "LanguageCode":  "en-US",        
          "Text": "Hello  World",          
          "TextType":  "text",             
          "VoiceId":  "Joanna"        
       },
       "ErrorType": "SystemException",
       "ErrorMessage": "System error while running  action"
    },
    "CallDetails":{       
       ...
    }
}
```

**錯誤處理**  
此資料表會列出並描述 `Speak`動作擲回的錯誤訊息。


| 錯誤 | 訊息 | 原因 | 
| --- | --- | --- | 
| `AccessDenied` | `AWSServiceRoleForAmazonChimeVoiceConnector` 服務連結角色未正確設定。 | 用於向 Amazon Polly 提出請求的服務連結角色不存在或缺少許可。若要解決此問題，請參閱 [使用 Amazon Chime SDK Voice Connector 服務連結角色](speak-and-get-digits.md#speak-digits-policy)一節中的步驟 | 
| `InvalidActionParameter` |   | 驗證動作參數時發生錯誤。如需參數的詳細資訊，請參閱《*Amazon Polly 開發人員指南*》中的 [SynthesizeSpeech API](https://docs.aws.amazon.com/polly/latest/dg/API_SynthesizeSpeech)。 | 
| ActionExecutionThrottled | Amazon Polly 正在調節合成語音的請求。 | 對 Amazon Polly 的請求會傳回限流例外狀況。如需 Amazon Polly 限流限制的詳細資訊，請參閱 [ https：//https://docs.aws.amazon.com/polly/latest/dg/limits.html\$1limits-throttle。 ](https://docs.aws.amazon.com/polly/latest/dg/limits.html#limits-throttle) | 
| `MissingRequiredActionParameter` | `Text` 是必要的參數。 | 有動作參數必須具有 `Text`值 | 
| `MissingRequiredActionParameter` | `Text` 限制為 1，000 個字元 | 文字超過字元限制。 | 
| `SystemException` | 執行動作時發生系統錯誤。 | 執行 動作時發生系統錯誤。 | 

## 程式流程
<a name="speak-flow"></a>

下圖顯示為發起人啟用 `Speak`動作的程式流程。在此範例中，來電者聽到的文字 

![\[圖表顯示啟用呼叫者Speak動作的程式流程。\]](http://docs.aws.amazon.com/zh_tw/chime-sdk/latest/dg/images/Speak1.png)


**在圖表中**  
使用軟體電話，來電者輸入已註冊至 SIP 媒體應用程式的號碼。應用程式使用 SIP `INVITE`方法，並傳送`Trying (100)`回應給呼叫者。這表示下一躍點伺服器收到呼叫請求。然後， SIP 應用程式會使用 `INVITE`來聯絡端點。建立連線後，應用程式會傳送`Ringing (180)`回應給發起人，並開始提醒。

然後，SIP 媒體應用程式會將`NEW_INBOUND_CALL`事件傳送至 Lambda 函數，該函數會回應包含呼叫者 ID 和您要轉換為語音的文字`Speak`的動作。然後，SIP 應用程式會傳送`200 (OK)`回應，指出已接聽通話。通訊協定也會啟用媒體。

如果`Speak`動作成功並將文字轉換為語音，則會將`ACTION_SUCCESSFUL`事件傳回 SIP 媒體應用程式，並傳回下一組動作。如果動作失敗，SIP 媒體應用程式會將`ACTION_FAILED`事件傳送至 Lambda 函數，該函數會以一組`Hangup`動作回應。應用程式掛斷呼叫者，並將`HANGUP`事件傳回 Lambda 函數，而該函數不會採取進一步的動作。



下圖顯示 程式流程，而不是 啟用受話方`Speak`的動作。

![\[圖表顯示啟用受話方Speak動作的程式流程。您可以在任何橋接通話上執行此操作。\]](http://docs.aws.amazon.com/zh_tw/chime-sdk/latest/dg/images/Speak2.png)


**在圖表中**  
呼叫者輸入已註冊至 SIP 媒體應用程式的號碼，應用程式會如上圖所述回應。當 Lambda 函數收到`NEW_INBOUND_CALL`事件時，它會將[CallAndBridge](call-and-bridge.md)動作傳回 SIP 應用程式。然後，應用程式會使用 SIP `INVITE`方法將 `Trying (100)`和 `Ringing (180)`回應傳送給受話方。

如果受話方接聽，SIP 媒體應用程式會接收`200 (OK)`回應，並傳送相同的回應給來電者。這會建立媒體，而 SIP 應用程式會將[CallAndBridge](call-and-bridge.md)動作`ACTION_SUCCESSFUL`的事件傳送至 Lambda 函數。然後， 函數會將 Speak 動作和資料傳回至 SIP 應用程式，該應用程式會轉換 