配送タスクを作成する

このドキュメントは、次の入門ガイドをお読みになったことを前提としています。 「Fleet Engine の概要」セクションのスケジュールされたタスク このセクションの「スケジュールされたタスクとは」をご覧ください。

スケジュール設定されたタスク用の Fleet Engine には、さまざまな種類のタスクが用意されています。

  • 配送タスク: 配送の集荷や配達などの運転タスクに使用します。
  • Unavailability Tasks: ドライバが利用できない場合に使用されます。 必要があります。
  • スケジュール設定された停止タスク: ドロップ ボックスまたは顧客での運転以外のタスクに使用します。 特定の場所(建物に入るまでの時間、配達場所の検索時間など)を記録します。

このドキュメントでは、サーバー上で配送タスクを作成する方法について説明します。その他の 他のタスクタイプを作成するをご覧ください。

配送タスクのフィールド

このセクションでは、集荷タスクと配達タスクの両方に必要なタスクフィールドについて説明します。

タスクの必須項目

Fleet Engine でタスクを作成するたびに、必要な権限が付与されている必要があります。 任意のフィールドを指定できます。Fleet Engine は他のすべてのフィールドを無視し、タスク作成リクエストで割り当てられた deliveryVehicleId が指定されている場合は例外をスローします。車両にタスクを割り当てるには、 UpdateDeliveryVehicleRequest を使用します。詳細については、次をご覧ください: タスクを更新する

フィールド
type

タスクタイプと一致するタイプに設定します。次のいずれかです。

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id 一意のタスク ID。荷物の荷物追跡番号は使用しないでください。もし タスク ID がない場合、ユニバーサルな一意の ID を あります。詳細については、以下をご覧ください。 タスク ID
tracking_id PICKUP タスクまたは DELIVERY タスクのみ: 配送の追跡に使用する番号または ID。配送以外のタスクにはこのフィールドを使用しないでください。
plannedLocation PICKUPDELIVERY、または SCHEDULED_STOP タスクのみ: タスクを実行する場所を指定します。必須ではない UNAVAILABLE 件のタスク。
taskDuration タスクの完了に追加にかかると予想される時間。たとえば、駐車場を探したり、受け渡し場所まで歩いたりするなどです。

配送タスクのオプション フィールド

フィールド
targetTimeWindow タスクを完了する時間枠。このフィールド ルーティング動作に影響しません。
task_tracking_view_config PICKUP タスクまたは DELIVERY タスクのみ: タスク トラッキング用の構成で、どのデータ要素を指定するか エンドユーザーに対してどのような状況で公開されるのかを 確認できます
attributes カスタムタスク属性のリスト。各属性には一意のキーが必要です。

配送集荷タスクを作成する

Fleet Engine を使用して荷物を受け取るドライバーの行動を追跡するには、 受け取りタスクを作成します。これには、タスクタイプ属性を PICKUP。次の例は、Grand Indonesia East Mall からの配送集荷を示しています。

