概览
外卖商品的定制分为三层:Specs — 规格
每个商品可能有一个或多个规格维度:item_id 和 sku_id。下单时传入对应规格的 ID 即可。
Attrs — 属性
不影响价格的定制选项:Ingredients — 加料
最复杂的定制层,包含互斥规则:互斥规则
每个选项的excludes 数组列出了与它不兼容的选项 ID:
ig_{组索引}_{选项索引},稳定且可预测。
典型场景
星巴克链式排除:Default Ingredients — 默认选择
为方便 AI Agent 快速下单,菜单返回了预计算的default_ingredients:
两层「必选组」
「必选」在菜单里有两个不同层次,别混:- 商品内·配料必选组:某商品内部必须选够做法,如奶茶必选「温度」「糖度」。落在该商品的
ingredient_options(上游isRequired组)。漏选会在下单时被上游判「配料未选齐」。 - 店铺级·必选商品组:整单必须再点一个某类商品,如麻辣烫的「必选好汤」汤底。落在
get_shop_menu响应顶层的required_groups[](及categories[].required),需从candidate_item_ids选商品加入items[]。
两者判定时机不同:店铺级必选组由网关在
quote_cart(can_checkout=false + blocking_reason 软提示)和 preview_order(MISSING_REQUIRED_SELECTION,HTTP 400 硬拦)拦截;商品内配料必选组则在下单时由上游校验。回显已选规格
get_shop_menu 返回的是可选项;而 quote_cart(算价)与 preview_order(预览)会在每个商品上回显用户已选的规格与配料,便于向用户展示「点了什么」:
回显按每个商品各自的
sku_id / ingredient_option_ids 翻译,多商品(含同款不同规格)互不串味;无规格 / 配料时对应字段为 []。
