Тип бота
Бот записи, за которым не нужно присматривать администратору
Telegram-бот записи на приём позволяет пациенту выбрать слот, подтвердить его и перенести прямо в переписке, записывая каждое изменение в календарь врача, которым персонал уже пользуется. Он убирает прослойку телефонных догонялок вокруг расписания. Он не заменяет медицинскую информационную систему и не спасёт переполненный график.
Боты записи на приём: цена, сроки и ограничения
- Фиксированная цена
- $3,800 USD
- Срок
- 18 календарных дней с момента старта
- Потолок рассылки
- ~30 сообщений/сек на бота, ~20/мин в одну группу
- Данные обратного вызова
- 64 байта на кнопку инлайн-клавиатуры
- Холодные рассылки
- Невозможны — пациент должен написать боту первым
- Реальное узкое место
- API календарного сервиса, а не Telegram
As of 2025-10-01, Telegram Bot API 13.4
Какую задачу это решает
У большинства клиник Залива нет недостатка в обращениях. У них нет тех двадцати минут в день, за которые обращения превращаются в подтверждённые записи. Человек пишет в WhatsApp, свободен ли четверг вечером, администратор в этот момент занят пациентом, ответ уходит через полтора часа — и к этому моменту человек уже записался туда, где ответили первыми. Никто не сделал ошибки. Очередь просто оказалась длиннее терпения того, кто в ней стоял.
Отдельно стоит назвать перенос — именно на нём ручное расписание обычно и рассыпается. Первая запись это одно сообщение; перенос это переговоры. Пациент просит подвинуть, администратор смотрит график одного врача, предлагает два варианта, пациент отвечает через час — и один из вариантов уже занят. Повторите это шесть раз за день, и на перенос уходит целый человек.
Бота записи имеет смысл строить тогда, когда узкое место — календарь, а не спрос. Он держит слот, пока разговор открыт, поэтому предложенное время нельзя занять из-под человека, который его обдумывает. Он отправляет напоминание, которое вдвое сокращает неявки. И он обрабатывает перенос в той же переписке, что и исходную запись, так что никому не приходится отматывать историю чата, чтобы понять, о чём в итоге договорились.
Как идёт разработка
Пациент открывает бота оттуда, где вас нашёл
Диплинк из описания в Instagram, карточки Google или напечатанного QR-кода открывает бота с меткой, по которой видно, откуда человек пришёл. Бот здоровается сразу с нужной услугой, а не с меню: тот, кто отсканировал код рядом со стоматологическим креслом, не осматривается.
deep-linkПоиск слотов идёт по реальной занятости, а не по опубликованному расписанию
Бот запрашивает текущее состояние календаря каждого специалиста, который оказывает нужную услугу, отсекает нерабочие часы и уже занятое время и предлагает ближайшие действительно свободные слоты. Предложить время, которого уже нет, — самый быстрый способ потерять запись.
inline-keyboardВыбранный слот удерживается, пока разговор продолжается
Выбор времени ставит временную бронь с коротким сроком. Без неё двое, которым слот предложили с разницей в минуту, оба считают, что он у них, и один узнает правду уже на пороге.
inline-keyboardДанные собираются в том порядке, в каком они важны
Сначала имя и телефон — этого достаточно, чтобы спасти запись, если человек пропадёт на полпути. Всё остальное, что нужно клинике — страховка, направление, первичный приём или повторный, — спрашивается уже после того, как слот закреплён.
commandsПодтверждение пишется и в календарь, и пациенту
Приём создаётся в календаре специалиста с данными пациента в теле события, а пациент получает подтверждение с адресом и ссылкой на перенос. Одна запись, две аудитории, никакого повторного ввода.
webhookНапоминания уходят по графику, который задаёт клиника
Обычно одно за сутки и одно за два часа. В каждом напоминании та же кнопка переноса, что и в подтверждении, — поэтому пациент, который не успевает, двигает запись, а не молча не приходит.
broadcastПеренос переиспользует тот же сценарий, а не начинает новый
Кнопка переноса заново открывает поиск слотов с привязанной исходной записью, отпускает старый слот только после подтверждения нового и правит событие в календаре на месте — так специалист видит перенос, а не отмену и загадочную новую запись.
inline-keyboard
Что Telegram разрешает, а что нет
Бот отправляет примерно 30 сообщений в секунду суммарно и около 20 в минуту в один и тот же групповой чат.
Напоминания четырёмстам пациентам нельзя отправить одним залпом. Они ставятся в очередь и рассылаются с паузами, а значит назначить напоминание на точную минуту невозможно — рассчитывайте на интервал, а не на момент.
Telegram не даёт боту номер телефона, пока пользователь сам не поделится им через кнопку запроса контакта.
Молча опознать вернувшегося пациента по номеру не получится. Либо он один раз нажимает кнопку, либо бот сопоставляет его по идентификатору пользователя Telegram — тот стабилен, но это не тот ключ, на котором построена ваша медицинская система.
Кнопка инлайн-клавиатуры несёт не более 64 байт данных обратного вызова.
Кнопка слота не может закодировать текстом специалиста, услугу, дату, время и длительность. Кнопка несёт короткий идентификатор, остальное держит сервер — поэтому у предложенных слотов есть серверный срок жизни, а не только существование внутри сообщения.
Бот не может первым написать тому, кто ему ни разу не писал.
Напоминания доходят только до пациентов, записавшихся через бота. Загрузить существующую базу пациентов и разослать им сообщения нельзя, и любой подрядчик, утверждающий обратное, описывает блокировку.
Попытка отредактировать сообщение в то же самое содержимое возвращает ошибку, а не проходит молча.
Экраны выбора слота, которые обновляются по таймеру, обязаны вести собственное состояние. Сделано плохо — получается бот, который после двойного нажатия выглядит зависшим; на эту мелочь приходится удивительно большая доля плохих впечатлений от ботов записи.
Календарные сервисы ограничивают частоту записи заметно жёстче, чем Telegram.
В загруженной клинике узкое место — обычно API календаря, а не Telegram. Запись группируется в пакеты и повторяется с нарастающей паузой, а сбой на стороне сервиса ставит записи в очередь, а не отклоняет их.
Когда это не нужно строить
- Записи уже идут через медицинскую систему, в которую пациенты заходят сами. Вторая точка записи, пишущая в первую, добавляет задачу сверки, не убирая работы.
- Расписание зависит от врачебного суждения — сколько именно эта процедура займёт у именно этого пациента. Бот, позволяющий пациенту самому выбрать длительность, соберёт график, который выглядит заполненным и едет по времени.
- Ваши пациенты в основном старше шестидесяти и не сидят в Telegram. Бот отработает безупречно, и им никто не воспользуется. Проверьте фактическое распределение по каналам до того, как что-либо строить.
- У вас один специалист и меньше десяти приёмов в день. Нагрузка на расписание не окупает разработку, а ссылка на общий календарь закроет бóльшую часть задачи.
На чём это работает
| Компонент | Версия | Зачем |
|---|---|---|
| grammY | 1.45 | Фреймворк бота. Только webhook, типизированная обработка апдейтов. |
| Cloudflare Workers | current | Среда исполнения. Нечего держать прогретым и нет холодного старта на рассылке напоминаний. |
| Cloudflare D1 | current | Брони слотов, карточки пациентов и очередь напоминаний. |
| TypeScript | 5.9 | Строгий режим везде. Арифметика слотов — то место, где нетипизированный код тихо ломается. |
| Zod | 4.4 | Валидация на каждой границе, включая ответы календарных сервисов. |
О чём спрашивают перед стартом
Может ли бот писать в тот календарь, которым уже пользуются наши врачи?
Да, и именно так и надо: система записи, ведущая собственный отдельный график, — это второй источник истины, и рано или поздно он разойдётся с первым. Бот создаёт, двигает и отменяет события в Google Calendar или Outlook и читает существующие, поэтому вручную заблокированный час будет учтён.
Что происходит, когда двое выбирают один и тот же слот в одну секунду?
Первый выбор ставит бронь, второму сообщается, что слот только что ушёл, и сразу предлагаются ближайшие свободные. Бронь снимается через несколько минут, если разговор заглох, — так брошенная запись не оставляет слот мёртвым до конца дня.
Снизит ли это количество неявок?
Напоминания снижают их стабильно, а кнопка переноса внутри напоминания снижает ещё сильнее, потому что даёт тому, кто не может прийти, действие более простое, чем бездействие. Насколько именно — зависит от вашей базовой цифры; тот, кто называет процент, не видя ваших данных, гадает.
Справится ли он с арабским и английским в одном разговоре?
Да. Язык выбирается при первом контакте и переключается в любой момент без потери начатой записи. Отрисовка справа налево в Telegram в целом ведёт себя прилично, но подписи кнопок надо тестировать на реальной длине арабских строк, а не на переводных заглушках.
Нужно ли пациенту ставить что-то помимо Telegram?
Нет. Весь сценарий проходит в чате, включая выбор слота и перенос. Нет приложения для установки, аккаунта для регистрации и пароля — в этом и состоит бóльшая часть причины, по которой запись здесь доводится до конца чаще, чем в веб-форме.
Может ли наш администратор вмешаться в то, что сделал бот?
Да. У персонала есть команды: заблокировать время, отменить, перенести приём и посмотреть день. Всё, что персонал делает прямо в календаре, тоже подхватывается, потому что синхронизация работает в обе стороны, а не считает бота единственным, кто пишет.
Что будет, если календарный сервис упадёт посреди записи?
Запись фиксируется и ставится в очередь, а не отклоняется. Пациент получает подтверждение, запись в календарь повторяется с нарастающей паузой, а если и это не проходит — человеку приходит оповещение с деталями. Сообщать пациенту, что его приём не состоялся из-за недоступности стороннего API, — недопустимый исход.
Через сколько он начнёт реально принимать записи?
Разработка идёт к фиксированной дате, согласованной до старта, а рабочее демо на вашем собственном календаре вы видите до того, как двинутся деньги. Переменная здесь обычно одна: как быстро клиника определится с собственными правилами — какие услуги, какие специалисты, за какой срок до приёма.