【问题标题】:dialogflow overriding the username对话流覆盖用户名
【发布时间】:2019-02-15 08:49:26
【问题描述】:

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

当我打字时

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

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

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

有什么办法吗?

示例对话

意图列表

欢迎意图

GetName 意图

获取电子邮件意图

【问题讨论】:

  • 您能否更新您的问题以包括您尝试使用并且您认为应该匹配输入的 Intent 的屏幕截图,以及您正在使用的任何实现代码?当我们不知道您在做什么时,很难为您提供指导。见How do I Ask a Good Question
  • 我已经添加了包括截图,请点击(点击这里查看截图)
  • 请点击(点击这里查看截图)
  • 我做到了。它显示了对话——而不是意图。我们需要查看您正在使用的 Intent 或 Intent。
  • 我已经在查询中添加了截图,请检查

标签: node.js json dialogflow-es chatbot


【解决方案1】:

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

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

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

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

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

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

当您不再需要上下文时,最好清除上下文。所以你的Get Name Intent 可以通过将awaiting_name lifespan 设置为0(以及其他类似的方式)来做到这一点。像这样的:

【讨论】:

  • 我做到了,但我无法在 get_email 意图中打印名称.....即(XYZ,我们将通过 akjsdhf@dhsf.com 与您联系。您的出生日期是什么?) ... 而不是我得到的(#awaiting_name.name 我们将通过 akjsdhf@dhsf.com 与您联系。您的出生日期是什么?)
猜你喜欢
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 2018-03-04
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多