Коротко: как робот записывает пациента в Medesk

У Medesk есть Online Booking API: клиника получает набор вебхуков на справочники (сотрудники, прейскурант, кабинеты, часовой пояс), на свободные слоты, на бронирование и на отмену. Голосовой агент не может обращаться к ним напрямую: платформы роботов работают с короткими идентификаторами и человеческими датами, а медицинская система - с длинными ObjectId и временем в GMT. Между ними ставится прослойка, которая переводит форматы, считает время окончания приёма, режет интервалы, кеширует справочники и вместо кодов ошибок возвращает роботу понятную фразу. Дальше всё упирается не в код, а в настройки клиники: привязку услуг к врачам, глубину открытого расписания и заполненные кабинеты.

Что отдаёт Online Booking API Medesk

Клиника подключает не «доступ к базе», а набор вебхуков под конкретные задачи: в проекте использовались 7 методов - сотрудники, прейскурант, кабинеты, часовой пояс, свободные слоты, бронирование и отмена записи.

МетодЗачем нуженКак часто вызывается
СотрудникиСписок специалистов с идентификаторами и должностямиСинхронизация справочника, несколько раз в сутки
ПрейскурантУслуги: название, код, цена, длительность, связанные врачиСинхронизация справочника
КабинетыКабинеты и подразделения, нужны при бронированииСинхронизация справочника
Часовой поясЧасовой пояс клиникиОдин раз при настройке
Свободные слотыОкна по врачу и датеВо время разговора
БронированиеСоздание записи, возвращает идентификатор брониПосле подтверждения пациентом
ОтменаОтмена записи по идентификаторуПо запросу пациента

Обратите внимание, чего в списке нет: метода «покажи будущие записи этого пациента». Поэтому сценарий переноса собирается отдельно, об этом ниже.

Почему робот не разговаривает с Medesk напрямую

Голосовому агенту нужны короткие идентификаторы, тогда как Medesk возвращает ObjectId вида 6553874c17146908bf9720f3 - поэтому между ними нужна прослойка.

ЧтоЧего ждёт голосовой агентЧто даёт или требует МИС
ИдентификаторыКороткие числа, которые модель может продиктоватьДлинные ObjectId вида 6553874c17146908bf9720f3
Дата и времяКак говорит человек: 26.05.2026 в 8:30ISO 8601 в GMT
Объём ответаДва-три слота, иначе агент путаетсяВесь массив свободных окон
ОшибкаФраза-подсказка, что сказать пациентуКод ошибки вроде invalid_timerange
Длительность приёмаАгент её не считаетВремя окончания надо передать самому

Отсюда и берётся прослойка: небольшой сервис, который держит справочники в кеше, подменяет идентификаторы, считает время, режет интервалы и превращает технические ошибки в человеческие реплики. Тот же принцип работает и для CRM: как выглядит обмен данными в общем виде, разобрано в статье про интеграцию голосового робота с CRM.

Нужен разбор под вашу нишу? или напишите в Telegram - ответим с расчётом по вашей базе.

Как идёт разговор: три точки обращения к системе

Во время разговора робот запрашивает расписание и предлагает пациенту 2-3 свободных слота, затем создаёт бронь в МИС после подтверждения.

Старт звонкасправочник услуг и врачей с короткими номерами
заранее
Во время речи«смотрю расписание» и запрос свободных окон
2-3 слота
Подтверждениепациент выбирает время и называет данные
бронь
Запись в МИСсоздание визита и номер брони в журнал
Прослойка держит на себе: кеш справочников, перевод форматов, расчёт времени окончания приёма, ограничение выдачи до трёх слотов и журнал «телефон - номер брони» для будущей отмены.
Три точки обращения к Medesk во время звонка: справочник загружается заранее, слоты запрашиваются в момент разговора, бронь создаётся после подтверждения пациентом.

Отдельное правило касается ошибок. Если параметры пришли пустыми или кривыми, прослойка не отдаёт код ошибки: она возвращает фразу вроде «уточните, в какой день вам удобно». Иначе агент получает технический мусор и начинает импровизировать в разговоре с пациентом. При сдаче интеграции этот сценарий проверяют намеренно: дёргают адрес с пустыми параметрами и смотрят, что услышит робот.

Пять ловушек, которые видно только на живом API

В проверенном проекте расписание было открыто на 2 недели, а запрос интервала шире 45 дней Medesk отклонял с ошибкой.

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

2. Кабинет обязателен. Он приходит вместе со слотом. Если система его не вернула, значит в настройках клиники у этого слота не заданы кабинет и подразделение, и бронирование просто не пройдёт. Проверяется до запуска, чинится на стороне клиники.

