Значение функции Firebase Cloud возвращает «ноль» при выполнении диалога - PullRequest
0 голосов
/ 29 марта 2019
Встроенный редактор

в облачной функции Dialogflow возвращает значение NULL для существующего значения.

Облачная функция из встроенного редактора развернута без ошибок. Ответ Weebhook "Выполнение Webhook прошло успешно"

Попытался прочитать другие значения в том же элементе, все возвращали ноль.

Функция с целью чтения температуры

function handleReadTemp(agent) {
    return admin.database().ref('device/data/subdata/').limitToLast(1).once('value').then((snapshot) => {
    const value = snapshot.child('Temp').val();
     agent.add(`The temperature right now is ${value}`); 
    });
  }

DF Структура базы данных Firebase в реальном времени выглядит следующим образом: [ссылка] https://imgur.com/a/VLp8F9R

root
  |
  device
       |
        data
          |
          subdata
              |
              - record1
                    |- Temp:"33.35"
              -  record2
                    |- Temp: "34"

Цель состоит в том, чтобы прочитать 34 из Temp of record2 - так, Temp из последней записи.

Моя цель состояла в том, чтобы admin.database().ref('device/data/subdata/').limitToLast(1).once('value').then((snapshot) =>

получает последнюю запись (запись2 Примечание: имена записей генерируются случайным образом, поэтому я не могу знать, как будет называться следующая запись)

, а затем const value = snapshot.child('Temp').val();

Получит значение Temp, являющееся дочерним по отношению к записи 2.

Журналы облачных функций не выдают ошибок [ссылка] https://imgur.com/F9UUrjC

Ответ агента в диалоге: temperature is null

1 Ответ

0 голосов
/ 29 марта 2019

Это нормально, поскольку содержимое snapshot DataSnapshot соответствует следующему объекту:

{"record2":{"Temp":34}}

Это можно проверить, выполнив console.log(snapshot.val());

Итак, вы должны сделать что-то вроде:

.....
const value = snapshot
            .child(Object.keys(snapshot.val())[0] + '/Temp')
            .val();
agent.add(`The temperature right now is ${value}`);  
.....
...