Cargotime

Qubictron

Переход с Qubictron на Cargotime API v2: ключи доступа, запросы и обработка ответов

Руководство описывает переход с Qubictron Container Tracking API v1 на Cargotime API v2. В Qubictron маршрут запрашивается параметром route_details у метода /ocean.

Общий порядок переноса номеров и настройки уведомлений приведён в порядке перехода. Полные схемы Cargotime — в справочнике API.

Аутентификация

Qubictron передаёт ключ в заголовке x-api-key. Базовый адрес Qubictron — https://api.qubictron.com/tracking/v1.

Для перехода на Cargotime:

  1. Создайте ключ в личном кабинете Cargotime.
  2. Замените базовый адрес на https://tracking.cargotime.ru/v2. Например, полный адрес запроса отслеживания — https://tracking.cargotime.ru/v2/tracking.
  3. Передавайте новый ключ в параметре URL api_key каждого запроса, включая пакетные задачи и управление вебхуками. Ключи и токены прежнего сервиса не подходят.

Правила использования ключа и ограничения запросов — в разделе аутентификации.

Отслеживания и идентификаторы

QubictronCargotimeЧто изменить
shipmentdataПолучайте сводку перевозки из data.summary, контейнеры из data.containers. Замените обращения к объекту shipment.
facilities / locationsterminals / locationsИщите место и терминал события в массивах нового ответа по полям location и terminal. Исходные числовые ID не сохраняются.
transportscontainers[].events[].vessel / voyageПолучайте название судна и рейс из vessel и voyage каждого события. Отдельного массива transports нет.

Соответствие операций

QubictronCargotimeЧто изменить
GET /oceanGET /v2/trackingПередайте номер в value, тип в type, SCAC перевозчика в company. Для нескольких номеров используйте POST /v2/tracking/batch.
GET /ocean/carriersGET /v2/companiesНайдите перевозчика по SCAC и проверьте поддержку нужного типа номера в полях cn, bl и bk.

Параметры запроса

QubictronCargotimeЧто изменить
reference_numbervalueПередайте reference_number в параметре URL value без изменения номера.
reference_typetypeИспользуйте container для контейнера, bl для коносамента, bk вместо booking для букинга. Тип обязателен.
carrier_codecompanyПроверьте carrier_code через GET /v2/companies и передайте соответствующий SCAC в company.
route_detailsneed_routeЗамените route_details=true на need_route=true. Обработчик ответа должен использовать структуру route_info.

Поля ответа

В этой таблице пути указаны от корня ответа GET /v2/tracking. В списке /v2/shipments данные перевозки находятся внутри каждой записи в tracked_item.data.data. Формат вебхуков описан в отдельном разделе.

QubictronCargotimeКак обработать ответ
success / status_codesuccess / statusПроверяйте success и status в JSON, даже если HTTP-код равен 200. Перепишите обработку ошибок под значения нового status.
data.shipment.reference_numberrequest.track_number.valueПолучайте исходный номер из request.track_number.value. Для управления отслеживанием сохраняйте отдельный data.tracking_metadata.id.
data.shipment.carrierdata.summary.companyВместо carrier.code проверяйте массив company.scacs. Название берите из company.name или company.full_name.
data.shipment.statusdata.shipment_statusПолучайте состояние перевозки из data.shipment_status и обновите обработку допустимых значений.
events[].datetime / is_actualevents[].date / actualВ событиях контейнера замените datetime на date, is_actual на actual. Сохраняйте различие между фактическими и плановыми датами.
events[].event_codeevents[].status_codeПроверяйте этап погрузки: LOAD в порту отправления соответствует CLL, при перегрузке — CLT. Одной замены названия кода недостаточно.
events[].location_id / facility_idevents[].location / terminalПо location найдите id в data.locations, по terminal — в data.terminals. Не переносите числовые ID из Qubictron.
data.routedata.summaryПолучайте порт погрузки из data.summary.pol, порт выгрузки из data.summary.pod. Координаты линии маршрута находятся отдельно в data.route_info.
data.containers[].route_detailsdata.route_infoПолучайте путь из route_info.route[].path, текущую точку из route_info.current_position. Отдельные поля AIS из Qubictron могут отсутствовать.

