Есть несколько вещей, которые вам нужно выучить.
Во-первых, как добавить Firebase Admin SDK в ваш проект.
Вам также необходимо научиться извлекать данные , используя библиотеку. Firebase использует метод, основанный на ссылочном пути, для извлечения данных, поэтому вам нужно убедиться, что вы правильно построили путь.
Наконец, поскольку вы делаете это в обработчике выполнения и делаете асинхронный вызов, вам необходимо убедиться, что вы возвращаете Promise. К счастью, получение данных также требует возврата обещания, поэтому вы можете вернуть это обещание.
Код может частично выглядеть примерно так (не проверено):
function personFacts(agent) {
const personId = agent.parameters["personId"];
const personMeasurement = agent.parameters["personMeasurement"];
var db = admin.database();
var ref = db.ref(`person/${personId}/${personMeasurement}`);
return ref.once("value")
.then( snapshot => {
var result = snapshot.val();
agent.add(`${personId}'s ${personMeasurement} is ${result}`);
})
.catch( err => {
agent.add('uh oh, something went wrong.');
console.error( err );
});
}
Как вы заметили, вам нужно инициализировать библиотеку администратора Firebase ключом, который предоставит вам доступ через служебную учетную запись. Вы можете сгенерировать ключ и загрузить его, а затем указать папку, в которой вы его сохранили. (Похоже, вы только что внесли информацию, которая также работает.)
Ошибка «Неправильный ответ» означает, что ответ не был установлен. Это может быть связано с несколькими причинами, но обычно это означает, что ваша программа по какой-либо причине вызвала сбой или не смогла вызвать agent.add()
. Обратитесь к журналам ваших действий для получения дополнительной информации. (Если вы используете встроенный редактор Dialogflow, вы можете перейти к журналам, выбрав https://console.firebase.google.com/,, выбрав свой проект, выбрав вкладку «Функции» слева и выбрав вкладку «Журналы».)
Обновление на основе кода и сообщения об ошибке.
Как следует из сообщения об ошибке, вы звонили admin.initializeApp()
более одного раза. Это следует делать только при первой настройке функции, а не каждый раз, когда вызывается ваша функция. После однократной инициализации - его можно использовать несколько раз.
В вашем случае это можно сделать, переместив require
, который импортирует firebase-admin и вызов admin.initializeApp()
, из функции personFacts()
и поместите их обоих ближе к вершине - вероятно, сразу после другого require()
звонки.