Node.js 如何在dialogflow中获得先前的意图

Node.js 如何在dialogflow中获得先前的意图,node.js,dialogflow-es,Node.js,Dialogflow Es,我在这方面面临一个问题: 我创建了4个意图bookTable、bookingDate、bookingTime和people count intent。我使用输入和输出上下文添加了意图链接 假设我现在有第三个意图,即“预订时间”&当我对googlehome说“预订一张桌子”时,它会直接跳到第一个意图 我需要的解决方案是不要跳转到第一个意图,但如果用户会说除所需输入之外的任何内容,那么它将调用自定义回退意图,并坚持该特定意图 请为我提供一个解决方案,让我不要将意图转移到任何其他方面 // welco

我在这方面面临一个问题:

我创建了4个意图bookTable、bookingDate、bookingTime和people count intent。我使用输入和输出上下文添加了意图链接

假设我现在有第三个意图,即“预订时间”&当我对googlehome说“预订一张桌子”时,它会直接跳到第一个意图

我需要的解决方案是不要跳转到第一个意图,但如果用户会说除所需输入之外的任何内容,那么它将调用自定义回退意图,并坚持该特定意图

请为我提供一个解决方案,让我不要将意图转移到任何其他方面

// 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中没有关于这一点的规定。

根据我对您的问题的理解,这些问题非常模糊,可以通过上下文的帮助获得当前意图中先前意图的值


如果这个答案仍然有任何含糊不清的地方,请提供一些例子,这将是很有帮助的。

您能用例子详细解释您的问题吗。我想在我的当前意图中输入以前意图的名称。