node.js - 对话流覆盖用户名
问题描述
在对话流中创建聊天机器人时遇到问题。
当我打字的时候
user : hi
Bot : What is your name?
User : xyz
Bot : hi , xyz
User : abc
Bot : hi ,abc
当我将寿命设置为超过 1 时,它会覆盖名称,之后,我必须问几个问题并在最后打印名称和询问的数据。
当我将寿命设置为超过 1 时,它不允许我在下一个意图中打印名称。
有什么解决办法吗?
示例对话
意向清单
欢迎意向
GetName 意图
获取电子邮件意图
解决方案
在您接受他们的名字并提示您输入电子邮件后,您有两个仍然有效的上下文:
- 上下文的
awaiting_name
生命周期为 4(因为它是在欢迎意图中设置的,两个意图之前) - 上下文的
awaiting_email
生命周期为 5(因为它刚刚设置)
这意味着两个可能的上下文可以匹配:
Get Name
上下文(因为awaiting_name
是有效的)Get Email
上下文(因为awaiting_email
是有效的)
Dialogflow 正在选择Get Name
上下文,这是完全有效的。当有多个匹配项时,究竟应用哪些规则来选择一个 Intent 很复杂,但可以选择其中任何一个。
正如您所猜测的,您可以将生命周期设置为 1,这意味着您将只接受姓名或电子邮件的下一个答案。这会起作用,但不是一个好主意,因为这意味着他们不能提问或寻求帮助。这是非常非对话的。
当您不再需要它时,最好清除上下文。因此,您的Get Name
Intent 可以通过将awaiting_name
生命周期设置为 0 (以及其他类似方式的 Intent)来做到这一点。像这样的东西:
推荐阅读
- css - TypeError:无法读取未定义的属性'main' - React 问题
- css - ASP.NET Bootstrap .container 宽度停留在 1170px
- css - 如何将 css 编码为 material-ui 样式的 jss?
- python-3.x - Pandas 将多列合并/合并为 1
- r - 序列 1:k - 列表列表中是否有序列元素?(在 R 中)
- java - 整数数组与单个整数?
- api - 通过 Azure API 管理使用 OAuth1 对 Twitter API 进行身份验证
- windows - 如何同时运行 NordVPN 和 Xampp
- c# - 无法添加 PRIMARY KEY 列
- java - 如何让 Java 项目使用自定义库,同时保留对源代码的访问权限,而无需手动构建库 JAR?