3. Горизонт расписания и лимит интервала. В проекте расписание было открыто на две недели, а запрос шире 45 дней система отклоняет с ошибкой. Прослойка обязана резать интервал сама, а сценарий разговора - уметь честно сказать, что дальше запись ещё не открыта.

4. Кривые данные не дают ошибку. Запрос с несуществующим идентификатором врача возвращает не ошибку, а пустой ответ. Для робота это выглядит как «свободных окон нет», и проблема становится невидимой. Поэтому прослойка обязана сверять идентификаторы со своим справочником до обращения к МИС.

5. Справочник клиники может быть не заполнен. В одной группе прейскуранта 19 из 21 услуги не имели привязки к врачам, хотя по остальным 149 услугам связи стояли. Ирония в том, что не заполнено оказалось именно то направление, ради которого затевался робот. Плюс коды услуг в прейскуранте могут повторяться, поэтому идентификатором служит внутренний номер, а не код.

Отдельная история - перенос записи. В базовом наборе методов нет способа спросить, на что записан этот пациент. Значит, либо прослойка ведёт собственный журнал «телефон - номер брони», либо у вендора заказывается дополнительный отчёт-вебхук со списком предстоящих записей.

Что подготовить на стороне клиники

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

  • Проставить врачей у всех услуг, которые робот будет записывать.
  • Заполнить кабинеты и подразделения для слотов онлайн-записи.
  • Открыть расписание хотя бы на месяц вперёд, а лучше глубже.
  • Выдать вебхуки на все нужные методы, включая часовой пояс клиники.
  • Уточнить лимит бронирований: при исчерпании квоты система возвращает отдельную ошибку, а увеличивается лимит только через поддержку вендора.
  • Определить, какие услуги в каком подразделении оказываются, чтобы робот называл правильный адрес.
  • Проверить основание для обзвона: без согласия пациента исходящий сценарий не запускается.

Что именно робот делает в клинике и где проходит граница его компетенции, разобрано в статье про голосового ИИ для стоматологии. Мировая практика по клиникам - в подборке кейсов ИИ для медицинских клиник.

Что это даёт клинике

Интеграция с МИС помогла сети из 5 клиник получить 363 визита из базы в 13 800 контактов и повысить доходимость с 72% до 77%.

Кейсы PrimexAI в клиниках

Цифры приведены по страницам кейсов primexai.ru.

363 визита
из базы 13 800 контактов, сеть 5 клиник
+119 визитов
в месяц на входящем потоке
72 → 77%
доходимость до визита

Разбор внедрения целиком - в кейсе по стоматологии, а состав работ по запуску голосового агента под ключ - на странице AI МОП.

Частые вопросы про интеграцию робота с Medesk

Можно ли подключить голосового робота к Medesk напрямую, без разработки?

Интеграция с Medesk требует проверки справочников: в одном проекте 19 из 21 услуги ключевой группы не были привязаны к специалистам.

Насколько глубоко робот видит расписание?

Ровно настолько, насколько клиника открыла запись. В нашем проекте расписание было открыто на две недели вперёд, а запрос интервала шире 45 дней система отклоняет с ошибкой. Значит, робот физически не сможет записать «на сентябрь», и это надо либо чинить настройками клиники, либо закладывать в сценарий разговора.

Что происходит, если пациент называет услугу, которой нет у выбранного врача?

Если в настройках Medesk у услуги не проставлены врачи, робот не сможет понять, кто её оказывает. В одном из проектов 19 из 21 услуги в ключевой группе были без привязки к специалистам, при том что по остальному прейскуранту привязка стояла. Правильное решение - попросить клинику проставить связи в настройках, а не зашивать соответствие руками в коде: иначе любое изменение состава врачей ломает робота.

Робот может перенести или отменить запись?

Отмена выполняется по идентификатору брони, поэтому прослойка обязана вести журнал: телефон пациента и номер его записи. Перенос в базовом наборе методов не предусмотрен, он собирается из отмены и новой записи либо через дополнительный отчёт-вебхук со списком предстоящих записей, который заказывается у вендора.

Сколько времени занимает ответ системы во время разговора?

В нашей проверке запрос свободных слотов отрабатывал примерно за две секунды. Для живого разговора это приемлемо, но робот не должен молчать в это время: в сценарии прописывается фраза вроде «смотрю расписание», которую агент произносит до обращения к системе.

Что делать, если у клиники несколько подразделений?

Обязательно проговаривать адрес при записи. В одном из проектов часть услуг оказывалась только во втором подразделении, на другой улице. Пациент, приехавший не туда, - это готовая жалоба и потерянный визит, поэтому подразделение и кабинет должны попадать и в подтверждение, и в напоминание.

Разберём вашу МИС до старта

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

Написать Александру →