#Интеграция с помощью ИИ-агента
Современный ИИ-агент способен написать бо́льшую часть интеграции со Smartica за один-два вечера. Эта статья — полное руководство: от «я никогда не кодил с ИИ» до проверенного результата.
Опытным разработчикам достаточно раздела с промптом — остальное можно пролистать.
#Что вы получите
К концу статьи у вас будет:
- рабочая связка «кнопка в карточке приёма → вход врача → возврат протокола»;
- тесты, которые проверяют идемпотентность и авторизацию;
- понимание, что именно проверить руками перед боевым запуском.
Чего вы не получите: интеграции, которую можно включить без единой проверки. ИИ отлично пишет обвязку, но регулярно ошибается в требованиях, которые нельзя вывести из кода. Ниже есть отдельный раздел с типичными ошибками — прочитайте его обязательно.
#Если вы никогда не работали с ИИ-агентом
Пропустите эту главу, если уже пользуетесь Cursor, Claude Code или похожим инструментом.
#Чем агент отличается от чата
Обычный чат вроде веб-версии ChatGPT работает вслепую: вы копируете туда кусок кода, получаете ответ, вставляете обратно руками. Модель не знает, как устроен ваш проект.
ИИ-агент работает внутри вашего репозитория. Он умеет:
- сам искать нужные файлы и читать их;
- редактировать код и создавать новые файлы;
- запускать команды — тесты, линтер, сборку;
- читать вывод ошибок и исправлять то, что сам же сломал;
- загружать документацию по ссылке.
Для нашей задачи это принципиально: агент сам найдёт, где у вас хранятся приёмы и врачи, как устроена авторизация и по какому шаблону пишутся тесты. Вам не придётся объяснять это словами.
#Что установить
| Инструмент | Формат | Кому подойдёт |
|---|---|---|
| Cursor | Отдельный редактор на базе VS Code | Новичкам: привычный интерфейс, всё видно глазами |
| Claude Code | Работает в терминале | Тем, кто любит консоль |
| GitHub Copilot | Расширение для VS Code и JetBrains | Тем, кто не хочет менять редактор |
| Windsurf, Codex и другие | Редактор или терминал | Подойдут, если вы к ним привыкли |
Принципиальной разницы для этой задачи нет — промпт ниже работает в любом. Если выбираете впервые, берите Cursor: там нагляднее видно, какие файлы меняются.
Актуальные инструкции по установке смотрите на сайте выбранного инструмента — они меняются чаще, чем эта статья.
#Первый запуск, если выбрали Cursor
- Установите Cursor и откройте в нём папку с репозиторием вашей МИС.
- Откройте панель агента — обычно это
Cmd+Iна macOS илиCtrl+Iна Windows. - Убедитесь, что включён именно агентский режим, а не простой чат: в агентском режиме инструмент может сам править файлы и запускать команды.
- Вставьте промпт из этой статьи и отправьте.
Дальше агент начнёт читать проект и предлагать изменения. Каждое изменение видно как обычный diff — зелёные и красные строки. Ничего не применяется молча.
#Обязательный шаг: сделайте отдельную ветку
Это самое важное действие во всей статье.
git checkout -b smartica-integration
Агент меняет реальные файлы. Если что-то пойдёт не так — а на первых порах пойдёт, — вы должны иметь возможность откатить всё одной командой:
git checkout .
Никогда не запускайте агента на ветке, где лежит незакоммиченная работа. Сначала закоммитьте или спрячьте её:
git stash
#Что подготовить перед запуском
#1. Параметры подключения от Smartica
Без них запускать агента бессмысленно. Точный адрес SSO и ваш platform выдаёт Smartica при подключении — подобрать их нельзя. Если агент не получит эти значения, он придумает правдоподобные, и код молча не заработает: все запросы будут возвращать 404.
Как их получить — в статье Онбординг партнёра. Пока ждёте ответ, можно спокойно проходить остальные пункты.
#2. Знание своего проекта
Агент найдёт это сам, но если вы подскажете — результат будет заметно точнее:
- как называется модель или таблица приёма;
- как называется модель или таблица врача;
- где хранится текст протокола и его поля;
- как в проекте проверяется, что врач имеет доступ к приёму.
Если не знаете — не страшно. В промпте есть шаг, на котором агент сам изучит проект и задаст вопросы.
#3. Понимание контракта хотя бы в общих чертах
Прочитайте Обзор интеграции. Это пятнадцать минут, которые окупятся: вы должны понимать, что запросы идут в обе стороны, иначе не сможете оценить, правильно ли агент всё сделал.
#Правила безопасности
Их всего три, но нарушение любого — это инцидент.
Не вставляйте в промпт секреты. Ни API-ключей, ни паролей, ни строк подключения к базе. Передавайте только имена переменных окружения — агент напишет код, который читает значения оттуда. В промпте ниже это уже учтено.
Не вставляйте данные пациентов. Ни стенограмм, ни фрагментов реальных карт, ни ФИО. Для примеров используйте выдуманные данные.
Не давайте агенту доступ к боевой базе. Работайте на локальной или тестовой копии. Агент может выполнить команду, которую вы не ожидали.
Если ваша компания запрещает отправлять исходный код во внешние сервисы — уточните политику до начала работы. Агент отправляет содержимое файлов на серверы модели.
#Документация в машиночитаемом виде
Наши статьи доступны в формате, удобном для агентов:
- индекс всей базы знаний: https://smartica.ai/llms.txt;
- любая статья как сырой Markdown — добавьте
.mdк адресу, напримерhttps://smartica.ai/help/integrations/glossary.md.
Агенту лучше давать .md-версии: HTML-обёртка только зашумляет контекст. В промпте это уже прописано.
#Готовый скилл вместо промпта
Промпт ниже — одноразовый: скопировали, применили, забыли. Если вы будете возвращаться к интеграции, лучше поставить скилл.
Скилл — это файл с инструкциями, который лежит в вашем репозитории. Агент подхватывает его сам каждый раз, когда кто-то работает с кодом интеграции: сегодня — вы, через год — коллега, который эту статью не читал. Инварианты контракта при этом соблюдаются без чьего-либо участия.
Установка — одна команда в корне репозитория.
Каталог .agents/skills — общий стандарт: его читают и Cursor, и Codex. Начните с него.
mkdir -p .agents/skills/smartica-mis-integration && \
curl -fsSL -o .agents/skills/smartica-mis-integration/SKILL.md \
https://smartica.ai/skills/smartica-mis-integration/SKILL.md
Claude Code этот каталог пока не читает — ему нужна отдельная копия:
mkdir -p .claude/skills/smartica-mis-integration && \
curl -fsSL -o .claude/skills/smartica-mis-integration/SKILL.md \
https://smartica.ai/skills/smartica-mis-integration/SKILL.md
#Какой инструмент какой каталог читает
| Инструмент | .agents/skills |
.cursor/skills |
.claude/skills |
|---|---|---|---|
| Cursor | да | да | да |
| Codex | да | нет | нет |
| Claude Code | нет | нет | да |
Единого каталога, который покрывал бы все три инструмента, сейчас нет. Отсюда практический вывод:
- если в команде только Cursor или Codex — достаточно
.agents/skills; - если кто-то работает в Claude Code — выполните обе команды, файл будет лежать в двух местах.
Частая ошибка — положить скилл для Codex в .codex/skills. Этот путь встречается в сторонних инструкциях, но Codex его не читает: скилл просто не загрузится, и никакой ошибки вы не увидите. Codex ищет .agents/skills во всех каталогах от текущего до корня репозитория. Проверить, что скилл виден, можно командой /skills; в Cursor — через Customize → Skills.
Файл везде один и тот же: SKILL.md — открытый стандарт, различаются только каталоги. Если пользуетесь другим инструментом, посмотрите в его документации, где он ищет скиллы.
Закоммитьте файл в репозиторий: тогда он появится у всей команды. При обновлении скилла просто выполните те же команды заново.
Посмотреть содержимое можно по прямой ссылке: smartica-mis-integration/SKILL.md. Внутри — инварианты контракта, лимиты, список типичных ошибок и указание останавливаться и спрашивать, если не выданы параметры подключения.
Скилл намеренно тонкий: он не дублирует контракт, а ссылается на наши статьи в машиночитаемом виде. При расхождении верна документация.
Скилл и промпт не конфликтуют. Удобный порядок: поставить скилл, затем запустить промпт — агент будет работать точнее, потому что часть требований уже в контексте.
#Заполните плейсхолдеры
В промпте есть значения в <угловых скобках>. Замените их все, иначе агент будет угадывать.
| Плейсхолдер | Что подставить | Где взять |
|---|---|---|
<MIS_NAME> |
Название вашей МИС | Знаете сами |
<STACK_AND_VERSIONS> |
Язык, фреймворк, версии — например «PHP 8.2, Laravel 10, PostgreSQL» | composer.json, package.json, *.csproj |
<SSO_ENDPOINT_FROM_SMARTICA> |
Полный адрес SSO | Письмо от Smartica при подключении |
<PLATFORM_FROM_SMARTICA> |
Идентификатор вашей клиники | Оттуда же |
<ENCOUNTER_MODEL_OR_TABLE> |
Модель или таблица приёма | Ваша схема БД |
<DOCTOR_MODEL_OR_TABLE> |
Модель или таблица врача | Ваша схема БД |
Если не знаете значение — напишите «не знаю, найди в проекте». Это лучше, чем оставить угловые скобки: увидев их, агент может решить, что так и надо, и оставить заглушку в коде.
#Главный промпт
Скопируйте кнопкой в правом верхнем углу блока, замените плейсхолдеры и отправьте агенту.
Ты работаешь в репозитории медицинской информационной системы:
- название: <MIS_NAME>
- стек и версии: <STACK_AND_VERSIONS>
- точный SSO endpoint Smartica: <SSO_ENDPOINT_FROM_SMARTICA>
- зарегистрированный platform: <PLATFORM_FROM_SMARTICA>
- модель/таблица приёма: <ENCOUNTER_MODEL_OR_TABLE>
- модель/таблица врача: <DOCTOR_MODEL_OR_TABLE>
Нужно реализовать интеграцию МИС со Smartica.
Сначала:
1. Открой https://smartica.ai/llms.txt — это канонический индекс документации.
2. Из секции «Интеграция с МИС» загрузи нужные статьи как Markdown
(URL оканчиваются на .md). Не парси HTML-страницы /help, если доступен .md.
3. Обязательно прочитай:
- https://smartica.ai/help/integrations/overview.md
- https://smartica.ai/help/integrations/glossary.md
- https://smartica.ai/help/integrations/test-environment.md
- https://smartica.ai/help/integrations/launch.md
- https://smartica.ai/help/integrations/launch-and-sso.md
- https://smartica.ai/help/integrations/import.md
- https://smartica.ai/help/integrations/mis-api-get-encounter.md
- https://smartica.ai/help/integrations/mis-api-export-encounter.md
- https://smartica.ai/help/integrations/authentication-and-errors.md
- https://smartica.ai/help/integrations/limits.md
4. Изучи структуру проекта, существующие conventions, auth, валидацию,
обработку ошибок и тесты.
5. Найди текущий способ проверки доступа врача к приёму.
6. Составь короткий план и перечисли недостающие обязательные данные.
7. Если неизвестны точный endpoint, схема хранения протокола или auth
входящих запросов, остановись и задай вопросы. Не выдумывай контракт.
Реализуй:
1. Серверный запуск Smartica
- Добавь кнопку/действие «Smartica» в карточку приёма.
- Браузер передаёт бэкенду только ID текущего приёма.
- Бэкенд проверяет авторизацию врача и доступ к приёму.
- Бэкенд получает email и ФИО врача из доверенных данных МИС.
- Бэкенд вызывает точный SSO endpoint методом POST:
Authorization: Bearer <значение переменной SMARTICA_SSO_KEY>
Content-Type: application/json
Accept: application/json
- JSON: user_email, user_full_name, encounter_id.
- encounter_id всегда передавай строкой.
- user_full_name передавай всегда, даже для существующего врача.
- Верни браузеру redirect на launch_url или безопасно открой его в новой вкладке.
- Не собирай launch_url самостоятельно и не сохраняй параметр t.
2. GET /api/for-smartica/encounters/{encounter_id}
- Защити endpoint проверкой заголовка Authorization: Bearer по HTTPS.
- Ожидаемый токен читай из SMARTICA_INBOUND_TOKEN.
- Сравнивай токен за постоянное время (timing-safe), а не оператором ==.
- Найди приём и проверь его доступность для интеграции.
- Верни 200 JSON:
encounter_id, user_email, template,
fields: [{ id, label }].
- fields[].id должны быть уникальными и стабильными.
- fields[].label должны быть человекочитаемыми: по ним Smartica
определяет смысл поля.
- Для ошибок возвращай подходящий non-2xx и безопасный JSON message.
3. PUT /api/for-smartica/encounters/{encounter_id}
- Используй только PUT и ту же проверку Bearer-токена.
- Валидируй encounter_id, fields и transcript.
- Проверь совпадение ID в URL и JSON.
- В одной транзакции обнови переданные fields по id.
- Не очищай поля, отсутствующие в массиве.
- Пустой массив fields — валидный запрос: сохрани стенограмму.
- Замени сохранённую стенограмму полной версией transcript.
- Сохраняй многострочный текст и UTF-8 без потерь.
- Сделай обработку идемпотентной по encounter_id:
повторный payload не создаёт новую карточку, протокол или вложение.
- Верни 200 JSON:
{ "encounter_id": "...", "status": "saved" }.
- Не возвращай 204, HTML или пустое тело.
4. Конфигурация и безопасность
- Базовый адрес Smartica вынеси в конфигурацию, не хардкодь домен из примеров:
разработка идёт на тестовой площадке, боевой адрес подставляется при запуске.
- Секреты только в env/config; добавь placeholders в .env.example.
- Не помещай ключи, токены, launch_url или SSO token
во frontend, логи и тексты ошибок.
- Не логируй медицинские данные целиком.
- Не ослабляй TLS и существующую авторизацию.
- Не меняй несвязанный код и зависимости без необходимости.
5. Тесты
- Успешная выдача контекста через GET.
- 401 для неверного или отсутствующего токена.
- 404 для неизвестного encounter_id.
- Успешный PUT с полями и transcript.
- Повторный одинаковый PUT не создаёт дубликат.
- Отсутствующие в PUT поля не очищаются.
- Пустой массив fields сохраняет стенограмму.
- Несовпадающие ID в URL и JSON отклоняются.
- SSO вызывается только сервером и передаёт user_full_name.
- Секреты отсутствуют в клиентском bundle и ответах.
После реализации:
1. Запусти formatter, линтер, целевые тесты и сборку frontend, если он менялся.
2. Исправь введённые тобой ошибки.
3. Покажи список изменённых файлов.
4. Кратко опиши принятые решения и команды проверки.
5. Отдельно перечисли всё, что требует параметров или подтверждения Smartica.
#Лучше разбить на несколько запусков
Один большой промпт работает, но у него есть минус: если агент ошибётся в начале, ошибка пройдёт через всю работу, и разбираться придётся в сотнях строк diff.
Надёжнее идти шагами и коммитить после каждого. Так вы всегда откатываетесь на один шаг, а не на всё сразу.
#Шаг 1. Разведка без изменений
Начните с того, чтобы агент ничего не менял, а только изучил проект. Это дёшево и сразу показывает, понял ли он задачу.
Пока ничего не меняй в коде.
Прочитай https://smartica.ai/llms.txt и статьи раздела «Интеграция с МИС»
как Markdown (URL с суффиксом .md).
Затем изучи этот репозиторий и ответь:
1. Где хранятся приёмы и как называется их идентификатор.
2. Где хранятся врачи, их email и ФИО.
3. Где хранится текст протокола и его поля.
4. Как в проекте проверяется доступ врача к приёму.
5. Как устроена авторизация входящих API-запросов.
6. По какому шаблону в проекте пишутся тесты.
7. Куда правильно добавить новый защищённый API-endpoint.
В конце составь план реализации интеграции и перечисли всё,
чего тебе не хватает для начала работы.
Прочитайте ответ внимательно. Если агент неверно понял структуру проекта — поправьте его сейчас, пока он не написал ни строчки.
#Шаг 2. Только приём результата
Начните с PUT: это единственный обязательный endpoint и самая ценная часть интеграции.
Реализуй только PUT /api/for-smartica/encounters/{encounter_id}
по контракту из
https://smartica.ai/help/integrations/mis-api-export-encounter.md
Требования:
- Проверка заголовка Authorization: Bearer, ожидаемый токен
из SMARTICA_INBOUND_TOKEN, сравнение timing-safe.
- Проверь совпадение ID в URL и в теле, иначе 422.
- Обнови переданные fields по id в одной транзакции.
- Поля, отсутствующие в массиве, не очищай.
- Пустой массив fields — валидный запрос, стенограмму всё равно сохрани.
- Замени стенограмму полной версией из transcript.
- Сделай обработку идемпотентной по encounter_id.
- Верни 200 и JSON { "encounter_id": "...", "status": "saved" }.
- Не возвращай 204, пустое тело или HTML.
Напиши тесты, включая повторную отправку одинакового payload
и проверку того, что отсутствующие поля не затираются.
Больше ничего не трогай.
Прогоните тесты, закоммитьте.
#Шаг 3. Кнопка и вход врача
Реализуй серверный запуск Smartica по контракту из
https://smartica.ai/help/integrations/launch-and-sso.md
- Кнопка «Smartica» в карточке приёма.
- Браузер передаёт бэкенду только ID приёма.
- Бэкенд проверяет доступ врача к этому приёму.
- Email и ФИО врача берутся из сессии МИС, а не из тела запроса.
- POST на <SSO_ENDPOINT_FROM_SMARTICA> с Bearer из SMARTICA_SSO_KEY.
- Тело: user_email, user_full_name, encounter_id строкой.
- Ответ: редирект на launch_url без изменений.
- Ключ не должен попадать во frontend, логи и тексты ошибок.
Обработай ошибки 401, 403, 422, 429 и 5xx так, как описано в статье:
показывай понятное сообщение и не повторяй запрос автоматически
на 401 и 403.
Напиши тесты. Больше ничего не трогай.
#Шаг 4. Отдача контекста
Этот шаг можно пропустить: если вы передаёте название бланка и поля прямо в SSO-запросе, GET не нужен вообще. Решите заранее — см. Launch URL и SSO.
Реализуй GET /api/for-smartica/encounters/{encounter_id} по контракту из
https://smartica.ai/help/integrations/mis-api-get-encounter.md
- Та же проверка Bearer-токена, что в PUT.
- Верни 200 JSON: encounter_id, user_email, template, fields[{id,label}].
- encounter_id строкой, совпадает с URL.
- user_email — врач, ведущий этот приём.
- fields[].id уникальны и стабильны.
- fields[].label — человекочитаемые названия полей бланка.
- Ошибки: подходящий non-2xx и безопасный JSON message
без стектрейсов и SQL.
Напиши тесты на успешный ответ, 401 и 404. Больше ничего не трогай.
#Как разговаривать с агентом
Для тех, кто делает это впервые.
#Агент задаёт вопросы — отвечайте
В промпте есть прямое указание остановиться и спросить, если чего-то не хватает. Это сделано намеренно. Если агент спрашивает «где хранится текст протокола?» — ответьте конкретно, а не «разберись сам». Каждый точный ответ убирает целый класс будущих ошибок.
#Не принимайте изменения не глядя
В Cursor каждое изменение показывается как diff. Пролистайте его. Вы не обязаны понимать каждую строку, но должны замечать подозрительное: правки в файлах, которые к задаче не относятся, удаление существующего кода, новые зависимости.
#Полезные фразы
| Что сказать | Когда |
|---|---|
| «Покажи, что именно ты изменил» | Потеряли нить |
| «Объясни это изменение простыми словами» | Не понимаете кусок кода |
| «Откати последнее изменение» | Стало хуже |
| «Запусти тесты и исправь падения» | После правок |
| «Не трогай файл X» | Агент лезет не туда |
| «Сделай минимальное изменение» | Агент переусложняет |
| «Ты уверен? Проверь по документации Smartica» | Ответ выглядит выдуманным |
#Если агент пошёл не туда
Не пытайтесь исправить всё в диалоге — это редко работает. Правильная последовательность:
- Откатите изменения:
git checkout . - Поймите, чего не хватало в постановке.
- Сузьте задачу: попросите сделать только одну вещь.
- Запустите заново с уточнённым промптом.
Один точный запуск с чистого состояния лучше, чем десять уточнений поверх запутанного кода.
#Если агент «зациклился»
Признак: он раз за разом правит одно и то же место, тесты продолжают падать, объяснения повторяются. Остановите его и попросите:
Остановись и не меняй код.
Опиши: какую ошибку ты видишь, какие три гипотезы у тебя есть
и как проверить каждую. Не предлагай исправление, пока не
подтвердишь гипотезу фактами из кода или из вывода теста.
#Типичные ошибки ИИ в этой интеграции
Это самая ценная часть статьи. Все перечисленные ошибки встречаются регулярно, компилируются без проблем и не находятся тестами, которые агент пишет сам.
| Ошибка | Чем опасна | Как проверить |
|---|---|---|
| Придумал адрес SSO вместо выданного | Все запросы возвращают 404 |
Сравните адрес в коде с письмом от Smartica |
| Положил ключ клиники во фронтенд | Утечка секрета | Поищите ключ в собранном бандле и в исходниках страниц |
| Берёт email врача из тела запроса браузера | Вход под чужим аккаунтом | Найдите, откуда берётся user_email в коде кнопки |
PUT создаёт новую запись вместо обновления |
Дубликаты в карте пациента | Отправьте один запрос дважды курлом |
Очищает поля, которых нет в fields |
Затирает то, что врач ввёл руками | Отправьте PUT с одним полем из двух |
Падает на пустом массиве fields |
Теряется стенограмма коротких приёмов | Отправьте PUT с "fields": [] |
Передаёт encounter_id числом |
422 от Smartica |
Посмотрите тело SSO-запроса в логах |
Собирает launch_url из кусочков |
Вход не работает | Найдите конкатенацию строк с /launch |
Возвращает 204 или пустое тело |
Считается ошибкой интеграции | Проверьте код ответа курлом |
Сохраняет параметр t из ссылки |
Утечка одноразового токена | Поищите работу с параметром t |
| Логирует стенограмму целиком | Медицинские данные в логах | Проверьте, что пишется при обработке PUT |
| Пишет тесты, которые «подтверждают» его же ошибку | Ложное чувство надёжности | Прочитайте сами тесты, а не только их результат |
Последний пункт стоит подчеркнуть. Если агент неправильно понял требование, он напишет тест, который проверяет неправильное поведение, и тест пройдёт. Зелёные тесты не означают, что контракт соблюдён.
#Проверка результата
#Автоматически
Проверь свою реализацию по чеклисту и честно отметь, что не выполнено.
Не исправляй ничего, пока я не подтвержу.
1. Секреты читаются из окружения, в коде их нет.
2. Ключ клиники отсутствует в клиентском бандле.
3. Email и ФИО врача берутся из сессии МИС.
4. Доступ врача к приёму реально проверяется.
5. encounter_id передаётся строкой.
6. launch_url не собирается вручную и не логируется.
7. PUT идемпотентен по encounter_id.
8. Отсутствующие в PUT поля не очищаются.
9. Пустой массив fields сохраняет стенограмму.
10. Успешные ответы — 200 с JSON, не 204 и не HTML.
11. Тексты ошибок не содержат стектрейсов, SQL и секретов.
12. Стенограммы не попадают в логи целиком.
Для каждого пункта укажи файл и строку, где это обеспечено.
Если пункт не выполнен — так и напиши.
Требование указывать файл и строку важно: без него агент склонен отвечать «всё выполнено» по всем пунктам.
#Руками
Автоматической проверки недостаточно. Пройдите этот список сами:
- Секреты читаются из окружения, а не зашиты в коде
- SSO вызывается с сервера, ключа нет в клиентском бандле
- Email и ФИО врача берутся из сессии, а не из тела запроса браузера
- Проверка доступа врача к приёму действительно выполняется
- Повторный
PUTне создаёт дубликат — проверено курлом, а не тестом агента -
PUTс частичным набором полей не затирает остальные -
PUTс пустымfieldsсохраняет стенограмму - Миграции корректны и обратимы
- В логи не попадают стенограммы и ссылки для входа
- Не появились лишние зависимости
- Изменения не задели несвязанный код
Проверку идемпотентности делайте именно курлом:
curl --fail-with-body --silent --show-error \
--request PUT \
--user 'LOGIN:PASSWORD' \
--header 'Content-Type: application/json; charset=utf-8' \
--data '{
"encounter_id": "12345",
"fields": [{ "id": "complaints", "value": "Тестовые жалобы" }],
"transcript": "Тестовая стенограмма..."
}' \
'https://mis.example.ru/api/for-smartica/encounters/12345'
Выполните дважды и убедитесь, что в МИС остался один приём.
#Живой прогон
ИИ не заменяет приёмочный прогон. Проведите настоящий тестовый приём: нажмите кнопку, запишите короткий разговор, дождитесь результата и посмотрите, что приехало в карту.
#Дополнительные промпты
#Ревью чужой или своей реализации
Проведи ревью интеграции со Smartica в этом репозитории.
Сверься с контрактом:
- https://smartica.ai/help/integrations/mis-api-export-encounter.md
- https://smartica.ai/help/integrations/launch-and-sso.md
- https://smartica.ai/help/integrations/authentication-and-errors.md
- https://smartica.ai/help/integrations/limits.md
Ищи в первую очередь:
- секреты в клиентском коде, логах и текстах ошибок;
- неидемпотентный PUT;
- очистку полей, отсутствующих в payload;
- encounter_id, переданный числом;
- ручную сборку launch_url;
- ответы 204, пустые тела и HTML;
- email врача, принятый от браузера без проверки.
Для каждой находки укажи файл, строку, риск и минимальное исправление.
Ничего не исправляй без моего подтверждения.
#Разбор ошибки от Smartica
При запросе к Smartica приходит такая ошибка:
<ВСТАВЬТЕ КОД ОТВЕТА И ТЕЛО, БЕЗ СЕКРЕТОВ>
Найди причину. Сверься с
https://smartica.ai/help/integrations/troubleshooting.md
и с нашим кодом.
Сначала объясни причину, потом предложи исправление.
Не меняй код, пока я не подтвержу.
#Дописать тесты
Проверь, что тесты интеграции покрывают все эти случаи,
и допиши недостающие:
- успешный GET контекста;
- 401 при неверных credentials;
- 404 для неизвестного encounter_id;
- успешный PUT с полями и стенограммой;
- повторный одинаковый PUT не создаёт дубликат;
- PUT с пустым массивом fields сохраняет стенограмму;
- PUT с частичным набором полей не затирает остальные;
- несовпадение ID в URL и теле даёт 422;
- SSO вызывается только с сервера и передаёт user_full_name.
Не меняй продакшн-код: только тесты. Если тест выявит
реальный баг — сообщи о нём, но не исправляй сам.
#Если ИИ-агента нет
Ничего страшного: интеграция небольшая. Идите по статье Быстрый старт — там пошаговая инструкция и готовый пример кода, который переносится на любой стек.
#Связанные статьи
- Обзор интеграции — как устроена интеграция
- Быстрый старт — ручная реализация по шагам
- Онбординг партнёра — как получить параметры подключения
- Лимиты и ограничения
- Диагностика: если что-то не работает