Как к телеграм боту подключить гугл календарь

от admin

Epical — Telegram бот для Google календаря

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

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

Гораздо удобнее подключить уведомления в Телеграм и получить их сразу на всех устройствах. Существующего решения я не нашел, так что пришлось написать свое.

Что умеет бот:

1. Уведомлять о предстоящем событии за 1 минуту, 5, 10 или 15 минут

2. Работать с несколькими аккаунтами

3. Работать с несколькими календарями в каждом аккаунте

4. Гибко отслеживать состояние события. Например, если у вас установлено уведомление за 1 минуту, а событие удалено за 2, бот это поймет.

5. Присылать кнопку для подключения к онлайн-митингу и данные об организаторе события.

Как это выглядит?

Вот пример, как оно будет работать в чате:

А сколько стоит?

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

Как настроить передачу уведомлений из Google Calendar в Telegram

В IT-сфере работа, зачастую, распределена по спринтам. Как правило, это две недели в течение которых команды занимаются определённым пулом задач. Каждый спринт тимлидам/проектным менеджерам нужно выполнять ряд повторяющихся действий:

  • давать задачи на ознакомление команде;
  • оценивать задачи с командой;
  • в день релиза не назначать митинги с командой;
  • не пытаться вместить задачи в релиз после установленного дедлайна.

У всех действий в спринте есть крайние сроки и все специалисты о них знают. Но периодически приходится напоминать о том, что по умолчанию всем известно. Задачу напоминания об одном и том же можно переложить на Telegram, используя сервис IFTTT (If this, then that).

1. Google Календарь

Если в вашей компании продолжительность спринта фиксированная и дедлайны по каждому действию известны, для планирования повторяющихся действий подходит Google Календарь.

2. Нажимаем кнопку создания нового календаря:

3. Заполняем название (обязательно) и описание (не обязательно) календаря:

Заполняем название и описание календаря

4. В созданный календарь добавляем повторяющиеся действия в виде событий и задаем для них расписание повторения:

Добавляем повторяющиеся действия в виде событий и задаем для них расписание повторения

2. Telegram

Создаем в Telegram публичный канал, в который будут приходить уведомления.

Важно: канал должен быть публичным, потому что IFTTT не умеет работать с приватными каналами.

1. Создаем канал.

Создаем канал

Создаем канал

2. Задаем понятное имя канала.

Задаем понятное имя канала

3. Делаем канал публичным и указываем для него сложный URL, который нельзя подобрать и попасть в ваш канал.

Указываем для него сложный URL

4. Добавляем в канал всех, кому должны приходить оповещения.

Добавляем в канал всех, кому должны приходить оповещения

3. IFTTT

Регистрируемся в ifttt.com, создаем подключение календаря к Telegram и начинаем настраивать условие активации.

Начинаем настраивать условие активации

1. Находим и выбираем в списке доступных приложений Google Календарь

выбираем в списке доступных приложений Google Календарь

2. Выбираем активацию при начале любого события в календаре:

Выбираем активацию при начале любого события в календаре

3. Из списка доступных календарей выбираем созданный нами и указываем за сколько минут до начала события будут приходить уведомления (на скриншоте — за 30 минут):

Выбираем за сколько минут до начала события нам будут приходить уведомления

4. Начинаем настраивать отправку уведомлений в Telegram:

Начинаем настраивать отправку уведомлений в Telegram

5. Находим и выбираем в списке доступных приложений Telegram:

Находим и выбираем в списке доступных приложений Telegram

6. Выбираем в качестве действия отправку сообщения:

Выбираем в качестве действия отправку сообщения

7. Для отправки сообщений в Telegram через IFTTT нужно подключить бота IFTTT к нужному каналу. Для этого нажимаем:

Нужно подключить бота IFTTT

8. Переходим в Telegram и нажимаем «Start»:

нажимаем «Start»

9. Выполняем инструкцию, которую прислал бот:

Выполняем инструкцию, которую прислал бот

10. Если возникают ошибки, то бот об этом скажет. Выполняем все его инструкции, пока не получим сообщение об успешном подключении канала:

Выполняем все его инструкции, пока не получим сообщение об успешном подключении канала

11. Возвращаемся в IFTTT и обновляем страницу с настройками отправки сообщений. В списке доступных для отправки сообщений каналов должен появиться нужный нам канал:

должен появиться нужный нам канал

12. Настраиваем удобное для нас форматирование сообщения:

Настраиваем удобное для нас форматирование сообщения

13. Сохраняем. Если хотим получать на почту уведомления об отправке сообщения, то включаем настройку на последнем шаге и завершаем настройку, нажав на кнопку «Finish»:

Включаем настройку на последнем шаге и завершаем настройку, нажав на кнопку «Finish»

Кстати, Телеграм — не только и не столько удобный мессенджер с различными полезными функциями, это ещё и мощный канал привлечения лидов, трафика. Мы запустили новую услугу — продвижение Telegram каналов.

Результат

В списке наших аплетов появится новый. Здесь же можно его включать/выключать, менять настройки и удалять.

