SuperAPI AI 工具集

shopify-admin-inventory-adjustment

办公与效率

查看项目

更新于 10-15 09:35

技能介绍

用途

该技能对特定地点的特定变体应用库存数量修正,相当于在 Shopify 后台手动编辑库存的程序化等价操作。适用场景包括:循环盘点后发现差异、3PL 退货批次延迟入账,或在 multi-location-inventory-audit 技能识别出 Available/Committed 漂移之后进行修正。它替代了在 Shopify 后台逐行手动编辑库存的方式。

前置条件

  • 执行 shopify auth login --store <domain>
  • API 权限范围:read_products、write_inventory

参数

  • store(string,必填):商店域名,例如 mystore.myshopify.com
  • format(string,可选,默认 human):输出格式,human 或 json
  • dry_run(bool,可选,默认 false):预览操作而不执行变更
  • adjustments(array,必填):由 {sku, location_id, delta} 对象组成的数组。delta 为带符号的数量变化(例如 +5 表示增加 5 件,-3 表示减少 3 件)
  • reason(string,可选,默认 correction):记录到审计追踪的调整原因,可选值:correction、cycle_count、damaged、received、reservation_created、reservation_deleted、shrinkage
  • reference_document_uri(string,可选):链接调整到采购订单、退货或盘点文档的 URI

安全提示

第 2 步执行 inventoryAdjustQuantities 会立即更改实时库存数量。错误的调整可能导致超卖(减少过多)或库存虚高(错误增加)。建议先以 dry_run: true 运行,查看每个 SKU 调整前后的数量再提交。reason 字段会永久记录在 Shopify 的库存活动历史中。

工作流程步骤

  1. OPERATION: productVariants — query

    • 输入:对 adjustments 中的每个 {sku},按 SKU 查找变体以获取其 inventoryItem.id;同时获取当前 inventoryQuantity 用于前后对比
    • 预期输出:所有调整目标的 {sku → inventoryItemId, currentQuantity} 映射;若任一 SKU 未找到则中止
  2. OPERATION: inventoryAdjustQuantities — mutation

    • 输入:changes 数组,包含 {inventoryItemId, locationId, delta, ledgerDocumentUri},使用 reason 和 reference_document_uri 参数
    • 预期输出:inventoryAdjustmentGroup.changes,含每项的 quantityAfterChange;以及 userErrors

GraphQL 操作

# productVariants:query — validated against api_version 2025-01
query VariantBySku($first: Int!, $query: String) {
  productVariants(first: $first, query: $query) {
    edges {
      node {
        id
        sku
        inventoryQuantity
        inventoryItem {
          id
          tracked
        }
        product {
          title
        }
      }
    }
  }
}

# inventoryAdjustQuantities:mutation — validated against api_version 2025-01
mutation InventoryAdjustQuantities($input: InventoryAdjustQuantitiesInput!) {
  inventoryAdjustQuantities(input: $input) {
    inventoryAdjustmentGroup {
      id
      reason
      changes {
        name
        delta
        quantityAfterChange
        item {
          id
          sku
        }
        location {
          id
          name
        }
      }
    }
    userErrors {
      field
      message
    }
  }
}

会话追踪

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

开始时输出:

╔══════════════════════════════════════════════╗
║  SKILL: inventory-adjustment                 ║
║  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, e.g., "143 records returned">

若 dry_run: true,则在每个 mutation 步骤前加 [DRY RUN] 前缀且不执行。

完成时输出:

format: human(默认):

══════════════════════════════════════════════
OUTCOME SUMMARY
  SKUs adjusted:        <value>
  Total units added:    <value>
  Total units removed:  <value>
  Errors:               <count, 0 if none>
  Output:               <filename or "none">
══════════════════════════════════════════════

format: json 时,输出符合以下 schema 的 JSON 对象:

{
  "skill": "inventory-adjustment",
  "store": "<domain>",
  "started_at": "<ISO8601>",
  "completed_at": "<ISO8601>",
  "dry_run": false,
  "steps": [
    {
      "step": 1,
      "operation": "<OperationName>",
      "type": "query|mutation",
      "params_summary": "<string>",
      "result_summary": "<string>",
      "skipped": false
    }
  ],
  "outcome": {
    "skus_adjusted": 0,
    "total_units_added": 0,
    "total_units_removed": 0,
    "errors": 0,
    "output_file": "<filename|null>"
  }
}

输出格式

CSV 文件 inventory-adjustments-<YYYY-MM-DD>.csv,列包括:sku, product_title, location_name, quantity_before, delta, quantity_after, reason。

错误处理

  • SKU not found:SKU 在商店中不存在。核对 SKU 拼写;可使用 low-inventory-restock 浏览有效 SKU。
  • inventoryItem.tracked: false:变体已禁用库存追踪。调整前需在 Shopify 后台启用追踪。
  • userErrors from mutation:delta 无效、地点无效或权限问题。检查 write_inventory 权限范围并验证地点 GID。
  • Delta would push quantity below 0:调整移除量超过可用量。确认正确的 delta 值;仅在已知库存移除时使用负 delta。

最佳实践

  • 始终先运行 dry_run: true——前后对比 CSV 预览让你在影响实时库存前确认每项变更。
  • 使用 reason: cycle_count 并配合指向盘点表的 reference_document_uri——这会在 Shopify 库存活动日志中创建永久审计追踪。
  • 将单次盘点会话的所有修正批量放入一条命令,而非逐条应用——审计追踪会将它们归入单个 inventoryAdjustmentGroup。
  • 调整后再次运行 multi-location-inventory-audit 以确认所有差异已解决。
  • 对于 3PL 退货批次,使用 reason: received 并链接退货批次文档 URI——这使与 3PL 发票的对账变得简单。