

终止支持通知：2025年9月15日， AWS 我们将停止对Amazon Lex V1的支持。2025 年 9 月 15 日之后，您将无法再访问 Amazon Lex V1 控制台或 Amazon Lex V1 资源。如果您使用的是 Amazon Lex V2，请改为参阅 [Amazon Lex V2 指南](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html)。

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

# 步骤 2a (可选)：查看语音信息流的详细信息 (控制台)
<a name="gs-bp-details-postcontent-flow"></a>

本节介绍在客户使用语音发送请求时客户端与 Amazon Lex 之间的信息流。有关更多信息，请参阅 [PostContent](API_runtime_PostContent.md)。

1. 用户说：我想要订些花。

   1. 客户端 (控制台) 将向 Amazon Lex 发送以下 [PostContent](API_runtime_PostContent.md) 请求：

      ```
      POST /bot/{{OrderFlowers}}/alias/{{$LATEST}}/user/{{4o9wwdhx6nlheferh6a73fujd3118f5w}}/content HTTP/1.1
      x-amz-lex-session-attributes: "e30=" 
      Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1"
      Accept: "audio/mpeg"
      
      
      Request body
      {{input stream}}
      ```

      请求 URI 和正文都将向 Amazon Lex 提供信息：
      + 请求 URI — 提供机器人名称 (`OrderFlowers`)、机器人别名 (`$LATEST`) 以及用户名称（用于识别用户的随机字符串）。`content` 指示这是 `PostContent` API 请求（而不是 `PostText` 请求）。
      + 请求标头
        + `x-amz-lex-session-attributes` — base64 编码值表示“{}”。在客户端发出第一个请求时，没有会话属性。
        + `Content-Type` – 反映音频格式。
      + 请求正文 – 用户输入音频流 (“我想要订些花。”)。
**注意**  
如果用户选择向 `PostContent` API 发送文本 (“我想要订些花”) 而非使用语音，则请求正文为用户输入。`Content-Type` 标头会相应地进行设置：  

      ```
      POST /bot/{{OrderFlowers}}/alias/{{$LATEST}}/user/{{4o9wwdhx6nlheferh6a73fujd3118f5w}}/content HTTP/1.1
      x-amz-lex-session-attributes: "e30="
      Content-Type: "text/plain; charset=utf-8"
      Accept: accept
      
      Request body
      {{input stream}}
      ```

   1. 从输入流中，Amazon Lex 可检测意图 (`OrderFlowers`)。随后，它会选择其中一个目的槽 (本例中为 `FlowerType`) 和其中一个值引出提示，然后发送具有以下标头的响应：

      ```
      x-amz-lex-dialog-state:ElicitSlot
      x-amz-lex-input-transcript:I would like to order some flowers.
      x-amz-lex-intent-name:OrderFlowers
      x-amz-lex-message:What type of flowers would you like to order?
      x-amz-lex-session-attributes:e30=
      x-amz-lex-slot-to-elicit:FlowerType
      x-amz-lex-slots:eyJQaWNrdXBUaW1lIjpudWxsLCJGbG93ZXJUeXBlIjpudWxsLCJQaWNrdXBEYXRlIjpudWxsfQ==
      ```

      标头值提供以下信息：
      + `x-amz-lex-input-transcript` – 提供来自请求的音频脚本 (用户输入)
      + `x-amz-lex-message` — 提供在响应中返回的音频 Amazon Lex 的脚本
      + `x-amz-lex-slots` – 槽和值的 base64 编码版本：

        ```
        {"PickupTime":null,"FlowerType":null,"PickupDate":null}
        ```
      + `x-amz-lex-session-attributes` – 会话属性 ({}) 的 base64 编码版本

      客户端将播放响应正文中的音频。

