設定工作

本文假設您瞭解如何建立及使用工作。並提供具體範例,說明如何透過下列方式設定出貨工作:

  • 設定貨運工作的目標時間範圍:設定完成工作的時間範圍。

  • 自訂工作顯示設定:自訂工作活動的顯示設定,供顧客或車隊營運人員查看。

如要進一步瞭解出貨工作欄位,請參閱「建立出貨工作」。 更新現有工作的其他資訊時,除了要更新工作的欄位,也必須一併加入工作的相關 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 個停靠站時顯示。

請參閱 gRPCRESTTaskTrackingViewConfig

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

後續步驟