name: r2-goods version: 1.3.0 description: "R2-CLI 商品管理:上架、下架、改价、编辑、挂售、查询。当用户提到商品、上架、下架、改价、修改商品、挂售、选品、库存、店铺、淘宝阿里资产、SPU、SKU、商家编码等关键词时使用此 skill。覆盖闲鱼、淘宝两个平台的所有商品操作。即使用户只是说'帮我看看商品'或'查一下上架情况',也应触发此 skill。" metadata: requires: bins: ["r2-cli"] cliHelp: "r2-cli goods --help" related: - "r2-shared" - "r2-auth"
R2-Goods (v1.3)
商品管理:覆盖闲鱼、淘宝两大平台的商品上架、下架、改价、编辑、挂售、查询。
前置:先读取 r2-shared skill(执行规则、版本检查、错误格式、Token 恢复),再读取 r2-auth skill 确保已登录。
Tip:获取数据后展示给用户选择,不要让用户自己提供 ID。遵守「友好输出原则」(r2-shared)。
Tip:上架、改价、编辑提交前,必须提醒用户可选 --transport-fee(运费,默认 0 包邮)和 --yhb(验货宝)。
平台路由决策
闲鱼、淘宝是两套独立体系,ID 互不通用。
通用判断规则
| 条件 | 判断 |
|---|---|
| 用户明确说了平台("闲鱼下架"、"淘宝改价") | 用对应平台的命令 |
| 用户从之前的列表中选了商品 | 从数据推断:有 jbpSpuId → 淘宝,有 stockGoodsId + status → 闲鱼 |
| 用户未指定且无上下文 | 先查所有平台列表,让用户选商品,再根据平台执行 |
禁止:凭上下文猜测平台。刚操作过淘宝不意味着"下架"就一定是淘宝。
上架路由
| 条件 | 方式 | 流程 |
|---|---|---|
| "选品上架" 或商品在选品库 | goods xianyu up |
店铺 → 仓库 → 选品 → 价格 → 提交 |
| "挂售" 或用户提供了图片 | goods xianyu hang-up |
上传图片 → AI 读图 → 类目/属性 → 提交 |
| "阿里资产" 或 "alzc" | goods taobao alzc |
SPU 查询 → SKU 详情 → 选择+价格 → 申请 |
用户只说"上架"未指定方式 → 必须询问:"选品上架、挂售上架还是阿里资产上架?"
平台明确但方式未定:
| 用户说了 | 判断 | 回复 |
|---|---|---|
| "闲鱼上架" / "上架到闲鱼" | 平台=闲鱼,方式未定 | 询问:"选品上架还是挂售上架?" |
| "淘宝上架" / "上架到淘宝" | 淘宝只有阿里资产 | 直接走 goods taobao alzc |
查询路由
用户说"查上架列表"/"查询上架情况"且未指定平台:
r2-cli goods shops --json→ 按platform分组- 有
xianyu店铺 →r2-cli goods xianyu listing --json - 有
taobao店铺 →r2-cli goods taobao listing --shop-id <id> --json(每个淘宝店铺都要查) - 分区块展示
查询意图细化:
| 用户措辞 | 判断 | 命令 |
|---|---|---|
| "可以上架的"、"选品"、"仓库里的" | 选品商品 | goods list --stock-id <id> |
| "已上架的"、"上架列表"、"在卖的" | 已上架 | 走查询路由(多平台) |
| "卖出去的"、"已售出" | 已售出 | goods xianyu listing --status sold |
| 模糊(仅"商品"、"看看商品") | 先问 | "看选品商品还是已上架商品?" |
按名称定位商品:用户提名称没给 ID → 先查列表模糊匹配 goodsName/brand,匹配到多个展示候选,未匹配到自动展示完整列表。
下架/改价路由
用户说"下架"或"改价"且未指定平台 → 先查所有平台列表 → 用户选择 → 根据平台执行。
| 操作 | 闲鱼 | 淘宝 |
|---|---|---|
| 下架 | goods xianyu down --id <id> |
goods taobao down --jbp-spu-id <> --shop-id <> |
| 改价 | goods xianyu price --id <id> --price <> |
goods taobao price --jbp-spu-id <> --jbp-sku-id <> --shop-id <> --price <> |
| 修改信息 | goods xianyu edit --id <id> ... |
需通过 SPU 重新申请 |
命令概览
查询
| 命令 | 说明 | 详细文档 |
|---|---|---|
goods shops [--json] |
查看已授权店铺 | r2-goods-query |
goods stocks [--json] |
查看仓库 | r2-goods-query |
goods list [--stock-id <id>] [--json] |
查看选品商品 | r2-goods-query |
goods xianyu listing [--status <>] [--json] |
闲鱼上架列表 | r2-goods-listing |
goods taobao listing --shop-id <id> [--json] |
淘宝上架列表 | r2-goods-alzc |
闲鱼操作
| 命令 | 说明 | 详细文档 |
|---|---|---|
goods xianyu up --stock-goods-id <> --shop-id <> --price <> --json |
选品上架 | r2-goods-listing |
goods xianyu down --id <id> --json |
下架 | r2-goods-listing |
goods xianyu price --id <id> --price <> --json |
改价 | r2-goods-listing |
goods xianyu edit --id <id> [...] --json |
修改商品信息 | r2-goods-listing |
goods xianyu hang-up submit [...] --json |
挂售上架 | r2-goods-hangup |
淘宝阿里资产
| 命令 | 说明 | 详细文档 |
|---|---|---|
goods taobao alzc spu-query --shop-id <> --goods-no <> --json |
查询可申请 SPU | r2-goods-alzc |
goods taobao alzc spu-detail --shop-id <> --jbp-spu-id <> --json |
SPU 详情(含 SKU) | r2-goods-alzc |
goods taobao alzc apply --shop-id <> --jbp-spu-id <> --apply-skus '<>' --json |
申请上架 SKU | r2-goods-alzc |
goods taobao price --jbp-spu-id <> --jbp-sku-id <> --shop-id <> --price <> --json |
改价 | r2-goods-alzc |
goods taobao stock --jbp-spu-id <> --jbp-sku-id <> --shop-id <> --quantity <> --json |
改库存 | r2-goods-alzc |
goods taobao down --jbp-spu-id <> --shop-id <> --json |
下架 | r2-goods-alzc |
选品上架 4 步流程
r2-cli goods shops --json→ 展示店铺 → 用户选择shopIdr2-cli goods stocks --json→ 展示仓库 → 用户选择stockIdr2-cli goods list --stock-id <id> --json→ 展示商品 → 用户选择stockGoodsIdr2-cli goods xianyu up --stock-goods-id <id> --shop-id <id> --price <amount> --json→ 提交
必填:--stock-goods-id、--shop-id(取 shopId 不是 id)、--price
提交前提醒:运费默认包邮(
--transport-fee 0),可选开启验货宝(--yhb)。详细参数、返回字段和友好输出格式见 r2-goods-listing。
修改商品信息(edit)
修改已上架商品的标题、描述、品牌、类目、图片、属性等。不支持改价,改价用 goods xianyu price。
路由决策:
| 用户意图 | 流程 |
|---|---|
| 提供了图片文件 | 全自动:读图识别 → 上传图片 → 匹配类目/属性/品牌 → 展示变更 → 确认 → 提交 |
| 指定了具体字段("改标题为X") | 直接修改指定字段 |
| 说"修改商品信息"但没给细节 | 提示可提供图片或指定字段 |
关键约束(完整流程和参数见 r2-goods-listing):
- 定位优先用
--id <goodsListingId>,备选--stock-goods-id + --shop-id --category-id和--channel-cat-id后端必填,即使不改类目也要传当前值--item-attrs必须包含 props 中所有属性,不只是修改的那一个。后端替换整个列表,漏传的属性会被清除- 改品牌时建议同时传
--item-attrs(含全部属性+最新品牌值) - AI 读图识别后的字段需展示给用户确认
带图片的全自动 8 步流程和详细注意事项见 r2-goods-listing 和 scenes/r2-scene-edit-with-images。
挂售(hang-up)
挂售模式支持完整商品信息(图片、类目、属性、品牌),与普通上架是不同流程。
核心原则:图片里能看到的,就别问用户。只问价格和商家编码,其他全部从图片自动提取。
关键注意事项(完整流程和参数见 r2-goods-hangup):
- 品牌必须双传:
--brand-name+--item-attrs中的品牌项(含 propName/channelCatId) - 描述自动生成:品牌+款式+颜色+材质+货号自动组合
- 标题自动组合:品牌+款式+颜色+尺码+成色,最长 30 单位(半角 0.5/全角 1)
- stuff-status 成色映射:100=全新、-1=准新、99=99新、95=95新、90=9新
- 价格必填:用户不提供时暂停流程,不要替用户决定价格
完整的 3 步流程、属性匹配、必填/可选参数表、常见错误见 r2-goods-hangup。
场景指南
| 场景 | 指南 |
|---|---|
| 服装/鞋包挂售 | scenes/r2-scene-hangup-fashion.md |
| 带图片修改商品 | scenes/r2-scene-edit-with-images.md |
| 批量操作 | scenes/r2-scene-batch-operations.md |
错误处理
统一错误格式见 r2-shared skill。
| 错误 | 恢复 |
|---|---|
请先运行 r2-cli auth login 登录 |
执行 r2-cli auth login --json |
Agent 模式需要 --stock-goods-id, --shop-id, --price |
补齐参数 |
请指定下架条件:--id 或 --stock-goods-id + --shop-id |
补充定位参数 |
--price <amount> 为必填参数 |
询问用户新价格 |
getCategoryId() is null |
edit 缺少 --category-id,必须传 |
商家编码重复 |
更换唯一编码 |
该商品已上架 |
更换 out-item-no |
标题过长 |
缩短标题,保留品牌和核心款式 |
ITEM_CONDITION_NOT_SUPPORT_SIGN |
默认关闭售后 |
YHB_PRICE_NOT_SUPPORT |
验货宝价格不在允许范围,调整价格或关闭验货宝 |
轮询超时 |
稍后用 listing 命令查看 |
商品不存在 |
确认 id 值是否正确 |