提交商品发布任务
用于技术接入:服务端调用蜂巢开放接口提交一条淘宝商品发布任务。任务先进入预处理(图片上传、生成 RPA 可用 JSON),再由已绑定该店铺的桌面助手领取并执行发品。
需开通权限 rpa_goods_publish(桌面助手发布商品)。店铺用 sellerNick(须已授权),商品正文放在 product(JSON 字符串)。不同淘宝类目的 product 字段差异较大,完整示例见下方「类目示例」链接。
使用流程
- 确认店铺已授权,且桌面助手已用绑定码绑定该店铺(见 获取店铺绑定码)
- 按目标类目组装
productJSON(参考类目示例页)。组装前/组装中通常还需要调用开放平台下列接口: - 调用本接口提交任务;同一
idempotencyKey可幂等返回已有任务 - 在桌面助手「查看任务」中跟踪执行;创建成功时对外状态一般为
RUNNING(预处理中)
请求说明
Content-Type:application/x-www-form-urlencoded(与开放平台其它网关接口一致,需带签名公共参数)。
公共参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appid | String | 是 | 开放平台应用 AppId |
| timestamp | String | 是 | 当前时间戳(秒) |
| sign | String | 是 | 接口签名,算法与开放平台其它接口相同(见 SDK 示例) |
业务参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| sellerNick | String | 是 | 已授权店铺的卖家昵称(淘宝 seller_nick)。须属于当前 appid |
| productId | String | 是 | 业务侧商品 ID;建议与 product.productId 一致。网关会在 product 缺省时自动补齐 |
| platform | String | 否 | 平台,默认 `taobao` |
| product | String | 是 | 商品发布 JSON 字符串(须为 JSON 对象)。类目相关字段因类目而异,见下方类目示例 |
| runtime | String | 否 | 运行时 JSON 对象字符串。常用:`browserMode`、`publishMode`、`dryRun`、`allowSubmit`、`saveDraft` |
| rulePack | String | 否 | 规则包 JSON(可选/内测)。留空即可 |
| priority | String | 否 | 优先级整数,越大越优先;默认 0 |
| idempotencyKey | String | 否 | 幂等键。同一 partner + key 重复提交时直接返回已有任务,不新建 |
product 公共字段
product 为 JSON 对象序列化后的字符串。下列字段多数类目通用;properties、skus[].attributes、以及部分扩展字段(如 colorImages、材质成分)随类目变化,请以对应类目示例为准。
| 字段 | 类型 | 说明 |
|---|---|---|
| productId | String | 业务商品 ID;缺省时用表单 productId 补齐 |
| itemNo | String | 货号 / 商家编码(按类目需要填写) |
| platform | String | 平台,缺省补 `taobao` |
| sellerNick | String | 卖家昵称;缺省时用表单 sellerNick 补齐 |
| title | String | 宝贝标题 |
| shopping_title | String | 导购标题(部分类目如女装需要) |
| category.path | String[] | 类目级联路径,RPA 按此逐级选择类目 |
| category.leafName | String | 叶子类目名称,须与 path 末级一致 |
| main_images_1_1 | String[] | 1:1 主图 URL 列表 |
| main_images_3_4 | String[] | 3:4 主图 URL 列表,可为空数组 |
| description_images | Object[] | 必填。详情图列表,至少 1 张;元素含 `src` / `width` / `height`(图片须已上传至淘宝图片空间) |
| shopcat | String[] | 店铺分类路径文案,如 `一级>二级` |
| price | Number | 价格(展示/默认价) |
| quantity | Number | 总库存相关数量(与 SKU stock 配合) |
| properties | Object | 类目属性键值。不同类目必填项不同,以淘宝商家发布页带 * 号的属性为准(如适用人群、适用季节等),按发布页属性名与可选值填写。鞋类常见另含 `尺码分组`(如 `欧码(男)` / `欧码(童鞋)` / `中国码(男)` / `中国码(童鞋)` 等,以发布页为准) |
| skus | Object[] | SKU 列表;每项含 `attributes`、`price`、`stock`、`outerId` 等 |
| logistics | Object | 物流服务对象;子字段见下方「logistics 字段」 |
| afterSale | Object | 售后,如 `supportSevenDayReturn` |
logistics 字段
product.logistics 为对象,供桌面助手在发布页填写发货时效、发货地、运费模板与重量等。文案须与店铺后台可选值一致(运费模板名、发货地省市等需在该店铺真实存在)。当 deliveryTime 为「大于48小时发货」时,须同时填写 deliveryDayAfterPay(付款后多少天发货)。
示例:
{ "logistics": { "deliveryTimeMode": "按商品统一设置", "deliveryTime": "大于48小时发货", "deliveryDayAfterPay": "7", "shippingArea": "大陆及港澳台", "shippingType": "单一发货地", "shippingPlace": ["湖南", "长沙"], "extractWay": "使用物流配送", "freightTemplateName": "测试的副本", "weightKg": "1" }}| 字段 | 类型 | 说明 |
|---|---|---|
| deliveryTimeMode | String | 发货时间设置方式。常用:`按商品统一设置`(按 SKU 分别设置时以店铺页选项为准) |
| deliveryTime | String | 发货时效文案,如 `48小时内发货`、`24小时内发货`、`大于48小时发货`;须与发布页可选项一致。选「大于48小时发货」时须填 `deliveryDayAfterPay` |
| shippingArea | String | 发货区域大区,如 `大陆及港澳台` |
| shippingType | String | 发货地类型,如 `单一发货地` / `多发货地` |
| shippingPlace | String[] | 发货地级联路径,按省→市顺序,如 `["浙江","温州"]`;也可传 `/` 分隔字符串(实现侧兼容) |
| extractWay | String | 提取方式,如 `使用物流配送` |
| freightTemplateName | String | 运费模板名称,须与店铺后台已创建的模板名称完全一致(如下拉中的「免邮」「TEST的副本」) |
| weightKg | String / Number | 物流重量(千克)。按重量计费的运费模板通常需要;示例可用字符串 `"1"` |
已支持类目示例
| 类目 path | 说明 | 文档 |
|---|---|---|
运动鞋new → 运动休闲鞋 |
SKU 维度为颜色分类 + 鞋码 | 运动鞋 / 运动休闲鞋 |
女装/女士精品 → 卫衣/绒衫 |
含材质成分、colorImages、尺码等 | 女装 / 卫衣绒衫 |
未列出的类目:可按公共字段扩展 properties / skus,或联系开通与补充示例。
Java 示例
依赖开放平台通用签名工具(与其它网关接口相同)。Config / Utils.Sign / doHttpRequest 可参考 zeroone-opensdk。完整 product JSON 请从上方类目示例页复制后赋给 product 变量。
@Testpublic void createPublishTask() throws Exception { String apiUrl = Config.baseUrl + "/gateway/rpa/publish-tasks"; String productId = "taobao-test-cat001";
// 将下方 product 替换为类目示例页中的完整 JSON(运动鞋或卫衣等) String product = "{ ... }";
Map<String, String> data = new HashMap<String, String>(); data.put("appid", Config.AppId); Long timestamp = System.currentTimeMillis() / 1000; data.put("timestamp", timestamp.toString()); data.put("sellerNick", Config.TBSellerNick); data.put("productId", productId); data.put("platform", "taobao"); data.put("product", product); data.put("idempotencyKey", "rpa-publish-" + timestamp); data.put("sign", Utils.Sign(data, Config.AppSecret)); doHttpRequest(apiUrl, data);}说明:
Config.baseUrl生产环境一般为https://kf.fw199.comproduct与表单字段productId/sellerNick建议保持一致;网关也会在 JSON 缺省时自动补齐- 成功时响应
data.taskId为任务 ID
返回说明
统一结构:code / message / data。code = 0 表示成功。
成功示例
{ "code": 0, "message": "success", "data": { "taskId": "task_a1b2c3d4e5f6789012345678abcdef01", "status": "RUNNING", "platform": "taobao", "sellerNick": "示例店铺", "productId": "taobao-test-cat001" }}data 字段
| 字段 | 类型 | 说明 |
|---|---|---|
| taskId | String | 任务 ID,后续查询与桌面端领取均以此为准 |
| status | String | 对外状态。新建任务通常为 `RUNNING`(含预处理阶段);幂等命中时返回该任务当前对外状态 |
| platform | String | 平台 |
| sellerNick | String | 卖家昵称 |
| productId | String | 业务商品 ID |
常见错误
| code | 说明 |
|---|---|
| 100 | 应用 appid 不能为空 |
| 102 | 查询合作伙伴出错 |
| 105 | 签名失败 |
| 其它权限码 | 未开通 `rpa_goods_publish` 时鉴权失败(与开放平台权限校验一致) |
| 400 | sellerNick / productId 缺失;或 product / runtime / rulePack 不是合法 JSON 对象 |
| 40301 | SHOP_NOT_AUTHORIZED:店铺未授权或不属于当前应用 |
| 500 | 创建或保存任务失败 |
注意事项
- 提交前请确保
sellerNick对应店铺已完成授权,且商家侧桌面助手已绑定该店铺,否则任务无法被领取。 description_images(详情图)为必填,请先通过图片空间上传后再写入 URL。properties须按目标类目在淘宝发布页的属性填写;带 * 为必填,属性名与可选值须与发布页一致(含鞋类尺码分组等)。- 当物流发货时效选择「大于48小时发货」时,务必填写
logistics.deliveryDayAfterPay。 idempotencyKey建议业务侧按「店铺 + 商品 + 版本」生成,避免重复灌入相同任务。product体积可能较大,请注意网关与客户端超时;图片请使用可公网访问的 URL。- SDK 与签名示例见:https://github.com/CheeliAI/zeroone-opensdk
- 开发者控制台:https://console.fw199.com