Найти тему
КиберMamedov 💻🔥

Рассылка данных из вкладки гугл таблицы через телеграм бота

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

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

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

Если вы уже знакомы с прошлыми статьями, то сегодня мы закончим наконец-то разработку бота и добавим последние и самые важные штрихи. Нас ждет создание трех функций:

  1. getListOfCitiesInTab - возврат списка городов во вкладке месяца;
  2. getCurrentLinesByCityForSending - формирование данных для отправки по каждому городу;
  3. sendingDataToTheEmployeeForTheCurrentPartOfTheMonth - отправка данных по шаблону.

Эти функции мы обсуждали в прошлой статье, но т.к. они относятся к работе другой вкладки, а мы следуем четкому разделению: вкладка в таблице = отдельный файл сценария. То данные функции мы подробно рассмотрим сегодня.

Функции пронумерованы строго в последовательности их использования. Поэтому начнем с первой getListOfCitiesInTab.

Определение списка городов в зарплатной ведомости  и границы данных каждого города
Определение списка городов в зарплатной ведомости и границы данных каждого города

Функция достаточно проста. Мы берем массив данных из вкладки, посредством этой строки: let dataFromTheMonthTab = getTabDataRange(monthTab). Затем переходим к перебору всех строк используя цикл for (он там один).

Название города хранится в столбца А, поэтому в условии проверяем факт того, что там не пустая ячейка:

let cellValue = dataFromTheMonthTab[row][COLUMN_A];

if(cellValue != "")

Далее мы определяем два новых ключа:

  • from - с какой строки начинаются полезные данные по городу;
  • to - какой строкой заканчиваются полезные данные по городу.

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

Основная проблема заключается в том, что для последнего города нет ориентира последней строки, т.к. в столбце А больше не встретиться другого города. Поэтому, для последнего города во вкладке с ведомостью мы просто добавляем для ключа to значение from плюс 50 строк. Это даже с запасом, т.к. в каждом городе не встречается больше 10 сотрудников.

Вот эта строчка: citiesNameAndPositionInTab[previousCity]["to"]= citiesNameAndPositionInTab[previousCity]["from"] + 50

В результате функция возвращает ассоциативный массив, где ключи - это города, а внутри другой ключ, который содержит два ключа from и to. Вот так выглядит структура:

{“Выселки”: {“from”:68, “to”:78}}

Следующая функция формирует все полезные данные для отправки по конкретному городу.

Формирование полезных данных для рассылки
Формирование полезных данных для рассылки

Принцип работы функции простой:

  1. Получаем целиком массив данных по вкладке месяца;
  2. Делаем срез данных за конкретный город, посредством полученных границ from и to из предыдущей функции;
  3. Запускаем цикл, который пробежится по этим строкам массива;
  4. Извлекаем данные только из актуальных для нас столбцов;
  5. Формируем ассоциативный массив из полезных данных и добавляем в массив сотрудников;
  6. Возвращаем массив.

Функция только кажется большой, а фактически она простая.

После того, как мы получили все необходимые для нас данные, мы просто отправляем их по сформированному шаблону.

Функция отправки шаблона сообщения о ЗП сотрудника
Функция отправки шаблона сообщения о ЗП сотрудника

Хочу напомнить, что в нашей функции sendMessage установлен parse_mode со значением HTML, т.е. мы можем форматировать текст используя некоторые теги HTML. Только тег <br> для переноса на следующую строку недоступен, необходимо использовать \n. Но прошу заметить, что когда вы оформляете в форматируемой строке, т.е. через косые кавычки, то нажатая клавиша Enter учитывается и автоматически вписывается, как \n.

Все, теперь делаем новое развертывание, запускаем функцию setWebhook и пробуем отправить команду /send, только не забывайте поставить значение 1 напротив вашей учетной записи во вкладке users.

Результат успешной работы бота
Результат успешной работы бота

Специально добавил себя в разные города, чтобы показать работоспособность бота.

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

Подписывайся, чтобы быть всегда в курсе актуальных инструментов в мире IT.