このドキュメントでは、タスクの作成方法と使用方法を理解していることを前提としています。次の方法で配送タスクを構成する具体的な例を示します。
配送タスクのターゲット時間枠を設定する: タスクが完了する時間枠を設定します。
タスクの可視性をカスタマイズする: 顧客やフリート オペレーターに表示するタスク アクティビティの可視性をカスタマイズします。
配送タスクのフィールドの詳細については、配送タスクを作成するをご覧ください。既存のタスクに関する追加情報を更新する場合は、タスクの更新対象のフィールドに加えて、タスクの関連する識別子も指定する必要があります。
目標時間枠を設定する
ターゲット時間枠は、タスクを完了する必要がある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> はタスクの一意の識別子です。リクエスト ヘッダーには、値が Bearer <token> の Authorization フィールドが含まれている必要があります。ここで、<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 はタスク アクティビティの可視性を提供します。これにより、荷物を受け取るお客様と荷物を追跡するフリート オペレーターの両方にタスク アクティビティを表示できます。たとえば、荷物の配送状況に関する通知をお客様に送信する前に、経由地の数を示す情報などがあります。この情報は、ビジネスモデルに合わせてタスクごとにカスタマイズできます。
このセクションでは、地図上の追跡対象物の表示ルールについて説明します。これらのルールは、次の 2 つのカテゴリのオブジェクトに適用されます。
- 位置マーカーの表示設定
 - アクティブな車両タスクのタスクデータ(ポリラインや到着予定時刻など)の可視性
 
位置マーカーの表示ルール
Fleet Engine は、配達のステータスに関係なく、地図に表示される荷物の配達場所の位置マーカーを表示します。
タスクデータの可視性ルール
このセクションでは、タスクデータに適用されるデフォルトの可視性ルールについて説明します。カスタマイズできるのはアクティブな車両タスクのみです。つまり、カスタマイズされた公開設定ルールを適用できるのは、集荷タスクと配達タスクのみです。
次のタスクはカスタマイズできません。
- スケジュール設定された停止
 - 利用不可タスク
 - 無効な車両タスク
 
Unavailability タスクの公開設定ルール
デフォルトでは、追跡中のタスクに 1 つ以上の利用不可タスクが割り当てられている場合、車両は地図に表示されません。たとえば、ドライバーが休憩中である場合や、追跡対象の荷物の配送ルートで車両に燃料を補給している場合などです。到着予定時刻とタスク完了予定時刻は引き続きご利用いただけます。このルールはカスタマイズできません。
アクティブな車両タスクの可視性
TaskTrackingInfo オブジェクトは、配送状況トラッキング ライブラリを使用して表示できるデータ要素をいくつか提供します。デフォルトでは、これらのフィールドは、タスクが車両に割り当てられたときと、車両がタスクの 5 停車地以内にいるときに表示されます。タスクが完了またはキャンセルされると、可視性は終了します。
Fleet Engine 内でタスクを作成または更新するときにタスクの TaskTrackingViewConfig を設定することで、タスクごとに公開設定をカスタマイズできます。これにより、個々のデータ要素が利用可能になるルールが作成されます。
次の表に、表示ルールを適用できるフィールドを示します。
| 可視性ルールの車両タスク フィールド | 
|---|
      
  | 
  
次の表に、上記のフィールドで使用できる公開設定オプションを示します。
| 公開設定オプション | 
|---|
      
  | 
  
ルートのポリラインと車両の位置の公開設定ルール
追跡されたルートの場合、ルート ポリラインの可視性は車両の可視性の影響を受けます。車両が表示されていないアクティブなルートにルートのポリラインが表示されている場合でも、表示されているポリラインの終点から車両の位置を推測できます。そのため、ルート ポリラインの可視性は、車両の可視性と同じか、それよりも制限的である必要があります。
有効なルート ポリラインと車両位置の可視性の組み合わせを指定するには、次のルールに従ってください。
ルートのポリラインと車両の位置情報で同じ可視性オプションを指定する
このシナリオでは、ポリラインと車両の位置の両方で同じオプションが設定されます。これには次のオプションが含まれます。
- 残りの停車回数
 - ETA までの期間
 - 残りの運転距離
 
ルールを遵守するには、ルート ポリラインの可視性の値が、車両の可視性に設定された値以下である必要があります。この例では、ポリラインの残りの停止しきい値が 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 つの停車地の範囲内にある場合に表示されるというデフォルトの可視性を保持します。
 
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