상거래를 위한 Vertex AI Search의 인벤토리 업데이트

이 페이지에서는 Retail API를 사용하여 Vertex AI Search for Commerce 카탈로그의 실시간 가격 및 수량 업데이트를 관리하는 방법을 설명합니다.

Product 생성, 읽기, 업데이트 및 삭제(CRUD) 메서드는 Product의 속성을 광범위하게 수정하는 데 사용되지만, 다양한 수준의 세부사항으로 인벤토리별 필드를 업데이트하는 데 사용할 수 있는 Product 메서드 세트가 있습니다.

인벤토리 이해

일반적으로 인벤토리는 전자상거래 사이트의 상품 재고 수준 (수량)과 가격을 의미합니다. Retail API의 경우 inventory는 가격, 재고, 사용 가능한 수량, 주문 처리 정보, 현지 가격, 추가 현지 속성을 나타냅니다. 이러한 필드는 다음 필드가 포함된 제품 스키마에 정의되어 있습니다.

제품 수준 인벤토리

온라인 카탈로그만 있는 전자상거래 사이트 판매자의 경우 inventory는 일반적으로 카탈로그의 제품으로만 표시됩니다. 가격, 재고, 기타 모든 데이터는 카탈로그의 각 제품 항목에 설정됩니다. fulfillmentInfolocalInventories 필드는 사용되지 않습니다.

오프라인 판매점 인벤토리

위치가 여러 개인 소매업체의 경우 제품은 카탈로그의 제품 항목으로 계속 표시되지만 addLocalInventories 메서드를 사용하여 제품의 위치 (placeId)에 오프라인 판매점 인벤토리 (가격, 재고, 주문 처리)를 추가할 수 있습니다.

오프라인 판매점 인벤토리에 사용되는 별도의 제품 필드에는 Product.fulfillmentInfoProduct.localInventories가 있습니다. 요구사항에 따라 하나 또는 둘 다 사용할 수 있습니다. fulfillmentInfolocalInventories는 모두 연결된 데이터가 있는 위치 목록입니다.

fulfillmentInfo은 특정 위치에서 제품이 어떻게 처리되는지 지정하는 반면 localInventories은 각 위치의 가격 및 기타 맞춤 속성을 지정합니다.

특정 위치에서 제품이 재고 없음 또는 더 이상 판매되지 않음을 표시하려면 removeLocalInventories 메서드를 사용하여 특정 placeId의 제품에서 fulfillmentinventory를 삭제합니다.

인벤토리 업데이트 방법

제품의 인벤토리 정보 변경은 카탈로그 정보를 변경하는 것보다 훨씬 더 자주 발생할 수 있습니다. 따라서 대량의 인벤토리별 업데이트를 처리하기 위한 특수 메서드 세트가 제공됩니다. 이러한 메서드는 성능 저하 없이 제품당 수백 개의 동시 업데이트를 지원하는 다운스트림 최적화로 인해 비동기식입니다.

증분 업데이트

오프라인 판매점 인벤토리 업데이트 가이드에 따라 증분 인벤토리 업데이트를 실행합니다. 최신 API 메서드는 장소별 인벤토리 속성을 보다 세밀하게 제어합니다.

fulfillment_info는 종종 Product의 장소 수준 fulfillment 가용성을 인코딩하는 데 사용됩니다. 경우에 따라 특정 장소에 대한 fulfillment 가용성이 변경될 수 있습니다. UpdateProduct 메서드를 사용하여 모든 제품의 fulfillment 정보를 다시 지정하는 대신 이 변경사항을 설명하는 업데이트를 실행할 수 있습니다.

이러한 경우 AddFulfillmentPlacesRemoveFulfillmentPlaces 메서드를 사용하여 지정된 fulfillment 유형에 추가되거나 삭제되는 장소 ID를 기반으로 제품 fulfillment 변경사항을 증분 방식으로 업데이트할 수 있습니다.

Java

Vertex AI Search for Commerce용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Vertex AI Search for Commerce 클라이언트 라이브러리를 참고하세요. 자세한 내용은 Vertex AI Search for Commerce Java API 참고 문서를 확인하세요.

