Агент Dialogflow не хранит данные в agent.conv (). Data - PullRequest
0 голосов
/ 01 февраля 2020

В выполнении диалогового потока обработчик выглядит так:

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
  const agent = new WebhookClient({ request, response });
  let conv = agent.conv();
  console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
  console.log('Dialogflow Request body: ' + JSON.stringify(request.body));

Я установил conv для agent.conv (). Пользователь приветствуется, и я хочу сохранить случайно сгенерированное число.

  function welcome(agent) {
    agent.add(`Welcome to Med Ed! Can I get your name?`);
    //generate random number -> num
    conv.data.random = num
    console.log(conv.data.random)
  } 

Вышеуказанное работает нормально, и число выводится на консоль. Но когда вызывается другой обработчик функции, и я пытаюсь извлечь число:

 function intentHandler(agent) {
        // get the number from the agent.conv()
        getNum = conv.data.random 
        console.log(getNum)
 } 

Это print getNum - это NaN для консоли.

Я думал, что данные сохраняются, но я явно ошибаюсь.

Спасибо

1 Ответ

0 голосов
/ 02 февраля 2020

Похоже, что вы используете облачные функции либо в Google Cloud Platform, либо из встроенного редактора Dialogflow.

В обоих случаях код выполнения выполняется в облачных функциях, которые должны быть без сохранения состояния . Каждый запрос может быть выполнен в другой среде; поэтому, если необходимо сохранить переменные, рекомендуется добавить дополнительный слой персистентности, например, базу данных.

Для вашего варианта использования есть три предложения, которые вы можете рассмотреть:

1 ) Используйте глобальную переменную . Обычно функции будут выполняться в одной и той же среде, поэтому вы можете хранить информацию в глобальной переменной; однако это не гарантируется, поэтому вам следует рассмотреть случай, когда эта информация недоступна

2) Использовать контексты Dialogflow в качестве временного хранилища . Вы можете сохранить случайное число в качестве параметра в контексте, и оно будет отправлено Dialogflow в webhook, если контекст активен

3) Добавьте слой устойчивости в ваши функции. В GCP вы можете использовать Firestore или базу данных , которая лучше соответствует вашему сценарию

...