Что я хочу?
Прямая вставка данных из выполнения диалоговых потоков в базу данных firebase (требуется идентификатор пользователя)
Я только хочу знать: используйте параметры в пределах запускаемых намерений (например, имя пользователя).Пример: пользователь пишет «Hello» (в приложении), а чатбот отвечает «Hello John», как в Описание Googles
То, что я до сих пор:
У меня есть своеобразное приложение для чата, где пользователь может общаться с другими пользователями и / или чат-ботом (используя диалоговый поток).
В облачных функциях Firebase приложение отправляет запрос в диалоговый поток вкл.контекст с параметром:
function sendToDialogflow(uid) {
const sessionId = '<SESSION_ID>';
const sessionClient = new dialogflow.SessionsClient();
const projectId = '<PROJECT_ID>';
const sessionPath = sessionClient.sessionPath(projectId, sessionId);
const request = {
session: sessionPath,
queryParams: {
contexts: [{
name: `projects/${projectId}/agent/sessions/${sessionId}/contexts/userId`,
lifespanCount: 2,
parameters: {
uid: uid,
}
}]
},
queryInput: {
text: {
text: text,
languageCode: 'en-US',
},
},
};
sessionClient.detectIntent(request).then((response) => {
const result = response[0].queryResult.fulfillmentText;
});
}
Данный контекст действительно работает.
Мое текущее решение для вставки данных в firebase с использованием обещания (в облачных функциях firebase), но оно кажется очень медленным (ожидание ответа в течение 20 секунд):
sessionClient.detectIntent(request).then((response) => {
const result = response[0].queryResult.fulfillmentText;
return admin.database().ref('message').push({
fromUid: '<bots id>',
toUid: uid,
text: result
}).catch((error) => {
console.log(error);
});
});