跳转到主要内容

轮询跟踪更新

使用 GET /tracking/{id} 以统一格式获取实时发货跟踪数据。本指南涵盖轮询流程、如何解读跟踪状态,以及构建客户通知的模式。

获取跟踪数据

使用标签创建响应中的 id
curl https://api.flexforward.com/tracking/f47ac10b-58cc-4372-a567-0e02b2c3d479 \
  -H "Authorization: Bearer YOUR_API_TOKEN"

响应

200 OK
{
  "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "trackingNumber": "YT2503010001CN",
  "tag": "InTransit",
  "subtag": "InTransit_001",
  "subtagMessage": "In transit",
  "slug": "yunexpress",
  "checkpoints": [
    {
      "checkpointTime": "2026-03-17T08:15:00Z",
      "city": "Los Angeles",
      "state": "CA",
      "countryRegion": "US",
      "location": "LAX Distribution Center",
      "message": "Arrived at destination country",
      "tag": "InTransit",
      "subtag": "InTransit_001",
      "subtagMessage": "In transit",
      "slug": "yunexpress"
    },
    {
      "checkpointTime": "2026-03-16T02:30:00Z",
      "city": "Shenzhen",
      "state": "Guangdong",
      "countryRegion": "CN",
      "location": null,
      "message": "Departed from sorting center",
      "tag": "InTransit",
      "subtag": "InTransit_001",
      "subtagMessage": "In transit",
      "slug": "yunexpress"
    },
    {
      "checkpointTime": "2026-03-15T10:30:00Z",
      "city": "Tokyo",
      "state": "Tokyo",
      "countryRegion": "JP",
      "location": null,
      "message": "Shipment information received",
      "tag": "InfoReceived",
      "subtag": "InfoReceived_001",
      "subtagMessage": "Shipment information received",
      "slug": "yunexpress"
    }
  ]
}
检查点按最新事件排在最前面。

了解跟踪状态

使用顶层的 tag 字段来实现高级别的状态逻辑:
Tag面向客户的含义处理方式
Pending订单处理中无需通知
InfoReceived发货信息已向物流商登记通知:“您的订单已发货”
InTransit包裹运输中通知:“您的包裹正在运输中”
Delivered包裹已送达通知:“您的包裹已送达”
Exception配送发生问题通知:“您的配送发生问题”并进行调查
Cancelled发货已取消内部处理
Unknown无法获取状态无需通知 — 稍后重试

轮询模式

由于目前尚未提供 Webhook,请以合理的间隔轮询 GET /tracking/{id} 来检测状态变更。

推荐做法

async function pollTracking(labelId, token) {
  let lastTag = null;

  const interval = setInterval(async () => {
    const response = await fetch(
      `https://api.flexforward.com/tracking/${labelId}`,
      { headers: { 'Authorization': `Bearer ${token}` } }
    );
    const tracking = await response.json();

    if (tracking.tag !== lastTag) {
      lastTag = tracking.tag;
      await notifyCustomer(tracking); // Your notification logic
    }

    // Stop polling when shipment reaches a terminal state
    if (['Delivered', 'Cancelled'].includes(tracking.tag)) {
      clearInterval(interval);
    }
  }, 30 * 60 * 1000); // Every 30 minutes
}

轮询指南

发货阶段建议间隔
Pending / InfoReceived每 4-6 小时
InTransit每 30-60 分钟
Delivered / Cancelled停止轮询
Exception解决前每 15-30 分钟
跟踪数据从物流商近乎实时获取。以低于 15 分钟的间隔轮询不太可能获得新数据,且会计入建议的速率限制(每秒 10 个请求)。

错误处理

状态码含义处理方式
200已获取跟踪数据处理 tagcheckpoints
403访问被拒该标签属于其他账户
404找不到标签请确认标签 ID 是否正确
502上游服务错误使用指数退避重试

后续步骤