具有多个实体的Dialogflow node.js实现

时间:2019-02-18 09:53:24

标签: dialogflow actions-on-google

我希望有人可以帮助我。 我已经构建了一个使用node.js来实现我在dialogflow中意图的应用程序。 例如,我打算采取一项必要措施:

enter image description here

这取决于我的成就:

// Handle the Dialogflow intent named 'Default Welcome Intent'.
app.intent(DEFAULT_INTENT, (conv, params) => {
  let categoryId = params.category;
  let options = {
    'method': 'GET',
    'url': apiUrl + 'questions/categories/' + categoryId + '/scenario',
    'json': true
  };

  return request(options).then(response => {
    // TODO: What happens if there is more than one question?  
    let question = response[0];
    conv.ask(question.text);
  }, error => {
    conv.ask('There was an issue with the request: ' + options.url);
  });
});

如您所见,这会根据发送到实现的类别询问一个问题。 我的问题是,对于每个问题,我想要的用户响应都不同。 他们做出回应后,也会有成就感,会提出另一个问题。

是否可以通过这种方式进行操作?如果可以,有人可以给我举一个例子吗?如果没有,有人可以帮助我找出替代方案吗?

1 个答案:

答案 0 :(得分:1)

您使用的方法很有意义。要记住的关键是,Intents捕获用户所说的内容,而不是您如何处理他们所说的内容。您可以通过设置输入上下文并确保您先前已为其设置输出上下文来影响触发哪个Intent。

一种可能的方法是,针对您要提出的每个问题,为该问题设置一个相应的输出上下文。然后,您可以具有一个或多个将其用作输入上下文的Intent。这些都是常规的Intent,因此您可以正常处理它们。您可能希望在匹配后清除上下文(通过将其生命周期设置为0),因此以后不要意外匹配它。

例如,如果您的conn = jdbc.connect('oracle.jdbc.driver.OracleDriver', "jdbc:oracle:thin:.", ["username","password"],"\\path-to-ojdbc6.jar") 不仅包含问题的文本,还包含问题的上下文名称,则代码可能看起来像这样:

question

假设conv.ask( question.text ); conv.contexts.set( question.contextName, 5 ); 对象看起来像这样

question

您可能有一个Dialogflow Intent来处理此问题,看起来像这样

enter image description here

请注意,输出上下文已将其显式设置为0,这将删除它。您也可以使用类似

的代码在实现代码中执行此操作
{
  text: "What is your favorite color?",
  contextName: "color-favorite"
}