«Ошибка», которую вы показываете, является предупреждением и обычно не мешает работе. Это говорит о том, что она предполагает среду, основанную на проекте, в котором она выполняется. Если вы обращаетесь к хранилищу данных в том же проекте - у вас не должно возникнуть никаких проблем с этим.
У вас нет не указывает на то, что происходит, когда вы пытаетесь вызвать set()
, но похоже, что это может даже не происходить.
Учитывая конечный автомат, который зависит от значения глобальной переменной flag
, это может быть не удивительно. Попытка отследить разговор таким образом имеет две проблемы:
Похоже, что их вызывают только в желанном Намерении. Вы не показываете это определение Intent, но это может происходить только при первом вызове бота, а не после.
Поскольку это глобальная переменная, а не значение, которое привязанный к разговору, он может быть изменен, если несколько пользователей пытались использовать бота одновременно или если сервер, на котором он запущен, перезагружен. Если вы используете облачные функции Firebase или встроенный редактор Dialogflow, это может произойти без вашего ведома.
В частности, (2) может привести к тому, что он никогда не доберется до состояние, в котором вызывается set()
.
Похоже, что с самим вызовом set()
все в порядке, но вы не обрабатываете ошибки. И похоже, что вы отправляете сообщение «Вы хороши для go», прежде чем узнаете, действительно ли работает set()
. Чтобы решить эту проблему, вы можете изменить addLeads()
, чтобы он возвращал обещание, а затем сделать так, чтобы вызов также работал с обещанием. Это может изменить addLeads()
на что-то вроде
function addLeads(){
var data={
'product':product,
'email':eMail,
'phoneNo':phoneNo
};
const dialogflowAgentRef = db.collection('botData').doc(eMail);
return dialogflowAgentRef.set(data,{merge:true});
}
Затем, когда вы его вызываете, вам нужно как работать с Promise, так и возвращать его (поэтому Dialogflow будет ждать отправки ответа до set()
завершает.) Вероятно, что-то вроде:
return addLeads()
.then( () => {
agent.add(`Okay. Now you are good to go!`);
})
.catch( err => {
console.error( "There was a problem", err );
agent.add( "There was a problem saving the data." );
});