Vertex AI Search for Commerce에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

public static AddFulfillmentPlacesResponse addFulfillmentPlaces(
    Product productToUpdate, String fulfillmentInfoType, ImmutableList<String> placeIds)
    throws IOException, InterruptedException, ExecutionException {
  ProductServiceClient productClient = getProductServiceClient();

  AddFulfillmentPlacesRequest request = AddFulfillmentPlacesRequest.newBuilder()
      .setProduct(productToUpdate.getName())
      .setType(fulfillmentInfoType)
      .addAllPlaceIds(placeIds)
      .setAddTime(Timestamps.fromMillis(System.currentTimeMillis()))
      .build();

  AddFulfillmentPlacesResponse response = productClient
      .addFulfillmentPlacesAsync(request).get();

  productClient.shutdownNow();
  productClient.awaitTermination(2, TimeUnit.SECONDS);

  return response;
}

Proto

  {
    product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123"
    type: "pickup-in-store"
    place_ids: "store0"
    place_ids: "store1"
    add_time: {
      seconds: 100
      nanos: 100
    }
    allow_missing: true
  }
  

이 샘플 AddFulfillmentPlacesRequest는 fulfillment 유형 "pickup-in-store"를 지정된 제품의 장소 ID "store0""store1"에 추가합니다. AddFulfillmentPlacesRequest.allow_missing은 true로 설정되므로 제품이 아직 존재하지 않더라도 최종적으로 제품이 생성될 때 업데이트된 인벤토리 정보가 저장됩니다. 비활성 업데이트가 장소 ID의 fulfillment 상태를 재정의하지 못하도록 이 업데이트에는 AddFulfillmentPlacesRequest.add_time으로 타임스탬프가 지정됩니다. 이러한 기능은 다음 섹션에서 보다 자세히 설명합니다.

이 동작은 RemoveFulfillmentPlacesRequest와 동일하며 스키마는 매우 유사합니다.

fulfillment_typesAddLocalInventoriesRemoveLocalInventories로 업데이트되면 각 장소 ID의 매핑이 지원되는 fulfillment 유형 목록에 반영됩니다. fulfillment_infoAddFulfillmentPlacesRemoveFulfillmentPlaces로 업데이트되면 각 특정 fulfillment 유형의 매핑이 각 유형을 지원하는 장소 ID 목록에 반영됩니다. 두 API 유형 모두 동일한 기본 fulfillment 정보를 수정하며 두 API 유형 모두의 효과가 Product.fulfillment_info에 반영됩니다.

비증분 업데이트

price_info, availability, available_quantity 메서드는 장소 수준 정보가 아닌 제품 수준 인벤토리를 나타내기 때문에 증분 방식으로 업데이트할 수 없습니다. fulfillment_info로 비증분 업데이트를 실행하는 것도 좋습니다. 증분 변경사항 대신 SetInventory이 권장됩니다.

setInventory 메서드는 많은 업데이트가 자주 필요한 경우 제품 수준에서 가격, 재고, 수량을 업데이트하는 데 권장되는 방법입니다. setInventory 메서드는 비동기식이므로 업데이트가 즉시 발생하지 않을 수 있습니다. 기본 할당량 (분당 요청 300,000개)은 UpdateProduct보다 훨씬 많은 요청을 지원합니다.

또한 fulfillmentInfo이 요청에 포함된 경우 setInventory 메서드가 로컬 주문 처리 업데이트에 사용되지만 localInventories 필드는 업데이트할 수 없습니다. 이러한 속성의 경우 addLocalInventoriesremoveLocalInventories 메서드를 사용합니다.

오프라인 인벤토리는 카탈로그와 관계없이 매장 수준에서 저장됩니다. 온라인 및 오프라인 인벤토리가 있는 고객의 경우 기본 제품 카탈로그를 온라인에 사용하거나 특정 placeId (예: -1 또는 online)를 사용하여 온라인 인벤토리를 나타낼 수 있습니다. 하지만 제품 인벤토리 필드에 유효한 priceInfoavailability 값이 입력되어야 하므로 온라인 인벤토리에는 기본 카탈로그를 사용하세요. 온라인에 별도의 인벤토리 placeId를 사용하는 경우 기본 카탈로그 가격 및 재고 정보도 최신 상태로 유지해야 합니다. 오프라인 판매점 인벤토리 업데이트에 대한 자세한 내용은 오프라인 판매점 인벤토리 업데이트를 참고하세요.

Java

Vertex AI Search for Commerce용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Vertex AI Search for Commerce 클라이언트 라이브러리를 참고하세요. 자세한 내용은 Vertex AI Search for Commerce Java API 참고 문서를 확인하세요.

Vertex AI Search for Commerce에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

public static SetInventoryResponse setInventoryWithMask(Product productToUpdate,
    FieldMask updateMask)
    throws IOException, ExecutionException, InterruptedException {
  ProductServiceClient productClient = getProductServiceClient();

  SetInventoryRequest request = SetInventoryRequest.newBuilder()
      .setInventory(productToUpdate)
      .setSetMask(updateMask)
      .setSetTime(Timestamps.fromMillis(System.currentTimeMillis()))
      .setAllowMissing(true)
      .build();

  SetInventoryResponse response = productClient.setInventoryAsync(request).get();

  productClient.shutdownNow();
  productClient.awaitTermination(2, TimeUnit.SECONDS);

  return response;
}

Proto

  {
    product: {
      name: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123"
      availability: IN_STOCK
      fulfillment_info: {
        type: "pickup-in-store"
        place_ids: "store0"
        place_ids: "store1"
        place_ids: "store2"
        place_ids: "store3"
      }
      fulfillment_info: {
        type: "same-day-delivery"
      }
    }
    set_time: {
      seconds: 100
      nanos: 100
    }
    set_mask: {
      paths: "availability"
      paths: "fulfillment_info"
    }
    allow_missing: true
  }
  

이 특정 요청에서 SetInventoryRequest.product.fulfillment_info 필드는 증분 사양과 달리 각 fulfillment 유형의 요건을 충족하는 장소 ID에 대한 자세한 설명입니다. "same-day-delivery"에 대한 업데이트는 이 제품의 fulfillment 유형에 적합한 장소 ID가 없음을 나타냅니다. 다른 모든 fulfillment 유형은 이 요청에서 업데이트되지 않습니다. 따라서 이 메서드를 사용하면 fulfillment 유형의 하위 집합에 대해서만 장소 ID를 바꾸고 다른 유형은 그대로 유지할 수 있습니다.

기본적으로 SetInventory.set_mask가 설정되지 않거나 비어 있는 경우 SetInventory는 모든 인벤토리 필드를 업데이트합니다. 마스크가 비어 있지 않거나 SetInventoryRequest.set_mask에 인벤토리 필드가 명시적으로 나열되지 않으면 업데이트 요청에서 해당 인벤토리 필드에 지정된 값이 무시됩니다.

증분 업데이트와 마찬가지로 SetInventoryRequest.set_time 필드를 사용하여 업데이트된 모든 인벤토리 필드의 마지막으로 기록된 업데이트 시간을 기준으로 업데이트 시간을 설정할 수 있습니다.

인벤토리 업데이트를 위한 타임스탬프 보호

제품의 인벤토리 필드를 업데이트하고 잘못된 순서의 업데이트를 방지하기 위한 여러 경로가 있으며, 각 인벤토리 필드는 최신 업데이트 시간과 연결됩니다.

price_info, availability, available_quantity 및 각 쌍(fulfillment_info.place_ids, fulfillment_info.type)의 최신 업데이트 시간이 기록됩니다.

AddFulfillmentPlaces, RemoveFulfillmentPlaces, SetInventory 메서드를 사용하면 호출자가 요청이 실행되는 시점에 대한 업데이트 시간을 지정할 수 있습니다. 이 업데이트 시간은 관련 인벤토리 필드에 기록된 최신 업데이트 시간과 비교되며, 업데이트 시간이 최신 업데이트 시간 이후인 경우에만 업데이트가 커밋됩니다.

