Airtable & Telegram Bot — рецепт быстрого запуска

9a3b76a47550969d6ed292e9c38153b2.jpg

Intro

В данной статье рассмотрим интеграцию no-code базы данных с телеграмм ботом. Благодаря хорошему API и читабельной документации Airtable удобно использовать разработчику. При этом человеку, не знакомому с программированием, подвластно создание базы данных с нуля и аналитика без единой строчки кода. Airtable совмещает в себе удобный пользовательский интерфейс табличек и всевозможные БД фичи. Однако в отрыве от интерфейса для непосредственного взаимодействия с пользователем/клиентом не очень ценно. Поэтому добавляем в нашу колоду телеграмм бота и получаем неплохой набор для быстрого решения несложных бизнес задач. Фактически в данной статье получим готовый для быстрого запуска рецепт, включающий стек сервисов для разработки, ссылки и примеры.

Немного формальностей

Поставим задачу. Требуется создать систему, которая будет:

  • давать возможность создавать и редактировать БД без программирования

  • сбирать и хранить клиентскую базу

  • рассылать информацию группам из одного и более клиентов

  • администрироваться (разделять права доступа пользователя и администратора)

Решаем данную задачу с помощью трех инструментов. Airtable, Telegram Bot и VPS.

Цель/contribution данной статьи — знакомство читателя с экономичным способом запуска системы, решающей довольно распространенную задачу из бизнеса.

Для того, чтобы более подробно пощупать каждый инструмент, предлагается следующий workflow. Пользователь заходит в телеграмм бота и регистрируется. Запись о пользователе попадает в базу данных в Airtable. В какой-то момент администратору нужно разослать информацию по некоторой группе пользователей, например тех, кто работает в IT. Для рассылки администратор создает текст сообщения в Airtable, а затем, с помощью команды в боте, доступной только ему, рассылает информацию по выбранной группе.

А теперь по полочкам…

Airtable для администратора

В этой части рассмотрим как администратор взаимодействует с используемыми инструментами. Для нашего простого сценария достаточно базы пользователей такого вида:

c4d6c1cfa1e1b3072f42fc0392e293fc.png

Заметим, что со стороны администратора, работающего с базой данных несложно реализуется разделение прав доступа. Доступ непосредственно к Airtable также настраивается (просмотр, редактирование). Переходя по настроенным фильтрам отображения слева, можно посмотреть либо всех пользователей, либо только сотрудников IT и тд. Комбинации фильтров позволяют гибко настроить отображение содержимого базы.

f05e1d0fb375f9bdc999a066e9e88c6b.png

В решаемой нами задаче разделение прав пользователей применяем следующим образом. Только пользователь с полем Admin = True может посылать боту команды рассылки сообщений. Сообщения в нашем случае составляются без участия разработчика. Кроме того, рассылку можно автоматизировать.

d5721d5b007fcb7098441726295c2d20.png

В заключение раздела про Airtable отмечу, администратор может работать с базой данных полностью самостоятельно. В этом есть большая ценность и для разработчика, и для администратора с точки зрения разделения задач и скорости реализации проекта. Теперь можем перейти под капот нашей небольшой системы и обсудить реализацию.

Инструменты для разработчика

  • aiogram — фреймворк для Telegram Bot API

  • pyairtable (бывший Airtable Python Wrapper) — Python клиент для Airtable API

4e92ce63467eb4be2af8ca896bb4fee8.jpg

При первом запуске бота, пользователь проходит регистрацию. О том, как спросить у пользователя как его зовут с помощью aiogram скорее всего есть статьи и примеры на страничке документации aiogram. В нашем сценарии, при регистрации пользователя мы извлекаем следующую информацию: полное имя, телеграмм id, работает ли в IT.

Далее уже понадобится pyairtable, а вот тут с примерами.

Подключаем базу данных:

api_key = 'AIRTABLE_API_KEY'
base_id = 'base_id'

users_table = Table(api_key, base_id, 'Users')
messages_table = Table(api_key, base_id, 'Messages')

base_id достается прямо из ссылки на базу данных, например для https://airtable.com/appab1CDefGhiJkLm/### base_id = 'appab1CDefGhiJkLm', api_key находится в разделе Account → Overview → Api

После того как мы подключили базу данных, можем записать в нее информацию о пользователе (полное имя, телеграмм id, работает ли в IT).

user_info = [{'FullName': 'Иван Иванов', 
              'TelegramID': int('12345678'), 
              'ITworker': True}]
users_table.batch_insert(user_info)

В нашей базе появилась запись, причем Airtable поддерживает типизацию данных, вплоть до записи файлов, поэтому мы сохраняем содержимое user_info как str, int и bool

Если пользователь уже есть в базе и повторно запускает бота, его не нужно регистрировать. Для этого предположим, что мы уже достали telegram_id пользователя, и добавим проверку:

user = users_table.search('TelegramID', telegram_id)
if len(user) != 0:
  ###

Здесь мы по users_table нашли (или не нашли) запись в табличке с пользователями. Добавлю, что если сделать users_table.search('ITworker', True) то нам вернется ответ со всеми подходящими записями.

Перейдем к рассылке сообщений. Допустим у нас есть telegram_id, также допустим, что админов может быть несколько. Для команды рассылки, проверка на админа делается аналогично проверке пользователя по базе:

admins = users_air.search('Admin', True)
admin_ids = []
for admin in admins:
	admin_ids.append(admins['fields']['TelegramID’])
if  in admin_ids:
	###

Далее достаем из airtable содержание всей таблицы с сообщениями:

messages = messages_table.get_all()
for msg in messages:
  msg_id = msg['fields'].get(‘msg_id’)
  content = msg['fields'].get(‘content’)
  ###

Дальнейшие действия уже из aiogram. Аналогично проверке на админа можем достать TelegramID всех IT сотрудников и разослать сообщения им. 

В данном разделе мы обсудили, как с помощью pyairtable решить задачи регистрации пользователей и рассылки сообщений. То, о чем мы говорили в данном разделе реализуемо на локальной машине,   однако, полноценный сценарий подразумевает бесперебойной работы бота.

VPS

8c368aa47dda8ea4bad19cf257324204.jpg

Финальная стадия, когда все отлажено на локальной машине, можно приступать к деплою. Сервер нам нужен для того, чтобы обеспечить работу бота 24/7. Арендовать сервер под ubuntu можно на webtropia за 300 — 700р в месяц и оплатить с QIWI, что ценно во времена блокировок российских Visa и Master Card. Цены и конфигурации тут. Предполагается, что полезные данные хранятся в Airtable и от сервера нам нужна только постоянная работа бота и обработка запросов/ответов. Для этого вполне хватит сервера 4 cores 8 Gb RAM, а может и еще меньше. 

Когда мы подключились к серверу, есть как минимум два варианта запуска бота. Первый описан в шаге 5 здесь, второй здесь в разделе «Деплой на сервер».

P.S.

Постарался описать простой сценарий использования тандема Airtable и телеграмм бота. Данные инструменты имеют весь необходимый функционал для создания более сложных решений, например запись на услуги, продажа товаров, организация мероприятий и тд. Также, можно рассматривать интеграцию Airtable и Slack, благо для Slack есть API для Python, а API для Airtable мы уже рассмотрели.

Если у вас есть идеи по улучшению предложенного решения, предлагайте в комментах, с интересом прочитаю

© Habrahabr.ru