Google Assistant Webhook插槽填充自定义

时间:2019-01-04 18:49:23

标签: actions-on-google dialogflow google-home

我正在将Google Assistant集成的Webhook与Spring Boot应用程序配合使用。

我已在座席dialogflow中创建了3个插槽,所有这些都是必需的。 a1,a2,a3。

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

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

如果a1 <= 100,则先问a2,再问a3。

如何告诉Google代理需要填充哪个插槽?

3 个答案:

答案 0 :(得分:0)

在这种情况下(可选参数),您不能使用插槽填充或将其标记为必需。

解决方案是使用上下文和其他意图自行管理。因此,尽管您可以设计自己的意图以接受包含所有参数的答案,但不必根据需要标记其中的任何一个。然后,您可以构建Webhook以确定是否需要某个参数,并且是否缺少该参数,如果需要,可以询问该参数。将收集的参数存储在上下文中,以便一旦拥有所需的所有内容,便可以使用所有的参数-您可能需要使用其他参数名称,以免覆盖它们。您可能还需要在提示输入值时设置上下文,以便缩小回答问题时有意义的Intent。

答案 1 :(得分:0)

您可以通过设置所需上下文的参数及其参数,在实现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的值,并且不再要求它

答案 2 :(得分:0)

您必须使用webhooks进行插槽填充,并在对话框流控制台中将所有插槽标记为不需要。用户与Google助手互动后,在Webhook中获得请求后,您可以设置输出上下文以专门加载其他广告位

  

例如,用户说我要100个商品 其中100是广告位a1的值   然后,可以从webhook中创建包含履行文本请提供广告位a2 的响应,并且还需要将输出上下文设置为 a2 。   要接受a2的插槽值,请创建一个具有输入上下文 a2 的dialogflow意图,以便在解析插槽a2时使dialogflow偏向。   同样,要接受a3的插槽值,请创建一个具有输入上下文 a3 的对话框流程意图。