Dialogflow node.js 实现多个实体
Dialogflow node.js fulfilment with multiple entities
我希望有人能帮我解决这个问题。
我构建了一个应用程序,它使用 node.js 来实现我在 dialogflow 中的意图。
例如,我有一个需要执行一项操作的意图:
这是我的实现:
// 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);
});
});
如您所见,这会根据发送到 fulfilment 的类别 提出问题。
我遇到的问题是我希望用户对每个问题的回答都不同。
一旦他们做出回应,它也会有一个会问另一个问题的实现。
是否可以这样做,如果可以,有人可以举例说明如何做吗?如果没有,有人可以帮我找出替代方案吗?
您使用的方法很有意义。要记住的关键是 Intents 捕获用户所说的内容,而不是您如何处理他们所说的内容。您可以通过设置输入上下文来影响触发哪个 Intent,并确保您之前已经为其设置了输出上下文。
一种可能的方法是,对于您提出的每个问题,您都为该问题设置相应的输出上下文。然后,您可以拥有一个或多个将此作为输入上下文的 Intent。这些都是常规 Intent,因此您可以正常处理它们。您可能希望在匹配后清除上下文(通过将其生命周期设置为 0),以免以后不小心匹配到它。
例如,如果您的 question
不仅包含问题的文本,还包含问题的上下文名称,则代码可能如下所示:
conv.ask( question.text );
conv.contexts.set( question.contextName, 5 );
假设 question
对象看起来像这样
{
text: "What is your favorite color?",
contextName: "color-favorite"
}
你可能有一个 Dialogflow Intent 来处理这个看起来像这样的东西
请注意,输出上下文已明确将其设置为 0,这将删除它。您也可以在您的履行代码中使用
之类的内容来执行此操作
conv.contexts.delete( 'color-favorite' );
我希望有人能帮我解决这个问题。 我构建了一个应用程序,它使用 node.js 来实现我在 dialogflow 中的意图。 例如,我有一个需要执行一项操作的意图:
这是我的实现:
// 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);
});
});
如您所见,这会根据发送到 fulfilment 的类别 提出问题。 我遇到的问题是我希望用户对每个问题的回答都不同。 一旦他们做出回应,它也会有一个会问另一个问题的实现。
是否可以这样做,如果可以,有人可以举例说明如何做吗?如果没有,有人可以帮我找出替代方案吗?
您使用的方法很有意义。要记住的关键是 Intents 捕获用户所说的内容,而不是您如何处理他们所说的内容。您可以通过设置输入上下文来影响触发哪个 Intent,并确保您之前已经为其设置了输出上下文。
一种可能的方法是,对于您提出的每个问题,您都为该问题设置相应的输出上下文。然后,您可以拥有一个或多个将此作为输入上下文的 Intent。这些都是常规 Intent,因此您可以正常处理它们。您可能希望在匹配后清除上下文(通过将其生命周期设置为 0),以免以后不小心匹配到它。
例如,如果您的 question
不仅包含问题的文本,还包含问题的上下文名称,则代码可能如下所示:
conv.ask( question.text );
conv.contexts.set( question.contextName, 5 );
假设 question
对象看起来像这样
{
text: "What is your favorite color?",
contextName: "color-favorite"
}
你可能有一个 Dialogflow Intent 来处理这个看起来像这样的东西
请注意,输出上下文已明确将其设置为 0,这将删除它。您也可以在您的履行代码中使用
之类的内容来执行此操作conv.contexts.delete( 'color-favorite' );