Пишем простого телеграм-бота на гугл-таблицах
— Ой, гугл, как мне собрать чат-бота? Да так, чтобы и бесплатно, и с супер гибким функционалом!
В первом приближении есть две опции:
А. Выучить Python, чтобы самостоятельно делать любых ботов. Сложность: 999; Стоимость: Условно бесплатно
Б. Оплатить подписку на конструкторе ботов. Сложность: изи-пизи; Стоимость: $$$
Ну нам, конечно же, бот нужен прямо сейчас, поэтому вариант с изучением питона отпадает. 🤓 Идём смотреть конструкторы — они, в основном, не супер гибкие, ну и платные конечно же... 😒 А ведь мы — кулцхакеры, мы же всё хотим беспалтно, да? Так что тоже не вариант…
И тут на сцену выходит @xlsheet_bot — это тг-бот, который позволит тебе создать бота бесплатно!
Шаг 1
Перед тем как идти в @xlsheet_bot нужно получить token будущего бота. Это такой уникальный ключ, которые авторизует нашего бота в царстве ботов.
- Заходим в телегу
- Идём сюда @BotFather — это официальный тг-бот для создания ботов. Ботов папка короче
- Пишем /newbot
- Вписываем любое имя, которое будет заканчиваться на “bot”. Лично у меня он с первого раза не принимает любое имя, поэтому я всегда 2 раза отправляю одно и тоже 🤔
- Дальше бот должен прислать нам сообщение, мол всё получилось, дать ссылку на нашего бота и token
Шаг 2
- Идём сюда @xlsheet_bot — это наш бот для создания бота из гугл-таблички
- Пишем /start
- Вводим свою гугло-почту (@gmail.com)
- Вводим token из BotFather
- Ждём
Ура, бот создал гугл-табличку! Иди проверять почту, там должно быть вот такое уведомление.
Шаг 3 — Редактируем табличку
Ну что, до этого всё было слишком легко, да? Давай теперь приступим к основном блюду!
Разбираемся с “листами”
- Settings, Broadcasts и Rules — их можешь особо не трогать
- Flow Default — условно это первый экран, который видит пользователь
- Flow Fallback —что-то типа страницы 404, нужно, чтобы вернуть пользователя к первому экрану, если он натыкает что-то не то
- Flow 1,2,3… — ключевая фишка в том, что мы можем создавать бесконечное кол-во новых листов и тем самым создавать новые сценарии использования нашего бота
Разбираемся с колонками
- type — тип функции, их предусмотрено много, но мы будем использоваться только три: text, action & ask
- text — собственно текст, который бот отправит пользователю
- data — техническое поле куда будем писать инструкции для функций
- typing — сюда можно вбить кол-во секунд сколько бот должен типа печатать сообщение, чтобы изображать живого человека 😅
- buttons — текст кнопок, если они предполагаются
- next — указание на следующее действие
Ну а строчки в табличке — это последовательность действий бота.
Flow Default
Это первый экран нашего бота, который человек увидит после того как отправит боту команду /start.
Мой бот приветствует человека по имени, спрашивает с чем он может помочь и показывает 3 кнопки (действия) на выбор.
Сначала про первую строчку, она выделена голубым на картинке выше.
- Функция type отправит пользователю текст из ячейки B2
- Условное обозначение {{user.firstName}} заменится на имя пользователя, которое он указал в телеге
- В столбике data у меня стоит mode:quick, чтобы сообщение появлялось мгновенно
- В столбике buttons можно вписать сколько угодно кнопок, главное поставить знак ; между названиями. Также можно использовать эмодзи
- В столбике next указываем номера строк таблички на которые должны вести наши текстовые кнопки. Митапы — строчка 4, вопросы — 7, команда — 10
Зеленым отмечены команды действий, которые ведут на другие Flow — их в моем боте 5. Все действия здесь сделаны одинаково, поэтому разберем только строчку #4.
- Это функция action, поэтому мы должны использовать колону data, куда впишем что действие должно делать
- sendFlow означает, что мы хотим отправить бота посмотреть другой лист нашей таблички
- flow: Flow Meetup — указывает на какой лист таблички мы его отравляем, где “Flow Meetup” — название конкретного листа
В телеге этот “код” будет выглядеть так:
Ну а дальше дублируете лист Flow Default и таким образом создаёте новые сценарии!
Что можно делать с помощью бота?
В целом, у @xlsheet_bot есть целый справочник того, что можно сделать используя их конструктор, но мне не со всем удалось разобраться. 😅
Изначально я задумала сделать бота для выполнения трёх рутинных действий:
- Регистрировать народ для участия в митапах нашей команды
- Собирать вопросы (анонимно и НЕ анонимно)
- Отправлять рассылку
На мой взгляд, самое крутое, что можно делать с помощью бота — это собирать данные от пользователей в табличку. И вот как это можно использовать, например, для задачи по регистрации людей на митапчик.
Продумываем сценарий
Вообще будет полезным сначала нарисовать что-то типа блок-схемы, чтобы было проще собирать алгоритм бота. Очень соверую такое сделать, так как я сначала делала без нее и пришлось делать очень много правок, чтобы довести всё до ума.
Вводные:
- У нас иногда идет сбор заявок сразу на несколько митапов, поэтому нужна развилка
- Помимо почту хочется еще собирать вопросы для спикеров
- Бот умеет передавать данные только с помощью поля ask
- Я не разобралась как присвоить данным какой-то лейбл, поэтому пришлось на каждый митап делать несколько Flow (листов) в табличке 🙈
Создаём Flow
В итоге в табличке мы имеем 3 Flow для регистрации на митапы:
- Flow Meetup — со списком ближайших митапов и кнопка регистрации на каждый
- FLow Reg1 — регистрация на первый митап
- Flow Reg2 — на второй
Flow Meetup оч простой, если вы смогли повторить Flow Default, то с этим проблем у вас тоже не будет.
А вот Flow Reg1 уже выглядит посложнее, но обо всем попорядку.
Первым делом мы спрашиваем email, чтобы потом отправить юзеру приглос на почту, поэтому создаем функцию ask — она пробросит полученные данные обратно в табличку.
Далее нужна развилка хочет ли человек задать вопрос, поэтому делаем простую text функцию с 2 кнопками. Если человек выбирает “да”, то на этот случай у нас есть еще одна ask функция.
Самое главное действие в этом Flow — строчка 12 и функция action с действием saveRecord, именно благодаря ей мы получим ответы пользователя.
После того как данные отправлены показываем пользователю success screen и навигационные кнопки.
Создаём листы для базы данных
Чтобы функция saveRecord нам нужно создать лист с “базой”, куда бот будет скидывать данные. В моем примере такой лист называется Meetup1. Там нужно задать колонкам названия и вписать их под функцией.
Фигачим автоматизацию
Поскольку я не сообразила как присвоить Flow лейблы или теги и мне пришлось делать отдельные листы для каждого Flow и для каждой “базы” моя табличка стала очень перегружена “листами”. Поэтому я через Integromat настроила перенос данных с 2х листов в моей табличке в 1 базу на AirTable (таки уже с тегами конкретного митапа 😅). Также во время переноса Integromat фильтровал имейл, чтобы внести в AirTable только корпоративные.
Ну вот и всё. Таким же образом, как функцию ask почты можно настроить проброс в базу каких угодно данных. А если прикрутить ко всему этому Integromat, то можно и рассылки любые делать, и вообще очень много всего! Дерзайте!
🔗 Полная исходная табличка моего бота — играйте на здоровье! 🤓