Прошу прощения за нейрокартинку на превью 😖
Я думаю многим знакома ситуация: заходишь на сайт для записи к врачу, выбираешь нужного, а там... 0 мест ☠️. А листа ожидания — нет.
И это может повторяться дни и недели, так почему бы это не автоматизировать? 🧰
О себе
Я Костя. Пилю всякое в вебе 🐒 пока пью пиво 🍺
3 года назад на коленке набросал бота. Довольно долго им пользовались мои друзья/знакомые. Сейчас решил его реанимировать и представить на суд общественности — вдруг кому-нибудь пригодится.
Делал для себя, поэтому написано через жопу с любовью 💖.
О проекте
Телеграм бот, который интегрируется с https://zdrav.mosreg.ru/ (врачебные госуслуги московской области).
На вход - номер полиса и дата рождения, на выход - уведомления о появлении новых талонов.
Бот: https://t.me/zdrav_mosreg_subscribe_bot
Исходники: https://github.com/crutch12/zdrav-bot

Как появилась идея
3 года назад, когда я ещё жил в Дубне, записаться почти к любому врачу по ОМС было невыполнимой задачей, т.к. почти у всех профильных врачей не было свободных талонов (они были заняты).
Это создавало неудобства не только мне, но и моей девушке, поэтому захотелось исправить эту ситуацию.

Конечно же было принято решение писать Телеграм бота 🤖 (через экранные кнопки, т.к. мини аппов тогда ещё не существовало).
Разработка
Бюджет: свободное время и банка пива 🍺.
Главный критерий: сделать максимально быстро и не страдать при использовании.
Поэтому в течение пары выходных дней
- Вытащил апишки, сгенерировал типы, подготовил запросы к их api ☎️
- Добавил обработку tg commands и actions (я один считаю, что обработка action с необходимостью парсить строку сделана неудобно? 🤔)
- Подключился к Firestore 💾
- Накидал cron, который каждые 10 минут ходит по подпискам и сравнивает было/стало 🦔
- Зарегестрировал бота 🤖
Никаких DRY, KISS, SOLID и т.д. Проще и быстрее - лучше, даже если в результате получается каша.
Камон, это же обычный crawler, какие тут подходы и архитектура...
(2025) В последние пару дней реанимировал запросы (api изменилось за эти годы), обновил типы, сделал UX более удобным (например сообщения теперь обновляются, а не создаются новые)
Стек
Ну вы помните про главный критерий 🌚
Берём сначал укропа!- Бот: node.js, telegraph
- БД: Firestore
- Хост: VPS
- (2025) Для локальной отладки веб хуков использую tuna.am (кто не видел tuna - крайне рекомендую ознакомиться, это лучший подобный инструмент на рынке. даже есть пост в клубе)
Думаю, что можно было бы взять какой-нибудь n8n, но на нём кода было бы больше, да и получилось бы дольше.
Как это работает
Со стороны пользователя
- Пользователь вводит номер полиса и дату рождения 🖊️
- Пользователь выбирает специальность врача и больницу 🏥
- Выбирает интересных ему врачей и жмёт "подписаться" 🧑⚕️
- (и так по новой)
Со стороны системы
- Бот интегрируется с апи zdrav.mosreg.ru ☎️
- Каждые 10 минут проходится по подпискам 🦔 и сравнивает доступные места с тем, что сохранено в БД 💾
- Мест стало больше, чем 10 минут назад? Отлично: оповещаем пользователя 🔔

⚠️ Важно: бот сам не делает никаких create/update/delete действий, записываться нужно своими ручками.
Планы на будущее
А их нет 🤡
Делал же для себя. Задачу решает, а большего мне и не надо.
Если будут баги/пожелания, то буду исправлять/добавлять.
В целом, системы вида "каждые N минут парси сайт / читай api, сравнивай с тем, что было и присылай уведомление по условию X" довольно часто пишутся людьми для себя. Будь то талоны ко врачу или мониторинг уценки в ДНС.
Кажется, что можно написать кучу подобных решений и объединить это в одну мониторинг систему. 🤔
Или такое уже есть? Я не видел. Все, кого знаю, пишут обычно такое под себя.
Вместо выводов
Понимаю, что этот бот актуален только жителям московской области, а тут таких меньшинство, так что пригодится далеко не всем.
Ну и ничего выдающегося в этом решении нет, но если кому-то вдруг пригодится, то буду рад 🤗


