primera intención segunda intención Como se muestra en el siguiente código, el flujo no va de Intención numérica a Primera intención, se ha enlazado en el bucle numérico. En el flujo de diálogo, con cada intención también se crea el contexto correspondiente. El flujo no se mueve según el contexto y está atascado en NumberIntent.

El flujo debería ser como si Google le preguntara al usuario su identificación de encuesta, el usuario dice su identificación 612020 y Google comienza a hacer sus preguntas. El flujo funciona bien hasta que el tipo de pregunta es la calificación, es decir, el usuario tiene que decir el número. El error surge cuando se le pide al usuario que responda de manera descriptiva.

'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);

Salida Salida2

ERROR DE NOMBRE DE INTENCIÓN NO VÁLIDO

1
Saakshi Agrawal 25 feb. 2021 a las 10:28

1 respuesta

La mejor respuesta

Sospecho que el problema es que i en realidad nunca se actualiza.

Tratas a ques y i como un objeto global, pero como esto se ejecuta en Firebase Cloud Functions, cada llamada puede ser una nueva instancia de la función. Como una nueva instancia, estos se reinicializarían.

La otra cara de la moneda es que si no obtiene una nueva instancia, también tiene el problema de que esto no funcionaría correctamente si más de una persona estuviera usando la Acción al mismo tiempo, ya que todos compartirían el mismo valor. de i.

La solución para ambos es que, en lugar de almacenar i como una variable global, guárdelo en el almacenamiento de sesión de Actions on Google o en un parámetro de contexto de Dialogflow.

Al almacenarlo como un parámetro de sesión, obtendría el valor, lo usaría, lo incrementaría y luego lo guardaría nuevamente en el parámetro de sesión. Podría verse algo como esto:

const i = conv.data.i;
conv.ask(ques[i]);
conv.data.i = i+1;
0
Prisoner 4 mar. 2021 a las 12:03