用途
该技能查询超过可配置天数的开放草稿订单,并可选地删除它们。草稿订单会因被放弃的 B2B 报价、未完成的手动订单或旧集成而不断累积,造成后台杂乱。陈旧草稿还会虚增待处理收入指标。
前置条件
已认证的 Shopify CLI 会话:shopify store auth --store <domain> --scopes read_orders,write_orders
API 权限范围:read_orders、write_orders
参数
store:字符串,必填,无默认值,店铺域名(例如 mystore.myshopify.com)
older_than_days:整数,可选,默认 30,删除早于该天数的草稿
dry_run:布尔值,可选,默认 true,预览将要删除的草稿而不执行变更
format:字符串,可选,默认 human,输出格式:human 或 json
安全性
⚠️ draftOrderDelete 会永久删除草稿订单。已删除的草稿无法恢复。请以 dry_run: true 运行,在提交前审阅列表。删除前请确认没有陈旧草稿代表正在等待客户批准的活跃 B2B 报价。
工作流步骤
操作:draftOrders — 查询 输入:query: "status:open created_at:<='<NOW - older_than_days days>'", first: 250, 分页游标 预期输出:陈旧的开放草稿订单;分页直到 hasNextPage: false
操作:draftOrderDelete — 变更 输入:id: <draft_order_id> 预期输出:deletedId、userErrors
GraphQL 操作
draftOrders:query — 已针对 api_version 2025-01 验证
query StaleDraftOrders($query: String!, $after: String) { draftOrders(first: 250, after: $after, query: $query) { edges { node { id name status createdAt updatedAt totalPriceSet { shopMoney { amount currencyCode } } customer { id displayName defaultEmailAddress { emailAddress } } tags note } } pageInfo { hasNextPage endCursor } } }
draftOrderDelete:mutation — 已针对 api_version 2025-01 验证
mutation DraftOrderDelete($input: DraftOrderDeleteInput!) { draftOrderDelete(input: $input) { deletedId userErrors { field message } } }
会话跟踪
Claude 必须在每个阶段输出以下内容。这是强制要求。
开始时输出:
╔══════════════════════════════════════════════╗ ║ SKILL: Draft Order Cleanup ║ ║ 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>
如果 dry_run: true,则为每个变更步骤添加 [DRY RUN] 前缀,并且不执行它。
完成时输出:
对于 format: human(默认):
══════════════════════════════════════════════ OUTCOME SUMMARY Stale drafts found: <n> Drafts deleted: <n> Total value cleared: $<amount> Errors: <n> Output: draft_cleanup_<date>.csv ══════════════════════════════════════════════
对于 format: json,输出:
{ "skill": "draft-order-cleanup", "store": "<domain>", "started_at": "<ISO8601>", "older_than_days": 30, "dry_run": true, "outcome": { "drafts_found": 0, "drafts_deleted": 0, "value_cleared": 0, "currency": "USD", "errors": 0, "output_file": "draft_cleanup_<date>.csv" } }
输出格式
CSV 文件 draft_cleanup_<YYYY-MM-DD>.csv,包含列: draft_id, draft_name, customer_name, customer_email, created_at, total_value, currency, action
错误处理
THROTTLED:API 速率限制超出,等待 2 秒,最多重试 3 次
删除时出现 userErrors:草稿已完成或已取消,记录为跳过,继续
无陈旧草稿:所有草稿都是近期的或不存在,以 0 结果退出
最佳实践
对于销售周期较长的 B2B 店铺,将 older_than_days 设置为 60 或更高。
删除前审阅 dry-run 列表中带有备注或高价值的草稿——这些可能是合法的待处理报价。
对于 B2B 场景,考虑在运行删除步骤前过滤掉带有 b2b-quote 或类似标签的草稿。
作为常规后台维护任务每月运行一次。