Хотя вы можете использовать al oop для отображения результатов, есть несколько проблем с тем, как вы поступили, и, возможно, даже с тем, что вы пытаетесь вернуть.
Первый - Dialogflow требует, чтобы вы возвращали Promise от любой функции, которая выполняет асинхронный вызов, например, для вызова базы данных Firebase. В настоящее время вы используете метод обратного вызова. Вам следует переключиться на использование once()
, которое вместо этого возвращает Обещание, чтобы это могло выглядеть примерно так:
return query8.once("value")
.then( snapshot => {
// working with snapshot goes here
})
.catch( err => {
console.error(err);
agent.add("There was a problem.");
});
Второй - это то, как вы работаете с самим snapshot
. Если вы ожидаете нескольких результатов, вы должны знать, что вы можете звонить только agent.add()
с текстовым сообщением дважды и одной базовой c картой. Если вам нужно несколько карт, вы можете вместо этого использовать список или карусель.
Если вы ожидаете, что только один ответ индексируется по RegNo
, что выглядит так, как если бы вы были Затем вы должны просто включить это как часть пути и получить значение снимка. В этом случае вам не понадобится al oop.
Обновление на основе обновленного кода.
Как вы заметили, вы ничего не отправляете, если есть результатов нет, поэтому действие завершается с ошибкой.
Самый простой способ сделать это - использовать snapshot.exists()
, чтобы проверить, есть ли какие-либо результаты в снимке. Если их нет, вы можете вернуть ошибку. Это может выглядеть примерно так:
return query8.once("value")
.then(function(snapshot) {
if( !snapshot.exists() ){
// There are no results, say so
agent.add("There are no results for that account.");
} else {
// ... Do something with the data
}
});
// ...
Если у вас действительно есть результаты, у вас все еще есть проблема, что вы, возможно, отправляете слишком много ответов. У вас может быть только одна agent.add()
с сообщением, которое нужно произнести (максимум два, но не делайте этого), и только одна Карта, если вы не используете Список или Карусель. Так что было бы лучше, чтобы вы создали это сообщение внутри l oop.