终止支持通知:2025年9月15日, AWS 我们将停止对Amazon Lex V1的支持。2025 年 9 月 15 日之后,您将无法再访问亚马逊 Lex V1 主机或 Amazon Lex V1 资源。如果您使用的是 Amazon Lex V2,请改为参阅 Amazon Lex V2 指南。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
本练习中的示例自动程序将为牙医诊所安排预约。本示例还介绍了如何使用响应卡获取带有按钮的用户输入。具体来说,该示例介绍了如何在运行时动态生成响应卡。
您可以在构建时配置响应卡(也称为静态响应卡),也可以在 AWS Lambda 函数中动态生成响应卡。在本示例中,自动程序使用以下响应卡:
-
列出预约类型按钮的响应卡。有关示例,请参阅下图:
-
列出预约日期按钮的响应卡。有关示例,请参阅下图:
-
列出按钮以确认建议预约时间的响应卡。有关示例,请参阅下图:
可用的预约日期和时间有所不同,这就需要您在运行时生成响应卡。您可以使用 AWS Lambda 函数动态生成这些响应卡。Lambda 函数将在其发送给 Amazon Lex 的响应中返回响应卡。Amazon Lex 将在其发送给客户端的响应中包含响应卡。
如果客户端 (如 Facebook Messenger) 支持响应卡,则用户可以在按钮列表中进行选择或键入响应。如果不支持,则用户只需键入响应。
除了上述示例中显示的按钮以外,您还可在响应卡上包含映像、附件和其他有用的信息。有关响应卡的信息,请参阅 响应卡。
在本练习中,您将执行以下操作:
-
创建并测试机器人(使用 ScheduleAppointment 蓝图)。在本练习中,您将使用自动程序蓝图快速设置并测试自动程序。有关可用蓝图的列表,请参阅 Amazon Lex 和 AWS Lambda 蓝图。此自动程序预配置了一个目的 (
MakeAppointment
)。 -
创建和测试 Lambda 函数(使用 Lambda 提供的 lex-make-appointment-python蓝图)。您将
MakeAppointment
意图配置为将此 Lambda 函数用作代码挂钩,以执行初始化、验证和履行任务。注意
所提供的示例 Lambda 函数将根据牙医预约的模型可用性显示动态对话。在实际应用程序中,您可以使用真正的日历安排预约。
-
更新
MakeAppointment
意图配置以将 Lambda 函数用作代码挂钩。然后,测试 end-to-end体验。 -
将安排预约机器人发布到 Facebook Messenger,以便您可以查看响应卡的实际操作(目前 Amazon Lex 控制台中的客户端不支持响应卡)。
以下几个部分提供了有关您在本练习中使用的蓝图的摘要信息。
主题
机器人蓝图概述 (ScheduleAppointment)
您用于为本练习创建机器人的 ScheduleAppointment 蓝图已预先配置了以下内容:
-
槽类型 – 一个称为
AppointmentTypeValue
的自定义槽类型,具有枚举值root canal
、cleaning
和whitening
。 -
目的 – 一个目的 (
MakeAppointment
),按如下方式进行预配置:-
槽 – 目的配置了以下槽:
-
槽
AppointmentType
,属于AppointmentTypes
自定义类型。 -
槽
Date
,属于AMAZON.DATE
内置类型。 -
槽
Time
,属于AMAZON.TIME
内置类型。
-
-
表达 – 目的预配置了以下表达:
-
“我想进行预约”
-
“预约”
-
“预订 {AppointmentType}”
如果用户表达出上述任意一种说法,Amazon Lex 将确定意图是
MakeAppointment
,然后使用提示引发插槽数据。 -
-
提示 – 目的预配置了以下提示:
-
用于
AppointmentType
槽的提示 –“您想要安排哪种类型的预约?” -
提示进入时
Date
段 — “我应该什么时候安排你的 {AppointmentType}?” -
提示输入时
Time
段 — “你想在什么时候安排 {AppointmentType}?” 以及“{Date} 的什么时间?”
-
确认提示 –“{Time} 可以预约,我应该直接帮您预约吗?”
-
取消消息 –“好的,我不会安排预约。”
-
-
Lambda 函数蓝图概述 () lex-make-appointment-python
Lambda 函数蓝图 (lex-make-appointment-python) 是您使用机器人蓝图创建的机器人的代码挂钩。 ScheduleAppointment
此 Lambda 函数蓝图代码可以执行初始化/验证和履行任务。
-
Lambda 函数代码显示了基于牙医预约示例可用性的动态对话(在实际应用程序中,您可以使用日历)。对于用户指定的日期或时间,代码按如下方式配置:
-
如果没有可用的预约,Lambda 函数将返回指示 Amazon Lex 提示用户选择其他时间或日期的响应(通过将
dialogAction
类型设置为ElicitSlot)
)。有关更多信息,请参阅 响应格式。 -
如果在指定的时间或日期只有一个可用预约,Lambda 函数将在响应中建议可用的时间,并通过将响应中的
dialogAction
设置为ConfirmIntent
来指示 Amazon Lex 获取用户确认。这说明了如何通过主动建议可用的预约时间来改善用户体验。 -
如果有多个可用预约,Lambda 函数将在返回到 Amazon Lex 的响应中提供可用时间列表。Amazon Lex 将在返回到客户端的响应中提供来自 Lambda 函数的消息。
-
-
履行代码挂钩之后,Lambda 函数将返回表示预约已安排的摘要消息(即意图已履行)。
注意
在本示例中,我们将展示如何使用响应卡。Lambda 函数将构建响应卡并将其返回给 Amazon Lex。该响应卡将可用的日期和时间作为可供选择的按钮一一列出。使用 Amazon Lex 控制台提供的客户端测试机器人时,您无法查看响应卡。要进行查看,必须将自动程序与消息收发平台 (如 Facebook Messenger) 集成。有关说明,请参阅 将 Amazon Lex 机器人与 Facebook Messenger 集成。有关响应卡的更多信息,请参阅 管理消息 。
Amazon Lex 调用 Lambda 函数时,会将事件数据作为输入进行传递。其中一个事件字段是 invocationSource
,Lambda 函数会使用该字段在输入验证和履行活动之间进行选择。有关更多信息,请参阅 输入事件格式。