本文假設您瞭解如何建立及使用任務。並提供具體範例,說明如何透過下列方式設定運送任務:
設定運送任務的目標時間範圍:設定完成任務的時間範圍。
自訂工作顯示設定:自訂工作活動的顯示設定,向客戶或車隊營運商顯示。
如要進一步瞭解運送工作的欄位,請參閱「建立運送工作」。更新現有工作的其他資訊時,除了要更新工作的欄位,也必須一併提供工作的相關 ID。
設定目標時間範圍
目標時間範圍是指應完成工作的 TimeWindow。舉例來說,如果您向收件者告知運送時間範圍,可以使用工作目標時間範圍擷取這個時間範圍並產生快訊,或用來分析過去的行程成效。
目標時間範圍包含開始時間和結束時間,可設定於任何工作類型。目標時間範圍不會影響路徑規劃行為。
下列範例說明如何使用 Java gRPC 程式庫設定時間範圍,或如何向 UpdateTask 發出 HTTP REST 要求。您也可以在建立任務時設定這個欄位。
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TASK_ID = "task-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
.setName(taskName)
.setTargetTimeWindow(
TimeWindow.newBuilder()
.setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
.setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
.build();
// Task request
UpdateTaskRequest updateTaskRequest =
UpdateTaskRequest.newBuilder() // No need for the header
.setTask(task)
.setUpdateMask(FieldMask.newBuilder().addPaths("targetTimeWindow"))
.build();
try {
Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
如要使用 HTTP 設定工作時間範圍,請呼叫 PATCH,並使用 updateMask 更新 targetTimeWindow 參數:
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=targetTimeWindow
其中 <id> 是工作的專屬 ID。要求標頭必須包含 Authorization 欄位,且值為 Bearer <token>,其中 <token> 是由伺服器根據「服務帳戶角色」和「JSON Web 權杖」所述指南核發。
# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=targetTimeWindow" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"targetTimeWindow": {
"startTime": "2023-03-29T21:00:00Z",
"endTime": "2023-03-29T23:00:00Z"
}
}
EOM自訂工作顯示設定
根據預設,Fleet Engine 會提供工作活動的資訊,並向收件客戶和追蹤貨件的車隊營運商顯示。這包括在向客戶傳送包裹運送狀態通知前,指出還有多少站。您可以根據每項工作自訂這項資訊,更符合您的商業模式。
本節說明地圖上追蹤物件的顯示規則。這些規則適用於兩類物件:
- 位置標記顯示設定
- 有效車輛任務的任務資料瀏覽權限,例如折線和預計到達時間
地點標記顯示規則
無論運送狀態為何,Fleet Engine 都會在地圖上顯示運送地點的位置標記。
工作資料瀏覽權限規則
本節說明適用於工作資料的預設瀏覽權限規則。您只能自訂有效的車輛任務,也就是說,只有上車和下車任務可以套用自訂顯示設定規則。
下列工作可能無法自訂:
- 預定停靠站
- 無法預訂工作
- 閒置車輛任務
無法提供服務的工作顯示規則
根據預設,如果追蹤中的工作至少有一項不可用工作,車輛就不會顯示在地圖上。例如,司機在運送追蹤貨物的途中休息,或車輛正在加油。您仍可查看預計抵達時間和預計工作完成時間。同樣地,您無法自訂這項規則。
查看進行中的車輛任務
TaskTrackingInfo 物件提供多個資料元素,您可以使用 Shipment Tracking Library 顯示這些元素。根據預設,當工作指派給車輛,且車輛距離工作地點不超過 5 個停靠點時,系統會顯示這些欄位。工作完成或取消後,就不會再顯示。
在 Fleet Engine 建立或更新工作時,您可以設定工作的 TaskTrackingViewConfig,依工作自訂瀏覽權限設定。這會建立規則,讓個別資料元素可供使用。
下表列出可套用顯示設定規則的欄位。
| 車輛任務欄位 (用於顯示規則) |
|---|
|
下表列出上述欄位可用的瀏覽權限選項。
| 瀏覽權限選項 |
|---|
|
路線折線和車輛位置顯示規則
對於追蹤的路線,路線折線的顯示設定取決於車輛的顯示設定。如果車輛未顯示,但有效路線上顯示路線折線,仍可透過可見折線的終點推斷車輛位置。因此,路線折線的可見度必須與車輛可見度相同或更嚴格。
請遵循下列規則,提供有效的路線折線/車輛位置顯示設定組合。
路線折線和車輛位置指定相同的瀏覽權限選項
在這個情境中,折線和車輛位置都設定了相同的選項,包括:
- 剩餘停等次數
- 預計到達時間
- 剩餘行駛距離
為遵守規則,路線折線可見度的值必須小於或等於車輛可見度的設定值。在這個範例中,折線的剩餘停靠站門檻設為 3,小於車輛指定的 5。也就是說,當追蹤的行程距離任務地點 5 站時,車輛就會顯示,但該車輛的路線要到行程距離 3 站時才會顯示。
```js
"taskTrackingViewConfig": {
"routePolylinePointsVisibility": {
"remainingStopCountThreshold": 3
},
"vehicleLocationVisibility": {
"remainingStopCountThreshold": 5
},
}
```
路線折線和車輛位置會指定不同的顯示設定選項
如果路線折線和車輛位置的顯示設定不同,則只有在兩者的顯示設定都符合條件時,才會顯示車輛位置。同樣地,折線是否顯示取決於車輛的顯示規則:
- 一律顯示:如果車輛位置也提供「一律顯示」選項,路線折線就必須使用「一律顯示」選項。
- 一律不顯示:如果車輛位置使用「一律不顯示」顯示選項,路線折線也必須使用「一律不顯示」顯示選項。
範例如下:
"taskTrackingViewConfig": {
"routePolylinePointsVisibility": {
"remainingStopCountThreshold": 3
},
"vehicleLocationVisibility": {
"remainingDrivingDistanceMetersThreshold": 3000
},
}
在這個範例中,只有在剩餘停靠站數至少為 3 且剩餘行駛距離至少為 3, 000 公尺時,才會顯示車輛位置。
自訂工作顯示設定範例
以下範例說明如何設定具有下列瀏覽權限規則的工作:
- 如果車輛距離停靠站不超過 3 站,則顯示路線折線。
- 如果剩餘行車距離小於 5,000 公尺,則顯示預計到達時間。
- 一律不顯示剩餘停靠站數量。
- 其他欄位則會保留預設顯示設定,在車輛距離工作地點 5 站內時顯示。
請參閱 TaskTrackingViewConfig 的 gRPC 或 REST。
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TASK_ID = "task-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
.setName(taskName)
.setTaskTrackingViewConfig(
TaskTrackingViewConfig.newBuilder()
.setRoutePolylinePointsVisibility(
VisibilityOption.newBuilder().setRemainingStopCountThreshold(3))
.setEstimatedArrivalTimeVisibility(
VisibilityOption.newBuilder().remainingDrivingDistanceMetersThreshold(5000))
.setRemainingStopCountVisibility(
VisibilityOption.newBuilder().setNever(true)))
.build();
// Task request
UpdateTaskRequest updateTaskRequest =
UpdateTaskRequest.newBuilder() // No need for the header
.setTask(task)
.setUpdateMask(FieldMask.newBuilder().addPaths("taskTrackingViewConfig"))
.build();
try {
Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
如要使用 HTTP 設定工作追蹤檢視畫面設定視窗,請呼叫 PATCH,並使用 updateMask 更新 taskTrackingViewConfig 參數:
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskTrackingViewConfig
例如:
# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskTrackingViewConfig" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"taskTrackingViewConfig": {
"routePolylinePointsVisibility": {
"remainingStopCountThreshold": 3
},
"estimatedArrivalTimeVisibility": {
"remainingDrivingDistanceMetersThreshold": 5000
},
"remainingStopCountVisibility": {
"never": true
}
}
}
EOM