예를 들어 장소 ID "store1"에 fulfillment 유형 "pickup-in- store"가 사용 설정되어 마지막으로 기록된 업데이트 시간이 T로 설정되었다고 가정해 보겠습니다. RemoveFulfillmentPlacesRequest.type = "pickup-in-store"RemoveFulfillmentPlacesRequest.place_ids"store1"이 포함된 경우 요청은 RemoveFulfillmentPlacesRequest.remove_timeT 이후인 경우에만 "store1"에서 "pickup-in-store"를 삭제합니다. 이는 AddFulfillmentPlacesRequests에 대해서도 마찬가지입니다.

SetInventoryprice_info, availability, available_quantity를 업데이트하는 것과 유사한 방식으로 작동합니다. fulfillment_info를 업데이트할 때 SetInventoryRequest는 해당 fulfillment 유형에 지정된 모든 장소 ID를 추가하고 지정되지 않은 모든 기존 장소 ID를 삭제하도록 암시적으로 요청합니다.

SetInventoryRequest가 처리될 때 fulfillment_info 업데이트는 지정된 각 fulfillment 유형에 대해 AddFulfillmentPlacesRequestRemoveFulfillmentPlacesRequest로 암시적으로 변환됩니다. 즉, fulfillment가 "pickup-in-store"인 기존 장소 "store1"의 최종 업데이트 시간이 SetInventoryRequest.set_time보다 이후인 T인 경우 "store1""pickup-in-store"에 대한 암시적 추가 또는 삭제가 적용되지 않습니다.

미리 로드 속성

setInventory는 비동기식이므로 인벤토리 필드를 추가하거나 수정할 때 분류학적 또는 참조 컨트롤이 적용되지 않습니다. 이 메서드에서는 요청에 참조된 제품이 이미 존재하지 않아도 됩니다.

이를 통해 고객은 재고 필드 관리를 기본 카탈로그 또는 제품 가져오기 프로세스와 분리할 수 있는 미리 로드 패턴을 구현할 수 있습니다. 예를 들어 사용자는 연결된 제품을 가져오기 전에 재고 또는 가격 컨텍스트를 가져올 수 있습니다.

각 인벤토리 업데이트 메서드를 통해 호출자는 요청에서 allow_missing을 설정할 수 있습니다. allow_missing이 true로 설정되면 존재하지 않는 Product에 대한 인벤토리 업데이트는 메서드 사양에 따라 Product가 존재하는 것처럼 처리됩니다. 인벤토리 정보는 이 기간 내에 CreateProduct를 사용하여 해당 Product가 생성되지 않을 경우 최대 2일 동안 보관됩니다.

Java

public static SetInventoryResponse setInventory(Product productToUpdate)
    throws IOException, ExecutionException, InterruptedException {
  ProductServiceClient productClient = getProductServiceClient();

  SetInventoryRequest request = SetInventoryRequest.newBuilder()
      .setInventory(productToUpdate)
      .setSetTime(Timestamps.fromMillis(System.currentTimeMillis()))
      .setAllowMissing(true)
      .build();

  SetInventoryResponse response = productClient.setInventoryAsync(request).get();

  productClient.shutdownNow();
  productClient.awaitTermination(2, TimeUnit.SECONDS);

  return response;
}

Product 메서드 사용 시기

제품 CRUD 메서드를 사용하여 인벤토리 필드를 업데이트할 수 있지만 호출자는 기존 인벤토리 정보에 미치는 영향을 명시적으로 알고 있어야 합니다.

이는 동기식 메서드입니다. 즉, 인벤토리 메서드에 사용되는 다운스트림 최적화가 적용되지 않으며, 빈번한 인벤토리 업데이트를 위해 이 메서드를 사용하는 것은 비용이 많이 들 수 있습니다. 가능하다면 앞서 설명한 인벤토리 업데이트 메서드를 사용하는 것이 좋습니다.

