Один файл index.js в диалоговом потоке выполнения с несколькими функциями / триггером для firestore #AskFirebase

У меня есть приведенный ниже код в диалоговом потоке (функции firebase: ^ 3.7.0 и узел: 10) DialogFlow index.js, в котором возникла проблема Проект фотографий в DialogFlow

  1. У меня четыре намерения: Лигар, Деслигар, Абрир и Фешар (все с включенным исполнением)

  2. У меня нет проблем с развертыванием или выполнением (журналы облачных функций), но единственная работающая функция - getLigar (). Как решить эту проблему?

    'use strict';
    
    const functions = require('firebase-functions');
    const {WebhookClient} = require('dialogflow-fulfillment');
    const admin = require('firebase-admin');
    admin.initializeApp();
    const db = admin.firestore();
    
    process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements
    
    exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
      const agent = new WebhookClient({request, response});
    
      function getLigar(agent) {
        var gpioalarmstateb = agent.parameters;
        return db.collection('xxxxx').doc('yyyyy').get()
          .then(doc => {
            const xalarmstate = doc.data().gpioalarmstate;
            if (!xalarmstate) {
              db.collection('xxxxx').doc('yyyyy').update({
                gpioalarmstate: true
              })
            }
            agent.add(`Gpioalarmstate is ${gpioalarmstateb} xalarmstate is  ${xalarmstate}.`);
          });
      }
    
      function getDesligar(agent) {
        var gpioalarmstateb = agent.parameters;
        return db.collection('xxxxx').doc('yyyyy').get()
          .then(doc => {
            const xalarmstateD = doc.data().gpioalarmstate;
            if (xalarmstateD) {
              db.collection('xxxxx').doc('yyyyy').update({
                gpioalarmstate: false
              })
            }
            agent.add(`Gpioalarmstate is ${gpioalarmstateb} xalarmstate is  ${xalarmstateD}.`);
          });
      }
    
    
      function getAbrirr(agent) {
        var gpiogaragestateb = agent.parameters;
        return db.collection('xxxxx').doc('yyyyy').get()
          .then(doc => {
            const xgaragestate = doc.data().gpiogaragestate;
            if (!xgaragestate) {
              db.collection('xxxxx').doc('yyyyy').update({
                gpiogaragestate: true
              })
            }
            agent.add(`Gpiogaragestate is ${gpiogaragestateb} xgaragestate is  ${xgaragestate}.`);
          });
      }
    
      function getFechar(agent) {
        var gpiogaragestateb = agent.parameters;
        return db.collection('xxxxx').doc('yyyyy').get()
          .then(doc => {
            const xgaragestateF = doc.data().gpiogaragestate;
            if (xgaragestateF) {
              db.collection('xxxxx').doc('yyyyy').update({
                gpiogaragestate: false
              })
            }
            agent.add(`Gpiogaragestate is ${gpiogaragestateb} xgaragestate is  ${xgaragestateF}.`);
          });
      }
    
      let intentMap = new Map();
      intentMap.set('Ligar', getLigar);
      intentMap.set('Desligar', getDesligar);
      intentMap.set('Abrir', getAbrirr);
      intentMap.set('Fechar', getFechar);
      agent.handleRequest(intentMap);
    });

person neuberfran    schedule 15.07.2020    source источник
comment
@Prisoner Tks. Я видел ваши ответы о диалоговом потоке здесь, в стеке, и мне они понравились. i По ссылке ниже я поместил фотографии двух намерений кода. Мне нужна простая вещь с 4 командами (Ligar, Desligar, Abrir и Fechar), которые изменяют значения firestore. Я не пробовал ничего, кроме приведенного выше кода, и не знаю, почему он не работает: drive.google.com/drive/folders/   -  person neuberfran    schedule 15.07.2020
comment
drive.google.com/file/d/1ltgQJQaLttlz- aheI8G2p-AKvYQCEosG /   -  person neuberfran    schedule 17.07.2020


Ответы (1)


Ответ был: мне нужен async перед 4 функциями, упомянутыми в вопросе, и я поместил await в нужное место. Ниже я привел пример, который служил для первой из 4 функций:

  async function getLigar(agent) {

    return await db.collection('xxxxx').doc('yyyyy').get()
person neuberfran    schedule 21.07.2020