首页 > 解决方案 > Google Assistant webhook 插槽填充自定义

问题描述

我正在使用带有 Spring Boot 应用程序的 Google Assistant 集成 webhook。

我在代理对话流中创建了 3 个插槽,都是必需的。a1,a2,a3。

假设 a2 的值取决于 a1 的值。

如果 a1 > 100,我想跳过 a2 并要求 a3。因此,当用户说出应该填充在 a3 中而不是 a2 中的内容时。

如果 a1<=100,则询问 a2,然后询问 a3。

如何告诉 google agent 哪个 slot 需要填充?

标签: actions-on-googledialogflow-esgoogle-home

解决方案


您可以通过设置所需的上下文及其参数以编程方式在您的履行 webhook 中设置参数。请注意,这不是插槽填充的预期用途。

Dialogflow在填写参数时默认创建3个输出上下文

  • <intentId>_id_dialog_context
  • <intentname>_dialog_context
  • <intentname>_dialog_params_<parameterName>

您可以使用Webhookclient.contexts找到这些上下文

请注意,包含 parameterName 的上下文将根据 Dialogflow 要求的参数而改变。例如,如果您填写参数 a1,对话框将要求输入 a2。上下文将是<intentname>_dialog_params_a2

所有这些上下文都包含意图所需的参数。您可以使用这种方法以编程方式设置这些参数:

  • 用户填写a1
  • 在您的 webhook 中,确定是否应该询问或跳过 a2
  • 如果它应该被问到,什么也不做或发送一个不同的提示使用webhookClient.add(responses)

如果应该跳过:

  • 使用设置两个_dialog_context上下文 webhookClient.setContext(context)
  • 在设置它们时,将参数 a2 作为不存在的东西发送null
  • 删除上下文 _params_a2
  • 设置上下文_params_a3,参数相同

可能您的参数现在看起来像:

{a1 : 'someUserValue', a2 : 'someValueByWebhook', a3 : ''}

通过这样做,Dialogflow 已经有了 a2 的值,并且不会再要求它


推荐阅读