首页 > 解决方案 > 在 Amazon LEX 中的意图之间切换后返回对话树中的相同位置

问题描述

给我一个用于预订租车的对话树。该机器人有一个名为“orderIntent”的主要意图和一个名为“colorIntent”的第二个意图。在“orderIntent”对话框中,将要求用户选择汽车类别、日期和价格(所有这些在此意图中都有一个单独的位置)。

我希望在对话框中的任何给定时刻,用户都能够调用“colorIntent”意图并根据需要设置颜色,完成后,返回到树对话框中的同一个位置,他之前离开了。

例如,当用户被要求选择预订日期,并回复“我想为汽车选择绿色”时,这将调用“colorIntent”意图,用户将能够选择一个颜色。

之后,用户应该返回到他部分完成的对话的同一部分,并且将再次被要求选择预订日期。我想实现这一点,同时保持他在主对话框中已经部分完成的关于他已经选择的汽车类别和价格的信息,以及关于他从“colorIntent”意图中选择的颜色的新信息。

如何在机器人的 AWS Lambda 中配置这样的逻辑?

标签: aws-lambdaamazon-lexaws-lex

解决方案


使用sessionAttributes来实现这一点,因为sessionAttributes保持跨意图,而slots仅在每个意图中保持。

Intent_A 逻辑可以运行,边走边填slots,槽值也应该保存在sessionAttributes. 然后在 IntentA 的任何点,用户都可以触发 Intent_B。

现在 Intent_Aslots被 Intent_B 覆盖,slots但 Intent_A 的插槽值仍保存在sessionAttributes.

有关如何在意图之间进行更改的额外信息:

然后你有2个选择:

(1) 强制用户再次触发 IntentA,提示“要继续预订汽车,请说,预订汽车”

(2) 使用confirmIntent返回 IntentA,但它需要问一个确认问题,例如“您想继续预订汽车吗?” 无论如何,对此的响应都将转到 Intent_A,因此在 Intent_A 内部,您只需根据用户对该问题的回答方式检查confirmationStatus 哪个将是"Confirmed"or 。"Denied"如果确认,则可以继续 Intent_A,如果拒绝,则应关闭 Intent_A。

(在dialogAction类型下查看confirmIntent)

回到 Intent_A 后,您应该检查是否有任何插槽数据sessionAttributesslots. 然后您的原始逻辑可以检测哪些插槽已被填充,并从中断处继续。


推荐阅读