這份文件介紹重要的車輛欄位, 在建立及管理車輛時更新。
|
如需車輛欄位的完整清單,請參閱:
|
車輛狀態欄位
系統可將車輛狀態設為 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 以量計價模式
管理員權限。
範例:啟用新的行程類型和自訂屬性
本範例會啟用車輛的 back_to_back
行程,並指定
新屬性:class
。如先前「更新車輛屬性」一節所述。
如果使用這個方法,更新 attributes
欄位時,需要指定
要保留的自訂屬性。因此,這個範例顯示 cash_only
值,以確保在更新作業期間不會覆寫該值
,指定了 attributes
欄位。
如果只要更新一個鍵/值組合的值,請使用
改為 UpdateVehicleAttributes
方法,且不包含 attribute
欄位
在 UpdateVehicle
要求的欄位遮罩中。
請參閱 gRPC 和 REST 的 providers.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