更新車輛欄位

本文將介紹在建立及管理車輛時,可以更新的重要車輛欄位。

  • vehicle_state:決定車輛的供應情形 輸入新的行程
  • vehicle_type:建立車輛時的必填欄位。這個欄位也可以當做車輛比對的篩選條件。 如要進一步瞭解如何設定這個欄位,請參閱「建立車輛」一文。
  • attributes[]:類型的選用陣列 VehicleAttribute。使用這些條件定義自訂條件,以便在搜尋或列出車輛時,強化篩選行為。
 

如需車輛欄位的完整清單,請參閱:

車輛狀態欄位

系統可以將車輛狀態設為 OFFLINEONLINE。舉例來說, 可能每天早上 9 點、每天OFFLINE 的車輛狀態設為ONLINE 下午 5 點。

離線模式 線上模式
使用 OFFLINE 表示車輛不接受新的行程。請注意,即使在 執行同樣的動作
  • ONLINE 狀態下建立的 Vehicle,可能會立即傳回 SearchVehicles 查詢的回應。請參閱「搜尋車輛」一文 取得更多 詳細資料。
  • ONLINE 狀態下建立的車輛應使用 CreateVehicle 呼叫中的 last_location 欄位。

車輛屬性欄位

請使用車輛 attributes 欄位建立自訂條件,以便啟用 或車隊操作員,為你旗下車隊 多樣化的搜尋條件這可提升應用程式的能力 比起使用搜尋條件,系統會提供更合適的車輛比對結果 僅依據其他車輛欄位為依據。每輛車最多可有 100 個 屬性,且每個屬性都必須有其專屬的鍵。值可以是字串、布林值或數字。

舉例來說,您可以宣告名為 class 的自訂屬性,以便根據車輛等級區分共乘車輛。您可以使用下列字串值代表車輛級別:ECONOMYSTANDARDLUXURY

不過,自訂屬性值不一定要彼此互斥。你可以使用「寵物友善」、「禁菸」和「可搭乘長途車程」等條件。每個屬性都可以是使用布林值的個別自訂屬性。可以將這三個自訂屬性全部指派給同一輛車 以及設為適當字串值的 class 自訂屬性。

透過這種方式使用屬性就能提供各樣實用的功能 尋找行程有特定需求的車輛如要瞭解如何將自訂屬性用於查詢篩選器,請參閱「搜尋車輛」一文。

更新車輛屬性

你可以使用 UpdateVehicleUpdateVehicleAttributes。每個 attributes 鍵只能有一個值 汽車。您會使用 attributes 宣告自訂車輛屬性 ,然後根據下方方法提供值。

UpdateVehicle UpdateVehicleAttributes
這個 API 不允許只更新單一屬性。使用 此方法,任何使用 attributes 欄位遮罩中的欄位會產生「整組」 重新宣告車輛的車輛屬性。這樣一來, 覆寫任何未明確包含在 欄位遮罩如果使用這個方法宣告新的自訂屬性, 您也必須重新宣告要車輛存取的所有自訂屬性 保留。如果您在欄位遮罩中排除 attributes, 則這個方法會沿用先前定義的現有自訂屬性 。如果您在欄位遮罩中使用 attributes, 但如果沒有設定值,就相當於移除 屬性。 這個方法會接受要更新的特定屬性清單。這項要求只會更新或新增欄位遮罩中指定的屬性。會保留未指定的既有屬性 。

更新車輛欄位範例

本節說明如何使用 UpdateVehicleRequest 更新車輛欄位,其中包含 update_mask,可指出要更新哪些欄位。詳情請參閱 欄位遮罩的通訊協定緩衝區說明文件

如要更新 last_location 以外的欄位,您必須具備 Fleet Engine On-demand 管理員 權限。

範例:啟用新的行程類型和自訂屬性

這個範例會為車輛啟用 back_to_back 行程,並指定新屬性:class。如前述「更新車輛屬性」一節所述,使用這種方法更新 attributes 欄位時,您必須指明要保留的所有自訂屬性。因此,範例會顯示寫入的 cash_only 值,以免在指定 attributes 欄位的更新作業期間遭到覆寫。

如果只要更新一個鍵/值組合的值,請使用 改為 UpdateVehicleAttributes 方法,且不包含 attribute 欄位 在 UpdateVehicle 要求的欄位遮罩中。

請參閱 providers.vehicles.update 參考資料,瞭解 gRPCREST

gRPC

static final String PROJECT_ID = "project-id";
static final String VEHICLE_ID = "vid-8241890";

VehicleServiceBlockingStub vehicleService = VehicleService.newBlockingStub(channel);

String vehicleName = "providers/" + PROJECT_ID + "/vehicles/" + VEHICLE_ID;
Vehicle updatedVehicle = Vehicle.newBuilder()
    .setVehicleState(VehicleState.ONLINE)
    .addAllAttributes(ImmutableList.of(
        VehicleAttribute.newBuilder().setKey("class").setValue("ECONOMY").build(),
        VehicleAttribute.newBuilder().setKey("cash_only").setValue("false").build()))
    .setBackToBackEnabled(true)
    .build();

UpdateVehicleRequest updateVehicleRequest = UpdateVehicleRequest.newBuilder()
    .setName(vehicleName)
    .setVehicle(updatedVehicle)
    .setUpdateMask(FieldMask.newBuilder()
        .addPaths("vehicle_state")
        .addPaths("attributes")
        .addPaths("back_to_back_enabled"))
    .build();

try {
  Vehicle updatedVehicle =
      vehicleService.updateVehicle(updateVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:
      // Most implementations will call CreateVehicle in this case
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}
// If no Exception, Vehicle updated successfully.

REST

curl -X PUT \
  "https://fleetengine.googleapis.com/v1/providers/project-id/vehicles/vid-8241890?updateMask=vehicle_state,attributes,back_to_back_enabled" \
  -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  --data-binary @- << EOM
{
    "vehicleState": "ONLINE",
    "attributes": [
      {"key": "class", "value": "LUXURY"},
      {"key": "cash_only", "value": "false"}
    ],
    "backToBackEnabled": true
}
EOM

後續步驟