CreateProduct

인벤토리 필드가 설정된 상태에서 CreateProduct를 호출하면 CreateProductRequest.product에 제공된 값이 해당 필드에 대해 미리 로드된 값을 재정의합니다. 인벤토리 필드가 설정되지 않으면 기존의 인벤토리 정보가 자동으로 사용됩니다.

또한 재정의된 인벤토리 필드의 최신 업데이트 시간이 메서드 호출 시간으로 재설정됩니다.

미리 로드된 인벤토리가 있는 CreateProduct

PROTO

{
  parent: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch"
  product_id: "p123"
  product: {
    name: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123"
    title: "some product"
    type: VARIANT
  }
}

이 예시에서 생성된 제품에는 설정된 인벤토리 필드가 없습니다. 즉, 인벤토리 업데이트 메서드를 사용하여 업데이트하면 미리 로드된 인벤토리 정보가 자동으로 사용됩니다. 이는 인벤토리 업데이트가 카탈로그 업데이트와 분리되는 경우 새로 생성된 Product를 기존 인벤토리 정보와 동기화하려는 경우에 유용합니다.

명시적 인벤토리가 있는 CreateProduct

PROTO

{
  parent: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch"
  product_id: "p123"
  product: {
    name: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123"
    title: "some product"
    type: VARIANT
    availability: OUT_OF_STOCK
    fulfillment_info: {
      type: "pickup-in-store"
    }
    fulfillment_info: {
      type: "same-day-delivery"
    }
  }
}

이 예시에서 명시적으로 설정된 인벤토리 필드가 포함된 Product가 생성됩니다. 이러한 필드는 기존 값을 재정의하며, 해당 필드의 최신 업데이트 시간을 무시합니다. 따라서 새로 생성된 Product의 가용성은 OUT_OF_STOCK로 설정되며, fulfillment 유형 "pickup-in-store""same-day-delivery"를 지원하는 장소 ID는 없습니다.

인벤토리 정보가 있는 CreateProduct는 미리 로드된 모든 인벤토리 정보가 정확한지 확실하지 않고 Product 생성 시점에 인벤토리를 명시적으로 설정하여 카탈로그와 인벤토리를 완전히 동기화하려는 경우 유용할 수 있습니다.

UpdateProduct

UpdateProduct 메서드를 사용하여 기존 카탈로그 항목의 특정 속성을 업데이트할 수 있습니다. 이 작업은 단일 필드 또는 여러 필드에 동시에 적용할 수 있으며, 개별 제품에 적용하거나 가져오기 방법을 사용하여 여러 제품에 적용할 수 있습니다. 마스크 없이 가져오기 메서드를 사용하면 덮어쓰기가 실행됩니다.

UpdateProduct는 실시간 가격 및 재고 업데이트에 자주 사용되지만 제품의 모든 데이터를 다시 제출하지 않고도 필드를 업데이트하는 데 사용할 수 있습니다. (createMethod 또는 importProducts와 대조됨)

UpdateProduct 사용의 주요 이점은 동기 요청이라는 것입니다. 색인 (및 검색 또는 추천) 업데이트는 거의 즉시 이루어집니다. 하지만 UpdateProduct는 매우 빈번한 업데이트에 사용되지 않습니다. 기본 할당량은 분당 제품 쓰기 요청 12,000개입니다. 일반적으로 이 메서드는 상품의 가격이 변경되거나 재고 상태가 변경되는 경우에만 사용해야 합니다 (수량이 감소할 때마다 사용하지 않음).

UpdateProduct는 제품 수준 속성만 수정할 수 있습니다. localInventories 또는 fulfillmentInfo의 현지 인벤토리 속성을 수정하는 데 사용할 수 없습니다.

UpdateProduct 또는 ImportProducts로 전화를 걸 때는 updateMask 매개변수를 지정하는 것이 중요합니다. updateMask에는 업데이트할 필드 목록이 포함됩니다. 요청 본문에 더 많은 필드가 전달되더라도 updateMask에 지정된 필드만 업데이트됩니다. 업데이트 또는 가져오기 요청에 updateMask가 없으면 모든 필드가 요청 본문에 제출된 내용으로 정확하게 업데이트됩니다.

