Actualiza el inventario local de Vertex AI Search for Retail

LocalInventory es la información del inventario asociada a un determinado identificado por su place_id. Por ejemplo, se podría crear un LocalInventory para una tienda o una región donde está disponible un precio determinado. LocalInventory tiene los siguientes campos:

  • LocalInventory.price_info
  • LocalInventory.attributes
  • LocalInventory.fulfillment_types

Las entradas de LocalInventory existentes son visibles a través de Product.local_inventories (con la excepción de fulfillment_types, que, para la retrocompatibilidad, está disponible a través de Product.fulfillment_info). Este campo es solo de salida. Parámetro de configuración Product.local_inventories para las APIs de CRUD Product o SetInventory no tiene efecto.

Cada par (LocalInventory.place_id, LocalInventory.fulfillment_types[...]) apunta al mismo par (fulfillment_info.place_ids, fulfillment_info.type) que se menciona en la documentación de actualización del inventario. fulfillment_types actualizado por AddLocalInventories y RemoveLocalInventories, como se describe a continuación refleja una asignación de cada ID de lugar a una lista de tipos de entrega que admite, mientras que fulfillment_info actualizado por AddFulfillmentPlaces y RemoveFulfillmentPlaces refleja una asignación de cada un tipo de entrega específico a una lista de IDs de lugar que admita ese tipo. Sin embargo, ambos tipos de APIs modifican la misma entrega subyacente información y el efecto de ambos tipos de APIs se verá reflejado en Product.fulfillment_info

Métodos de actualización del inventario local

Los cambios en la información del inventario local de un producto pueden ocurrir con mucha más frecuencia. con frecuencia que los cambios en la información de su catálogo. Se proporciona un conjunto especializado de métodos para controlar grandes volúmenes de actualizaciones específicas del inventario local. Estos métodos son asíncronos debido a las optimizaciones downstream que admiten cientos de actualizaciones simultáneas por producto, sin sacrificar rendimiento.

AddLocalInventories

AddLocalInventories se puede usar para crear inventarios locales en lugares nuevos (representados con place_id nuevos) o actualizar campos existentes en inventarios locales existentes. Los campos que se agregan o actualizan en el La lista de entradas LocalInventory en el cuerpo de la solicitud se puede especificar mediante AddLocalInventoriesRequest.add_mask Los valores add_mask válidos son los siguientes:

  • price_info: reemplaza LocalInventory.price_info.
  • attributes: Reemplaza todos los LocalInventory.attributes. Se quitan los atributos existentes que no se mencionan en el cuerpo de la solicitud.
  • attributes.PLACEHOLDER_NAME: Solo reemplaza el atributo personalizado especificado. Si no se proporciona un nombre de atributo existente en la solicitud, el atributo se borra. Se pueden especificar varios attributes.PLACEHOLDER_NAME, siempre que cada nombre de atributo sea diferente. Sin embargo, AddLocalInventoriesRequest.add_mask no puede incluir los valores attributes y attributes.PLACEHOLDER_NAME en la misma solicitud.
  • fulfillment_types: Reemplaza todos los tipos de entrega admitidos. Se quitan los tipos de entrega existentes que no se mencionan en el cuerpo de la solicitud.

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
}
  

Esta AddLocalInventoriesRequest de muestra agrega o actualiza dos inventarios locales. con los IDs de lugar "store1" y "store2" para el producto especificado. Si store1 existe y store2 no existe antes de la solicitud, la solicitud Se actualizarán los campos de store1 y se creará store2 con los valores de campo especificados.

Este AddLocalInventoriesRequest.add_mask especifica que price_info, un solo atributo personalizado con el nombre "attr1", y fulfillment_types deben actualizarse con los valores proporcionados en AddLocalInventoriesRequest.local_inventories.

attributes son atributos asociados a un lugar con nombres y de salida. Dado que LocalInventory de store1 no proporciona el valor de attr1 en la solicitud, el atributo personalizado attr1 se borrará de la lista LocalInventory de store1, si existe. store2 tendrá su atributo El valor de attr1 se estableció en un valor de texto store2_value. Los demás atributos personalizados existentes en store1 y store2 no se modifican.

