更新車輛欄位

這份文件介紹重要的車輛欄位, 在建立及管理車輛時更新。

  • vehicle_state:決定車輛的供應情形 輸入新的行程
  • vehicle_type:建立車輛時的必填欄位。 這個欄位也可以做為車輛比對的篩選條件。 詳情請見 建立車輛 ,進一步瞭解如何設定這個欄位。
  • attributes[]:類型的選用陣列 VehicleAttribute。使用 定義自訂條件 過濾車輛的行為。
 

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

車輛狀態欄位

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

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

車輛屬性欄位

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

例如,您可以宣告一個名為 class 的自訂屬性, 區分不同艙等的代僱駕駛車輛。應使用 以下字串值代表車輛類別層級:ECONOMYSTANDARDLUXURY

不過,自訂屬性值不一定要彼此互斥。您可能會 用寵物友善禁煙等條件花費時間 行程。每個屬性可以是使用布林值的獨立自訂屬性 輕鬆分配獎金可以將這三個自訂屬性全部指派給同一輛車 以及設為適當字串值的 class 自訂屬性。

透過這種方式使用屬性就能提供各樣實用的功能 尋找行程有特定需求的車輛相關操作說明 如要使用自訂屬性做為查詢篩選條件,請參閱搜尋車輛一文。

更新車輛屬性

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

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

更新車輛欄位範例

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

如要更新 last_location 以外的欄位,必須啟用 Fleet Engine 以量計價模式 管理員權限。

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

本範例會啟用車輛的 back_to_back 行程,並指定 新屬性:class。如先前「更新車輛屬性」一節所述。 如果使用這個方法,更新 attributes 欄位時,需要指定 要保留的自訂屬性。因此,這個範例顯示 cash_only 值,以確保在更新作業期間不會覆寫該值 ,指定了 attributes 欄位。

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

請參閱 gRPCRESTproviders.vehicles.update 參考資料。

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

後續步驟