次の例は、Google Cloud Storage バケットを使用して Java gRPC ライブラリまたは HTTP REST リクエストの送信方法 CreateTask

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Task settings
  String parent = "providers/" + PROJECT_ID;
  Task task = Task.newBuilder()
    .setType(Task.Type.PICKUP)
    .setState(Task.State.OPEN)
    .setTrackingId("my-tracking-id")
    .setPlannedLocation(               // Grand Indonesia East Mall
      LocationInfo.newBuilder().setPoint(
        LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
    .setTaskDuration(
      Duration.newBuilder().setSeconds(2 * 60))
    .setTargetTimeWindow(
      TimeWindow.newBuilder()
        .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
        .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
    .addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
    .addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
    .addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
    .build();

  // Task request
  CreateTaskRequest createTaskRequest =
    CreateTaskRequest.newBuilder()  // No need for the header
        .setParent(parent)          // Avoid using auto-incrementing IDs for the taskId
        .setTaskId("task-8241890")  // Task ID assigned by the Provider
        .setTask(task)              // Initial state
        .build();

  // Error handling
  // If Fleet Engine does not have a task with that ID and the credentials of the
  // requestor pass, the service creates the task successfully.

  try {
    Task createdTask = deliveryService.createTask(createTaskRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case ALREADY_EXISTS:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }

REST

サーバー環境からの配送集荷タスクを作成するには、HTTP REST を使用する CreateTask への呼び出し:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>

&lt;id&gt; は、タスクの一意の識別子です。

リクエスト ヘッダーには、次の値を含む Authorization フィールドが含まれている必要があります。 Bearer <token>: ここで、<token> はサーバーによって発行されます。 サービス アカウントのロールJSON Web できます

リクエストの本文には、適切なフィールドを持つ Task エンティティを含める必要があります。 配送タスクのフィールドをご覧ください。

curl コマンドの例:

 # Set $JWT, $PROJECT_ID, $TRACKING_ID, and $TASK_ID in the local
 # environment
 curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "type": "PICKUP",
   "state": "OPEN",
   "trackingId": "${TRACKING_ID}",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "90s",
   "targetTimeWindow": {
     "startTime": "2023-03-29T21:00:00Z",
     "endTime": "2023-03-29T23:00:00Z"
   }
 }
 EOM

配送タスクを作成する

Fleet Engine を使用して荷物を配達するドライバーの活動を追跡するには、 配送タスクを作成します。これには、タスクタイプ属性の設定が含まれます。 DELIVERY に送信します。次の例は、Grand Indonesia East Mall への配送を示しています。

次の例は、Google Cloud Storage バケットを使用して Java gRPC ライブラリまたは HTTP REST リクエストの送信方法 CreateTask

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Task settings
  String parent = "providers/" + PROJECT_ID;
  Task task = Task.newBuilder()
    .setType(Task.Type.DELIVERY)
    .setState(Task.State.OPEN)
    .setTrackingId("my-tracking-id")
    .setPlannedLocation(               // Grand Indonesia East Mall
      LocationInfo.newBuilder().setPoint(
        LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
    .setTaskDuration(
      Duration.newBuilder().setSeconds(2 * 60))
    .setTargetTimeWindow(
      TimeWindow.newBuilder()
        .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
        .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
    .addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
    .addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
    .addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
    .build();

  // Task request
  CreateTaskRequest createTaskRequest =
    CreateTaskRequest.newBuilder()  // No need for the header
        .setParent(parent)          // Avoid using auto-incrementing IDs for the taskId
        .setTaskId("task-8241890")  // Task ID assigned by the Provider
        .setTask(task)              // Initial state
        .build();

  // Error handling
  // If Fleet Engine does not have task with that ID and the credentials of the
  // requestor pass, the service creates the task successfully.

  try {
    Task createdTask = deliveryService.createTask(createTaskRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case ALREADY_EXISTS:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }

REST

サーバー環境からの配送集荷タスクを作成するには、HTTP REST を使用する CreateTask への呼び出し:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>

&lt;id&gt; は、タスクの一意の識別子です。

リクエスト ヘッダーには、次の値を含む Authorization フィールドが含まれている必要があります。 Bearer <token>: ここで、<token> はサーバーによって発行されます。 サービス アカウントのロールJSON Web できます

リクエストの本文には Task エンティティを含める必要があります。

curl コマンドの例:

 # Set $JWT, $PROJECT_ID, $TRACKING_ID, and $TASK_ID in the local
 # environment
 curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "type": "DELIVERY",
   "state": "OPEN",
   "trackingId": "${TRACKING_ID}",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "90s",
   "targetTimeWindow": {
     "startTime": "2023-03-29T21:00:00Z",
     "endTime": "2023-03-29T23:00:00Z"
   }
 }
 EOM
 ```

次のステップ