如何从Dialogflow中的先前上下文获取参数

时间:2019-01-05 15:39:18

标签: javascript dialogflow

我正在为一家知识产权公司创建一个聊天机器人。它有一个名为service的实体,具有4个类型值。 (专利,版权,商标,设计)。

  

客户:什么是专利?

     

Bot :(答案)

     

客户:提交费用多少?

我如何才能知道客户在以前的背景下询问专利的情况?

我不能在所有意图中都使用跟进意图。

现在,我正在使用全局变量来获取广告系列中的agent.parameters.Service插槽。

let slot='patent';
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
  const agent = new WebhookClient({ request, response });
  function service_typeHandler(agent){
    var serv ='';
    serv = agent.parameters.Service;

    if(serv ===''){
      serv=slot;
    }
    else{
      slot=serv;
    }

    switch( serv ){
      case 'patent':

1 个答案:

答案 0 :(得分:1)

首先,您在两个方面都是正确的:

  1. 请勿使用后续意图。在少数情况下,您实际上需要跟进意图。大多数情况下,您想通过其他方式进行此操作。
  2. 使用Contexts。在大多数情况下,这些是“其他手段”的一部分。

在这种情况下,听起来您将有两个Intent(可能还会更多,但这说明了要点):

  • “问什么”-用户在说“什么是专利?”之类的话
  • “ ask.price”-用户说的是诸如“提交多少专利?”和“提交多少专利”之类的话。

对于“ ask.what”意图,您将设置“传出上下文”。这将自动捕获附加到Intent的参数。如果要自己控制,可以在Webhook中创建自己的Context并将参数设置为所需的任何值。我建议使用后者,因为它使您可以使用在其他地方不使用的参数名称。假设您使用的是名为“ savedInfo”的上下文,并且将参数设置为“ savedService”。

按照您的“要价”意图,您将执行与当前操作类似的操作。除了Service参数为空之外,请从“ savedInfo”上下文中获取参数,尤其是从savedService参数中获取参数。