#Диагностика: если что-то не работает
Статья построена по симптомам. Найдите то, что видите у себя, и идите по шагам.
#Сначала проверьте базовое
Больше половины проблем на старте объясняются одним из пяти пунктов:
- Подключение ещё не активировано. Пока Smartica не зарегистрировала вашу клинику, все запросы возвращают
404, каким бы правильным ни выглядел URL. - Перепутаны окружения. Ключ тестового стенда не работает на рабочем, и наоборот. Адреса контуров — в статье Тестовая площадка.
- Перепутаны секреты. Ключ клиники, которым вы обращаетесь к нам, и логин-пароль, которыми мы обращаемся к вам, — это два разных секрета.
encounter_idпередан числом, а не строкой. Должно быть"12345", а не12345.- Перепутаны идентификаторы в Import. В адресе — наш
smartica_encounter_id, в теле — вашencounter_id.
#Запросы к Smartica
#Любой запрос возвращает 404
| Причина | Как проверить |
|---|---|
| Запрос ушёл не на тот адрес | В ответе error равен wrong_host. Сверьте базовый адрес со статьёй Тестовая площадка |
| Подключение не зарегистрировано или не активировано | Написать в поддержку и уточнить статус подключения |
Неверный platform в адресе |
Сравнить символ в символ со значением, которое вам выдали |
Используется придуманный platform |
Значение нельзя подобрать самостоятельно, его выдаёт Smartica |
| Опечатка в пути | Сверить адрес с тем, что выдали при онбординге |
Правильный по формату, но незарегистрированный platform даёт ровно такой же 404, как опечатка. Отличить их можно только через поддержку.
#SSO возвращает 401
Ключ неверен или не передан.
- Проверьте, что заголовок выглядит как
Authorization: Bearer <ключ>— со словомBearerи пробелом. - Проверьте, что ключ не обрезан при копировании и не содержит переводов строки.
- Проверьте, что используется ключ того окружения, в которое идёт запрос.
- Если ключ недавно перевыпускали, старый действует ещё 72 часа, а потом перестаёт.
Не повторяйте запрос автоматически. Неудачные попытки авторизации ограничены 30 в минуту на клинику, и цикл повторов приведёт к 429.
#SSO возвращает 403 email_in_other_organization
Этот email уже используется в Smartica, но принадлежит другой организации. Автоматически перенести аккаунт нельзя — это защита от захвата чужой учётной записи.
Что делать: показать врачу текст из поля message и обратиться в поддержку Smartica для переноса аккаунта.
Частый случай: врач раньше регистрировался в Smartica сам, до подключения клиники.
#SSO возвращает 403 integration_not_enabled
Интеграция для этой организации выключена или не разрешено автоматическое создание врачей. Решается только на стороне Smartica — напишите в поддержку.
#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 из сессии текущего пользователя, а не из тела запроса браузера и не из карточки приёма, где может стоять другой врач.
#Возврат результата
#PUT не приходит вообще
Проверьте по порядку:
- Какой режим доставки у вашего подключения. При
pullмыPUTне отправляем в принципе — забирать результат должны вы. Уточните режим в поддержке, если не помните. - Запись действительно завершена. Врач должен остановить запись и дождаться обработки. Заполнение занимает от десятков секунд до нескольких минут.
- Ваш endpoint доступен из интернета. Проверьте с внешней машины, а не из внутренней сети.
- Сертификат TLS валиден и публично доверен. Самоподписанный сертификат не подойдёт, отключать проверку мы не будем.
- Нет IP-фильтра. Если у вас allowlist, запросите у нас актуальные адреса. Неверный список даёт timeout или
403. - Статус отправки в интерфейсе Smartica. Врач видит его на своей стороне, там же есть кнопка повтора.
#PUT приходит, но массив fields пустой
Это валидная ситуация, а не ошибка. Smartica присылает только те поля, для которых нашлось содержательное значение. Пустые значения и заглушки вроде «не указано» отбрасываются.
Пустой fields означает, что в разговоре не нашлось материала для полей бланка — например, запись слишком короткая. Стенограмму при этом всё равно нужно сохранить.
Если пустой fields приходит регулярно при нормальных приёмах, проблема почти всегда в label: по названиям полей непонятно, что в них класть. См. следующий пункт.
#Поля заполняются не тем содержанием
Качество заполнения определяется двумя вещами: template и fields[].label.
| Проблема | Признак | Решение |
|---|---|---|
| Неинформативные названия полей | label вида "Поле 3", "Данные", "Статус" |
Переименовать в то, как поле называет врач |
| Неоднозначные названия | Два поля с label "Диагноз" |
Уточнить: "Диагноз (основной)", "Диагноз (сопутствующий)" |
| Название бланка гуляет | То "ЛОР", то "Отоларинголог" |
Закрепить одно написание навсегда |
| Слишком общий бланк | Один template на все специальности |
Разделить по специальностям и типам приёма |
Правила и примеры — в разделе про fields статьи GET: контекст приёма.
#В МИС появились дубликаты приёмов
Ваш PUT не идемпотентен. Повторы приходят штатно: врач нажал повтор отправки, дописал приём, протокол перезаполнили.
Обработчик должен искать существующий приём по encounter_id и обновлять его, а не создавать новую запись. Проверить просто — отправьте один и тот же запрос дважды курлом и убедитесь, что в МИС остался один приём.
Ещё одна причина: encounter_id переиспользуется для разных приёмов. Один ID должен принадлежать ровно одному приёму навсегда.
#После записи результата часть полей опустела
Вы очищаете поля, которых нет в массиве. Так делать нельзя: Smartica отдаёт только заполненные поля, а не весь бланк целиком. Всё, чего нет в fields, должно остаться нетронутым.
Это одинаково верно для обоих способов доставки: и для входящего PUT при push, и для протокола, который вы забираете сами при pull.
#Стенограмма приходит обрезанной
Проверьте ограничение на размер тела запроса на своей стороне — в веб-сервере, прокси и в самом приложении. Длинный приём даёт объёмный текст. Рассчитывайте на несколько мегабайт.
#Текст приходит с испорченной кодировкой
Значения содержат кириллицу, переводы строк и могут содержать разметку списков. Убедитесь, что вся цепочка работает в UTF-8 и что многострочный текст сохраняется без потери переносов.
Если МИС отображает содержимое как HTML, экранируйте значения на своей стороне — сами по себе они являются обычным текстом.
#Сценарий Import
#404 doctor_not_found
Врача с таким email нет в вашей клинике в Smartica, и создать его в этом запросе не удалось. Проверьте:
- email указан без опечаток;
- вы передали
user_full_name(в query для списка и в теле для import) — без ФИО нового врача завести нельзя; - если ФИО передано, а ошибка остаётся — для клиники выключено автосоздание врачей; напишите в поддержку Smartica;
- email не относится к другой организации (в этом случае обычно приходит
403 email_in_other_organization).
#409 no_transcript
У записи ещё нет стенограммы — расшифровка не закончилась либо запись пустая. Подождите и повторите. В форме выбора показывайте врачу только записи со статусом awaiting_import: у них стенограмма уже есть.
#409 encounter_taken
Этот encounter_id уже занят другой записью Smartica. Один приём МИС может быть связан только с одной записью.
Если привязка была ошибочной, используйте перепривязку с rebind: true на исходной записи, а не занимайте тот же ID второй раз.
#409 already_imported
Запись уже привязана к другому приёму МИС. Если перепривязка действительно нужна, повторите запрос с rebind: true.
#409 revision_mismatch при подтверждении
Пока вы сохраняли протокол, Smartica успела его перезаполнить. Ваша копия устарела.
Правильная реакция: забрать протокол заново, обновить сохранённые данные и подтвердить актуальную ревизию. Актуальный номер приходит в поле revision того же ответа с ошибкой.
Если ошибка повторяется постоянно, проверьте, что вы передаёте revision из последнего ответа, а не сохранённое где-то старое значение.
#410 note_deleted
Врач удалил запись в Smartica. Уберите её из своей очереди и ничего не сохраняйте.
#429 при опросе в режиме pull
Слишком частый опрос. Лимит на список — 60 запросов в минуту, на чтение — 120.
Достаточно опрашивать раз в 30–60 секунд: заполнение всё равно занимает от десятков секунд. Не опрашивайте каждую запись по отдельности — запросите список по статусу ready одним запросом.
#Как собрать информацию для поддержки
Если ничего не помогло, напишите на support@smartica.ai и приложите:
- название клиники и
platform; - окружение: тестовое или рабочее;
encounter_idпроблемного приёма и примерное время;- что именно вызывали: метод, адрес без секретов, код ответа;
- тело ответа с ошибкой;
- что уже проверили по этой статье.
Не присылайте API-ключи, пароли, launch_url целиком и стенограммы с данными пациентов.