Мне надоело искать нужную ссылку на конфколл, и я написал бота, который делает это за меня

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

unsplash.com
unsplash.com

Начну с небольшой предыстории. Мы в TYMY ведем дела по всем рабочим проектам в Яндекс календаре. И у него есть одна очень раздражающая особенность — отсутствие нормальных уведомлений о встречах. На телефоне уведомлений нет, настроить напоминание о встрече можно в почте или SMS-сообщением. Кто вообще в 2024 году оперативно читает почту? А в SMS нет информации о встрече, нельзя перейти по ссылке или посмотреть детали. Недавно Яндекс сделал оповещения через пуши в приложении почты, но меня раздражают уведомления о письмах, всегда отключаю их и смотрю поток рабочих писем, когда собственно проверяю почту. Так что проблему это не решило.

Для личных целей я использую Google Календарь, он справляется с задачей оповещений лучше, но всё равно приходится переходить в систему и искать ссылку на встречу. Жить можно, но неудобно. В какой-то момент я пытался синхронизировать календари, однако выяснилось, что Яндекс некорректно импортируется в Google — часть информации теряется.

Вместо надписи Busy в календаре обычно отображается название встречи и ссылка на звонок.
Вместо надписи Busy в календаре обычно отображается название встречи и ссылка на звонок.

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

Разумеется, прежде чем садиться за работу, я попытался найти готовое решение — вдруг кто-то уже сделал такого бота до меня. Но поиск ничего толкового не принёс. Возможно, к слову, проблема в поиске Телеграма: по названию бота сложно понять его профиль, а поиска с описанием внутри самого Телеграма нет. Я протестировал несколько найденных ботов и не обнаружил ничего похожего, беглый поиск по интернету тоже ничего не дал. Не могу сказать, что меня это удивило — вряд ли много людей озадачены этой проблемой. Например, среди моего окружения процент тех, кто, ежедневно пользуется только Яндекс Календарем, а не Google, Outlook или iCloud, крайне мал. Так мне окончательно стало ясно, что писать бота нужно самостоятельно.

Немного о том, что у бота под капотом

Не вижу необходимости детально описывать разработку, если кому-то интересно, дайте знать, могу рассказать и подробней — здесь или на Хабре.

Если коротко, то писал я на Python. У меня не было иллюзии, что это будет нагруженный инструмент, который будет обрабатывать большое количество запросов, поэтому не стал брать низкоуровневые языки, как С++ или, например, Go. Плюс это личный проект, и я хотел написать его на языке, который знаю лучше всего. После изучения доступных библиотек остановился на наиболее продвинутой по отзывам aiogram.

Первый вариант, который еще не умел отправлять события в чат с пользователем, а имел только базовый флоу регистрации, занял у меня чуть больше времени, чем я ожидал – был ряд технических сложностей, которые возникли скорей из-за того, что я не был знаком с концепциями Телеграм. Например, в библиотеке реализован механизм конечных автоматов Finite-state machine, который помог реализовать добавление нового календаря. Также в боте реализовано три независимых сервиса и нужно было решить, как передавать состояние из сервиса, который присылает сообщения в сервис, где обрабатывается команда пользователя. Решить эту проблему удалось с помощью кэширования.

Мне надоело искать нужную ссылку на конфколл, и я написал бота, который делает это за меня

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

Сбор данных у Яндекса

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

Дополнив этот функционал, я получил уже готовую версию бота, который мог полноценно работать с Яндекс календарем. Оставалось разобраться с инфраструктурой, арендовать небольшой сервер и настроить минимальный CI/CD.

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

Сбор данных у Гугла

Я хотел распространить бот сразу и на другие календари. Но это оказалось не так легко сделать. Начал я с Гугл-календаря, которым, как уже говорил, пользуюсь сам. И если с Яндексом все было относительно просто, тут пришлось повозиться: нужно было сделать сайт для бота, составить и отправить в Google политику конфиденциальности — Privacy Policy, снять видео о работе бота для прохождения проверки. В общем, было интересно.

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

Что в итоге

Сейчас бот прошел второе тестирование. После первого обнаружилось много нюансов, которые пришлось доработать, второе принесло пока только позитивный отклик. Несмотря на то, что релиз я готовил к дню рождения Алексея Майстренко, CEO TYMY, один из самых благодарных пользователей его – это я сам. Уже плотно интегрировал бота в ежедневную рутину. Если раньше я начинал день с просмотра рабочего календаря, то теперь открываю Телеграм и смотрю сводку событий в боте, а он мне желает хорошего дня :)

<p>По отзывам коллег, которые находятся постоянно в движении, с ботом им стало проще и удобней следить за встречами в разных календарях — подключать к боту сразу два календаря и получать единую сводку событий на день.</p>

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

Мне надоело искать нужную ссылку на конфколл, и я написал бота, который делает это за меня

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

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

Краткая сводка и ссылка на бот

Резюмирую, что умеет бот на сегодня:

- учитывать и подстраиваться под часовой пояс,

- помогать кастомизировать время уведомлений,

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

- делать сводку на день (время сводки можно кастомизировать),

- отключить сводку на выходные и в целом выбирать дни недели.

Буду рад вашим тестам и отзывам: calendar_tracker_bot

1414
4 комментария

Ого, 2,5 часа сквоша это сильно.

1

вот бы мне так решать свои проблемы

Супер-бот calendar_tracker_bot) Пользуюсь с удовольствием