本文件說明如何更新行程及管理其狀態, 包括使用欄位遮罩來設定行程的相關欄位。本例假設您 已透過這個網站所述的方式設定 Fleet Engine, 指派給行程的車輛。
行程更新基本資訊
在下列情況中,系統會使用 Fleet Engine 更新行程:
- 建立車輛後指派車輛至行程時。
- 行程狀態變更時:舉例來說 透過這些路線控點
- 當您更新行程欄位時,例如乘客人數和 下車地點
如要更新行程,請使用 gRPC 和 REST 傳送要求。
將專案的服務帳戶相關憑證 請參閱「Fleet Engine:服務帳戶角色」一文。
更新行程欄位
您可以在「建立」建立行程欄位中更新任何行程欄位
單一目的地的行程。舉例來說,建立行程後
練習先尋找車輛,接著將行程 vehicle_id
欄位更新為
將其與駕駛行程的車輛建立關聯。
使用欄位遮罩
欄位遮罩可讓 API 呼叫端列出要求應有的欄位 更新或更新使用 FieldMask 可避免不必要的作業並提高效能Fleet Engine 使用欄位遮罩 用於更新所有資源的欄位。
使用車輛 ID 更新行程
你必須使用車輛 ID 設定行程,Fleet Engine 才能追蹤 沿著路線行駛以下程式碼範例示範如何 請使用車輛 ID 更新行程。
static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "trip-8241890";
String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;
TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);
// The trip settings to update.
Trip trip = Trip.newBuilder()
.setVehicleId("8241890")
.build();
// The trip update request.
UpdateTripRequest updateTripRequest =
UpdateTripRequest.newBuilder() // No need for the header.
.setName(tripName)
.setTrip(trip)
.setUpdateMask(FieldMask.newBuilder().addPaths("vehicle_id"))
.build();
// Error handling.
// If the Fleet Engine has both a trip and vehicle with IDs, and if the
// credentials validate, then the service updates the trip.
try {
Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND: // Neither the trip nor vehicle exist.
break;
case PERMISSION_DENIED:
break;
}
return;
}
管理行程的行程狀態
請使用其中一個 TripStatus
列舉來指定行程的狀態
輕鬆分配獎金當行程的狀態變更時;例如從 ENROUTE_TO_PICKUP
到
ARRIVED_AT_PICKUP
,即可更新 Fleet Engine 中的行程狀態。旅程
生命週期一律以狀態值 NEW
開頭,結尾則為
COMPLETE
或 CANCELED
。
行程更新範例
以下說明如何更新「返回」的行程狀態 Fleet Engine 的旅程
static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "trip-8241890";
String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;
TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);
// Trip settings to be updated.
Trip trip = Trip.newBuilder()
.setTripStatus(TripStatus.ARRIVED_AT_PICKUP)
.build();
// Trip update request
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
.setName(tripName)
.setTrip(trip)
.setUpdateMask(FieldMask.newBuilder().addPaths("trip_status"))
.build();
// Error handling.
try {
Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND: // The trip doesn't exist.
break;
case FAILED_PRECONDITION: // The given trip status is invalid.
break;
case PERMISSION_DENIED:
break;
}
return;
}
你可以在「其他行程類型」中,查看有關更新行程的其他範例。 專區。
處理行程錯誤
更新或尋找現有行程時,可能會遇到
DEADLINE_EXCEEDED
錯誤,在這種情況下,Fleet Engine 的狀態不明。
如要調查這個問題,請先使用同一個行程 ID,再次呼叫 CreateTrip
正在嘗試更新或監控系統應會傳回 201 (CREATED) 或
409 (衝突)。在第二種情況下,先前的要求在
DEADLINE_EXCEEDED
。
查看 Consumer SDK 中的網路錯誤清單,您可以針對 Android 或 iOS: