Автоматизируй это: как мы разгружали почту потока

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

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

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

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

Переcылка в Gmail добавляется в настройках на вкладке “Пересылка и POP/IMAP”. Специальный адрес электронной почты, который “слушает” Trello и переделывает письма в карточки на доске, можно получить после нажатия на кнопку “Menu”, далее “Next” , затем “Email Settings”.

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

Автоматизацию с телеграмом настраивать уже немного сложнее.

После создания Telegram-канала мы поняли, что в этот канал сторонние боты писать не могут. Таким образом, бот IFTTT нам помочь не смог, а сам сервис все-таки сыграл свою важную роль. Здесь мы настроили Applet (в сервисе IFTTT) под названием “If any new email in inbox for …@gmail.com, then make a web request”, который после получения новых писем делает запрос на Telegram Bot API, которое в свою очередь публикует сообщение в канал с помощью бота.
Для начала нужно зарегистрировать бота, чтобы получить его токен. Делается это с помощью специального служебного бота @BotFather.

Запрос к Bot API выглядит так:

  • URL: https://api.telegram.org/botBOTTOKEN/sendMessage?chat_id=CHAT_ID&parse_mode=markdown
  • Method: POST
  • Content-type: application/json
  • Body:
    1
    2
    3
    4
    5
    6
    7
    {
    "chat_id":"CHAT_ID",
    "parse_mode": "markdown",
    "text":"*{{Subject}}* от {{FromAddress}} \n
    {{FirstAttachmentPublicURL}} \n
    Полная версия на доске https://trello.com/..."
    }

Используемые сокращения:

  • BOTTOKEN - токен созданного нами на предыдущем шаге бота
  • CHAT_ID - ID чата, в который надо публиковать сообщения (после добавления бота в этот чат, ID чата можно будет увидеть, открыв следующую ссылку https://api.telegram.org/botBOTОКЕN/getUpdates)
  • Вместо переменных подставляются соответствующие поля из электронного письма
  • trello.com/… - ссылка на нашу доску, для того, чтобы можно было прочесть полную версию письма или ознакомиться с другими документами

Иногда бывает так, что старосты групп (только они имеют доступ на редактирование доски) добавляют информацию на доску вручную. Для того, чтобы эта информация тоже попадала в телеграм, был настроен еще один IFTTT-Applet “If card added to the board in Trello make a web request” со следующими параметрами:

  • URL, Method, Content-type такие же, как и в предыдущем шаге.
  • Body:
    1
    2
    3
    4
    5
    6
    7
    {
    "chat_id":"-1001082774373",
    "parse_mode": "markdown",
    "text":"<<<*{{Title}}*>>> в списке {{ListName}} \n
    {{Description}} \n
    <<<[Посмотреть полностью]({{CardURL}})>>>"
    }

Опять-таки, вместо переменных подставляются данные из добавленной карточки из Trello.

В результате, в канале появлялись сообщения следующего вида:

После выполнения вышеуказанных настроек, происходило тестирование, длившееся достаточно долго. Так как в IFTTT обрабатывается очень много событий, наши запросы иногда выполнялись моментально, иногда около часа, а иногда (крайне редко, конечно) вообще не выполнялись.

Спасибо Андрею Романову за помощь в организации и тестировании данной затеи. В целом, студенты и старосты были довольны нашим трудом. Хочется отметить, что всё, что описано выше, не требует вложений (Trello, IFTTT, Telegram - бесплатные) и написания кода (все работает через связки API этих сервисов). Однако, если вы захотите что-то улучшить в данной автоматизации, то вам все-таки придется написать своего бота, который будет обрабатывать вебхуки от других API.