1. 用户说：玫瑰

   1. 客户端 (控制台) 将向 Amazon Lex 发送以下 [PostContent](API_runtime_PostContent.md) 请求：

      ```
      POST /bot/{{OrderFlowers}}/alias/{{$LATEST}}/user/{{4o9wwdhx6nlheferh6a73fujd3118f5w}}/content HTTP/1.1
      x-amz-lex-session-attributes: "e30="
      Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1" 
      Accept: "audio/mpeg"
      
      
      Request body
      {{input stream ("roses")}}
      ```

      请求正文是用户输入音频流 (玫瑰)。`sessionAttributes` 将保留为空。

   1. Amazon Lex 将解释当前意图的上下文中的输入流（它会记住它已经向此用户询问了关于 `FlowerType` 插槽的信息）。Amazon Lex 将首先更新当前意图的插槽值。然后，它选择另一个槽 (`PickupDate`)，以及它的一个提示消息 (When do you want to pick up the roses?)，并返回包含以下标头的响应：

      ```
      x-amz-lex-dialog-state:ElicitSlot
      x-amz-lex-input-transcript:roses
      x-amz-lex-intent-name:OrderFlowers
      x-amz-lex-message:When do you want to pick up the roses?
      x-amz-lex-session-attributes:e30=
      x-amz-lex-slot-to-elicit:PickupDate
      x-amz-lex-slots:eyJQaWNrdXBUaW1lIjpudWxsLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6bnVsbH0=
      ```

      标头值提供以下信息：
      + `x-amz-lex-slots` – 槽和值的 base64 编码版本：

        ```
        {"PickupTime":null,"FlowerType":"roses","PickupDate":null}
        ```
      + `x-amz-lex-session-attributes` – 会话属性 ({}) 的 base64 编码版本

      客户端将播放响应正文中的音频。

1. 用户说：明天

   1. 客户端 (控制台) 将向 Amazon Lex 发送以下 [PostContent](API_runtime_PostContent.md) 请求：

      ```
      POST /bot/{{OrderFlowers}}/alias/{{$LATEST}}/user/{{4o9wwdhx6nlheferh6a73fujd3118f5w}}/content HTTP/1.1
      x-amz-lex-session-attributes: "e30="
      Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1"
      Accept: "audio/mpeg"
      
      
      Request body
      {{input stream ("tomorrow")}}
      ```

      请求正文是用户输入音频流 (“明天”)。`sessionAttributes` 将保留为空。

   1. Amazon Lex 将解释当前意图的上下文中的输入流（它会记住它已经向此用户询问了关于 `PickupDate` 插槽的信息）。Amazon Lex 将更新当前意图的插槽 (`PickupDate`) 值。然后，它将选择另一个槽来引出 (`PickupTime`) 的值，并选择其中一个值引出提示 (您想在 2017 年 3 月 18 日的什么时间取玫瑰？)，然后返回带有以下标头的响应：

      ```
      x-amz-lex-dialog-state:ElicitSlot
      x-amz-lex-input-transcript:tomorrow
      x-amz-lex-intent-name:OrderFlowers
      x-amz-lex-message:When do you want to pick up the roses on 2017-03-18?
      x-amz-lex-session-attributes:e30=
      x-amz-lex-slot-to-elicit:PickupTime
      x-amz-lex-slots:eyJQaWNrdXBUaW1lIjpudWxsLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6IjIwMTctMDMtMTgifQ==
      x-amzn-RequestId:3a205b70-0b69-11e7-b447-eb69face3e6f
      ```

      标头值提供以下信息：
      + `x-amz-lex-slots` – 槽和值的 base64 编码版本：

        ```
        {"PickupTime":null,"FlowerType":"roses","PickupDate":"2017-03-18"}
        ```
      + `x-amz-lex-session-attributes` – 会话属性 ({}) 的 base64 编码版本

      客户端将播放响应正文中的音频。

