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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Intro

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

При первом запуске бота, пользователь проходит регистрацию. О том, как спросить у пользователя как его зовут с помощью 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

Финальная стадия, когда все отлажено на локальной машине, можно приступать к деплою. Сервер нам нужен для того, чтобы обеспечить работу бота 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 мы уже рассмотрели.

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

Источник: https://habr.com/ru/post/667544/


Интересные статьи

Интересные статьи

Когда крупные игровые компании в прошлом говорили об эмуляции, они обычно рассматривали эту технологию как способ кражи игроками их интеллектуальной собственности при помощи пиратства. Однако сейчас...
Каким бы не был удобным WEB интерфейс системы управления сетью, это все-равно будет не так удобно, как использование мессенджера Telegram, где все в одном приложении: от ...
Сертифицированный этичный хакер на зарплате, баунтихантер(не, ну есть же репорт на хакерване, значит – зачет по пункту), ресечер и автор публикаций CVE, гик с брейно...
Добрый день, уважаемые хабровчане. В этом цикле статей я попытаюсь рассказать Вам о Java Virtual Machine и запуске Java программ на микроконтроллерах. Тема достаточно спорная: Зачем Java на микро...
На сегодняшний день у сервиса «Битрикс24» нет сотен гигабит трафика, нет огромного парка серверов (хотя и существующих, конечно, немало). Но для многих клиентов он является основным инструментом ...