배송 차량 필드 업데이트

이 문서에서는 작업을 수행할 수 있는 중요한 차량 필드를 다룹니다. 업데이트할 때 사용됩니다.

  • type: 이 배송 수단의 유형입니다. 이로 인해 이 차량에 대해 생성된 경로가 영향을 받습니다.
  • attributes[]: 유형의 옵션 배열 DeliveryVehicleAttribute 사용 차량의 커스텀 기준을 정의하여 차량의 성능을 향상 차량 검색 또는 나열 시 필터링 동작
 

차량 필드의 전체 목록은 다음을 참고하세요.

차량 속성 필드

차량 attributes 필드를 사용하여 맞춤 기준을 만들어 소비자 또는 차량 관리자가 다양한 검색 기준을 통해 차량에서 차량을 찾을 수 있도록 합니다. 이렇게 하면 다른 차량 필드만을 기반으로 검색 기준을 사용하는 것보다 더 나은 차량 일치를 제공하는 앱의 기능이 향상됩니다. 각 차량에는 최대 100개의 속성이 있을 수 있으며, 각 속성에는 고유한 키가 있어야 합니다. 값은 문자열, 불리언 또는 숫자일 수 있습니다.

예를 들어 zone이라는 맞춤 속성을 선언하여 배송 차량이 운행되는 도시의 구역을 구별하세요. 다음과 같은 문자열 값(1B, 2C, 3A)을 사용하여 다양한 영역을 나타냅니다. 그런 다음 Fleet 추적에서 필터를 사용하여 특정 구역에서 작동하는 차량을 해당 구역을 담당하는 운영자에게 보냅니다.

하지만 맞춤 속성 값은 상호 배타적이지 않아도 됩니다. available-at-nighthas-refrigeration과 같은 기준을 사용할 수 있습니다. 이러한 각자가 부울 값을 사용하는 별도의 맞춤 속성이 될 수 있습니다. 지정된 차량에는 적절한 문자열 값으로 설정된 zone 커스텀 속성과 함께 이러한 세 가지 커스텀 속성이 모두 할당될 수 있습니다.

차량 속성 업데이트

attributes 키는 차량당 하나의 값만 가질 수 있습니다. 필드 마스크에서 attributes를 사용하여 맞춤 차량 속성을 선언한 다음 아래 메서드를 기반으로 값을 제공합니다.

UpdateDeliveryVehicle API는 단일 속성만 업데이트하는 것을 허용하지 않습니다. 이 메서드를 사용하면 필드 마스크에서 attributes 필드를 사용하면 차량에 대한 차량 속성의 전체 세트가 재선언됩니다. 이렇게 하면 기존 속성이 아닌 명시적으로 포함됩니다. 이 메서드를 사용하여 새 포드를 선언하고 맞춤 속성을 사용하려는 경우 해당 광고를 표시하려는 모든 맞춤 속성도 유지되어야 합니다. 필드 마스크에서 attributes를 제외하면 메서드는 차량에 대해 이전에 정의된 기존 맞춤 속성을 그대로 유지합니다. 필드 마스크에서 attributes를 사용하지만 값을 설정하지 않으면 차량에서 모든 맞춤 속성을 삭제하는 것과 같습니다.

차량 필드 업데이트 예시

이 섹션에서는 다음을 사용하여 차량 필드를 업데이트하는 방법을 보여줍니다. UpdateDeliveryVehicleRequest: 다음을 나타내는 update_mask를 포함합니다. 업데이트할 필드입니다. 자세한 내용은 필드 마스크에 관한 프로토콜 버퍼 문서를 참고하세요.

last_location 이외의 필드를 업데이트하려면 Fleet Engine Delivery가 필요합니다. 관리자 권한이 있어야 합니다.

예: 맞춤 속성 설정

이 예시에서는 새 속성 zone를 지정합니다. 앞의 차량 속성 업데이트에서 설명한 대로 이 접근 방식을 사용하여 attributes 필드를 업데이트하려면 유지하려는 모든 맞춤 속성을 표시해야 합니다. 따라서 이 예에서는 보존을 위해 작성된 available-at-night 값을 보여줍니다. 덮어쓰지 않도록 합니다. attributes 필드

providers.deliveryVehicles.patch 참조를 참고하세요.

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";
  static final String VEHICLE_ID = "vehicle-8241890";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Vehicle settings
  String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
  DeliveryVehicle myDeliveryVehicle = DeliveryVehicle.newBuilder()
      .addAllAttributes(ImmutableList.of(
          DeliveryVehicleAttribute.newBuilder().setKey("zone").setValue("1B").build(),
          DeliveryVehicleAttribute.newBuilder().setKey("available-at-night").setValue("true").build()))
      .build();

  // DeliveryVehicle request
  UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
    UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
        .setName(vehicleName)
        .setDeliveryVehicle(myDeliveryVehicle)
        .setUpdateMask(FieldMask.newBuilder()
            .addPaths("attributes"))
        .build();

  try {
    DeliveryVehicle updatedDeliveryVehicle =
        deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case NOT_FOUND:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }

REST

  # Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
  # environment
  curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=attributes" \
    -H "Content-type: application/json" \
    -H "Authorization: Bearer ${JWT}" \
    --data-binary @- << EOM
  {
      "attributes": [
        {"key": "zone", "value": "1B"},
        {"key": "available-at-night", "value": "true"}
      ]
  }
  EOM

다음 단계