如何在Dialogflow的webhook中执行插槽验证?

时间:2018-07-23 11:49:29

标签: chatbot dialogflow

如何使用后端代码(webhook)意图执行插槽验证。

我已经看到了如何使用webhooks执行插槽填充,但是我想知道如何验证插槽数据并在验证失败时重新提示用户。

  

示例:
  用户:我想知道您在伦敦的服务。
  Bot:我们不在伦敦提供服务,请输入其他城市名称。

2 个答案:

答案 0 :(得分:1)

步骤

  1. 在“实体”设置为“必需”的对话框流中启用webhook以便进行插槽归档。
  2. 从参数获取实体。
  3. 以编程方式检查它是否不为null并按照您的要求。
  4. 如果正确,请继续。
  5. 否则,重置上下文,然后根据错误的插槽输入询问问题。以编程方式,将输出上下文设置为与输入相同,以便用户可以再次响应后插槽/实体。如果没有正确的上下文,则不会捕获该插槽。按设置的实体捕获插槽后,该插槽的上下文已完成,要重新捕获该插槽,您需要延长寿命或重新创建它。

答案 1 :(得分:1)

简而言之::如果验证失败,请重置对话框上下文,再次触发您的意图,还可以选择使用默认值来保留其他实际有效的参数(因此您无需重新输入再次提示用户)。

无需为此目的声明传入上下文。请注意,即使没有将上下文声明为该意图的传入/传出上下文,也可以在意图中使用上下文

在此示例中,我向用户请求2个参数(汽车makemodel)。当然,您需要根据自己的意愿设置Enable webhook call for slot filling

步骤:

  1. 在Dialogflow上,有意声明一个事件。这可用于从您的履行代码中触发此意图:

enter image description here

  1. 在您的参数中,为重置意图后要保留的每个参数声明一个默认值:

enter image description here

  1. 在帮助程序上下文中将默认值设置为参数。如果此帮助程序上下文确实存在,则将设置默认值,否则它将保留为空。这将允许您重置意图并保留您已经拥有的其他参数。在此示例中,我使用上下文show-car-details-data,并在该传入上下文中将参数model的默认值设置为_model

enter image description here

  1. 在填补职位空缺的方法中,您可以验证参数并通过重置意图来重新提示用户。为此,您需要1)清除当前对话框上下文,2)调用setFollowupEvent再次触发您的意图,以及3)可选地设置一些可用于分配的帮助程序上下文默认值(因此您无需重新提示用户有效的值)。 我正在使用Dialogflow Fulfillment Node.js Library
// clear dialog contexts:
agent.contexts.forEach( e => {
  if ( e.name.endsWith('_id_dialog_context') ) agent.context.delete(e.name);
});
// workaround bug: https://github.com/dialogflow/dialogflow-fulfillment-nodejs/issues/160
agent.add('');
// set follow up event: this triggers your intent again
agent.setFollowupEvent('show-car-details');
// optionally set helper context to set default values and avoid re-prompt of already valid values
// in this example, keep make since it was a valid parameter
// clear model because it was invalid. User will be prompted again on model, but not on make
agent.context.set('show-car-details-data', 1, { '_make': make, '_model': '' });