Dialogflow та Firebase: робота з базою даних
Якщо чат-бот приймає дані від користувача, то де зберігати ці дані? А якщо потрібно реалізувати читання даних (наприклад, список товарів) та відображати їх у гарному вигляді у месенджері? Як у першому, так і у другому випадку вам не обійтися без бази даних.
Можна спробувати викрутитися за допомогою Google Sheets або текстового файлу, але я рекомендував би підключити повноцінну базу даних. Не думайте, що це складно. Зовсім ні. Підтримувати базу даних може будь-який працівник (редагувати там дані), а переваги ви отримаєте колосальні. По-перше, це швидкість роботи (процес читання-запису даних). По-друге — до цієї бази даних ви зможете підключити мобільний додаток, веб-сайт або просто використовувати базу одночасно на декількох пристроях різними людьми (співробітниками вашої компанії).
Базу даних можна взяти будь-яку. Dialogflow чудово працює як з Airtable, так і з такою складною СУБД, як MySQL.

Початок роботи з Firebase
Відкрийте консоль Cloud Firebase за адресою https://console.firebase.google.com, перейдіть до Firestore Database і виберіть проект Google Cloud, який раніше створювався в Dialogflow. Перевірте назву в налаштуваннях агента Dialogflow, щоб не помилитися.

Створіть нову колекцію. Наприклад, "Users". Тепер переходимо до заповнення колекції документами. Я створюю користувача з полями "name" і "phone" для збереження імені та телефону відповідно. Не забудьте вказати ID. Ідентифікатор документа має бути унікальним.

Інтеграція з Dialogflow
Інтеграція з базою здійснюється через Fulfillment. Я використовуватиму Inline Editor для простоти. База даних, серверна частина та файли зберігатимуться в "хмарі" Google.
Ось приклад коду для ініціалізації Firebase:
admin.initializeApp(functions.config().firebase);
const db = admin.firestore();
Для запису даних використовуємо такий код:
var name = agent.context.get('waitdata').parameters.name;
var phone = agent.context.get('waitdata').parameters.phone;
return db.collection('users').add({
name: name,
phone: phone
})
.then(function(docRef) {
agent.add('Дякуємо, ' + name + ', через 30 хв. з вами зв'яжеться менеджер.');
})
.catch(function(error) {
agent.add('Помилка!');
});
}
А для читання даних:
return db.collection('cities').doc('1').get().then(function(document) {
var dt = document.data();
var dt_str = 'Місто: ' + dt.name + ' | ' + dt.code;
agent.add(dt_str);
});
}
Для фільтрації даних можна використовувати where:
var query = userRef.where("name","==","Олексій");
Більше інформації можна знайти в офіційній документації Cloud Firestore.