Первые 90 дней иностранного студента
Бот в MAX ведёт иностранного первокурсника через обязательные процедуры первых 90 дней.
- Хакатон
- Хакатон MAX
- Организатор
- MAX
- Даты
- 15–25 сен 2026
- Коммитов
- 152
На хакатоне MAX нам не хватило юриста
Боевой режим ждёт юридической вычитки норм; до неё все правила помечены черновиком, и тест следит, чтобы так и оставалось.
Кто был в этот раз4 человека, есть новенькие
Состав: Ivan Banan, IR6, m1x, Chichetin. Впервые с нами: Chichetin.
Кейс
Трек «Забота о людях» от Минобрнауки и MAX: сделать чат-бота или мини-приложение в MAX для человека, которому нужны госуслуги. Конкретную проблему команда выбирала сама.
Мы взяли иностранного первокурсника. Он приехал учиться больше чем на 90 дней и обязан пройти медосвидетельствование и дактилоскопию. Сроки разные, считаются от даты въезда и поменялись 1 сентября 2026 года — ровно к заезду. Хуже всего, что источники спорят друг с другом. У КФУ две страницы одного университета дают разные сроки, а ИТМО и МГПУ склеивают две нормы в одну. Кто поверит, что на медосвидетельствование есть 90 дней, пропустит 30-дневный срок.
Что сдали
Бот в MAX спрашивает гражданство и дату въезда и строит личный план. Режим демонстрационный: сообщения помечены «ДЕМО», данные только учебные. Пилотный сценарий — совершеннолетний первокурсник в общежитии КФУ. Основной путь вручную пройден в мобильной и веб-версии MAX.
- Карточка процедуры: чек-лист документов, источник нормы с датой сверки, кнопка на текст закона.
- Напоминания и файл для календаря телефона. Календарь напомнит, даже если бот замьючен.
- «Не получилось»: готовый вопрос вузу с процедурой, сроком и датой въезда. Копируется одним нажатием, отправляет студент сам.
- QR-плакат вуза: сканируешь код — бот открывается в сценарии своего вуза.
- Мини-приложение с планом целиком. В браузере пройдено от старта до финала.
Как устроено
- Один процесс на Node.js и TypeScript, официальный SDK MAX, база PostgreSQL, запуск одной командой Docker Compose.
- Диалог — чистая функция: на входе сессия и действие, на выходе новая сессия и ответ. Чат и мини-приложение зовут одну функцию, второго набора правил нет.
- Webhook — адрес, куда MAX присылает события. Повтор того же события ничего не меняет, а «принято» MAX получает только после записи в базу.
- Сообщения отправляет фоновая очередь: при сбое повторяет до восьми раз и переживает перезапуск.
- Всё, что меняется при переносе, лежит в файлах данных, а не в коде: нормы со ссылками на закон, профили вузов, тексты интерфейса.
Цифры
- 30 и 90 дней — сроки медосвидетельствования и дактилоскопии от одной даты въезда.
- 4 языка: русский, английский, узбекский и китайский. Последние два — машинный перевод.
- За 7, 3 и 1 день до срока приходят напоминания, в 09:00 по Москве. Плюс одно после срока, если процедура не отмечена.
- 207 автотестов в 21 файле.
- 25 секунд — сборка Docker-образа с чистой копии при лимите в 5 минут.
Что было трудно
Кейс про юридические сроки, а юриста у нас не нашлось. Каждую норму сверили с текстом закона и собрали вопросы для вычитки. Но закон местами читается двояко: входит ли день въезда в срок, прямо не сказано. Выбрали раннюю дату — прийти на день раньше ничего не стоит, на день позже рискованно. Все правила остаются черновиком, и боевой режим с ними не запустится. Отдельный тест следит, чтобы статус не сменили молча.
Платформа тоже удивила. Сертификат API MAX выпущен корневым центром Минцифры, которого Node не знает: бот получал сообщения, но ответить не мог. Сертификат положили в образ. На репетиции переезда с SQLite на PostgreSQL всплыло, что правка расчёта молча сдвинула бы даты у старых профилей. Теперь тест падает, если расчёт меняют без новой версии правил. А мини-приложение внутри MAX на момент последней проверки ещё не открывалось: его адрес регистрируется через форму организаторов.






