

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

# StartBotConversation
<a name="start-bot-conversation"></a>

`StartBotConversation` 操作可在最终用户和您的 Amazon Lex v2 机器人之间建立语音对话。用户向机器人提供所需的信息。然后，机器人将信息返回到公共交换电话网 (PSTN) Audio Lambda 函数，然后该函数执行请求的任务。

例如，机器人可以在对话开始时播放欢迎消息（可选），以简要描述 PSTN Audio Lambda 函数可以执行的任务。对话在用户和机器人之间来回进行，直到机器人收集到所需的信息。对话结束后，Amazon Chime SDK 会通过操作成功事件调用您的 PSTN Audio Lambda 函数，该事件包含机器人收集的信息。您的 PSTN Audio Lambda 函数会处理信息并执行请求的任务。

音频服务为您的用户提供逼真的对话互动。例如，用户可以在音频提示结束之前打断机器人并回答问题。此外，用户还可以使用语音和 DTMF 数字的任意组合来提供信息。机器人会等待用户提供输入后再做出响应。您可以配置机器人等待用户完成讲话后多久开始解释任何语音输入。用户还可以指示机器人在通话期间需要时间来检索其他信息（例如信用卡号）时等待。

在机器人对话期间，`StartBotConversation` 操作使用 Amazon Lex 和 Amazon Polly。适用 Amazon Lex 和 Amazon Polly 的标准费用。有关更多定价信息，请参阅 [Amazon Lex 流传输对话定价](https://aws.amazon.com/lex/pricing/)和 [Amazon Polly 定价](https://aws.amazon.com/polly/pricing/)页面。

**注意**  
您无法对桥接呼叫或已加入 Amazon Chime SDK 会议的呼叫执行此操作。

**重要**  
使用 Amazon Lex 和 Amazon Polly 须遵守[AWS 服务条款](https://aws.amazon.com/service-terms/)，包括 AWS 机器学习和人工智能服务的特定条款。

**Topics**
+ [StartBotConversation 语法](#startbot-syntax)
+ [使用 StartBotConversation 操作](#using-startbot)
+ [处理 ACTION\$1SUCCESSFUL 事件](#bot-action-success)
+ [处理 ACTION\$1FAILED 事件](#bot-action-fail)
+ [授予使用机器人的权限](#bot-permissions)
+ [配置语音和 DTMF 超时](#bot-timeouts)
+ [在对话期间使用 DTMF 输入](#bot-dtmf)
+ [账单和服务限额](#bot-billing)

## StartBotConversation 语法
<a name="startbot-syntax"></a>

以下示例显示典型 `StartBotConversation` 语法。

```
{
  "SchemaVersion": "1.0",
  "Actions":[
    {
      "Type": "StartBotConversation",
      "Parameters": {
        "CallId": "string",
        "ParticipantTag": "string",
        "BotAliasArn": "string",
        "LocaleId": "string",
        "Configuration": {
          "SessionState": {
             "SessionAttributes": {
                "string": "string" 
             },
             "DialogAction" : {
               "Type": "string"
             }
          },
          "WelcomeMessages": [
            {
              "Content": "string",
              "ContentType": "string" 
            }
          ]
        }
      }
    }
  ]
}
```

**CallId**  
*描述*- AWS Lambda 函数调用中`CallDetails`参与者的描述。`CallID``StartBotConversation` 操作使用此 ID 作为机器人的 `SessionId`。呼叫中发生的所有机器人对话共享相同的对话会话。您可以使用 [Amazon Lex PutSession](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_PutSession.html) API 修改用户和机器人之间的会话状态。有关更多信息，请参阅 *Amazon Lex 开发人员指南*中的[使用 Amazon Lex v2 API 管理会话](https://docs.aws.amazon.com/lexv2/latest/dg/using-sessions.html)。  
*允许的值* — 有效的调用 ID。  
*必填* — 否，如 `ParticipantTag` 已存在。  
*默认值* — 无。

**ParticipantTag**  
*描述* — `CallDetails` 中一个已连接参与者的 `ParticipantTag`。  
*允许的值* — `LEG-A`  
*必填* — 否，如 `CallId` 已存在。  
*默认值* — 被调用的 `callLeg` 的 `ParticipantTag`。如果您指定 `CallDetails`，则忽略该值。

**BotAliasArn**  
*描述* — 您的 Lex 机器人的机器人别名 ARN。您必须在与您的 PSTN Audio 应用程序相同的 AWS 区域创建机器人。有效的 Amazon Lex 机器人别名采用以下格式：`arn:aws:lex:region:awsAccountId:bot-alias/botId/botAliasId`，其中，*`region`* 是您的机器人所在的 AWS 区域。`awsAccountId` 是创建您的 Amazon Lex 机器人时使用的 AWS 账户 ID。`botId` 值是您在创建机器人时为该机器人指定的标识符。您可以在 Amazon Lex 控制台的**机器人详情**页面上查看该机器人 ID。`botAliasId` 是您在创建机器人时为该机器人别名指定的标识符。您可以在 Amazon Lex 控制台的**别名**页面上查看该机器人别名 ID。  
*允许的值* — 有效的机器人 ARN。  
*必填* — 是。  
*默认值* — 无

**LocaleId**  
*描述* — 用于机器人的区域设置的标识符。有关区域设置和语言代码的列表，请参阅 [Amazon Lex 支持的语言和区域设置](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html)。  
*允许的值* — [Amazon Lex 支持的语言和区域设置](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html)  
*必填* — 否。  
*默认值* — `en_US`

**Configuration**  
*描述* — 对话配置，包括会话状态和欢迎消息。`Configuration` 对象的 JSON 字符串表示形式总大小限制为 10KB。  
*允许的值* —`Configuration` 对象。  
*必填* — 否。  
*默认值* — 无。

**Configuration.SessionState**  
*描述* — 用户与 Amazon Lex V2 的会话状态。  
*允许的值* —`SessionState` 对象。  
*必填* — 否。  
*默认值* — 无。

**Configuration.SessionState.SessionAttributes**  
*描述*-表示会话特定上下文信息的 key/value 配对映射。该映射包含在 Amazon Lex v2 与客户端应用程序之间传递的应用程序信息。  
*允许的值* — 字符串到字符串的映射。  
*必填* — 否。  
*默认值* — 无。

**Configuration.SessionState.DialogAction.Type**  
*描述* — 机器人与用户交互时采取的下一步操作。可能的值：  
+ *委托* Amazon Lex v2 决定下一步操作。
+ *ElicitIntent*下一个操作会引起用户的意图。
*允许的值* — `Delegate` \$1 `ElicitIntent`。  
*必填* — 否。  
*默认值* — 无。

**Configuration.WelcomeMessages**  
*描述* — 对话开始时要发送给用户的消息列表。如果设置了 `welcomeMessage` 字段，则必须将 `DialogAction.Type` 值设置为 `ElicitIntent`。  
*允许的值* — 消息对象  
*必填* — 否。  
*默认值* — 无。

**Configuration.WelcomeMessages.Content**  
*描述* — 欢迎消息文本。  
*允许的值* — 字符串  
*必填* — 否。  
*默认值* — 无。

**Configuration.WelcomeMessages.ContentType**  
*描述* — 表示欢迎消息类型。  
*允许的值* — ` PlainText` \$1 `SSML`  
+ *PlainText*— 该消息包含纯文本 UTF-8 文本。
+ *SSML* — 消息包含语音输出设置格式的文本。
*必填* — 是。  
*默认值* — 无。

## 使用 StartBotConversation 操作
<a name="using-startbot"></a>

以下示例显示典型的 `StartBotConversation` 操作。

```
{
  "SchemaVersion": "1.0",
  "Actions":[
    {
      "Type": "StartBotConversation",
      "Parameters": {
        "CallId": "call-id-1",
        "BotAliasArn": "arn:aws:lex:us-east-1:123456789012:bot-alias/ABCDEFGHIH/MNOPQRSTUV",
        "LocaleId": "en_US",
        "Configuration": {
          "SessionState": {
             "SessionAttributes": {
                "mykey1": "myvalue1" 
             },
             "DialogAction" : {
               "Type": "ElicitIntent"
             }
          },
          "WelcomeMessages": [
            {
              "Content": "Welcome. How can I help you?",
              "ContentType": "PlainText" 
            }
          ]
        }
      }
    }
  ]
}
```

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

以下示例显示 `StartBotConversation` 操作的典型 `ACTION_SUCCESSFUL` 事件。

```
{
    "SchemaVersion": "1.0",
    "Sequence": number,
    "InvocationEventType": "ACTION_SUCCESSFUL",
    "ActionData":
    {
        "CallId": "string",
        "Type": "StartBotConversation",
        "Parameters": {
            // parameters provided in the StartBotConversation action.
        },
        "CallDetails": {
            // Information about the call associated with the AWS Lambda invocation.
        },
        "IntentResult": {
            "SessionId": "string",
            "SessionState": {
                "SessionAttributes": {
                    "string": "string"
                },
                "Intent": {
                    "Name": "string",
                    "Slots":  {
                        "string": {
                            "Value": {
                                "OriginalValue": "string",
                                "InterpretedValue": "string",
                                "ResolvedValues": ["string"]
                            },
                            "Values": []
                        }
                    },
                    "State": "string",
                    "ConfirmationState": "string"
                }
            },
            "Interpretations": [
                {
                    "NluConfidence": {
                        "Score": number
                    },
                    "Intent": {
                        "Name": "string",
                        "Slots": {
                            "string": {
                                "Value": {
                                    "OriginalValue": "string",
                                    "InterpretedValue": "string",
                                    "ResolvedValues": ["string"]
                                },
                                "Values": []
                            }
                        },
                        "State": "string",
                        "ConfirmationState": "string"
                    }
                }
            ]
        }
    }
}
```

**IntentResult**  
用户与机器人之间对话的结果。

**SessionId**  
机器人对话会话的标识符。用户启动与您的机器人的对话时，Amazon Lex 会创建一个会话。会话封装了您的用户和机器人之间交换的信息。`StartBotConversation` 操作使用此调用 ID 作为机器人的 `SessionId`。您可以使用 Lex [https://docs.aws.amazon.com/lexv2/latest/dg/API_runtime_PutSession.html](https://docs.aws.amazon.com/lexv2/latest/dg/API_runtime_PutSession.html) API 修改用户和机器人之间的会话状态。有关更多信息，请参阅 *Amazon Lex 开发人员指南*中的[使用 Amazon Lex v2 API 管理会话](https://docs.aws.amazon.com/lexv2/latest/dg/using-sessions.html)。

**SessionState**  
用户的 Amazon Lex V2 会话的状态。

**SessionState.SessionAttributes**  
表示会话特定上下文信息的 key/value 配对映射。该映射包含在您的机器人所附的 Lambda 函数和 PSTN Audio Lambda 函数之间传递的机器人对话信息。

**解释**  
由 Amazon Lex 得出的可能满足客户言论的意图清单。`NluConfidence` 得分最高的意图变为意图 `SessionState`。

**解释。 NluConfidence.Score**  
表示 Amazon Lex v2 对意图满足用户意图的置信度的分数。范围介于 0.00 和 1.00 之间。分数越高，置信度越高。

**Intent**  
用户要执行的操作。

**Intent.Name**  
意图的名称。

**Intent.Slots**  
意图中所有插槽的映射。插槽的名称映射于该插槽的值。如果某个插槽尚未填满，则该值为 null。

**Intent.Slots.Value**  
插槽的值。

**Intent.Slots.Values**  
用户为插槽提供的一或多个值的列表。

**Intent.Slots.Value.OriginalValue**  
为该插槽输入的用户回复文本。

**Intent.Slots.Value.InterpretedValue**  
*描述* — Amazon Lex v2 为该插槽确定的值。实际值取决于机器人的值选择策略设置。您可以选择使用用户输入的值，也可以让 Amazon Lex v2 选择 `resolvedValues` 列表中的第一个值。

**Intent.Slots.Value.ResolvedValues**  
Amazon Lex v2 识别的该插槽的其他值列表。

**Intent.State**  
*描述* — 意图的实现信息。可能的值：  
+ `Failed` — Lambda 函数未能实现意图。
+ `Fulfilled` — Lambda 函数已实现意图。
+ `ReadyForFulfillment` — 存在意图信息，且您的 Lambda 函数已可以实现意图。

**Intent.ConfirmationState**  
*描述* — 表示意图的确认。可能的值：  
+ *已确认* — 意图已实现。
+ *已拒绝* — 用户对确认提示响应“否”。
+ *否* — 不提示用户进行确认；或者系统已提示用户，但用户未确认也未拒绝提示。

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

以下示例显示 `StartBotConversation` 操作的典型 `ACTION_FAILED` 事件。

```
{
    "SchemaVersion": "1.0",
    "Sequence": number,
    "InvocationEventType": "ACTION_FAILED",
    "ActionData":{
        "CallId": "string",
        "Type": "StartBotConversation",
        "Parameters": {
            // parameters provided in the StartBotConversation action
        },
        "ErrorType": "string",
        "ErrorMessage": "string"
    },
    "CallDetails":{
    }
}
```

**ErrorType**  
唯一标识错误条件的字符串。

**ErrorMessage**  
错误条件的一般描述。

### 错误代码
<a name="action-errors"></a>

下表列出了 Lambda 函数在 `ACTION_FAILED` 事件中可能返回的错误消息。


| 错误 | 说明 | 
| --- | --- | 
|  `InvalidActionParameter` | 一个或多个操作参数无效。错误消息描述无效参数。 | 
| `SystemException` | 运行操作时出现系统错误。 | 
| `ResourceNotFound` | 未找到指定机器人。 | 
| `ResourceAccessDenied` | 对存储桶的访问被拒绝。 | 
| `ActionExecutionThrottled` | 已超出机器人对话服务限制。错误消息描述特定服务限制已超出。 | 

## 授予使用机器人的权限
<a name="bot-permissions"></a>

以下示例授予亚马逊 Chime 软件开发工具包调用 Amazon Lex 的权限。[https://docs.aws.amazon.com/lexv2/latest/dg/API_runtime_StartConversation.html](https://docs.aws.amazon.com/lexv2/latest/dg/API_runtime_StartConversation.html) APIs您必须明确授予音频服务使用您的机器人的权限。服务主体必须使用条件数据块。条件数据块必须使用全局上下文键 `AWS:SourceAccount` 和 `AWS:SourceArn`。`AWS:SourceAccount` 是您的 AWS 账户 ID。`AWS:SourceArn` 是调用 Lex 机器人的 PSTN 音频应用程序的资源 ARN。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowChimePstnAudioUseBot",
      "Effect": "Allow",
      "Principal": {
        "Service": "voiceconnector.chime.amazonaws.com"
      },
      "Action": "lex:StartConversation",
  "Resource": "arn:aws:lex:us-east-1:123456789012:bot-alias/botId/aliasId",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "123456789012"
        },
        "ArnEquals": {
        "AWS:SourceArn": "arn:aws:chime:us-east-1:123456789012:sma/smaId"
        }
      }
    }
  ]
}
```

------

## 配置语音和 DTMF 超时
<a name="bot-timeouts"></a>

在捕获用户输入时，您可以配置语音和 DTMF 超时。您还可以在开始与机器人对话时通过会话属性配置超时，并在必要时在 Lambda 函数中将其覆盖。Amazon Lex 可以为意图或机器人设置多个插槽。由于您可以指定会话属性应用于意图和时隙级别，因此可以指定仅在收集特定类型的输入时设置该属性。例如，您可以在收集账号时指定比收集日期时更长的超时。您可以在会话属性键中使用通配符。

例如，要将所有意图的所有插槽的语音超时设置为 4000 毫秒，您可以使用 `x-amz-lex:start-timeout-ms:*:*` 作为会话属性名称和 `4000` 作为会话属性值来提供会话属性。有关更多信息，请参阅 *Amazon Lex 开发人员指南*中的[配置捕获用户输入的超时时间](https://docs.aws.amazon.com/lexv2/latest/dg/session-attribs-speech.htm)。

## 在对话期间使用 DTMF 输入
<a name="bot-dtmf"></a>

Amazon Lex 机器人支持对话期间的语音和键盘输入。机器人将键盘输入解释为 DTMF 数字。您可以使用井号键 (＃) 提示联系人结束输入，并使用星号键 (\$1) 取消会话。如果您未提示客户使用井号键结束输入，Lex 将在其他按键操作 5 秒钟后停止等待。

## 账单和服务限额
<a name="bot-billing"></a>

AWS 向您收取以下费用：
+ Amazon Chime SDK 用于呼叫的使用量。有关更多信息，请参阅 [Amazon Chime SDK 定价](https://aws.amazon.com/chime/chime-sdk/pricing/)。
+ Amazon Lex 用于解释用户语音的使用量。有关更多信息，请参阅 [Amazon Lex 流传输对话定价](https://aws.amazon.com/lex/pricing/)。
+ Amazon Polly 用于合成机器人文本回复的使用量。有关更多信息，请参阅 [Amazon Polly 定价](https://aws.amazon.com/polly/pricing/)。

此外，您还需要了解以下服务限额：
+ 对于您可以通过 PSTN 音频 [StartBotConversation](#start-bot-conversation) 操作来使用的 Amazon Lex 机器人的最大数量，Amazon Chime SDK 设有服务限额。有关更多信息，请参阅《AWS 一般参考》**中的 [SIP 中继和语音限额](https://docs.aws.amazon.com/general/latest/gr/chime-sdk.html#chm-sdk-pstn-quotas)。
+ Amazon Lex 对每个 Lex 机器人的最大并发语音对话数都有服务限额。如需增加限额，您可以联系 Amazon Lex 服务团队。有关更多信息，请参阅 *Amazon Lex 开发人员指南*中的 Amazon Lex [指南和限额](https://docs.aws.amazon.com/lexv2/latest/dg/quotas.html)。
+ Amazon Polly 具有用于合成文本响应的服务限额。如需增加限额，您可以联系 Amazon Polly 服务团队。有关 Amazon Polly 服务限额的更多信息，请参阅 *Amazon Polly 开发人员指南*中的 [Amazon Polly 中的限额](https://docs.aws.amazon.com/polly/latest/dg/limits.html)。