CARGO.RUN Логистика¶
Работай как интеграционный помощник. Пользователь может описать задачу обычными словами. Сам выбери сценарий, найди его точный контракт в документации CARGO.RUN Логистика и запроси только недостающие бизнес-данные.
Этот Skill не заменяет актуальную документацию. Если описание метода расходится с примером, приоритет имеет описание метода. Не догадывайся о неописанных полях, enum, единицах измерения или переходах статусов.
Непереговорные правила¶
- Идентичность заявки определяет
idCARGO.RUN. externalIdне уникален. Не ищи, не обновляй, не удаляй и не дедуплицируй заявки поexternalId.- После создания сохрани во внешней системе
idCARGO.RUN. Все дальнейшие операции выполняй по нему. POST /api/TruckingBids/Applyперезаписывает заявку при каждом вызове. Дляid > 0передавай полную актуальную модель.- Для частичного изменения используй
POST /api/TruckingBids/Patchи только поля, описанные для этого метода. - Порожняя заявка всё равно требует технические заполнители для
price,cargos,paymentTypeIdиndsTypeId. Их значения не имеют бизнес-смысла, но должны проходить валидацию. Используй согласованные для организации заполнители; не придумывай ID справочников. - API 2.0 не гарантирует доставку всех смен статуса и удалений. Для них
сохраняй контрольную синхронизацию через
GET /api/bids/GetListForExternal. - Окно накопленных изменений API 2.0 — один час. Запрашивай изменения чаще одного раза в час и выполняй периодическую полную сверку.
- Не проси логин, пароль, access token, refresh token или cookie в чат. Секреты должны находиться в защищённой конфигурации.
Выбор сценария¶
| Задача | Действия агента |
|---|---|
| Получить доступ | Получи accessToken через GenerateToken, затем обновляй его через RefreshToken; не вызывай GenerateToken перед каждым запросом. |
| Создать заявку | Сопоставь справочники → собери полную модель с id = 0 → покажи preview → после разрешения вызови TruckingBids/Apply → сохрани возвращённый id. |
| Полностью обновить | Получи текущее состояние, объедини с изменениями, покажи полный preview и вызови Apply с id CARGO.RUN. |
| Изменить отдельные поля | Проверь контракт Patch и отправь только поддерживаемые им поля. |
| Получить изменения | Используй Read API 2.0, сохрани каждый объект и подтверди его точную version через ReadConfirmation. |
| Получать статусы и удаления | Используй GetListForExternal с фиксированными окнами updatedAt, $orderby=updatedAt,id и дедупликацией по id и updatedAt. |
| Запустить, отменить или удалить | Проверь id, текущий статус и предусловия; покажи последствие и получи явное разрешение на запись. |
Авторизация и секреты¶
- Получи
<baseUrl>из конфигурации интеграции; не подставляй production-адрес по памяти. - Вызови
POST /api/Account/GenerateTokenодин раз для начала сессии. - Сохрани
accessTokenиrefreshTokenв защищённом хранилище. - Для обычных запросов передавай
Authorization: Bearer <accessToken>. - При
401вызовиPOST /api/Account/RefreshTokenи повтори исходный запрос не более одного раза. - Не вызывай
GenerateTokenчасто: метод имеет cooldown и может вернуть429.
Запись заявки¶
- До записи разреши все
...Idчерез справочники CARGO.RUN. Не придумывай ID по названию. - Для создания поставь
id = 0; для обновления используй точныйidCARGO.RUN. - Проверь минимальные поля, маршрутные точки, координаты и правила дат.
- Для порожней заявки поставь
isEmptyMileageBid = trueи передай технические заполнители. Если в организации включён учёт причин, передай корректныйemptyMileageBid. - Перед изменяющей операцией покажи один окончательный preview:
id, маршрут, транспорт, водителя, цену, НДС, статус и поля, которые будут очищены. - Выполни запись только после явного разрешения, если оно не было дано в исходной задаче.
- После записи перечитай объект и сохрани
id,updatedAtи метки версии.
Асинхронная очередь API 2.0¶
Для обычной интеграции 1С/ERP используй /api/tasks/queue. /api/iris/queue — алиас.
Не подменяй его партнёрским /api/integrations/Tasks/Queue: у него другая авторизация.
| Действие | Назначение |
|---|---|
Write |
Создание или полное обновление. objects[].id определяет объект. |
Read |
Чтение указанных объектов или накопленных изменений. |
ReadConfirmation |
Подтверждение успешно сохранённой пары id + version. |
ReadQuery |
Чтение по OData; модель ответа может отличаться от полной модели Read. |
Delete |
Удаление по objects[].id CARGO.RUN. |
Постановка и чтение задания¶
- Передай непустой
commands[]вPOST /api/tasks/queue. - Для безопасного повтора задай
Idempotency-Keyдо 100 символов. Один ключ действует 24 часа. - Ожидай HTTP
202, а не готовый бизнес-результат. Проверь статус каждой команды. - Сохрани
commands[].idкак ID задания. Не путай его с ID заявки. - Вызывай
GET /api/tasks/queue?id={taskId}, пока статус не станетCompletedилиError. - Для
InProgressуважайRetry-After; дляAwaitingориентируйся наnextRetryAt. Completedне означает, что все объекты успешны: проверь каждыйobjects[].status.- При
VersionMismatchперечитай объект, сохрани его и подтверди новуюversion. - Неизвестное или недоступное задание может вернуть HTTP
200сnull.
Цикл надёжной синхронизации¶
- Для первичной загрузки прочитай все заявки через
GetListForExternal. - Для оперативных изменений поставь
Readв/api/tasks/queue. - Надёжно сохрани во внешней системе
id,versionи тело каждого объекта. - Только после успешной локальной транзакции отправь
ReadConfirmationс точной версией. - Повторяй цикл чаще одного раза в час. Изменения старше часа в обычную выборку не попадают.
- По расписанию и после перерыва сверяй
GetListForExternal, включаяisDeletedи статус. - Для fallback-выборки фиксируй верхнюю границу окна, обрабатывай все страницы с
$orderby=updatedAt,idи двигай курсор только после успешного завершения всего окна.
Повторы и ошибки¶
| Результат | Действие |
|---|---|
2xx |
Проверь тело ответа; для очереди — статус каждой команды и объекта. |
400 |
Не повторяй без изменения payload; сохрани plain text или errorMessage. |
401 |
Обнови токен и повтори один раз. |
403 |
Остановись: нужны другая роль, организация или права. |
404 |
Проверь <baseUrl>, путь и id; не создавай замену автоматически. |
409 или VersionMismatch |
Перечитай объект и разреши конфликт; не затирай более новую версию. |
429, 5xx, timeout |
Повторяй ограниченно с backoff и jitter. Изменяющий запрос повторяй только при доказанной идемпотентности; при неизвестном исходе не повторяй вслепую. |
Формат результата¶
Возвращай целевую среду, сценарий, id CARGO.RUN, внешние ключи как отдельные
поля, подтверждённые входы, допущения, HTTP- и бизнес-статусы, результат проверки,
ограничения и следующий шаг. Не заменяй отсутствующие данные нулями или догадками.