Node.js 如何在dialogflow中获得先前的意图
我在这方面面临一个问题: 我创建了4个意图bookTable、bookingDate、bookingTime和people count intent。我使用输入和输出上下文添加了意图链接 假设我现在有第三个意图,即“预订时间”&当我对googlehome说“预订一张桌子”时,它会直接跳到第一个意图 我需要的解决方案是不要跳转到第一个意图,但如果用户会说除所需输入之外的任何内容,那么它将调用自定义回退意图,并坚持该特定意图 请为我提供一个解决方案,让我不要将意图转移到任何其他方面Node.js 如何在dialogflow中获得先前的意图,node.js,dialogflow-es,Node.js,Dialogflow Es,我在这方面面临一个问题: 我创建了4个意图bookTable、bookingDate、bookingTime和people count intent。我使用输入和输出上下文添加了意图链接 假设我现在有第三个意图,即“预订时间”&当我对googlehome说“预订一张桌子”时,它会直接跳到第一个意图 我需要的解决方案是不要跳转到第一个意图,但如果用户会说除所需输入之外的任何内容,那么它将调用自定义回退意图,并坚持该特定意图 请为我提供一个解决方案,让我不要将意图转移到任何其他方面 // welco
// welcome intent here
app.intent('DefaultWelcomeIntent', (conv) => {
conv.ask('What would you like me to do for you?. Book a table or Check your calendar?');
});
// Booktable intent
app.intent('BookTable', (conv) => {
conv.ask('Please provide a date?');
});
// bookingDate intent
app.intent('bookingDate', (conv, params) => {
var speech = new Speech();
const currentDate = moment().format("YYYY-MM-DD");
const bookingDate = moment(params.date).format("YYYY-MM-DD");
const displayBookingDate = moment(bookingDate).format("DD MMM YYYY");
let say = '';
if (bookingDate && moment(bookingDate).isSameOrAfter(currentDate)) {
speech.say(`OK, ${displayBookingDate}`)
.pause('300ms')
.say(`Please provide time?`);
const speechOutput = speech.toObject();
conv.ask(speechOutput.speech);
conv.data.restaurantData.date = bookingDate;
} else {
say = `Please provide today's or upcoming date.`;
conv.ask(say);
}
});
// bookingTime intent
app.intent('bookingTime', (conv, params) => {
var speech = new Speech();
const currentDateTime = moment().format("YYYY-MM-DD HH:mm");
const bookingDate = moment(conv.data.restaurantData.date).format("YYYY-MM-DD");
const bookingTime = moment(params.time).format("HH:mm");
const booking12HourTimeString = moment(bookingTime, ["HH:mm"]).format("hh:mm A");
const concateDateTime = moment(bookingDate + " " + bookingTime).format('YYYY-MM-DD HH:mm');
let say = '';
if(moment(concateDateTime).isSameOrAfter(currentDateTime)) {
speech.say(`OK, ${booking12HourTimeString}`)
.pause('300ms')
.say(`How many people?`);
const speechOutput = speech.toObject();
conv.ask(speechOutput.speech);
conv.data.restaurantData.time = bookingTime;
} else {
say = `please provide a valid booking time.`;
conv.ask(say);
}
});
// people count intent
app.intent('peopleCount', (conv, params) => {
let peopleCounts = parseInt(params.count);
let restaurantName = 'Dominos pizza';
let restaurantAddress = 'San Francisco, ca';
let bookingDate = conv.data.restaurantData.date;
let bookingTime = conv.data.restaurantData.time;
const booking12HourTimeString = moment(bookingTime, ["HH:mm"]).format("hh:mm A");
let bookingDisplayDate = moment(bookingDate).format("DD MMM YYYY");
if (peopleCounts > 0) {
conv.ask(`OK You would like to create a table for ${restaurantName} in ${restaurantAddress} on ${bookingDisplayDate} at ${booking12HourTimeString} for ${peopleCounts} people`);
} else {
conv.ask(`Please add people more than zero`);
}
});
app.intent('customFallback', (conv, params) => {
conv.ask(`I couldn't understand. Can you say that again?`);
});
您的用例不是很清楚,但根据我的理解,您真正需要的是上下文或后续意图。使用这些,您可以链接意图
如果您仍然想获取以前的意图名称,我认为您应该将其存储在缓存中,以便能够获取该名称。dialogflow中没有关于这一点的规定。根据我对您的问题的理解,这些问题非常模糊,可以通过上下文的帮助获得当前意图中先前意图的值
如果这个答案仍然有任何含糊不清的地方,请提供一些例子,这将是很有帮助的。您能用例子详细解释您的问题吗。我想在我的当前意图中输入以前意图的名称。