本文假設您瞭解如何建立及使用工作。並提供具體範例,說明如何透過下列方式設定出貨工作:
設定貨運工作的目標時間範圍:設定完成工作的時間範圍。
自訂工作顯示設定:自訂工作活動的顯示設定,供顧客或車隊營運人員查看。
如要進一步瞭解出貨工作欄位,請參閱「建立出貨工作」。 更新現有工作的其他資訊時,除了要更新工作的欄位,也必須一併加入工作的相關 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
物件提供多個資料元素,您可以使用出貨追蹤程式庫顯示這些元素。根據預設,當工作指派給車輛,且車輛距離工作地點 5 個停靠點以內時,系統會顯示這些欄位。工作完成或取消後,就不會再顯示。
您可以在 Fleet Engine 中建立或更新工作時,在工作上設定 TaskTrackingViewConfig
,根據每個工作自訂瀏覽權限設定。這會為個別資料元素建立規則,以供使用。
下表列出可套用顯示規則的欄位。
顯示規則的車輛工作欄位 |
---|
|
下表列出上述欄位的可見度選項。
瀏覽權限選項 |
---|
|
路線折線和車輛位置資訊顯示規則
如果是追蹤路線,路線折線的顯示設定會與車輛的顯示設定相同。如果車輛不在有效路線上,但路線折線仍顯示在畫面上,系統還是可以根據顯示的折線結尾推斷車輛位置。因此,路線折線的顯示限制必須與車輛顯示限制相同或更嚴格。
請遵守下列規則,提供有效的路線折線 / 車輛位置顯示組合。
路線折線和車輛位置指定相同的顯示選項
在這個情境中,折線和車輛位置會設定相同的選項,包括:
- 剩餘停靠次數
- 延展型文字廣告停用前的時間
- 剩餘行駛距離
為遵守規則,路線折線的顯示設定值必須小於或等於車輛顯示設定值。在本例中,折線的剩餘停止門檻設為 3,小於車輛指定的 5。也就是說,當追蹤的行程距離工作地點還有 5 站時,車輛就會顯示在畫面上,但車輛路線要到行程距離工作地點還有 3 站時才會顯示。
```js
"taskTrackingViewConfig": {
"routePolylinePointsVisibility": {
"remainingStopCountThreshold": 3
},
"vehicleLocationVisibility": {
"remainingStopCountThreshold": 5
},
}
```
路線折線和車輛位置指定不同的顯示選項
如果路線折線和車輛位置的顯示選項不同,則只有在兩者的顯示選項都符合條件時,車輛位置才會顯示。同樣地,折線的顯示設定會受到車輛顯示規則的影響:
- 一律顯示:如果車輛位置也提供「一律顯示」可見度選項,路線折線就必須使用「一律顯示」可見度選項。
- 永不顯示:如果車輛位置使用「永不顯示」顯示選項,路線折線就必須使用「永不顯示」顯示選項。
範例如下:
"taskTrackingViewConfig": {
"routePolylinePointsVisibility": {
"remainingStopCountThreshold": 3
},
"vehicleLocationVisibility": {
"remainingDrivingDistanceMetersThreshold": 3000
},
}
在這個範例中,只有在剩餘停靠次數至少為 3 且剩餘行車距離至少為 3000 公尺時,才會顯示車輛位置。
自訂工作瀏覽權限的範例
以下範例說明如何設定工作,並套用下列顯示規則:
- 如果車輛在 3 個停靠站內,則顯示路線折線。
- 如果剩餘行車距離少於 5000 公尺,則顯示預計抵達時間。
- 一律不顯示剩餘停靠站數。
- 其他欄位則會保留預設瀏覽權限,也就是車輛距離工作地點 5 個停靠站時顯示。
請參閱 gRPC 或 REST 的 TaskTrackingViewConfig
。
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