Теперь в созданный Telegram-канал нам будут приходить сообщения (в предварительно заданном формате) — напоминания о событии из календаря.

Важно: созданный апплет начинает работать не моментально. Лучше проверять его работу через 30-60 минут после создания.

В области интернет-маркетинга с 2011 года. В 2013 присоединился к Netpeak.

С 2015 года занимал должность Senior SEO Specialist. Руководил командой из 6 человек. Успел поработать над более чем 70 проектами. Среди них крупные международные проекты в различных тематиках. В 2016 году перешел на должность Analytics Strategist.

Автор статей в тематике поискового продвижения и web-аналитики. Докладчик на профильных семинарах и конференциях. Сферы интересов: SEO, web-аналитика, data science, Capoeira.

Уведомления из гугл календаря в телеграм

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

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

Но все равно я периодически пропускала уведомления о начале какого-либо события.

Читать:
Как собрать qt из исходников

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

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

Реализация

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

Далее выбираем Подписаться на календарь и вводим почту, на кого подписываемся. Я не буду подробно здесь останавливаться, возможно нужны дополнительные пермишены и подтверждения, но я уверена, что вы справитесь.

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

Получение всех событий из календаря

В App Script есть класс CalendarApp , в котором мы используем метод getCalendarById(calendar_id) , calendar_id — это ваш gmail login.

Таким образом я сохраняю оба календаря в соответствующие переменные:

Далее отфильтрую все события по дате, я хочу получить планы только на сегодня и использую метод getEventsForDay(date) . Также записываю их в переменные

Полученные массивы просто объединяем в один методом concat() . При обращении к элементу массива мы увидим в консоли CalendarEvent . Чтобы вычленить подробности из CalendarEvent , нужно обратиться к каждому элементу и забрать нужную инфу, например, название, время начала, описание.

Для данного набора запрашиваемой информации мне нужно использовать методы getDescription(), getTitle(), getStartTime().

Помимо получения деталей события я их преобразую в нужный мне вид. Например, getStartTime() возвращает мне дату целиком и возвращаемое время не соответствует моему часовому поясу. Учитывая, что я хочу получить только время вида чч:мм, я преобразую время следующим образом

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

То есть описание из календаря как на картинке слева, в консоли может выглядеть как: <html-blob>Professor&nbsp;<b>Sabine Lüder</b><br><a href=»https://tu-ilmenau.webex.com/tu-ilmenau/j.php?MTID=m4372a53e03a381435″ referrerpolicy=»origin» __is_owner=»true»>Link</a><br><br><br><dl><dt><b>Gastgeber-Kennnummer:&nbsp;</b>348984</dt></dl><br><u></u><br><u></u></html-blob>

И проблема заключается в отправке в телеграм. Чтобы все обработалось гладко и сообщение выглядело примерно следующим образом

я применила замену (я просто остановилась на решении, которое работает, не вдаваясь в детали) :

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

Да, здесь же я сортирую события по возрастанию времени их старта.

Отдельно я написала функцию, которая преобразует время в удобоваримый вид

Отправка в телеграм

Наконец, функции отправки в чат с ботом. Я разделила отправку на 2 отдельные функции: 1-я отправляет одно событие в чат за 5-8 минут до начала, 2-я отправляет все события списком в одном сообщении по порядку следования.

Функция send_next_event() проверяет разницу между текущим временем и стартовым временем каждого из событий в массиве и отправляет сообщение в чат ( send(msg,chat_id_root,API) ) примерно за 5 минут.

Понимаю, здесь очень странные манипуляции со значением времени, но вот так это выглядит в js. Я сама еще в этом плаваю, потому не хочу объяснять все детали, т.к. сама искала ответы онлайн касаемо этой части. В целом, идея была преобразовать время из 1.65286722566E12 во время вида 13:00 .

Функция для отправки всех событий представлена ниже.

Функция активируется по триггеру каждое утро, а также я могу запустить ее по команде из бота.

Как выглядят планы в чатеКак выглядят планы в чате Как выглядят календариКак выглядят календари

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

Creating a Telegram Calendar Bot with Google’s API

The above is a demo of a simple conversational bot a colleague and I built during our 2nd week for Flatiron School’s Flatiron Presents event. Feel free to check out the mess of a code that we created via Github. It was written in the most basic of Ruby with a case statement for a language processor. Nonetheless, it was a great introduction into APIs and more importantly the realm of conversational bots.

Conversational bots have become very popular as of late with Facebook leading the front. Using Messenger now you can send money and call for an Uber. The philosophy behind this movement is the latest realization that most people dislike downloading mobile apps and prefer to stick to a handful. As a result, Facebook believes that Messenger will replace the need for you to download service apps such as Uber, Venmo, Meetups, Calendar, etc.

You should be able to accomplish all of these things without having to leave your one app. This will be facilitated with the use of conversational bots. We have already seen hardware implemented with these bots such as Siri, Alexa, Cortana, and so on. They have proven to be quite useful for consumers. I believe the conversational bots will have more practical use and even more so as the UI for interacting with these bots improves.

Похожие статьи