Dialogflow v2 использует облачную функцию Firebase для возврата данных из базы данных Firestore - PullRequest
0 голосов
/ 25 сентября 2018

Я совершенно новичок в DialogFlow .. Я хотел создать чат-бота, к которому я мог бы задать вопрос, и он отвечал бы значением, полученным из моей базы данных Firebase Firestore.

Я ужесоздал необходимое намерение (GetPopulationInCity) и выбрал Enable webhook call for this intent

Желательно, чтобы я хотел использовать DialogFlow Fulfillment вместе с другим моим приложением CloudFunction.

Я использовал код в следующемпример:

'use strict';

const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');

process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements

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

  function welcome(agent) {
    agent.add(`Welcome to my agent!`);
  }

function GetPopulationInCity(agent) {
//Search Firestore for value, if found =>
    agent.add(`There are 10,000 people living in XXX`); //should it be ask or something like send or return?
  }

  function fallback(agent) {
    agent.add(`I didn't understand`);
    agent.add(`I'm sorry, can you try again?`);
}
  let intentMap = new Map();
  intentMap.set('Default Welcome Intent', welcome);
  intentMap.set('Get Population', GetPopulationInCity);
  intentMap.set('Default Fallback Intent', fallback);
  agent.handleRequest(intentMap);
});

но я понятия не имею, как создать обработчик для моего намерения и вернуть значение.Есть ли кто-нибудь, кто мог бы помочь мне?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Прежде всего, убедитесь, что имя намерения, для которого вы пытаетесь написать обработчик, совпадает с именем в части intentMap.set().(В вашем описании вам непонятно, что означает имя намерения в диалоге по сравнению с именем функции.)

Сам обработчик должен сделать несколько вещей:

  1. Получить значение любых параметров, которые могут быть установлены в намерении.

    Вы можете получить его из agent.parameters.

  2. Запросить базу данных длязначения.

  3. Возвращает обещание, чтобы указать, что результат обрабатывается асинхронно.
  4. В рамках обработки результата вызовите agent.add() с результатами.

    Это будет сделано с кодом, аналогичным тому, как вы делаете вызов Firebase сейчас.Вы не показали, как вы это делаете, или какова структура вашей базы данных, но если вы используете библиотеку администратора Firebase, ваш обработчик webhook может выглядеть примерно так:

    function GetPopulationInCity( agent ){
      var cityName = agent.parameters.cityName;
      return db.collection('cities').doc(cityName).get()
        .then( doc => {
          var value = doc.data();
          agent.add(`The population of ${cityName} is ${value.population}.`);
        });
    }
    

Наконец, и, кроме того, ваш код ставит вопрос об использовании add() или ask().

  • Вы используете библиотеку выполнения Dialogflow, которая (по соглашению) называет параметр, отправленный обработчику, «агентом».Функция добавления типа сообщения к ответу - agent.add().

  • Существует еще одна библиотека, библиотека actions-on-google, которая работает аналогично и в сочетании с библиотекой dialogflow-выполнение.Условное обозначение библиотеки aog - передавать параметр «conv» с информацией о разговоре.Функция добавления ответа к агенту: conv.ask() или conv.close().

  • Чтобы добавить некоторую путаницу, вы можете получить объект aog "chat" из библиотеки dialogflow-executementпозвонив по номеру agent.conv(), если вы работаете с действиями (в отличие от других агентов, с которыми работает Dialogflow).

0 голосов
/ 25 сентября 2018

Я предлагаю взглянуть на этот пример действия, предоставляемый Actions в Google: https://github.com/actions-on-google/dialogflow-updates-nodejs

Следуйте инструкциям в файле Readme или просто посмотрите на файл functions / index.js, и вы увидите, какпример обрабатывает Firestore.

...