Edu Schedule

Telegram-бот с расписанием вуза: данные из API университета, кеширование и нечёткий поиск группы. 1 100+ активных пользователей за семестр.

Период
2022 — 2026
Статус
Завершён
Моя роль
Единственный разработчик: бот, интеграция с API вуза, кеширование и рассылка.

Стек

  • Python
  • aiogram
  • SQLite
  • nginx

Задача

На момент разработки расписание публиковалось студентам в PDF. Чтобы посмотреть пары, нужно было найти нужный документ, отыскать в нём свою группу, сопоставить чётность недели и разобрать таблицу с телефона. Бот сокращал этот путь до нажатия одной кнопки, а данные брал напрямую из API вуза.

Решение

Бот забирает расписание из API вуза, проверяет и кеширует данные и отдаёт занятия на любой день, учитывая чётность недели и сетку звонков конкретной группы. Группа выбирается нечётким поиском по названию: при ошибочном вводе бот показывает похожие варианты, и пользователь выбирает нужный.

Архитектура

  1. API вуза

    Актуальное расписание из официального API

  2. Проверка

    Проверка корректности и полноты

  3. Форматирование

    Приведение к единому формату

  4. Кеш

    Кеш: быстрые ответы и меньше запросов к API

  5. Ответ бота

    Ответ с актуальным расписанием

Обновление каждые 10 минут

Расписание всегда актуально

Ключевые технические решения

  • Кеш между ботом и API вуза: одинаковые запросы не уходят наружу повторно. Ответ приходит быстрее, а нагрузка на источник ниже.
  • Поиск группы по расстоянию Левенштейна: при неточном вводе бот показывает ближайшие названия, из которых пользователь выбирает нужное.

Получение данных

Бот автоматически получает актуальное расписание из API университета. Данные проверяются на корректность и полноту, приводятся к единому формату и кешируются: нагрузка на API ниже, ответы быстрее.

Выбор группы

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

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

Меню и ближайшие дни

После выбора группы открывается меню, где основные действия доступны в одно нажатие. Кнопки «Сегодня», «Завтра» и «Послезавтра» собирают занятия выбранного дня в одно сообщение. Если занятие проходит онлайн в Zoom, бот добавляет данные конференции и кнопку «Войти», чтобы подключиться одним нажатием без ручного ввода.

Меню и ближайшие дни
Расписание на день: каждая пара с преподавателем, временем и аудиторией, ссылка на конференцию для дистанта и кнопки «сегодня / завтра / послезавтра».

Дни недели

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

Дни недели
Один день недели сразу в двух вариантах: на чётной и нечётной неделе стоят разные пары.

Календарь

В календаре можно листать месяцы и выбрать конкретную дату. Бот сразу покажет расписание на этот день. Кнопка «Убрать» удаляет сообщение с календарём, чтобы он не копился в переписке.

Календарь
Календарь: любой день месяца открывает расписание на эту дату, а в меню остаются дни недели и дисциплины.

Время занятий

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

Время занятий
Пары с сеткой звонков конкретной группы и кнопкой, которая убирает сообщение из чата.

Информация о дисциплинах

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

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

Рассылки

Через бота рассылались важные сообщения студентам: можно было быстро предупредить об изменениях в расписании, объявлениях и других новостях. Бот работал не только как справочник расписания, но и как канал оперативной связи. Через рассылку также отправлялись итоговые сообщения: например, в конце семестра бот присылал статистику использования и список самых активных групп.

Рассылки
Итоговая рассылка за семестр: 36 000+ обращений к расписанию и десятка групп, которые пользовались ботом чаще всех.

Результаты

  • За семестр студенты открыли через бота расписание 36 000+ раз при 1 100+ активных пользователях.
  • Кеширование сократило повторные обращения к API вуза и ускорило ответы бота.

Метрики

открытий расписания за семестр
36 000+
активных пользователей
1 100+