fulfillment_types representa una lista de disponibilidad de entrega para un Product en un solo lugar. Es igual y acepta los mismos valores que fulfillment_info.type. Este AddLocalInventoriesRequest especifica lo siguiente: store1 admite los tipos de entrega pickup-in-store y ship-to-store, mientras que store1 admite custom-type-1. Tipos de entrega existentes antes de esta actualización que no se mencionan en la solicitud se borrarán.

Dado que AddLocalInventoriesRequest.allow_missing se establece como verdadero, incluso si el elemento producto aún no existe, se actualizará la información del inventario local y se almacenan para cuando finalmente se crea el producto. La actualización tiene una marca de tiempo con AddLocalInventoriesRequest.add_time para evitar que las actualizaciones inactivas anulen los campos especificados de estos IDs de lugar. Para obtener más información sobre cómo prevenir actualizaciones inactivas y almacenamiento de información del inventario local que creaste, consulta Protecciones de marcas de tiempo para actualizaciones del inventario local y Precarga la información del inventario.

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
  }
}
  

Este AddLocalInventoriesRequest de muestra agrega o actualiza una sola ubicación inventario con el ID de lugar "store3" para el producto especificado. Ya que su add_mask contiene "attributes", todos los atributos personalizados existentes de store3 se borran y se reemplazan por attr1 y attr2, como se especifica en la solicitud. Ten en cuenta que, como allow_missing no se establece, requiere que el producto especificado existen. De lo contrario, se genera un error NOT_FOUND.

RemoveLocalInventories

Se puede usar RemoveLocalInventories para quitar inventarios locales existentes en lugares con IDs de lugar determinados.

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
}
  

Esta RemoveLocalInventoriesRequest de muestra quita los inventarios locales de lugares con los IDs de lugar "store1" y "store2" para el producto especificado. La actualización tiene la marca de tiempo RemoveLocalInventoriesRequest.remove_time para evitar las actualizaciones inactivas anulan la eliminación de estos IDs de lugar. Para especificar IDs de lugar sin inventarios locales existentes, la solicitud también registra su hora de actualización a remove_time. Para obtener más información sobre las marcas de tiempo de actualización, consulta Protecciones de marcas de tiempo para las actualizaciones del inventario local

Protecciones de marcas de tiempo para las actualizaciones del inventario local

Para protegerte contra las actualizaciones desordenadas, cada campo del inventario local se asociados con una hora de actualización más reciente.

Se registra la hora de actualización más reciente para cada (place_id, price_info), (place_id, attributes[...]) y (place_id, fulfillment_types[...]) par.

El AddLocalInventories y Los métodos RemoveLocalInventories permiten que el emisor especificar una hora de actualización para el momento en que se emite la solicitud. La hora de la actualización es en comparación con la hora de actualización más reciente registrada para el inventario relevante campos y la actualización se confirma solo si la hora de actualización es después de la hora de actualización más reciente.

Por ejemplo, supongamos que el ID de lugar "store1" tiene price_info con el último registro Actualizar la hora establecida en la hora T Si RemoveLocalInventoriesRequest.place_ids contiene "store1", la solicitud quitará a price_info de "store1" solo si el RemoveLocalInventoriesRequest.remove_time es posterior a la hora T. Lo mismo sucede con RemoveLocalInventoriesRequest.

Con protección de marca de tiempo, es posible que un Es posible que RemoveLocalInventoriesRequest quite solo algunos campos de un LocalInventory en lugar de todo. Supongamos que se trata de un inventario local con un ID de lugar. "store1" tiene price_info con la hora de actualización más reciente establecida en T1. tiene su único atributo personalizado existente con el nombre "attr1" registrado por última vez hora de actualización a la(s) T2. Si un RemoveLocalInventoriesRequest.place_ids contiene "store1" y tiene remove_time establecido en T3 (donde T1 < T3 < T2), luego Se quitará el price_info de store_1, mientras que se quitará su atributo attr1. intactos.

Carga previa de la información de inventario

Cada uno de los métodos de actualización de inventario local permite que el emisor configure allow_missing en la solicitud. Cuando allow_missing se establece como verdadero, se la actualización de inventario a un Product inexistente se procesa como si Product existe según las especificaciones del método. La información del inventario local se conservará durante un máximo de dos días si el Product correspondiente no se crea a través de CreateProduct dentro de este período.