SuperAPI AI 工具集

shopify-admin-carrier-performance-comparison

数据与分析

查看项目

更新于 10-15 09:35

技能介绍

用途

该技能聚合近期订单的履约记录,将其与每笔订单的配送线路(shipping line)关联,对承运商进行横向对比,比较维度包括:(a) 平均运输天数,(b) 准时率(在客户可见预计送达时间前或当天送达),(c) 每单运费。它会揭示在特定区域、路线或重量段下哪个承运商更适合作为默认选择。该技能为只读操作,不执行任何变更。

前置条件

  • 已认证的 Shopify CLI 会话:shopify store auth --store <domain> --scopes read_orders
  • API 权限范围:read_orders

参数

参数 类型 必填 默认值 说明
store string 是 — 店铺域名(例如 mystore.myshopify.com)
days_back integer 否 60 已履约订单的回溯窗口
min_orders integer 否 10 纳入对比的每个承运商最低订单数
segment_by string 否 — 可选分段维度:country、weight 或 none
format string 否 human 输出格式:human 或 json

安全性

该技能为只读,不执行任何变更,可随时安全运行。成本数据使用的是客户支付的配送线路价格,而非你与承运商协商的费率;若需了解真实成本差异,需自行叠加承运商发票数据。

工作流程

  1. orders — 查询

    • 输入:query: "fulfillment_status:shipped created_at:>='<NOW - days_back days>'",first: 250,选取 fulfillments { trackingInfo, createdAt, deliveredAt, inTransitAt }、shippingLine { carrierIdentifier, originalPriceSet, title }、totalWeight、shippingAddress、分页游标
    • 预期输出:带配送线路与履约时间信息的已履约订单;持续分页直到 hasNextPage: false
  2. fulfillments — 查询(针对缺少内联数据的订单,按履约 ID 逐个查询)

    • 输入:id: <fulfillmentGid>
    • 预期输出:详细事件、deliveredAt、estimatedDeliveryAt
  3. 按承运商分组(优先使用 shippingLine.carrierIdentifier,否则解析 trackingInfo.company)。对每个承运商计算:平均运输天数、P90 运输天数、准时率(deliveredAt <= estimatedDeliveryAt)、平均运费、订单数。

  4. 若设置了 segment_by,则在每个分段内重复分组(例如按 shippingAddress.countryCode)。

  5. 过滤掉低于 min_orders 的承运商,并按平均运输天数升序排序。

GraphQL 操作

# orders:query — validated against api_version 2025-01
query OrdersForCarrierComparison($query: String!, $after: String) {
  orders(first: 250, after: $after, query: $query) {
    edges {
      node {
        id
        name
        createdAt
        totalWeight
        shippingAddress {
          countryCode
          provinceCode
          zip
        }
        shippingLine {
          carrierIdentifier
          title
          code
          originalPriceSet {
            shopMoney {
              amount
              currencyCode
            }
          }
        }
        fulfillments {
          id
          createdAt
          inTransitAt
          deliveredAt
          estimatedDeliveryAt
          status
          trackingInfo {
            company
            number
          }
        }
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}

# fulfillments:query — validated against api_version 2025-01
query FulfillmentDetail($id: ID!) {
  fulfillment(id: $id) {
    id
    status
    createdAt
    inTransitAt
    deliveredAt
    estimatedDeliveryAt
    trackingInfo {
      company
      number
      url
    }
    events(first: 50) {
      edges {
        node {
          status
          happenedAt
          message
        }
      }
    }
  }
}

会话跟踪

Claude 必须在每个阶段输出以下内容,这是强制要求。

开始时输出:

╔══════════════════════════════════════════════╗
║  SKILL: Carrier Performance Comparison       ║
║  Store: <store domain>                       ║
║  Started: <YYYY-MM-DD HH:MM UTC>             ║
╚══════════════════════════════════════════════╝

每步之后输出:

[N/TOTAL] <QUERY|MUTATION>  <OperationName>
          → Params: <brief summary of key inputs>
          → Result: <count or outcome>

完成时输出:

对于 format: human(默认):

══════════════════════════════════════════════
CARRIER PERFORMANCE  (<days_back> days)
  Orders analyzed:        <n>
  With delivery data:     <n>

  Carrier        Orders  Avg Days  P90  On-Time%  Avg Cost
  ──────────────────────────────────────────────────────────
  <carrier>      <n>     <d>       <d>  <pct>%    $<n>
  <carrier>      <n>     <d>       <d>  <pct>%    $<n>
  Output: carrier_performance_<date>.csv
══════════════════════════════════════════════

对于 format: json,输出:

{
  "skill": "carrier-performance-comparison",
  "store": "<domain>",
  "period_days": 60,
  "orders_analyzed": 0,
  "carriers": [
    {
      "name": "UPS",
      "orders": 0,
      "avg_transit_days": 0,
      "p90_transit_days": 0,
      "on_time_pct": 0,
      "avg_cost": 0,
      "currency": "USD"
    }
  ],
  "output_file": "carrier_performance_<date>.csv"
}

输出格式

CSV 文件 carrier_performance_<YYYY-MM-DD>.csv,包含列: carrier, segment, orders, avg_transit_days, p90_transit_days, on_time_pct, avg_cost, total_cost, currency

错误处理

错误 原因 恢复方式
THROTTLED 超出 API 速率限制 等待 2 秒,最多重试 3 次
deliveredAt 为 null 承运商未确认送达 从运输时间平均值中排除,计为“运输中”
estimatedDeliveryAt 为 null 承运商未提供预计送达时间 从准时率中排除,不惩罚该承运商
carrierIdentifier 与 trackingInfo.company 均为 null 无跟踪信息的手动履约 归入 (unknown) 桶,单独呈现数量

最佳实践

  • 仅在 min_orders >= 10 时对比承运商;样本更小则噪声较大。
  • 国际对比时使用 segment_by: country——在国内表现强的承运商跨境可能较弱。
  • 可将此技能与 delivery-time-analysis 搭配使用以获得仅时间维度的视图;本技能额外增加了成本与准时维度。
  • 运输时间优秀但成本较高的承运商,若客户看重速度(高客单价店铺)仍可能胜出——可将此报告与面向客户的 NPS 或评价数据叠加分析。
  • 在合同审查窗口期按季度运行,用数据而非直觉来支持承运商谈判。