

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

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

您可以通过提供文本在任何调用分支上播放语音。您可以输入纯文本或语音合成标记语言 (SSML)。SSML 可以通过添加暂停、强调某些单词或更改说话风格等，更好地控制 Amazon Chime SDK 生成语音的方式。

亚马逊 Chime 软件开发工具包使用 Amazon Polly 服务进行转换。 text-to-speechAmazon 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 机器学习和人工智能服务的特定条款。

**Topics**
+ [使用 Speak action](#speak-action)
+ [处理 ACTION\$1SUCCESSFUL events](#speak-action-success)
+ [处理 ACTION\$1FAILED events](#speak-action-fail)
+ [程序流程](#speak-flow)

## 使用 Speak action
<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 函数调用的 `CallDetails` 中参与者的 `CallId`  
*允许的值* — 有效的调用 ID  
*必填* — 是  
*默认值* – 无

**Text**  
*描述* — 指定要合成语音的输入文本。如果指定 `ssml` 为 `TextType`，按照 SSML 格式输入文本。  
*允许的值* — 字符串  
*必填* — 是  
*默认值* – 无

**Engine**  
*描述* — 指定在处理语音合成文本时使用的引擎：标准引擎或神经引擎。  
*允许的值* — standard \$1 neural  
*必填* — 否  
*默认值*：标准

**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 text  
*必填* — 否  
*默认值* – 无

**VoiceId**  
*描述* — 指定要使用的语音的 ID。  
*允许的值* — [Amazon Polly 语音 IDs](https://docs.aws.amazon.com/polly/latest/dg/API_SynthesizeSpeech.html#polly-SynthesizeSpeech-request-VoiceId)  
*必填* — 否  
*默认值* — Joanna

## 处理 ACTION\$1SUCCESSFUL events
<a name="speak-action-success"></a>

以下示例显示了使用 Amazon Polly 的 `Joanna` 声音将文本“Hello World”合成英语语音操作的典型 `ACTION_SUCCESSFUL` 事件。

```
{
    "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 events
<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` 操作引发的错误消息。


| 错误 | 消息 | Reason | 
| --- | --- | --- | 
| `AccessDenied` | `AWSServiceRoleForAmazonChimeVoiceConnector` 服务相关角色配置不正确。 | 用于向 Amazon Polly 发出请求的服务关联角色不存在或缺少权限。要解决这一问题，请参阅 [使用 Amazon Chime SDK 语音连接器服务相关角色](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://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_cn/chime-sdk/latest/dg/images/Speak1.png)


**在图中**  
调用者使用软件电话输入注册到 SIP 媒体应用程序的号码。应用程序使用 SIP `INVITE` 法并向调用者发送 `Trying (100)` 响应。这表明下一跳服务器收到了调用请求。然后，SIP 应用程序使用 `INVITE` 联系终端节点。建立连接后，应用程序会向调用者发送 `Ringing (180)` 响应，并开始发出警报。

然后，SIP 媒体应用程序向 Lambda 函数发送 `NEW_INBOUND_CALL` 事件，Lambda 函数以包含调用者 ID 和要转换为语音的文本的 `Speak` 操作进行响应。然后，SIP 应用程序发送 `200 (OK)` 响应，表示调用已应答。该协议还启用媒体。

如果 `Speak` 操作成功并将文本转换为语音，则它会向 SIP 媒体应用程序返回一个 `ACTION_SUCCESSFUL` 事件，而该应用程序会返回下一组操作。如果操作失败，SIP 媒体应用程序会向 Lambda 函数发送 `ACTION_FAILED` 事件，而 Lambda 函数会以一组 `Hangup` 操作进行响应。应用程序挂断调用者并向 Lambda 函数返回 `HANGUP` 事件，而该函数不会执行任何进一步操作。



下图显示了为被调用者启用 `Speak` 操作的程序流程。

![\[显示为被调用者启用 Speak 操作的程序流程的图表。您可以在任何桥接调用中执行此操作。\]](http://docs.aws.amazon.com/zh_cn/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 应用程序会向 Lambda 函数发送 [CallAndBridge](call-and-bridge.md) 操作的 `ACTION_SUCCESSFUL` 事件。然后，该函数将 Speak 操作和数据返回给 SIP 应用程序，后者会转换 