タスクの確定

このドキュメントは、タスクの作成と使用方法を理解していることを前提としています。以下に、配送タスクを完了する方法の具体的な例を示します。

  • タスクをクローズする: 配送タスクをクローズすると、ステータスが CLOSED に変わり、そのタスクがアクティブでなくなったことを示します。

  • タスクの結果を設定する: タスクが終了したら、結果を SUCCEEDED または FAILED に設定してタスクを完了します。これは、ジャーニー共有で配送結果を表示し、Fleet Engine サービスの正しい課金を確保するために、タスクを完了する際の重要な部分です。

タスクを閉じる

タスクを閉じる方法は次のとおりです。

  • 車両の停止ステータスを更新する。車両から停車地を削除すると、停車地に関連付けられているタスクがすべて終了します。詳しくは、更新停止ステータスをご覧ください。
  • 車両停留所のリストからタスクを削除します。これには、停車地のタスクのリストの更新が含まれますが、終了したタスクはリストに含まれなくなります。タスクを更新するの「タスクの順序を更新する」をご覧ください。
  • タスクのステータスを CLOSED に設定します。これは、車両に割り当てられていないタスクに対してのみ実行できます。このセクションでは、このアプローチについて説明します。

一度閉じたタスクは、再開できません。

タスクの終了は、タスクの成功または失敗を示すものではありません。タスクが進行中と見なされなくなったことを示します。タスクの実際の結果を示すには、タスクの実際の結果を示す必要があります。また、フリート トラッキングとルート共有の目的で、その結果を表示することもできます。以下のタスクの結果を設定するをご覧ください。

タスクをクローズするためのタスク フィールド

このセクションでは、タスクをクローズする際に設定する必要があるフィールドについて説明します。更新の際に、エンティティ内の他のフィールドはすべて無視されます。

必須項目
state State.CLOSED

タスクを直接閉じる

次の例は、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)
   .setState(Task.State.CLOSED) // You can only directly CLOSE a
   .build();                    // task that is NOT assigned to a vehicle.

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("state"))
       .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

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=state

  • &lt;id&gt; は、タスクの一意の識別子です。
  • リクエスト ヘッダーには、値が Bearer <token>Authorization フィールドを含める必要があります。ここで、<token> は、サービス アカウントのロールJSON Web Token で説明されているガイドラインに従ってサーバーが発行します。
  • リクエストの本文には Task エンティティを含める必要があります。

curl コマンドの例:

 # 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=state,taskOutcome,taskOutcomeTime" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "state": "CLOSED",
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
 }
 EOM

タスクの結果を設定する

タスクの実際の結果を示すには、クローズされたタスクの結果を SUCCEEDED または FAILED に設定します。結果を設定する前に、タスクを終了する必要があります。Fleet Engine では、状態が SUCCEEDED の配信タスクに対してのみ課金されます。

タスクの結果の詳細

[Tasks] では、タスクの結果に関する追加の詳細も提供されます。これらの設定は直接設定でき、Fleet Engine は設定を尊重します。

  • タスクの結果の場所: タスクの結果の場所には、車両の直近の位置情報が自動的に入力されます。必要に応じて、代わりにこの値を指定できます。
  • タスクの結果時間: Fleet Engine はこのフィールドに値を入力することはありませんが、ユーザーが設定できます。

task_outcome_locationtask_outcome_time を設定するには、次のいずれかの方法を使用できます。

  • タスクの結果を設定する同じリクエストで更新します。
  • タスクの結果を設定した後に、後で更新する。
  • 設定後に再度変更する。

Fleet Engine は、タスクの結果に関連する次の更新を防止します。

  • SUCCEEDED または FAILED設定したタスクの結果は変更できません
  • 結果が設定されていないタスクのタスク結果の場所や結果の時間を設定することはできません

結果を設定するためのタスク フィールド

このセクションでは、タスクの結果を設定するときに設定する必須フィールドとオプション フィールドについて説明します。更新の際に、Fleet Engine はエンティティの他のフィールドを無視します。

必須項目
taskOutcome Outcome.SUCCEEDED または Outcome.FAILED

省略可能項目
taskOutcomeLocation タスクが完了した場所。設定しない場合、Fleet Engine はデフォルトで最後に記録された車両の位置を設定します。
taskOutcomeTime タスクが完了したとき刻。

タスクの結果の例

次の例は、Java gRPC ライブラリUpdateTask への HTTP REST 呼び出しを使用して、タスクの結果を SUCCEEDED に設定し、タスクが完了したロケーションを設定する方法を示しています。

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)
   .setTaskOutcome(TaskOutcome.SUCCEEDED)
   .setTaskOutcomeTime(now())
   .setTaskOutcomeLocation(               // Grand Indonesia East Mall
     LocationInfo.newBuilder().setPoint(
       LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
   .build();

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("task_outcome", "task_outcome_time", "task_outcome_location"))
       .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

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation

  • <id> はタスクの一意の ID です。
  • リクエスト ヘッダーには、値が Bearer <token>Authorization フィールドが含まれている必要があります。ここで <token> は、サービス アカウントのロールJSON ウェブトークンで説明されているガイドラインに従って、サーバーによって発行されます。
  • リクエストの本文には Task エンティティを含める必要があります。
 # 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=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
   "taskOutcomeLocation": {
     "point": {
       "latitude": -6.195139,
       "longitude": 106.820826
     }
   }
 }
 EOM

次のステップ