2026-10-06 · 原文发布日
表格里的商品目录自动清洗校验后同步到ONDC卖家应用
面向ONDC卖家的目录管家:每30分钟或被webhook触发后,把Google Sheets里的商品表和卖家应用线上目录比对,找出新增、变更、停用和漂移的SKU;只有需要改内容的项目才交给GPT-4o-mini规范化标题、描述、类目和属性。随后检查图片链接是否有效,按ONDC零售规则逐条校验,价格大变动会先挂起等表格确认,最后批量推送目录和库存更新。同步状态、哈希和时间戳回写表格,失败进Sync Errors页,Gmail发一份聚焦错误的运行报告。
原文要点
该n8n免费模板每30分钟定时或被POST webhook触发,从Google Sheets读取目录并与卖家应用API线上目录比对,识别新增、变更、停用、漂移SKU;仅把需要内容改写的项目发给gpt-4o-mini规范化标题、描述、类目、单位、属性;用HTTP HEAD检查图片链接有效性、内容类型和大小;按ONDC零售规则校验,价格大变动先挂起等表格确认;批量推送目录与库存更新,把sync_status、content_hash、时间戳回写表格,失败进Sync Errors页,Gmail发错误聚焦报告。需要Sheets/Gmail OAuth2、OpenAI key、卖家API Header Auth及provider_id等ONDC标识。
这次做成什么
在本站练习中搭一个最小可跑的目录同步流程:用合成CSV代替真实卖家目录,走通“比对差异→AI规范化→校验→价格守卫→回写状态”的完整链路,再按同样字段映射迁移到原模板。
准备什么
- 一个可访问公网的n8n实例(Cloud或自托管)
- Google Sheets OAuth2凭据和一个含Catalog与Sync Errors两个标签页的表格
- OpenAI API key(用于gpt-4o-mini规范化节点)
- Gmail OAuth2凭据及接收运行报告的邮箱地址
- 卖家应用API的Header Auth凭据与API基础地址(练习阶段可用Mock替代)
具体怎么做
建表并配置字段
在Google Sheets建Catalog标签页,列至少包含sku、title、description、category、unit、price、stock、image_url、sync_status、content_hash、stock_hash、last_synced_at;再建Sync Errors标签页存失败日志。把Sheet ID和两个标签页名填入工作流的配置值节点。
配置触发与读取
保留Schedule Trigger每30分钟一次,同时启用Webhook节点接受POST(可选JSON体指定SKU或全量重同步)。Google Sheets读取节点拉全表,HTTP Request节点用Header Auth调卖家API取线上目录,两者在比对节点按sku做join。
差异分支与AI清洗
比对后分四支:新增、停用、仅库存变、内容全量更新。只有全量更新分支进OpenAI节点,把下方提示词作为系统消息、该行JSON作为用户消息,要求返回规范化后的title/description/category/attributes。其余分支跳过AI以省token。
校验与价格守卫
HTTP HEAD请求检查image_url:状态码非200、Content-Type非image/*或文件超限即标记。校验节点按ONDC规则逐项检查必填字段。价格变动超过你在配置里设的阈值(练习设30%)时状态写pending_price_confirm,不进推送批次,等表格人工确认列改为yes。
推送、回写与报告
把通过校验的项目组成批量upsert和库存payload推给卖家API;汇总API响应与校验失败,回写每行sync_status、哈希和时间戳;失败行追加到Sync Errors;最后用Gmail节点发只列错误与挂起项的运行报告。
可直接复制的材料
GPT-4o-mini目录规范化提示词(系统消息)
本站独立编写,粘贴到OpenAI节点的系统消息;类目清单需替换为你ONC类目体系。
你是ONDC零售目录规范化助手。输入是一个商品SKU的JSON对象。请只输出一个JSON对象,不要输出任何其他文字。要求:1.title:不超过80字符,格式为“品牌 品名 规格”,去掉表情符号和营销词;2.description:80至300字符,客观描述,不含“最”“第一”等绝对化用语;3.category:从[食品饮料, 服饰鞋包, 家居百货, 数码家电, 个护美妆]中选一个最接近的;4.unit:规范为 piece/kg/g/ml/l/set 之一;5.attributes:输出键值对对象,键用英文小写下划线,如color、material、weight;6.若某字段无法判断,原样保留并在_warnings数组里说明原因。输出字段固定为:title, description, category, unit, attributes, _warnings。合成目录练习数据
本站合成数据,导入Catalog标签页练习;SKU-1002库存为0用于测试停用分支,SKU-1003用于触发价格守卫。
sku,title,description,category,unit,price,stock,image_url,price_jump_confirm
SKU-1001,超好用!!保温杯500ml🔥,这个杯子特别好用大家都买,家居百货,piece,79,120,https://example.com/img/cup.jpg,yes
SKU-1002,有机燕麦片 1kg,无添加即食燕麦,食品饮料,kg,45,0,https://example.com/img/oats.png,yes
SKU-1003,无线蓝牙耳机,蓝牙5.3降噪耳机续航30小时,数码家电,piece,299,35,https://example.com/img/buds.jpg,no配置值节点示例
本站独立示例配置,所有ID和域名都需替换;原模板的具体字段名以导入后配置值节点为准。
{"sheet_id":"替换为你的Sheet ID","catalog_tab":"Catalog","errors_tab":"Sync Errors","api_base_url":"https://seller-app.example.com/api","provider_id":"替换为ONDC provider_id","location_id":"替换为location_id","fulfillment_id":"替换为fulfillment_id","consumer_care_email":"support@example.com","price_jump_threshold_pct":30,"image_max_mb":5,"report_recipient":"ops@example.com"}输入与输出示例
本站虚构演示,非作者运行结果;AI输出为示意,实际以模型返回为准。
输入
Catalog行:SKU-1001,title="超好用!!保温杯500ml🔥",description="这个杯子特别好用大家都买",price=79,线上目录中该SKU不存在对应输出
比对结果:new_item→进入全量更新分支;AI输出{"title":"保温杯 500ml","description":"双层不锈钢保温杯,容量500ml,保温约6小时,适合日常通勤使用。","category":"家居百货","unit":"piece","attributes":{"capacity_ml":"500","material":"stainless_steel"},"_warnings":["原文缺少品牌信息"]};图片HEAD返回200且image/jpeg;校验通过后进入upsert批次,回写sync_status=synced做完检查这些
- 新建一行SKU后手动触发webhook,该行在表格中sync_status变为synced且content_hash有值
- 把某SKU价格从79改为120且price_jump_confirm=no,该行应停留在pending_price_confirm且不进推送批次
- 把image_url改为不存在的地址,该行进入Sync Errors标签页并出现在Gmail报告中
- 只改stock的行不调用OpenAI节点,可从执行日志确认该分支无AI调用记录
容易卡住的地方
- 卖家应用API路径和ONDC标识必须与原模板配置值核对,本站示例只是占位
- Google Sheets OAuth2需授权表格读写权限,否则回写哈希会静默失败
- 价格守卫阈值是你在配置里定的,原文只说大变动挂起,未给具体百分比
- webhook需公网可达且用POST,GET请求不会触发同步
- gpt-4o-mini调用会产生OpenAI费用,仅内容变更行才调用以控制成本
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Sync ONDC seller catalog between Google Sheets, seller app, and OpenAI
- 原作者
- Rahul Joshi
- 原始发布日期
- 2026-10-06T08:40:23.258Z
- 来源
- https://n8n.io/workflows/20525