本文將介紹在建立及管理車輛時,可以更新的重要車輛欄位。
|
如需車輛欄位的完整清單,請參閱:
|
車輛狀態欄位
系統可以將車輛狀態設為 OFFLINE
或 ONLINE
。舉例來說,
可能每天早上 9 點、每天OFFLINE
的車輛狀態設為ONLINE
下午 5 點。
離線模式 | 線上模式 |
---|---|
使用 OFFLINE 表示車輛不接受新的行程。請注意,即使在
執行同樣的動作 |
|
車輛屬性欄位
請使用車輛 attributes
欄位建立自訂條件,以便啟用
或車隊操作員,為你旗下車隊
多樣化的搜尋條件這可提升應用程式的能力
比起使用搜尋條件,系統會提供更合適的車輛比對結果
僅依據其他車輛欄位為依據。每輛車最多可有 100 個
屬性,且每個屬性都必須有其專屬的鍵。值可以是字串、布林值或數字。
舉例來說,您可以宣告名為 class 的自訂屬性,以便根據車輛等級區分共乘車輛。您可以使用下列字串值代表車輛級別:ECONOMY
、STANDARD
和 LUXURY
。
不過,自訂屬性值不一定要彼此互斥。你可以使用「寵物友善」、「禁菸」和「可搭乘長途車程」等條件。每個屬性都可以是使用布林值的個別自訂屬性。可以將這三個自訂屬性全部指派給同一輛車 以及設為適當字串值的 class 自訂屬性。
透過這種方式使用屬性就能提供各樣實用的功能 尋找行程有特定需求的車輛如要瞭解如何將自訂屬性用於查詢篩選器,請參閱「搜尋車輛」一文。
更新車輛屬性
你可以使用 UpdateVehicle
或
UpdateVehicleAttributes
。每個 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
參考資料,瞭解 gRPC 和 REST。
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