Якщо ви ще не знайомі з Airtable, я дуже рекомендую подивитися на цей сервіс. Airtable - це не просто альтернатива таблицям Google, а повноцінна база даних, яка дуже легко інтегрується з будь-яким сервісом, включаючи Dialogflow.

За допомогою Airtable можна реалізувати систему збору даних будь-якої складності (прийом замовлень, облік клієнтів тощо). Крім того, Airtable замінить вам CRM та систему керування контентом. Замість того, щоб створювати сотні інтентів у своєму чат-боті, ви можете весь контент розмістити у зручному табличному вигляді в Airtable, а чат-бот читатиме інформацію з бази і швидко формуватиме відповідь.

Як не дивно, але Airtable простіше “подружити” з Dialogflow, ніж Google Таблиці. Не складніше, ніж Firebase, про який я теж писав в блозі.

Для початку створимо просту базу даних для тесту. Безкоштовний тариф Airtable дозволяє нам створювати необмежену кількість баз даних, але не більше 1200 записів у кожній. Цього буде достатньо для нескладних проектів.

Отже, для прикладу я створив базу з однієї таблиці (Table1) наступної структури:

  • Name
  • Email
  • Message
  • Location

Чат-бот прийматиме контактні дані від користувача та заноситиме безпосередньо до бази даних.

Повертаємося до Dialogflow та створимо тестовий інтент, у якому запросимо від користувача необхідні дані.

Я зроблю поки що три параметри.

1

Не забуваймо активувати параметр “Enable webhook call for this intent”, щоб передати обробку інтенту в серверну функцію.

Відповідь (Response) залишаємо порожньою, тому що її ми генеруватимемо також у серверній функції.

Ініціалізація

Ну і, власне, програмний код у розділі Fulfillment. Підключаємо пакет “airtable”, ініціалізуємо базу даних:

var Airtable = require('airtable');
var base = new Airtable({apiKey: 'API_KEY'}).base('API_BASE_NAME');

де API_KEY — це ваш персональний ключ, який треба згенерувати тут https://airtable.com/account

API_BASE_NAME — це ідентифікатор бази даних, який є тут https://airtable.com/api

Сподіваюся, із цим зрозуміло.

Наступне завдання — отримати значення параметрів Dialogflow і передати їх в Airtable. Всі основні функції роботи з Airtable і готові приклади на JavaScript можна взяти за посиланням: https://airtable.com/api

Не знаєте JavaScript? Скопіюйте та вставте приклади коду, які дає Airtable, вони повністю робочі. Там є і вибірка даних і створення та оновлення записів та їх видалення. Все що треба.

Створення запису

Повертаємось до нашого прикладу. Для додавання нового запису нас цікавить розділ “Create records”. Дивимося правила звернення до бази та пишемо приблизно такий код:

function airtableUpdate(agent) {
const name = agent.parameters.name;
const email = agent.parameters.email;
const message = agent.parameters.message;
 
return base('Table1').create([
{
  "fields": {
  "Name": name,
  "Email": email,
  "Message": message
  }
}
]).then(result => {
  agent.add('Заявка принята, ожидайте...');
})
}

Дуже просто, правда?

Не забудьте зв’язати функцію з потрібним інтентом, використовуючи intentMap у нижній частині програмного коду. Зберігаємо, запускаємо інтент та спостерігаємо новий запис у таблиці Airtable.

Вибірка даних

Тепер читання даних. Тут все набагато цікавіше. Можна вимагати з бази будь-яку кількість записів, робити фільтрацію даних, пошук, використовувати регулярні висловлювання тощо.

Для отримання даних напишемо нову функцію і спробуємо отримати не всі записи, а лише ті, що підпадають під нашу умову. Припустимо, нам потрібні користувачі, що проживають у Києві.

function airtableSelect(agent) {
  return base("Table1").select({
    maxRecords: 5
    filterByFormula: 'AND({Location} = "Киев")'
  })
  .firstPage().then(result => {
    var str = "";
    result.forEach(function(record) {
    str = str + record.fields.Name + " ";
  });
 
  agent.add('Найдено: '' + str);

Ми використовували фільтрацію таблиці по полю Location. Отримали N-ну кількість записів (я вказав не більше п’яти) та ім’я кожного користувача заносимо в змінну str. Далі відправляємо агенту відповідь і додаємо змінну str зі списком користувачів.

Зверніть увагу на параметр maxRecords, він стане у нагоді. Уявіть, якщо база даних є великою і в чат-бот потрібно повернути 20 або 50 або більше записів. Як їх виводити користувачеві? Буде логічним розбити вибірку на порції (сторінки) та використовуючи функцію fetchNextPage() отримувати та повертати дані.

Що стосується пошуку та фільтрації, то можна фільтрувати відразу по кількох полях, порівнювати цілі значення, дати. Здійснювати пошук за рядковими значеннями та багато іншого. Докладніше про можливості фільтрації дивіться в API.

Якщо вам потрібна не просто текстова відповідь, а й представлення даних у вигляді карток або кнопок, то використовуйте JSON.

Наприклад:

"fulfillmentMessages": [
  {
    "card": {
      "title": "какое-то значение",
      "imageUri": "ссылка на картинку",
      "buttons": [
       {
          "text": "button_text",
          "postback": "ссылка куда-то"
       }
       ]
    }
  }]

Тут ми формуємо відповідь агенту (боту) у форматі карток із клікабельною кнопкою. Непогано використовуватиме виведення карток товарів. Докладніше у довідці з Dialogflow. Тільки майте на увазі, що код відповіді, наприклад, для Telegram може відрізнятись від Facebook Messenger або DF Messenger.

На базі прикладів, які я навів вище, ви можете побудувати повноцінну систему керування контентом.

Можливості

Наприклад, ви створюєте чат-бота для інтернет-магазину. У вас є сотні товарів. Як бути? Створювати вручну сотні інтентів із описом кожного товару? Можна так, звичайно, якщо вам не шкода свого часу. Як потім підтримувати цього “монстра”? Значно простіше вести облік товарів у базі даних, а чат-боту дати можливість динамічно звертатися до бази та вибирати ту чи іншу інформацію на запит користувача.

Airtable вміє імпортувати дані з багатьох форматів плюс інтегруватися з сервісами автоматизації, такими як Zapier, Workato, Integromat. Вам потрібні пов’язані таблиці? Ок, під час створення поля просто вкажіть “Link to another record”:

2

Можливості вражають! Щоб їх розглянути, знадобиться не одна стаття.

Я розумію, що більшість читачів мого сайту не мають відношення до програмування і тому я стараюся наводити максимально прості приклади. Вся необхідна інформація лежить у довідці Dialogflow та Airtable. Беріть та користуйтеся.

Допомога

Якщо виникнуть питання — ласкаво просимо на консультацію. Можна писати відразу в Telegram, для узгодження всіх організаційних питань.

Намагаюся допомогти. Успіхів!

P.S. Буду дуже дякую за зворотний зв’язок у вигляді коментарів. Якщо є побажання щодо нових матеріалів — пишіть.