UpdateProduct가 호출되고 필드 마스크 UpdateProductRequest.update_mask에 인벤토리 필드가 포함되어 있으면 UpdateProductRequest.product에 제공된 값이 해당 필드에 대해 미리 로드된 모든 값을 재정의합니다.

또한 재정의된 인벤토리 필드의 최신 업데이트 시간이 메서드 호출 시간으로 재설정됩니다.

PROTO

{
  product: {
    name: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123"
    availability: IN_STOCK
    fulfillment_info: {
      type: "pickup-in-store"
      place_ids: "store0"
      place_ids: "store1"
      place_ids: "store2"
      place_ids: "store3"
    }
    fulfillment_info: {
      type: "same-day-delivery"
    }
  }
  update_mask: {
    paths: "availability"
    paths: "fulfillment_info"
  }
}

이 예시는 각 인벤토리 필드의 최신 업데이트 시간과 관계없이 업데이트가 적용된다는 점을 제외하면 SetInventory 예시와 매우 유사합니다.

  • 인벤토리에 대한 UpdateProduct는 타임스탬프 보호를 무시하면서 인벤토리 정보에 대한 전체 동기화가 필요할 때 유용할 수 있습니다.

  • UpdateProductRequest.allow_missingtrue로 설정하여 Product upsert를 수행하면 UpdateProduct를 사용하여 인벤토리 정보를 미리 로드할 수 있습니다. 이 메서드를 사용하려면 UpdateProductRequest.product.title과 같은 특정 카탈로그 필드를 설정해야 합니다. 따라서 사용 사례를 미리 로드하는 데 인벤토리 업데이트 메서드를 사용하세요.

DeleteProduct

DeleteProduct가 호출되면 각 인벤토리 필드에 대한 최신 업데이트 시간의 모든 기록을 포함하여 DeleteProductRequest.name에 지정된 제품에 대한 기존 인벤토리 정보가 모두 삭제됩니다.

제품 수준 속성을 인벤토리 수준 속성으로 대체하는 경우 고려사항

각 접근 방식과 관련된 다음 고려사항과 제한사항을 참고하세요.

기능 제품 수준 인벤토리 매장 수준 (오프라인) 인벤토리
검색 필터 및 부스트 컨트롤
facetSpec에 지정된 필터 및 패싯 키 형식 아니요
검색 패싯에 사용 가능 아니요
검색 응답에서 반환됨 예 (variantRollupKeys 사용)
Recommendations AI v2 필터 및 부스트 컨트롤 아니요
기능 제품 수준 인벤토리 매장 수준 (오프라인) 인벤토리
검색 필터 및 부스팅 컨트롤
facetSpec에 지정된 필터 및 패싯 키 형식
검색 패싯에 사용 가능
검색 응답에서 반환됨 (variantRollupKeys 사용)
Recommendations AI v2 필터 및 부스트 컨트롤

제품 재고, 주문 처리, 오프라인 가격을 업데이트하는 여러 방법의 기능에는 약간의 중복이 있습니다.

기능 UpdateProduct setInventory addLocalInventories
실시간 업데이트
제품 필드 업데이트
제품 가격 업데이트
제품 재고 업데이트
fulfillmentInfo 업데이트
localInventories (현지 가격) 업데이트
타임스탬프 시퀀싱

예시

이 섹션에서는 curl 명령어에서 UpdateProductsetInventory 메서드를 사용하여 제품 인벤토리를 업데이트하는 방법을 보여줍니다.

  • UpdateProduct는 REST API의 HTTP PATCH 메서드를 사용하여 가격 및 재고와 같은 제품 수준 필드를 동기식으로 실시간 업데이트하며, updateMask와 함께 import 메서드를 사용하여 일괄 업데이트할 수도 있습니다.

  • 비동기 setInventory 메서드는 fulfillmentInfo를 사용하여 제품 수준 인벤토리 필드 (가격, 재고, 수량) 및 오프라인 판매점 fulfillment 세부정보를 업데이트하는 데 사용되지만 localInventories에 저장된 오프라인 판매점 가격이나 속성은 수정할 수 없습니다.

