6.4 KiB
V2 多 SKU(多变体)配置方案调研
状态:调研结论(待实现) 来源:Ozon Seller API 官方文档 +
reference/maozi-plugin-3.2.3(毛子ERP 逆向)+reference/AI编辑 - 毛子ERP.html
1. 结论一句话
Ozon 的多变体商品不是"一个商品带多个 SKU 子结构",而是 N 个独立商品(各自 offer_id / product_id),通过同一个「型号名称」属性(attribute id = 9048)自动合并成一张卡。变体之间的差异只能体现在「aspect 属性」(颜色/尺码等)上。
2. Ozon 官方机制
2.1 合并规则(官方文档原文)
/v3/product/import 文档明确写:
To merge two product description pages, pass
9048in theattributesarray for each product. All attributes except size or color must match in these description pages.
即:
- 每个变体 =
items[]里的一个独立 item(独立offer_id)。 - 每个 item 的
attributes里都带上id=9048(型号名称 / Название модели),且值相同。 - 除「尺寸/颜色」这类 aspect 属性外,其它属性必须完全一致。
- Ozon 会把同型号、仅 aspect 不同的商品自动合并成一张带变体选择器的卡片。
2.2 aspect 属性(is_aspect)
/v1/description-category/attribute 返回的属性里,is_aspect=true 表示该属性是「区分同型号商品的变体维度」(官方定义:颜色、尺码这类)。这就是多变体的"轴":
- 变体轴 = 类目下
is_aspect=true的属性(通常颜色、尺码/尺寸)。 - 其它属性(品牌、材料、型号名称…)在各变体间必须一致。
2.3 每个变体的图片
- 主图
images:每个变体传自己的主图(通常是该 SKU 的图)。 - 采集端已支持"SKU 图带规格名"(
sku-001-синий.jpg),正好一一对应。
3. 采集侧(毛子ERP 的 SKU 组合逻辑)
毛子ERP(1688 采集,content-scripts/content.js 里的 生成SKU组合 函数)的做法:
规格选项(颜色×尺寸…) × SKU详情 → 笛卡尔积 → 变体列表
红色, 蓝色 M, L 红色-M, 红色-L, 蓝色-M, 蓝色-L
关键点:
- 从
webAspects拿到规格维度(aspect)+ 每个维度的可选值(含 SKU 图)。 - 若有独立 SKU 详情(价格/图),做笛卡尔积;否则用默认价格 + 规格图。
- 每个变体:
{ name: "红色-M", price, primary_image, sku }。
对我们的映射:webAspects 采集回来的 skuVariants(已有 variantName + image)就是变体轴的数据源。
4. 发布侧(Ozon 多 SKU 实现方案)
4.1 数据模型
在现有 products 表基础上,多 SKU 用一张卡对应多个 product 记录来表示:
- 每个变体是一条
products记录,offer_id唯一。 - 变体间共享
型号名称(存raw.model_name,映射到 attribute9048)。 - 变体差异在
attributes(aspect 属性填不同字典值)。
4.2 发布流程
① 主商品:确定类目 → 拉属性 → 找 is_aspect=true 的属性(如 颜色/尺码)
② 变体配置 UI:
颜色 ▾ [红/蓝/绿](字典值)
尺码 ▾ [M/L/XL](字典值)
→ 笛卡尔积生成变体列表(可编辑每个变体的 offer_id / 价格 / 主图)
③ 对每个变体,组装 items[i]:
offer_id = 变体自己的货号(如 SKU-001-RED-M)
attributes = 同型号名称(9048) + 变体自己的颜色/尺码字典值 + 其它共同属性
images = 变体自己的主图
④ 一次 /v3/product/import 提交所有变体(≤100 个 item)
⑤ 轮询回填每个变体的 product_id,Ozon 自动合并成一张卡
4.3 关键字段映射
| 概念 | 来源 | 落点 |
|---|---|---|
| 型号名称 | 编辑页「型号名称」输入 | attributes[{id:9048, values:[{value}]}] |
| 变体轴 | 类目 is_aspect=true 属性 |
attributes(不同变体填不同 dictionary_value_id) |
| 变体货号 | 用户/自动 | 每个变体 offer_id |
| 变体图 | 采集 skuVariants[].image |
每个变体 images[0] |
| 共同属性 | 属性映射结果 | 每个变体相同 |
5. 待实现的 UI(studio 新增「SKU 配置」面板)
[型号名称] 儿童保温杯 316
[变体维度] 颜色(字典下拉,多选) [红][蓝][绿]
尺码(字典下拉,多选) [M][L][XL]
[生成变体] ← 笛卡尔积
┌──────────────────────────────────────────────┐
│ 颜色 尺码 货号 价格 主图 │
│ 红 M SKU-001-RED-M [ ] [图] │
│ 红 L SKU-001-RED-L [ ] [图] │
│ 蓝 M SKU-001-BLU-M [ ] [图] │
│ … │
└──────────────────────────────────────────────┘
[保存变体] → 生成 N 条 products 记录(或发布时展开)
实现上两种选择:
- A. 落库展开:保存时直接生成 N 条
products(每个变体一条),发布时各自提交。 - B. 发布时展开:主商品存一份变体配置 JSON,发布时动态展开成 N 个 item 提交。
建议 A(落库展开)——与现有"采集箱 → 单商品编辑 → 发布"链路一致,每个变体可独立查看/编辑/重发。
6. 注意点
- 变体必须同型号:
9048值必须完全一致,否则 Ozon 不合并,会生成 N 张独立卡片。 - 非 aspect 属性必须一致:品牌/材料/描述等若不同,Ozon 拒绝合并。
- 变体图数量:每个变体各自 ≤15 张主图;
skuVariants采集的规格图作为变体主图候选。 complex_attributes不是用来做 SKU 的:它用于视频/尺码表等富内容,别混用。- 单次 ≤100 item:变体数超过 100 需分批提交。
7. 结论
- 多 SKU = 同型号名称(9048) + aspect 属性区分 + 多 product 记录,靠 Ozon 自动合并,无需额外的"组合商品" API。
- 采集端已具备变体轴数据(
webAspects的skuVariants),发布端只需一个「变体配置 + 展开提交」的 UI 即可落地。 - 推荐实现路径:studio 增加「SKU 配置」面板 → 落库展开为多条 product → 复用现有发布链路。