guap-alice: расписание ГУАП голосом

Голосовой навык Алисы: недельное расписание, контекст диалога и ответ до истечения таймаута.

guap-alice: расписание ГУАП голосом

В сентябре 2026 года я сделал голосовой интерфейс к расписанию ГУАП. Хотелось спросить «ко скольки завтра» и получить время первой пары, аудиторию и корпус, сохранив группу между разговорами. Из этой задачи вырос guap-alice, или Гуапик: Python-сервис с вебхуком для Яндекс Диалогов.

Реальная страница Гуапик: голосовые команды и устройство навыка расписания
Страница навыка «Гуапик»: примеры команд и описание работы.

Разговор, который держит контекст

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

В документации проекта приведён такой сценарий:

РепликаПоведение навыка
«Моя группа 3437к»Сохраняет группу для следующих разговоров
«Что завтра»Называет пары, предметы, аудитории и корпуса
«Ко скольки»Возвращает время начала первой пары того же дня
«Есть окна»Проверяет промежутки между занятиями

Постоянный выбор группы отделён от разового вопроса. «У 2210 завтра» позволяет посмотреть чужое расписание, сохранив свою группу. Есть отдельный контекст преподавателя: «что у Фомичевой в четверг», затем «а в пятницу». При совпадении фамилий навык просит инициалы; неоднозначные даты и номера пар тоже уточняет.

От недельного шаблона к конкретной дате

Источник ГУАП отдаёт недельный шаблон с верхней и нижней неделей. Чтобы ответить про дату, провайдер читает номер и чётность текущей недели, вычисляет нужную неделю и выбирает подходящие занятия. В справочнике 581 группа и 775 преподавателей; обновление справочника вынесено в отдельный скрипт.

1
2
3
4
5
6
7
Алиса / Яндекс Диалоги
          ↓ HTTPS
FastAPI → группа, дата и контекст разговора
          ↓
провайдер расписания → кэш → публичная страница ГУАП
          ↓
выбор занятий → шаблон ответа → Алиса

Даты, диалог, загрузка расписания и русская речь разделены на модули. Ответ собирается из проверяемых шаблонов. Для ГУАП важны корпуса: когда занятия проходят по разным адресам, навык предупреждает о переезде. Отдельно пришлось разбирать падежи и исправлять случай, когда слово «пятницу» распознавалось как «пятая пара».

Как пережить медленный источник

На весь обработчик отведено 2,8 секунды, на запрос расписания 1,8 секунды. Свежий кэш используется час; при ошибке источника прежнее расписание можно отдать в пределах суток. После этого сервис объясняет недоступность данных. Эти пределы заданы в конфигурации, а поведение кэша реализовано в провайдере.

Вебхук проверяет JSON, размер запроса и при настройке список разрешённых навыков. Реплики и идентификаторы пользователей не записываются в журналы; выбранная группа хранится средствами Яндекса.

Что получилось и как проверять

Реализованы диалог, календарный расчёт и HTTP-сервис. В тестах есть случаи чётности недели, разового выбора другой группы, окон, переезда между корпусами, неоднозначных запросов и отказа источника. Они используют синтетические расписания; изменение реальной HTML-разметки нужно дополнительно проверять на живом источнике.

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

Открытый код guap-alice · Страница проекта · Описание источника данных

Авторский пост защищен лицензией CC BY 4.0 .

Контакты