如何使用后端代码 (webhook) 在意图中执行插槽验证。
我已经了解了如何使用 webhooks 执行槽填充,但我想知道如何验证槽数据并在验证失败时重新提示用户。
Example:
用户:我想了解你们在伦敦的服务。
Bot:我们不在伦敦提供服务,请输入其他城市名称。
简而言之:如果验证失败,请重置对话框上下文,再次触发您的意图,并可以选择使用默认值来保留实际有效的其他参数(因此您不需要再次重新提示用户输入这些参数)。
您无需声明该意图的传入上下文即可实现此目的。请注意,您可以在意图中使用上下文,即使它们没有声明为该意图的传入/传出上下文。
在此示例中,我向用户请求 2 个参数(汽车make
and model
)。当然,Enable webhook call for slot filling
需要根据您的意图进行设置。
Steps:
- 在 Dialogflow 上,在意图中声明一个事件。这可用于从您的履行代码触发此意图:
- 在您的参数中,为您希望在重置意图后保留的每个参数声明一个默认值:
- 将默认值设置为帮助器上下文中的参数。如果此帮助器上下文确实存在,则将设置默认值,否则,它将保留为空。这将允许您重置意图并保留您已有的其他参数。在此示例中,我使用上下文
show-car-details-data
,并设置参数的默认值model
to _model
在即将到来的上下文中:
- 在槽填充实现方法中,您可以验证参数并通过重置意图来重新提示用户。为此,您需要 1)清除当前对话框上下文, 2) 调用
setFollowupEvent
再次触发您的意图,3)可以选择设置一些可用于分配默认值的帮助器上下文(因此您不需要重新提示用户输入有效的值)。
我在用着Dialogflow 实现 Node.js 库 https://github.com/dialogflow/dialogflow-fulfillment-nodejs:
// 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': '' });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)