Проблема в том, что функция yourFunctionHandler(agent)
выполняет действия асинхронно, но не возвращает обещание.Вместо этого он ничего не возвращает, поэтому обработка немедленно возвращается без отправки сообщения.
Поскольку похоже, что myDoc.add()
возвращает Обещание, это легко сделать, сделав это return myDoc.add(...).then(...)
и так далее.Это может выглядеть примерно так:
function yourFunctionHandler(agent) {
return docRef.add({
myname: name,
college: coll
})
.then(()=>{
response.send({
fulfillmentText:
'Sure '+name+', Do you want to know about Admissions, Fees, Graduates and PG, Contact information, Media or Testimonials?'
});
return 1;
})
.catch(error => {
//console.log('érror',e);
response.send({
fulfillmentText:
'Something went wrong with the database'
});
});
}
Кроме того, вы смешиваете обработку ответа самостоятельно (вызывая response.send()
) и использование Dialogflow agent.handleRequest()
, который создаст для вас ответ.
Вы должны либо использовать методы Dialogflow для генерации ответа с чем-то вроде
agent.add("No such document found.");
, либо сами использовать значения в JSON, чтобы определить, какой обработчик вызывать с чем-то вроде
const intentName = request.body.queryResult.intent.name;
const handler = intentMap[intentName];
handler();
(Возможно, вам придется изменить это. Похоже, из вашего кода вы используете Dialogflow v1, который я отразил, и путь для имени намерения меняется для v2. Вы также должны проверить, что обработчик несуществует, может захотеть отправить параметры и т. д.)