Или как я открыл для себя Google App Scripts

До того, как я начал работать в Alpha Camp, одной из проблем, с которыми я сталкивался, было сотрудничество с относительно большой нетехнической командой, которая отвечала за планирование празднования дня рождения. Были доступны отличные существующие приложения (с немного другими областями), такие как Slack, Trello, GCal и т. д., но ни одно из них не требовало нулевой кривой обучения.

Мой мыслительный процесс в то время

Единственным приложением, которое было у всех в команде, был Telegram. По сути, это Whatsapp, но не для динозавров (шучу, просто кажется, что молодые люди предпочитают Telegram. Если вы не знакомы с ним, скачайте его прямо сейчас, вы мгновенно почувствуете себя на 10 лет моложе).

Итак, первым делом я прошерстил магазин Telegram Bot в поисках подходящего бота, который позволил бы мне 1) легко планировать напоминания, 2) отправлять напоминания группе. Ничего тогда не нашел, кроме пары ботов, которые работали на отправку напоминаний самому себе.

Мое решение

В конце концов, я использовал это руководство для настройки системы обмена сообщениями. Мой бот извлекал информацию из Календаря Google и отправлял напоминания с определенным текстом (и именами).



Осталось только добавить дни рождения в Календарь Google. Теперь нам нужно было добавить около 30 имен, и мы хотели добавить напоминания за 7 и 14 дней до этого, так что у нас было бы 90 записей вручную. Вместо этого я решил загрузить CSV. На тот момент я не умел программировать, но я неплохо разбирался в Excel, поэтому здесь я проделал тяжелую работу с конкатенацией и вычислениями!



Так работает уже больше года. Моя главная проблема с этим решением заключается в том, что его действительно сложно воспроизвести для кого-то, кто менее техничен, чем я: для этого требуется создание бота, манипулирование файлом CSV, загрузка в GCal и тщательное редактирование рецепта IFTTT. И я знал, что это важно, потому что 5 разных человек спрашивали меня, как они могут использовать моего «День рождения бота» для своих собственных групп ячеек.

Перемотать вперед к настоящему

Недавно я провел некоторое время, пересматривая эту проблему перед лицом новых знаний, которые я получил в Альфа-лагере. Моей первой мыслью было создать приложение Rails, которое принимает файл CSV, анализирует его и отправляет запросы POST в Telegram API. Но это казалось полным излишеством.

Моя вторая мысль (которую я сейчас использую) заключалась в том, чтобы использовать скрипт Google для прямой отправки JSON POST в Telegram API. Самое интересное, что вы можете заставить Google Script запускаться автоматически каждый день.

Предыстория.Несколько недель назад я развернул приложение на Heroku (бесплатный уровень) и на собственном опыте осознал, насколько раздражает дремлющий Heroku, поэтому нашел в Интернете решение, в котором использовались Google Sheet и связанный Google Script для периодического ПОЛУЧЕНИЯ приложения, предотвращая дремоту приложения. Так я открыл для себя Google App Script.

В основном пользователь:

  1. Добавляет моего бота Telegram в свой канал Telegram в качестве администратора
  2. Вставляет в 3 столбца (имя, дата рождения, ответственное лицо) на трекере дней рождения
  3. Вставляет в дескриптор канала Telegram
  4. Скрипт справится с остальным!

Сам скрипт

Я не буду вставлять его сюда, потому что там токен бота! Но в основном GAS построен на Javascript, поэтому я просто:

  1. Собранный массив дат из электронной таблицы
  2. Собранный массив сообщений из электронной таблицы
  3. Сравнил каждую дату с текущей датой (попался, что объекты даты в GAS сомнительны. Просто используйте String(date).substr(0,10) или что-то в этом роде, чтобы сравнить даты.
  4. Отправлено сообщение JSON, если дата === текущая дата

Несколько скриншотов:

Возможные будущие улучшения

Возможно, когда-нибудь в будущем я все же попытаюсь сделать приложение для Rails. Мне не нравится тот факт, что пользователю по-прежнему приходится вручную добавлять бота на свой канал, и что я не могу легко поделиться электронной таблицей с прикрепленным к ней скриптом (ежедневное расписание не устанавливается автоматически, когда лист открыт). скопировано).