UpdateProduct를 사용하여 제품 가격 및 재고 업데이트

REST API를 사용하는 경우 UpdateProduct는 HTTP PATCH 메서드를 사용합니다. CreateProduct, GetProduct, DeleteProduct와 동일한 엔드포인트 URL은 각각 HTTP PUT, GET, DELETE 메서드를 사용합니다. 다음 링크를 펼쳐 각 curl 샘플을 확인하세요.

setInventory를 사용하여 제품 가격 및 재고 업데이트

setInventory는 다음 필드만 지원합니다.

  • availability
  • availableQuantity
  • priceInfo

다음 링크를 펼쳐 각 curl 샘플을 확인하세요.

오프라인 판매점 인벤토리의 경우 이 curl 샘플에서 볼 수 있듯이 placeIds 및 처리 유형을 fulfillmentInfo에 전달할 수 있습니다.

튜토리얼

이 튜토리얼을 사용하여 setInventory 사용 방법 또는 fulfillment 추가/삭제 방법을 알아보세요.

인벤토리 설정 튜토리얼

이 튜토리얼에서는 전체 제품을 업데이트하는 대신 SetInventory 메서드를 사용하여 인벤토리 업데이트를 푸시하는 방법을 보여줍니다.


Cloud Shell 편집기에서 이 태스크의 단계별 안내를 직접 수행하려면 둘러보기를 클릭합니다.

둘러보기


fulfillment 추가 튜토리얼

AddFulfillmentPlaces 대신 AddLocalInventories 메서드를 사용하는 것이 좋습니다. AddLocalInventories은 동일한 결과를 달성하지만 오프라인 판매점 인벤토리 데이터 수집을 더욱 세밀하게 제어할 수 있습니다. 자세한 내용은 AddLocalInventories 문서를 참조하세요.

이 튜토리얼에서는 AddFulfillmentPlaces 메서드를 사용하여 제품 fulfillment 정보를 업데이트하는 방법을 보여줍니다. 이러한 방식으로 검색을 통해 제품 구매 및 주문 처리가 가능하다는 업데이트를 표시할 수 있습니다. 예를 들어 쇼핑객이 매장에서 청바지를 찾고 있지만 재고가 없습니다. 이 매장 또는 다른 매장에 청바지가 다시 입고되면 쇼핑객이 업데이트를 확인하고 주문을 진행할 수 있습니다.


Cloud Shell 편집기에서 이 태스크의 단계별 안내를 직접 수행하려면 둘러보기를 클릭합니다.

둘러보기


fulfillment 삭제 튜토리얼

RemoveFulfillmentPlaces 대신 RemoveLocalInventories 메서드를 사용하는 것이 좋습니다. RmoveLocalInventories은 동일한 결과를 달성하지만 오프라인 판매점 인벤토리 데이터 수집을 더욱 세밀하게 제어할 수 있습니다. 자세한 내용은 RemoveLocalInventories 문서를 참조하세요.

이 튜토리얼에서는 RemoveFulfillmentPlaces 메서드를 사용하여 제품 fulfillment 정보를 업데이트하는 방법을 보여줍니다. 이러한 방식으로 Vertex AI Search for Commerce는 제품이 없고 주문을 처리할 수 없는 경우 업데이트를 표시할 수 있습니다. 이를 통해 Search가 제품 구매 및 주문 처리가 불가능하다는 업데이트를 표시할 수 있습니다. 예를 들어 쇼핑객이 매장에서 청바지를 찾고 있습니다. 이 매장에서 청바지 재고가 소진되면 쇼핑객이 이를 확인하고 주문을 진행할 수 없습니다.


Cloud Shell 편집기에서 이 태스크의 단계별 안내를 직접 수행하려면 둘러보기를 클릭합니다.

둘러보기