意图不移动到下一个意图

Intent not moving to next intent

first intent second intent 如下代码所示,流程不是从 Number Intent 到 First Intent,而是循环到 number 循环中。在对话流中,每个意图都会产生相应的上下文。流程未根据上下文移动并卡在 NumberIntent 中。

流程应该类似于 google 向用户询问其调查 ID,用户说出其 ID 612020,然后 google 开始提问。在问题类型被评级之前,流程工作正常,即用户必须说出数字。当要求用户以描述性方式回答时会出现错误。

'use strict';
 
// Import the Dialogflow module from the Actions on Google client library.
const {dialogflow} = require('actions-on-google');
const functions = require('firebase-functions');

// Instantiate the Dialogflow client.
const app = dialogflow({debug: true});

const axios = require('axios').default;

global.ques = [];
global.i=0;

app.intent('Default Welcome Intent', (conv) => {
   conv.add('Hello! What is your survey id?');
      });

app.intent('NumberIntent', (conv,{number}) => {

  return axios.get('https://www.openeyessurvey.com/api/get_open_survey_info/612020')
  .then((result) => {
      result.data.Item.QUESTIONS.map(questionobj => {
      ques.push(questionobj.question);
     })
     conv.ask(ques[i]);
     i+=1;
  }).catch( err => {
        console.log("error", JSON.stringify(err,null,2));
        conv.close('This is not a valid survey ID');
      });
});

app.intent('FirstIntent', (conv, {number}) => {
      conv.ask(ques[i]);
      i+=1; 
});

app.intent('SecondIntent', (conv) => {
      const des = conv.parameters.any;
      if(des === 'ankit'){
      conv.ask(ques[i]);  
      i+=1;
      }
});

app.intent('ThirdIntent', (conv) => {
      conv.ask(ques[i]);  
      i+=1;
});

app.intent('FourthIntent', (conv, {number}) => {
      conv.ask(ques[i]);
      i+=1;  
});

app.intent('FifthIntent', (conv) => {
      conv.ask(ques[i]);  
      i+=1;
      conv.close('Goodbye!')
});


// Set the DialogflowApp object to handle the HTTPS POST request.
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

Output Output2

INVALID INTENT NAME ERROR

我怀疑问题是 i 从未真正更新过。

您将 quesi 视为全局对象,但由于这是在 Firebase Cloud Functions 下的 运行,因此每次调用都可能是函数的新实例。作为一个新实例,这些将​​被重新初始化。

另一方面是,如果您没有获得新的实例,它还会有一个问题,即如果不止一个人同时使用该操作,这将无法正常工作,因为他们都会共享 i.

的相同值

两者的解决方案是,不是将 i 存储为全局变量,而是将其存储在 Actions on Google 会话存储或 Dialogflow 上下文参数中。

将其存储为会话参数,您将获取值、使用它、递增它,然后再次将其保存在会话参数中。它可能看起来像这样:

const i = conv.data.i;
conv.ask(ques[i]);
conv.data.i = i+1;