1. 用户说：下午 6 点

   1. 客户端 (控制台) 将向 Amazon Lex 发送以下 [PostContent](API_runtime_PostContent.md) 请求：

      ```
      POST /bot/{{OrderFlowers}}/alias/{{$LATEST}}/user/{{4o9wwdhx6nlheferh6a73fujd3118f5w}}/content HTTP/1.1
      x-amz-lex-session-attributes: "e30="
      Content-Type: "text/plain; charset=utf-8"
      Accept: "audio/mpeg"
      
      
      Request body
      {{input stream ("6 pm")}}
      ```

      请求正文是用户输入音频流 (“下午 6 点”)。`sessionAttributes` 将保留为空。

   1. Amazon Lex 将解释当前意图的上下文中的输入流（它会记住它已经向此用户询问了关于 `PickupTime` 插槽的信息）。它将首先更新当前目的的槽值。

      现在，Amazon Lex 将检测到它拥有所有插槽的信息。但是，`OrderFlowers` 目的配置了确认消息。因此，Amazon Lex 需要先获得用户的显式确认，然后才能继续履行意图。在订花之前，它将发送具有以下请求确认的标头的响应：

      ```
      x-amz-lex-dialog-state:ConfirmIntent
      x-amz-lex-input-transcript:six p. m.
      x-amz-lex-intent-name:OrderFlowers
      x-amz-lex-message:Okay, your roses will be ready for pickup by 18:00 on 2017-03-18.  Does this sound okay?
      x-amz-lex-session-attributes:e30=
      x-amz-lex-slots:eyJQaWNrdXBUaW1lIjoiMTg6MDAiLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6IjIwMTctMDMtMTgifQ==
      x-amzn-RequestId:083ca360-0b6a-11e7-b447-eb69face3e6f
      ```

      标头值提供以下信息：
      + `x-amz-lex-slots` – 槽和值的 base64 编码版本：

        ```
        {"PickupTime":"18:00","FlowerType":"roses","PickupDate":"2017-03-18"}
        ```
      + `x-amz-lex-session-attributes` – 会话属性 ({}) 的 base64 编码版本

      客户端将播放响应正文中的音频。

1. 用户回答“是”

   1. 客户端 (控制台) 将向 Amazon Lex 发送以下 [PostContent](API_runtime_PostContent.md) 请求：

      ```
      POST /bot/{{OrderFlowers}}/alias/{{$LATEST}}/user/{{4o9wwdhx6nlheferh6a73fujd3118f5w}}/content HTTP/1.1
      x-amz-lex-session-attributes: "e30="
      Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1"
      Accept: "audio/mpeg"
      
      
      Request body
      {{input stream ("Yes")}}
      ```

      请求正文是用户输入音频流 (“是”)。`sessionAttributes` 将保留为空。

   1. Amazon Lex 将解释输入流，并了解用户希望继续完成订单。`OrderFlowers` 目的配置有 `ReturnIntent` 作为完成活动。这将指示 Amazon Lex 向客户端返回所有意图数据。Amazon Lex 将返回带有以下内容的响应: 

      

      ```
      x-amz-lex-dialog-state:ReadyForFulfillment
      x-amz-lex-input-transcript:yes
      x-amz-lex-intent-name:OrderFlowers
      x-amz-lex-session-attributes:e30=
      x-amz-lex-slots:eyJQaWNrdXBUaW1lIjoiMTg6MDAiLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6IjIwMTctMDMtMTgifQ==
      ```

      `x-amz-lex-dialog-state` 响应标头设置为 `ReadyForFulfillment`。然后，客户端可以完成目的。

1. 现在，重新测试自动程序。要建立新的 (用户) 上下文，请在控制台中选择 **Clear** 链接。为 `OrderFlowers` 目的提供数据，包括一些无效数据。例如：
   + “茉莉花”作为鲜花类型 (它不是一种受支持的鲜花类型)
   + “昨天”作为您想要取花的日期

   请注意，自动程序将接受这些值，因为您没有任何代码来初始化和验证用户数据。在下一节中，您将添加 Lambda 函数来完成此操作。请注意有关 Lambda 函数的以下内容：
   + 它将在每个用户输入后验证槽数据。它将在结束时完成目的。即自动程序将处理鲜花订单，然后向用户返回一条消息，而不是只向客户端返回槽数据。有关更多信息，请参阅 [使用 Lambda 函数](using-lambda.md)。
   + 此外，它还将设置会话属性。有关会话属性的更多信息，请参阅 [PostText](API_runtime_PostText.md)。

      完成“入门”部分后，您可以做其他练习 ([其他示例：创建 Amazon Lex 机器人](additional-exercises.md))。[预订旅程](ex-book-trip.md) 使用会话属性来共享各个目的的信息，以与用户进行动态对话。

**下一个步骤**  
[步骤 3：创建 Lambda 函数（控制台）](gs-bp-create-lambda-function.md)