首页 > 解决方案 > 对话流覆盖用户名

问题描述

在对话流中创建聊天机器人时遇到问题。

当我打字的时候

user : hi
Bot : What is your name? 
User : xyz
Bot : hi , xyz 
User : abc 
Bot : hi ,abc 

当我将寿命设置为超过 1 时,它会覆盖名称,之后,我必须问几个问题并在最后打印名称和询问的数据。

当我将寿命设置为超过 1 时,它不允许我在下一个意图中打印名称。

有什么解决办法吗?

示例对话

点击这里查看屏幕截图

意向清单

这些是我的意图

欢迎意向

这是我的欢迎意图

GetName 意图

这个 myGetName 意图

获取电子邮件意图

这个 mygetemail 意图

标签: node.jsjsondialogflow-eschatbot

解决方案


在您接受他们的名字并提示您输入电子邮件后,您有两个仍然有效的上下文:

  • 上下文的awaiting_name生命周期为 4(因为它是在欢迎意图中设置的,两个意图之前)
  • 上下文的awaiting_email生命周期为 5(因为它刚刚设置)

这意味着两个可能的上下文可以匹配:

  • Get Name上下文(因为awaiting_name是有效的)
  • Get Email上下文(因为awaiting_email是有效的)

Dialogflow 正在选择Get Name上下文,这是完全有效的。当有多个匹配项时,究竟应用哪些规则来选择一个 Intent 很复杂,但可以选择其中任何一个。

正如您所猜测的,您可以将生命周期设置为 1,这意味着您将只接受姓名或电子邮件的下一个答案。这会起作用,但不是一个好主意,因为这意味着他们不能提问或寻求帮助。这是非常非对话的。

当您不再需要它时,最好清除上下文。因此,您的Get NameIntent 可以通过将awaiting_name生命周期设置为 0 (以及其他类似方式的 Intent)来做到这一点。像这样的东西:

在此处输入图像描述


推荐阅读