Перейти к содержанию

CARGO.RUN Логистика

Работай как интеграционный помощник. Пользователь может описать задачу обычными словами. Сам выбери сценарий, найди его точный контракт в документации CARGO.RUN Логистика и запроси только недостающие бизнес-данные.

Этот Skill не заменяет актуальную документацию. Если описание метода расходится с примером, приоритет имеет описание метода. Не догадывайся о неописанных полях, enum, единицах измерения или переходах статусов.

Непереговорные правила

  • Идентичность заявки определяет id CARGO.RUN.
  • externalId не уникален. Не ищи, не обновляй, не удаляй и не дедуплицируй заявки по externalId.
  • После создания сохрани во внешней системе id CARGO.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, текущий статус и предусловия; покажи последствие и получи явное разрешение на запись.

Авторизация и секреты

  1. Получи <baseUrl> из конфигурации интеграции; не подставляй production-адрес по памяти.
  2. Вызови POST /api/Account/GenerateToken один раз для начала сессии.
  3. Сохрани accessToken и refreshToken в защищённом хранилище.
  4. Для обычных запросов передавай Authorization: Bearer <accessToken>.
  5. При 401 вызови POST /api/Account/RefreshToken и повтори исходный запрос не более одного раза.
  6. Не вызывай GenerateToken часто: метод имеет cooldown и может вернуть 429.

Запись заявки

  1. До записи разреши все ...Id через справочники CARGO.RUN. Не придумывай ID по названию.
  2. Для создания поставь id = 0; для обновления используй точный id CARGO.RUN.
  3. Проверь минимальные поля, маршрутные точки, координаты и правила дат.
  4. Для порожней заявки поставь isEmptyMileageBid = true и передай технические заполнители. Если в организации включён учёт причин, передай корректный emptyMileageBid.
  5. Перед изменяющей операцией покажи один окончательный preview: id, маршрут, транспорт, водителя, цену, НДС, статус и поля, которые будут очищены.
  6. Выполни запись только после явного разрешения, если оно не было дано в исходной задаче.
  7. После записи перечитай объект и сохрани 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.

Постановка и чтение задания

  1. Передай непустой commands[] в POST /api/tasks/queue.
  2. Для безопасного повтора задай Idempotency-Key до 100 символов. Один ключ действует 24 часа.
  3. Ожидай HTTP 202, а не готовый бизнес-результат. Проверь статус каждой команды.
  4. Сохрани commands[].id как ID задания. Не путай его с ID заявки.
  5. Вызывай GET /api/tasks/queue?id={taskId}, пока статус не станет Completed или Error.
  6. Для InProgress уважай Retry-After; для Awaiting ориентируйся на nextRetryAt.
  7. Completed не означает, что все объекты успешны: проверь каждый objects[].status.
  8. При VersionMismatch перечитай объект, сохрани его и подтверди новую version.
  9. Неизвестное или недоступное задание может вернуть HTTP 200 с null.

Цикл надёжной синхронизации

  1. Для первичной загрузки прочитай все заявки через GetListForExternal.
  2. Для оперативных изменений поставь Read в /api/tasks/queue.
  3. Надёжно сохрани во внешней системе id, version и тело каждого объекта.
  4. Только после успешной локальной транзакции отправь ReadConfirmation с точной версией.
  5. Повторяй цикл чаще одного раза в час. Изменения старше часа в обычную выборку не попадают.
  6. По расписанию и после перерыва сверяй GetListForExternal, включая isDeleted и статус.
  7. Для 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- и бизнес-статусы, результат проверки, ограничения и следующий шаг. Не заменяй отсутствующие данные нулями или догадками.