步骤 2a (可选):查看语音信息流的详细信息 (控制台) - Amazon Lex V1

如果您使用的是 Amazon Lex V2,请改为参阅 Amazon Lex V2 指南

 

如果您使用的是 Amazon Lex V1,我们建议您将机器人升级到 Amazon Lex V2。我们不再向 V1 添加新功能,强烈建议使用 V2 以获得全新的机器人。

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

步骤 2a (可选):查看语音信息流的详细信息 (控制台)

本节介绍在客户使用语音发送请求时客户端与 Amazon Lex 之间的信息流。有关更多信息,请参阅PostContent

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

    1. 客户端 (控制台) 将向 Amazon Lex 发送以下 PostContent 请求:

      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 请求)。

      • Request headers(请求标头)

        • 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
    2. 从输入流中,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 编码版本

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

  2. 用户说:玫瑰

    1. 客户端 (控制台) 将向 Amazon Lex 发送以下 PostContent 请求:

      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 将保留为空。

    2. 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 编码版本

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

  3. 用户说:明天

    1. 客户端 (控制台) 将向 Amazon Lex 发送以下 PostContent 请求:

      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 将保留为空。

    2. 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 编码版本

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

  4. 用户说:下午 6 点

    1. 客户端 (控制台) 将向 Amazon Lex 发送以下 PostContent 请求:

      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 将保留为空。

    2. 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 编码版本

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

  5. 用户回答“是”

    1. 客户端 (控制台) 将向 Amazon Lex 发送以下 PostContent 请求:

      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 将保留为空。

    2. 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。然后,客户端可以完成目的。

  6. 现在,重新测试自动程序。要建立新的 (用户) 上下文,请在控制台中选择 Clear 链接。为 OrderFlowers 目的提供数据,包括一些无效数据。例如:

    • “茉莉花”作为鲜花类型 (它不是一种受支持的鲜花类型)

    • “昨天”作为您想要取花的日期

    请注意,自动程序将接受这些值,因为您没有任何代码来初始化和验证用户数据。在下一节中,您将添加 Lambda 函数来完成此操作。请注意有关 Lambda 函数的以下内容:

    • 它将在每个用户输入后验证槽数据。它将在结束时完成目的。即自动程序将处理鲜花订单,然后向用户返回一条消息,而不是只向客户端返回槽数据。有关更多信息,请参阅使用 Lambda 函数

    • 此外,它还将设置会话属性。有关会话属性的更多信息,请参阅 PostText

      完成“入门”部分后,您可以做其他练习 (其他示例:创建 Amazon Lex 机器人)。预订旅程 使用会话属性来共享各个目的的信息,以与用户进行动态对话。

下一个步骤

步骤 3:创建 Lambda 函数(控制台)