#Если запросы не проходят
Найдите свой симптом. Дальше идите по шагам.
#Сначала проверьте пять частых причин
Пять причин закрывают больше половины проблем на старте:
- Подключение ещё не активировано. Пока smartica.ai не зарегистрировала вашу клинику, любой запрос возвращает
404, включая верный URL. - Перепутаны контуры. Ключ тестового контура не работает на рабочем, и наоборот. Адреса контуров в статье Тестовая площадка.
- Перепутаны секреты. Ключ клиники для запросов к smartica.ai и логин с паролем для запросов smartica.ai к вам различаются.
encounter_idпередан числом, а не строкой. Должно быть"12345", а не12345.- Перепутаны идентификаторы в Import. В адресе наш
smartica_encounter_id. В теле вашencounter_id.
#Запросы к smartica.ai
#Любой запрос возвращает 404
| Причина | Как проверить |
|---|---|
| Запрос ушёл не на тот адрес | В ответе error равен wrong_host. Сверьте базовый адрес со статьёй Тестовая площадка |
| Подключение не зарегистрировано или не активировано | Напишите в поддержку и уточните статус подключения |
Неверный platform в адресе |
Сравните platform посимвольно со значением, которое вам выдали |
Используется придуманный platform |
Значение нельзя подобрать. platform выдаёт smartica.ai |
| Опечатка в пути | Сверьте адрес с тем, что выдали при подключении |
Незарегистрированный platform правильного формата даёт такой же 404, как опечатка. Отличить незарегистрированный platform от опечатки можно только через поддержку.
#SSO возвращает 401
Ключ неверен или не передан.
- Проверьте заголовок
Authorization: Bearer <ключ>. Перед ключом стоят словоBearerи пробел. - Проверьте, что ключ не обрезан при копировании и не содержит переводов строки.
- Проверьте, что используется ключ того контура, в который идёт запрос.
- Если ключ недавно перевыпускали, старый действует ещё 72 часа. Потом старый ключ перестаёт работать.
Не повторяйте запрос автоматически. Неудачные попытки авторизации ограничены 30 в минуту на клинику. Цикл повторов даёт 429.
#SSO возвращает 403 email_in_other_organization
Этот email уже используется в smartica.ai, но принадлежит врачу другой клиники. Автоматически перенести аккаунт нельзя. Так smartica.ai защищается от захвата чужой учётной записи.
Есть и другой случай. Врач регистрировался в smartica.ai сам. Автосоздание врачей для вашей клиники выключено. При включённом автосоздании мы присоединяем этого врача к клинике. Ошибки нет.
Покажите врачу текст из поля message. Обратитесь в поддержку smartica.ai.
#SSO возвращает 403 integration_not_enabled
Интеграция для вашей клиники выключена. Включить интеграцию может только smartica.ai. Напишите в поддержку.
#SSO возвращает 422
Ошибка в переданных данных. Точная причина всегда в объекте errors.
Что в errors |
Причина |
|---|---|
user_full_name |
Врач входит впервые, а ФИО не передано. Передавайте ФИО всегда |
encounter_id |
Формат не подходит: не цифры и не UUID, либо есть пробелы или префикс |
user_email |
Невалидный email |
fields |
Больше 80 элементов либо у элемента нет id или label |
Пример ответа при первом входе без ФИО:
{
"message": "Неверные данные.",
"errors": {
"user_full_name": [
"Для создания врача нужно ФИО (user_full_name)."
]
}
}
#SSO возвращает 429
Превышен лимит в 30 запросов в минуту. Дождитесь времени из заголовка Retry-After.
Если лимит срабатывает при обычной работе, запрос за ссылкой уходит не один раз на клик. Проверьте повторную отправку формы и автоматический повтор запроса при ошибке.
#SSO возвращает 503
Интеграция или SSO ещё не настроены на нашей стороне. Покажите врачу временную ошибку. Обратитесь в поддержку.
#Вход врача
#Врач попадает на обычный экран входа вместо приёма
Ссылка одноразовая и живёт около минуты. Причины по частоте:
- Ссылка уже была использована. Повторно открыть ссылку нельзя. Запросите новую.
- Ссылка истекла. Между получением и открытием прошло больше
expires_inсекунд. Открывайте ссылку сразу. Не складывайте ссылку в очередь. Не отправляйте ссылку письмом. - Ссылку изменили. Любая правка параметров, включая
encounter_id, делает вход недействительным. Передавайте URL без изменений. - Ссылка сохранена и переиспользуется. Каждый запуск требует нового запроса за ссылкой.
#Врач вошёл, но приём не подготовился
Не удалось получить контекст приёма. Проверьте свой GET:
curl --fail-with-body --silent --show-error \
--user 'LOGIN:PASSWORD' \
--header 'Accept: application/json' \
'https://mis.example.ru/api/for-smartica/encounters/12345'
Ответ обязан быть:
- код
200. - заголовок
Content-Type: application/json. - валидный JSON-объект.
- с непустыми
templateиfields.
Типичные поломки:
- сервер отдаёт HTML-страницу ошибки.
- прокси возвращает свою заглушку.
- ответ приходит с
204или пустым телом. - JSON синтаксически невалиден.
Если проблема была временной, исправьте endpoint. Попросите врача открыть приём заново.
#Врач вошёл под чужим аккаунтом
Email в SSO-запросе и в ответе GET должны относиться к одному врачу. Убедитесь, что бэкенд берёт email из сессии текущего пользователя. Не берите email из тела запроса браузера. Не берите email из карточки приёма. В карточке может стоять другой врач.
#Возврат результата
#PUT не приходит вообще
Проверьте по порядку:
- Какой режим доставки у вашего подключения. При
pullмыPUTне отправляем. Забирать результат должны вы. Уточните режим в поддержке, если не помните. - Запись действительно завершена. Врач останавливает запись и ждёт обработки.
PUTуходит только после заполнения протокола. - Ваш endpoint доступен из интернета. Проверьте endpoint с машины вне вашей сети. Проверка из внутренней сети не подходит.
- Сертификат TLS валиден и публично доверен. Самоподписанный сертификат не принимается. Проверку TLS мы не отключаем.
- Нет IP-фильтра. Если у вас allowlist, запросите у нас актуальные адреса. Неверный список даёт timeout или
403. - Статус отправки в интерфейсе smartica.ai. Врач видит статус у себя в smartica.ai. Там же есть кнопка повтора.
#PUT приходит, но массив fields пустой
Пустой fields — валидный ответ, не ошибка. smartica.ai присылает только те поля, для которых нашлось содержательное значение. Пустые значения и заглушки вроде «не указано» отбрасываются.
Пустой fields означает, что в разговоре не нашлось материала для полей бланка. Например, запись слишком короткая. Стенограмму сохраните и при пустом fields.
Если пустой fields приходит регулярно при обычных приёмах, проблема почти всегда в label. По названиям полей непонятно, что в них писать. Смотрите следующий раздел.
#Поля заполняются не тем содержанием
Качество заполнения определяется двумя вещами: template и fields[].label.
| Проблема | Признак | Решение |
|---|---|---|
| Неинформативные названия полей | label вида "Поле 3", "Данные", "Статус" |
Сделайте заголовок понятным без бланка |
| Короткая подпись вложенного поля | label "Норма" без раздела |
Опишите поле целиком: "Объективный статус. Норма". Либо передайте раздел в section |
| Неоднозначные названия | Два поля с label "Диагноз" |
Уточните: "Диагноз (основной)", "Диагноз (сопутствующий)" |
| Разные написания бланка | То "ЛОР", то "Отоларинголог" |
Закрепите одно написание |
| Слишком общий бланк | Один template на все специальности |
Разделите бланки по специальностям и типам приёма |
Раздел про fields в статье Бланк приёма содержит правила и примеры.
Один факт в двух полях — не ошибка. Не ошибка и факт, который не пришёл ни в одно поле, когда для него в бланке нет поля. Подробности в разделе Что попадает в поле.
#В МИС появились дубликаты приёмов
Ваш PUT не идемпотентен. Повторы приходят при обычной работе. Врач нажимает повтор отправки, дописывает приём, или протокол заполняют заново.
Ищите существующий приём по encounter_id и обновляйте приём. Не создавайте новую запись. Отправьте один и тот же запрос дважды курлом. В МИС должен остаться один приём.
Ещё одна причина. encounter_id переиспользуется для разных приёмов. Один ID принадлежит ровно одному приёму навсегда.
#После записи результата часть полей опустела
Вы очищаете поля, которых нет в массиве. Так делать нельзя. smartica.ai отдаёт только заполненные поля, не весь бланк. Поля, которых нет в fields, оставьте как есть.
Правило одно для входящего PUT при push и для протокола, который вы забираете при pull.
#Стенограмма приходит обрезанной
Проверьте ограничение на размер тела запроса на своей стороне: в веб-сервере, в прокси и в приложении. Длинный приём даёт объёмный текст. Рассчитывайте на несколько мегабайт.
#Текст приходит с испорченной кодировкой
Значения содержат кириллицу, переводы строк и могут содержать разметку списков. Убедитесь, что вся цепочка работает в UTF-8. Многострочный текст сохраняйте с переводами строк.
Если МИС показывает содержимое как HTML, экранируйте значения на своей стороне. Значения — обычный текст.
#Сценарий Import
#404 doctor_not_found
Врача с таким email нет в вашей клинике в smartica.ai. Создать врача в этом запросе не удалось. Проверьте:
- email указан без опечаток.
- вы передали
user_full_name(в query для списка и в теле для import). Без ФИО нового врача завести нельзя. - если ФИО передано, а ошибка остаётся, для клиники выключено автосоздание врачей. Напишите в поддержку smartica.ai.
- email не принадлежит врачу другой клиники. В этом случае приходит
403 email_in_other_organization.
#409 no_transcript
У записи ещё нет стенограммы. Расшифровка не закончилась, или запись пустая. Подождите и повторите запрос. В форме выбора показывайте врачу только записи со статусом awaiting_import. У этих записей стенограмма уже есть.
#409 encounter_taken
Этот encounter_id уже занят другой записью smartica.ai. Один приём МИС может быть связан только с одной записью.
Если привязка была ошибочной, используйте перепривязку с rebind: true на исходной записи. Не занимайте тот же ID второй записью.
#409 already_imported
Запись уже привязана к другому приёму МИС. Если перепривязка нужна, повторите запрос с rebind: true.
#409 revision_mismatch при подтверждении
Пока вы сохраняли протокол, smartica.ai успела перезаполнить протокол. Ваша копия устарела.
Заберите протокол заново. Обновите сохранённые данные. Подтвердите актуальную ревизию. Актуальный номер приходит в поле revision того же ответа с ошибкой.
Если ошибка повторяется постоянно, проверьте revision. Передавайте revision из последнего ответа, не старое сохранённое значение.
#410 encounter_deleted
Врач удалил запись в smartica.ai. Уберите запись из своей очереди. Ничего не сохраняйте.
#429 при опросе в режиме pull
Слишком частый опрос. Лимит на список — 60 запросов в минуту. Лимит на чтение — 120.
Частый опрос не ускоряет заполнение протокола. Не опрашивайте каждую запись отдельно. Запросите список по статусу ready одним запросом на врача.
#Как собрать информацию для поддержки
Если ничего не помогло, напишите на support@smartica.ai и приложите:
- название клиники и
platform. - контур: тестовый или рабочий.
encounter_idпроблемного приёма и примерное время.- что именно вызывали: метод, адрес без секретов, код ответа.
- тело ответа с ошибкой.
- что уже проверили по этой статье.
Не присылайте API-ключи, пароли, launch_url целиком и стенограммы с данными пациентов.