Примеры ответов

В каждой паре подписаны ответы прежнего сервиса и Cargotime. Большие JSON-примеры можно раскрыть отдельно от таблиц сопоставления. Это сокращённые примеры с условными данными. Над каждым JSON указан путь к показанной части ответа. Пути в следующей таблице начинаются от этой части.

Номер, перевозчик и тип контейнера

Как сопоставить

QubictronCargotimeЧто изменить
data.shipment.reference_type = "CONTAINER"request.track_number.type = "container"В запросах используйте container в нижнем регистре. Значение CONTAINER из исходного ответа не копируйте в type.
data.shipment.reference_number = "MSCU1234567"request.track_number.value = "MSCU1234567"Номер не меняется. Получайте его из request.track_number.value.
data.shipment.carrier.code = "MSCU"data.summary.company.scacs = ["MEDU","MSCU"]Проверяйте наличие MSCU в массиве scacs, а не равенство поля одной строке.
data.shipment.status = "IN_TRANSIT"data.shipment_status = "IN_TRANSIT"Получайте IN_TRANSIT из shipment_status. Статус подписки проверяется отдельно в tracking_metadata.status.
data.containers[0].type = "High Cube Dry"data.containers[0].type = "40' High Cube Dry"В новом ответе размер и тип указаны одной строкой containers[].type. Обновите отображение этих сведений.
data.containers[0].iso_code = "45G1"Нет прямого аналогаОтдельного iso_code нет. Храните прежний код у себя, если он нужен для учёта оборудования.

Фактическое и плановое события

Как сопоставить

QubictronCargotimeЧто изменить
containers[0].events[0].event_code = "LOAD"containers[0].events[1].status_code = "CLL"В примере погрузка происходит в порту отправления, поэтому используйте CLL. Для погрузки при перегрузке применяется CLT.
containers[0].events[1].event_code = "ARRI"containers[0].events[0].status_code = "VAD"Прибытие судна в порт выгрузки обозначено VAD. Оно само по себе не подтверждает выгрузку контейнера или доставку.
containers[0].events[1].is_actual = falsecontainers[0].events[0].actual = falseЗначение false сохраняет плановый характер даты. Не показывайте это событие как уже произошедшее.
containers[0].events[0].location_id = 10containers[0].events[1].location = 0В примере место события имеет ID 0 в новом массиве locations. Ищите объект по этому ID, а не по прежнему 10.
containers[0].events[0].transport_id = 5containers[0].events[1].vessel = "EXAMPLE VESSEL"Название судна теперь находится в самом событии. Уберите поиск по transport_id в массиве transports.
containers[0].events[0].voyage_number = "126E"containers[0].events[1].voyage = "126E"Получайте номер рейса из event.voyage. В примере значение остаётся 126E.

Даты показывают форматы полей. При переносе учитывайте смещение и часовой пояс источника: удаление Z или +08:00 не является преобразованием времени.

Маршрут и текущее местоположение

Как сопоставить

QubictronCargotimeЧто изменить
predicted_position.coordinatescurrent_position = [1.25,103.75]Получайте текущую точку как массив [широта, долгота]. Не ожидайте объект с отдельными свойствами координат.
route_legs[0].route_pathroute[0].pathОбрабатывайте route_info.route[] и массив точек path каждого участка вместо route_legs[].route_path.
route_legs[0].transport_mode = "VESSEL"route[0].type = "sea"Для морского участка используйте type: "sea" вместо transport_mode: "VESSEL".
latest_ais_dataНет прямого аналогаНе подставляйте текущую точку маршрута вместо последнего измерения AIS. Данные измерения и его время храните отдельно, если они нужны.

Что сохранить отдельно

Отдельные данные AIS и прогнозы Qubictron могут отсутствовать в ответе Cargotime. Проверьте, какие из этих полей использует ваше приложение, и сохраните необходимые сведения до перехода. Сведения о поддержке вебхуков Qubictron не удалось найти в открытой документации. Если вы уже получаете такие уведомления, проверьте настройки аккаунта и создайте вебхуки Cargotime отдельно по руководству.

Обновлено