Merchant Center 运费政策改了,我用 Content API 批量回填了 1200 个 SKU

土耳其站点的 Merchant Center 账号是去年接的,产品目录 1200 多个 SKU,运费一直靠后台手填的一套固定规则撑着。上个月 Google 把运费政策的校验收紧了一档,后台开始批量报「运费信息不完整」,但只报了个汇总数字,不告诉你是哪一批。账号里挂着两个子账号,一个是 TR 本地币结算,一个是跨境 USD,两边的运费模板不是同一套,手动在界面里翻页找问题 SKU,翻到第 40 页的时候我就放弃了。

我的做法是绕开界面,直接用 Content API for Shopping 把 shipping 字段整个拉下来对。先用 service account 拿 token,注意 scope 要用 https://www.googleapis.com/auth/content,别用只读的那个,回填的时候还得写。

curl -s -X POST "https://shoppingcontent.googleapis.com/content/v2.1/${MERCHANT_ID}/products/batch" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"method":"get","batchId":1,"entries":[{"productId":"online:tr:TR:SKU001"}]}'

一次 batch 最多塞 1000 条,我按 200 条一批分页拉,落成 JSONL 后用 jq 过滤 shipping 为空的记录,筛出来 187 个。回填走的是 products/batch 的 update,只带 productId 和 shipping 两个字段,别整条覆盖,整条覆盖会把 price 和 availability 一起冲掉——这是我自己踩过的,第一次回填后有 20 多个 SKU 价格被重置成 null。

{"method":"update","batchId":2,"entries":[{"productId":"online:tr:TR:SKU001","product":{"shipping":[{"country":"TR","service":"Standart","price":{"value":"29.90","currency":"TRY"}}]}}]}

为什么不在界面里改:界面一次只能改一个模板,改完还要等审核跑一轮,反馈延迟按小时算。API 回填是同步返回每条 entry 的 errors,哪条失败当场能看到,代价是要自己处理 batch 的分片和重试,而且 update 是整字段替换不是合并,shipping 数组里原来有多个 service 的,必须一次性全带上,漏一个就少一个。

哪里会失效:跨境那个 USD 子账号的 shipping 里 country 字段必须和 feed 里的 targetCountry 一致,写 TR 会被拒,得写目标国;另外 Content API 对 service 名称有字符限制,土耳其语里的 ğ、ş 在某些旧模板里会被转义成乱码,我是改成了纯 ASCII 的 Standart 才过的。还有一点,batch 的 1000 条上限是 entries 数不是字节数,单条 product 太大照样会整体 413。

你们回填运费的时候,是直接覆盖整个 shipping 数组,还是先 get 出来做 merge 再 update?我这边因为多 service 的情况少,选了覆盖,但总觉得哪里会出问题。

0
赞同度 100% · 0 条评论 · 1 阅读

0 条评论

支持 Markdown · 回复会实时推送给对方

还没有评论,写下第一条。