Пишем простого телеграм-бота на гугл-таблицах

Хлопова Дарья
6 min readJul 14, 2021

--

— Ой, гугл, как мне собрать чат-бота? Да так, чтобы и бесплатно, и с супер гибким функционалом!

В первом приближении есть две опции:

А. Выучить Python, чтобы самостоятельно делать любых ботов. Сложность: 999; Стоимость: Условно бесплатно

Б. Оплатить подписку на конструкторе ботов. Сложность: изи-пизи; Стоимость: $$$

Ну нам, конечно же, бот нужен прямо сейчас, поэтому вариант с изучением питона отпадает. 🤓 Идём смотреть конструкторы — они, в основном, не супер гибкие, ну и платные конечно же... 😒 А ведь мы — кулцхакеры, мы же всё хотим беспалтно, да? Так что тоже не вариант…

И тут на сцену выходит @xlsheet_bot — это тг-бот, который позволит тебе создать бота бесплатно!

Шаг 1

Перед тем как идти в @xlsheet_bot нужно получить token будущего бота. Это такой уникальный ключ, которые авторизует нашего бота в царстве ботов.

  1. Заходим в телегу
  2. Идём сюда @BotFather — это официальный тг-бот для создания ботов. Ботов папка короче
  3. Пишем /newbot
  4. Вписываем любое имя, которое будет заканчиваться на “bot”. Лично у меня он с первого раза не принимает любое имя, поэтому я всегда 2 раза отправляю одно и тоже 🤔
  5. Дальше бот должен прислать нам сообщение, мол всё получилось, дать ссылку на нашего бота и token

Шаг 2

  1. Идём сюда @xlsheet_bot — это наш бот для создания бота из гугл-таблички
  2. Пишем /start
  3. Вводим свою гугло-почту (@gmail.com)
  4. Вводим token из BotFather
  5. Ждём

Ура, бот создал гугл-табличку! Иди проверять почту, там должно быть вот такое уведомление.

Шаг 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 есть целый справочник того, что можно сделать используя их конструктор, но мне не со всем удалось разобраться. 😅

Изначально я задумала сделать бота для выполнения трёх рутинных действий:

  1. Регистрировать народ для участия в митапах нашей команды
  2. Собирать вопросы (анонимно и НЕ анонимно)
  3. Отправлять рассылку

На мой взгляд, самое крутое, что можно делать с помощью бота — это собирать данные от пользователей в табличку. И вот как это можно использовать, например, для задачи по регистрации людей на митапчик.

Продумываем сценарий

Вообще будет полезным сначала нарисовать что-то типа блок-схемы, чтобы было проще собирать алгоритм бота. Очень соверую такое сделать, так как я сначала делала без нее и пришлось делать очень много правок, чтобы довести всё до ума.

Вводные:

  • У нас иногда идет сбор заявок сразу на несколько митапов, поэтому нужна развилка
  • Помимо почту хочется еще собирать вопросы для спикеров
  • Бот умеет передавать данные только с помощью поля 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, то можно и рассылки любые делать, и вообще очень много всего! Дерзайте!

🔗 Полная исходная табличка моего бота — играйте на здоровье! 🤓

--

--