タスクの確定

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

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

  • タスクの結果を設定する: タスクが閉じたら、 結果を SUCCEEDED または FAILED に設定して完了します。これは、配送状況の共有で配送結果を表示し、Fleet Engine サービスの正しい請求を確保するために、タスクを完了するうえで重要な部分です。

タスクを閉じる

タスクを閉じるには、次の方法があります。

  • 車両の停止ステータスを更新する 。車両から停止を削除すると、その停止に関連付けられているすべてのタスクが閉じられます。詳細については、 停止ステータスを更新するをご覧ください。
  • 車両の停止リストからタスクを削除する 。これには、停止のタスクリストを更新しますが、閉じたタスクはリストに含まれません。タスクの更新でタスクの順序を更新するをご覧ください。
  • タスクの状態を CLOSEDに設定する。これは、車両に割り当てられていないタスクでのみ可能です。このセクションでは、この方法について説明します。

タスクを閉じると、再度開くことはできません。

タスクを閉じても、成功か失敗かは示されません 。タスクが進行中とみなされなくなったことを示します。タスクの実際の結果を示し、Fleet Tracking と配送状況の共有で表示するには、タスクの実際の結果を示す必要があります。詳しくは、後述の タスクの結果を設定するをご覧ください。

タスクを閉じるためのタスク フィールド

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

必須項目
state State.CLOSED

タスクを直接閉じる

次の例は、割り当てられていないタスクを閉じた状態に設定する方法を示しています。gRPC または HTTP REST リクエスト呼び出し UpdateTask を使用します。

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

  • <id> はタスクの一意の識別子です。
  • リクエスト ヘッダーには、値が Bearer <token>Authorizationフィールドが含まれている必要があります。ここで、<token>は、サービス アカウントのロールJSON ウェブトークンに記載されているガイドラインに従ってサーバーによって発行されます。
  • リクエスト本文に 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 の配送タスクに対してのみ課金します。

タスクの結果の詳細

タスクには、タスクの結果に関する追加の詳細情報も用意されています。これらは直接設定でき、Fleet Engine は設定を尊重します。

  • タスクの結果のロケーション: 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 ライブラリと HTTP REST 呼び出し UpdateTask を使用して、タスクの結果を 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> はタスクの一意の識別子です。
  • リクエスト ヘッダーには、値が 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

次のステップ