aws-lambda - 在 Amazon LEX 中的意图之间切换后返回对话树中的相同位置
问题描述
给我一个用于预订租车的对话树。该机器人有一个名为“orderIntent”的主要意图和一个名为“colorIntent”的第二个意图。在“orderIntent”对话框中,将要求用户选择汽车类别、日期和价格(所有这些在此意图中都有一个单独的位置)。
我希望在对话框中的任何给定时刻,用户都能够调用“colorIntent”意图并根据需要设置颜色,完成后,返回到树对话框中的同一个位置,他之前离开了。
例如,当用户被要求选择预订日期,并回复“我想为汽车选择绿色”时,这将调用“colorIntent”意图,用户将能够选择一个颜色。
之后,用户应该返回到他部分完成的对话的同一部分,并且将再次被要求选择预订日期。我想实现这一点,同时保持他在主对话框中已经部分完成的关于他已经选择的汽车类别和价格的信息,以及关于他从“colorIntent”意图中选择的颜色的新信息。
如何在机器人的 AWS Lambda 中配置这样的逻辑?
解决方案
使用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 后,您应该检查是否有任何插槽数据sessionAttributes
在slots
. 然后您的原始逻辑可以检测哪些插槽已被填充,并从中断处继续。
推荐阅读
- php - 如何根据 PHP 数组的表单输入选择和显示匹配的特定行?
- javascript - React/Socket.IO - 每次 React 组件更改时,Socket 都会断开连接
- javascript - 如何使用 React Native 基本钩子示例?
- python - Django:处理模板中的外键值
- ios - SceneKit SCNBox 不显示
- angular - 带有复选框的 mat-tree - 获取所有复选框,即使是不可见的复选框
- php - WebP 文件格式的 Imagick setProfile ( XMP )
- c# - 映射一个对象包含列表以列出 myDto 对象
- python - How to fix this pytube NameError in python?
- asp.net - How to use Configuration.Get() method properly?