

终止支持通知：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)。

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

# 安排预约
<a name="ex1-sch-appt"></a>

本练习中的示例自动程序将为牙医诊所安排预约。本示例还介绍了如何使用响应卡获取带有按钮的用户输入。具体来说，该示例介绍了如何在运行时动态生成响应卡。

您可以在构建时配置响应卡（也称为静态响应卡），也可以在 AWS Lambda 函数中动态生成响应卡。在本示例中，自动程序使用以下响应卡：
+ 列出预约类型按钮的响应卡。有关示例，请参阅下图：  
![响应卡要求安排预约类型和三个选项：清洁（30 分钟）、根管（60 分钟）和美白（90 分钟）。](http://docs.aws.amazon.com/zh_cn/lex/latest/dg/images/respcard-10.png)
+ 列出预约日期按钮的响应卡。有关示例，请参阅下图：  
![响应卡询问预约的日期和三个选项：2-15、2-16 和 2-17。](http://docs.aws.amazon.com/zh_cn/lex/latest/dg/images/respcard-20.png)
+ 列出按钮以确认建议预约时间的响应卡。有关示例，请参阅下图：  
![响应卡要求确认预约的时间和日期，有两个选项：是和否。](http://docs.aws.amazon.com/zh_cn/lex/latest/dg/images/respcard-30.png)

  

可用的预约日期和时间有所不同，这就需要您在运行时生成响应卡。您可以使用 AWS Lambda 函数动态生成这些响应卡。Lambda 函数将在其发送给 Amazon Lex 的响应中返回响应卡。Amazon Lex 将在其发送给客户端的响应中包含响应卡。

如果客户端 (如 Facebook Messenger) 支持响应卡，则用户可以在按钮列表中进行选择或键入响应。如果不支持，则用户只需键入响应。

除了上述示例中显示的按钮以外，您还可在响应卡上包含映像、附件和其他有用的信息。有关响应卡的信息，请参阅 [响应卡](howitworks-manage-prompts.md#msg-prompts-resp-card)。

在本练习中，您将执行以下操作：
+ 创建并测试机器人（使用 ScheduleAppointment 蓝图）。在本练习中，您将使用自动程序蓝图快速设置并测试自动程序。有关可用蓝图的列表，请参阅 [Amazon Lex 和 AWS Lambda 蓝图](lex-lambda-blueprints.md)。此自动程序预配置了一个目的 (`MakeAppointment`)。

   
+ 创建和测试 Lambda 函数（使用 Lambda 提供的 lex-make-appointment-python蓝图）。您将 `MakeAppointment` 意图配置为将此 Lambda 函数用作代码挂钩，以执行初始化、验证和履行任务。
**注意**  
所提供的示例 Lambda 函数将根据牙医预约的模型可用性显示动态对话。在实际应用程序中，您可以使用真正的日历安排预约。
+ 更新 `MakeAppointment` 意图配置以将 Lambda 函数用作代码挂钩。然后，测试 end-to-end体验。
+ 将安排预约机器人发布到 Facebook Messenger，以便您可以查看响应卡的实际操作（目前 Amazon Lex 控制台中的客户端不支持响应卡）。

以下几个部分提供了有关您在本练习中使用的蓝图的摘要信息。

**Topics**
+ [机器人蓝图概述 (ScheduleAppointment)](#ex1-sch-appt-bp-summary-bot)
+ [Lambda 函数蓝图概述 () lex-make-appointment-python](#ex1-sch-appt-summary-lambda)
+ [步骤 1：创建 Amazon Lex 机器人](ex1-sch-appt-create-bot.md)
+ [步骤 2：创建 Lambda 函数](ex1-sch-appt-create-lambda-function.md)
+ [步骤 3：更新目的：配置代码挂钩](ex1-sch-appt-create-integrate.md)
+ [步骤 4：在 Facebook Messenger 平台上部署自动程序](ex-sch-appt-fb-integration.md)
+ [信息流详细信息](ex1-sch-appt-info-flow-details.md)

## 机器人蓝图概述 (ScheduleAppointment)
<a name="ex1-sch-appt-bp-summary-bot"></a>

您用于为本练习创建机器人的 ScheduleAppointment 蓝图已预先配置了以下内容：
+ **槽类型** – 一个称为 `AppointmentTypeValue` 的自定义槽类型，具有枚举值 `root canal`、`cleaning` 和 `whitening`。
+ **目的** – 一个目的 (`MakeAppointment`)，按如下方式进行预配置：
  + **槽** – 目的配置了以下槽：
    + 槽 `AppointmentType`，属于 `AppointmentTypes` 自定义类型。
    + 槽 `Date`，属于 `AMAZON.DATE` 内置类型。
    + 槽 `Time`，属于 `AMAZON.TIME` 内置类型。
  + **表达** – 目的预配置了以下表达：
    + “我想进行预约”
    + “预约” 
    + “预订 {AppointmentType}”

    如果用户表达出上述任意一种说法，Amazon Lex 将确定意图是 `MakeAppointment`，然后使用提示引发插槽数据。
  + **提示** – 目的预配置了以下提示：
    + 用于 `AppointmentType` 槽的提示 –“您想要安排哪种类型的预约？”
    + 提示进入时`Date`段 — “我应该什么时候安排你的 {AppointmentType}？”
    + 提示输入时`Time`段 — “你想在什么时候安排 {AppointmentType}？” and 

      “{Date} 的什么时间？”
    + 确认提示 –“{Time} 可以预约，我应该直接帮您预约吗？” 
    + 取消消息 –“好的，我不会安排预约。”

## Lambda 函数蓝图概述 () lex-make-appointment-python
<a name="ex1-sch-appt-summary-lambda"></a>

Lambda 函数蓝图 (lex-make-appointment-python) 是您使用机器人蓝图创建的机器人的代码挂钩。 ScheduleAppointment 

此 Lambda 函数蓝图代码可以同时执行 initialization/validation 和履行任务。
+ Lambda 函数代码显示了基于牙医预约示例可用性的动态对话（在实际应用程序中，您可以使用日历）。对于用户指定的日期或时间，代码按如下方式配置：
  +  如果没有可用的预约，Lambda 函数将返回指示 Amazon Lex 提示用户选择其他时间或日期的响应（通过将 `dialogAction` 类型设置为 `ElicitSlot)`）。有关更多信息，请参阅 [响应格式](lambda-input-response-format.md#using-lambda-response-format)。
  + 如果在指定的时间或日期只有一个可用预约，Lambda 函数将在响应中建议可用的时间，并通过将响应中的 `dialogAction` 设置为 `ConfirmIntent` 来指示 Amazon Lex 获取用户确认。这说明了如何通过主动建议可用的预约时间来改善用户体验。
  + 如果有多个可用预约，Lambda 函数将在返回到 Amazon Lex 的响应中提供可用时间列表。Amazon Lex 将在返回到客户端的响应中提供来自 Lambda 函数的消息。
+ 履行代码挂钩之后，Lambda 函数将返回表示预约已安排的摘要消息（即意图已履行）。

**注意**  
在本示例中，我们将展示如何使用响应卡。Lambda 函数将构建响应卡并将其返回给 Amazon Lex。该响应卡将可用的日期和时间作为可供选择的按钮一一列出。使用 Amazon Lex 控制台提供的客户端测试机器人时，您无法查看响应卡。要进行查看，必须将自动程序与消息收发平台 (如 Facebook Messenger) 集成。有关说明，请参阅[将 Amazon Lex 机器人与 Facebook Messenger 集成](fb-bot-association.md)。有关响应卡的更多信息，请参阅 [管理消息](howitworks-manage-prompts.md)。

Amazon Lex 调用 Lambda 函数时，会将事件数据作为输入进行传递。其中一个事件字段是 `invocationSource`，Lambda 函数会使用该字段在输入验证和履行活动之间进行选择。有关更多信息，请参阅 [输入事件格式](lambda-input-response-format.md#using-lambda-input-event-format)。

**下一个步骤**  
[步骤 1：创建 Amazon Lex 机器人](ex1-sch-appt-create-bot.md)