LocalInventory
是与特定广告相关联的商品目录信息
地点,由其 place_id
标识。例如,您可以为提供特定价格的商店或地区创建 LocalInventory
。LocalInventory
具有以下字段:
LocalInventory.price_info
LocalInventory.attributes
LocalInventory.fulfillment_types
现有 LocalInventory
条目可通过 Product.local_inventories
查看(fulfillment_types
除外,fulfillment_types
可通过 Product.fulfillment_info
获取,以实现向后兼容性)。此字段仅用于输出。设置
针对 Product
CRUD API 的 Product.local_inventories
或 SetInventory
没有
效果。
每个 (LocalInventory.place_id,
LocalInventory.fulfillment_types[...])
对都指向目录更新文档中提及的相同 (fulfillment_info.place_ids, fulfillment_info.type)
对。由 AddLocalInventories
和 RemoveLocalInventories
(如下所述)更新的 fulfillment_types
反映了将每个地点 ID 映射到其支持的 fulfillment 类型列表的映射,而由 AddFulfillmentPlaces
和 RemoveFulfillmentPlaces
更新的 fulfillment_info
反映了将每个具体 fulfillment 类型映射到支持此类型的地点 ID 列表的映射。不过,这两种 API 都会修改相同的底层执行信息,并且这两种 API 的影响都会反映在 Product.fulfillment_info
中。
本地商品目录更新方法
更改商品的本地商品目录信息的频率要比更改目录信息的频率高得多。一组专用 的方法用于处理大量本地商品目录特有的 更新。这些方法是异步的,因为下游优化支持对每个商品同时执行数百个更新,而不会影响性能。
AddLocalInventories
AddLocalInventories
可用于创建本地
新地点的商品目录(以新的 place_id
表示),或更新现有的
字段。您可以通过 AddLocalInventoriesRequest.add_mask
指定在请求正文中的 LocalInventory
条目列表中添加或更新的字段。有效的 add_mask
值包括:
price_info
:覆盖LocalInventory.price_info
。attributes
:覆盖所有LocalInventory.attributes
。系统会移除请求正文中未提及的现有属性。attributes.PLACEHOLDER_NAME
:仅覆盖指定的自定义属性。如果请求中未提供现有属性名称,则系统会删除该属性。可以指定多个attributes.PLACEHOLDER_NAME
,只要每个属性名称都不同即可。不过,AddLocalInventoriesRequest.add_mask
在同一请求中不能同时包含attributes
值和attributes.PLACEHOLDER_NAME
值。fulfillment_types
:覆盖所有受支持的执行方式类型。请求正文中未提及的现有执行方式类型会被移除。
Proto
{ product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" local_inventories: { place_id: "store1" price_info: { currency_code: "USD" price: 100 original_price: 110 cost: 95 } fulfillment_types: "pickup-in-store" fulfillment_types: "ship-to-store" } local_inventories: { place_id: "store2" price_info: { currency_code: "USD" price: 200 original_price: 210 cost: 195 } attributes: { key: "attr1", value: { text: "store2_value" } } fulfillment_types: "custom-type-1" } add_mask: { paths: "price_info" paths: "attributes.attr1" paths: "fulfillment_types" } add_time: { seconds: 100 nanos: 100 } allow_missing: true }
此示例 AddLocalInventoriesRequest
会为指定商品添加或更新两个具有放置 ID "store1"
和 "store2"
的本地商品目录。如果
store1
存在,但在请求之前 store2
不存在,则请求
将更新 store1
的字段,并使用给定的字段值创建 store2
。
此 AddLocalInventoriesRequest.add_mask
指定 price_info
,即单个
名为“"attr1"
”的自定义属性,且 fulfillment_types
应为
使用
AddLocalInventoriesRequest.local_inventories
。
attributes
是与地点相关联的属性,具有可自定义的名称和值。由于 store1
的 LocalInventory
未在请求中提供 attr1
的值,因此系统会从 store1
的现有 LocalInventory
(如果存在)中删除自定义属性 attr1
。store2
的属性 attr1
的值将设置为文本值 store2_value
。其他现有自定义
store1
和 store2
上的属性保持不变。
fulfillment_types
表示
Product
。它与 fulfillment_info.type
相同,并接受与 fulfillment_info.type
相同的值。此 AddLocalInventoriesRequest
会指定:
store1
支持 pickup-in-store
和 ship-to-store
执行方式类型,而
store1
支持 custom-type-1
。此次更新之前已存在的执行方式类型
要求中未提及的素材资源将被删除。
由于 AddLocalInventoriesRequest.allow_missing
设置为 true,因此即使商品尚不存在,系统也会存储更新后的本地商品目录信息,以供最终创建商品时使用。更新带有时间戳
与 AddLocalInventoriesRequest.add_time
搭配使用,以防止
替换这些地点 ID 的指定字段。详细了解如何防止
更新过时,并存储本地产品目录信息,
创建,请参阅
适用于本地商品目录更新的时间戳保护措施和
预加载商品目录信息。
Proto
{ product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" local_inventories: { place_id: "store3" attributes: { key: "attr1", value: { text: "attr1_value" } } attributes: { key: "attr2", value: { numbers: 123 } } } add_mask: { paths: "attributes" } add_time: { seconds: 100 nanos: 100 } }
此示例 AddLocalInventoriesRequest
会为指定商品添加或更新一个地点 ID 为 "store3"
的本地商品目录。由于
add_mask
包含 "attributes"
,以及 store3
的所有现有自定义属性
并按照请求中指定的方式替换为 attr1
和 attr2
。
请注意,由于未设置 allow_missing
,因此需要指定商品
存在。否则,会抛出 NOT_FOUND
错误。
RemoveLocalInventories
RemoveLocalInventories
可用于移除具有给定地点 ID 的地点的现有本地商品目录。
Proto
{ product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" place_ids: "store1" place_ids: "store2" remove_time: { seconds: 100 nanos: 100 } allow_missing: true }
此示例 RemoveLocalInventoriesRequest
移除了地点的本地商品目录
使用指定商品的地点 ID "store1"
和 "store2"
。更新
带有 RemoveLocalInventoriesRequest.remove_time
时间戳,以防止
过时更新。对于指定的
没有本地商品目录的地点 ID,则请求还会记录其
将时间更新为 remove_time
。如需详细了解更新时间戳,请参阅
适用于本地商品目录更新的时间戳保护措施
本地商品目录更新的时间戳保护措施
为防止无序更新,每个本地商品目录字段 最新更新时间相关联。
系统会为每个(place_id, price_info)
记录最新更新时间,
(place_id, attributes[...])
和(place_id, fulfillment_types[...])
对。
AddLocalInventories
和
RemoveLocalInventories
方法允许调用方
指定发出请求的更新时间。系统会将此更新时间与为相关商品目录字段记录的最新更新时间进行比较;当更新时间完全晚于最新更新时间时,才会提交更新。
例如,假设地点 ID "store1"
的 price_info
包含最后一次记录的日期
更新时间设为了 T
。如果RemoveLocalInventoriesRequest.place_ids
包含“"store1"
”,该请求将从“"store1"
”中移除“price_info
”
仅当 RemoveLocalInventoriesRequest.remove_time
晚于时间 T
时。
RemoveLocalInventoriesRequest
也是如此。
在时间戳保护下,
RemoveLocalInventoriesRequest
可能只会移除
LocalInventory
,而不是全部。假设有地点 ID 的本地商品目录
"store1"
有 price_info
,上次记录的更新时间设置为 T1
,并且
有一个名为“"attr1"
”且最后一次记录的自定义属性的现有自定义属性
更新时间为 T2
。如果 RemoveLocalInventoriesRequest.place_ids
包含 "store1"
,并且 remove_time
已设为 T3
(其中 T1 < T3 < T2
),则 store_1
的 price_info
将被移除,而其属性 attr1
将保持不变。
预加载商品目录信息
每种本地商品目录更新方法都允许调用方设置
allow_missing
。将 allow_missing
设置为 true 时,将按照方法规范处理对不存在的 Product
的本地商品目录更新,就像存在 Product
一样。如果未在此时间范围内通过 CreateProduct
创建相应的 Product
,则本地商品目录信息将最多保留两天。