Membuat tugas pengiriman

Dokumen ini mengasumsikan bahwa Anda telah membaca panduan pengantar tentang Tugas terjadwal di bagian Pengantar Fleet Engine serta Apa itu tugas terjadwal? di bagian ini.

Fleet Engine untuk tugas terjadwal menyediakan berbagai kategori tugas yang luas:

  • Tugas pengiriman: Gunakan untuk tugas mengemudi, termasuk pengambilan dan pengiriman kiriman.
  • Tugas tidak tersedia: Gunakan untuk waktu saat pengemudi tidak tersedia, seperti saat istirahat wajib.
  • Tugas berhenti terjadwal: Digunakan untuk tugas non-mengemudi di lokasi pelanggan atau tempat pengambilan paket, seperti waktu untuk memasuki gedung atau menemukan titik pengiriman.

Dokumen ini membahas cara membuat tugas pengiriman di server Anda. Untuk jenis tugas lainnya, lihat Membuat jenis tugas lainnya.

Kolom tugas pengiriman

Bagian ini mendokumentasikan kolom tugas yang diperlukan untuk tugas pengambilan dan pengantaran.

Kolom tugas yang wajib diisi

Untuk setiap tugas yang Anda buat di Fleet Engine, Anda harus memberikan kolom yang diperlukan, dan juga dapat memberikan kolom opsional. Fleet Engine mengabaikan semua kolom lainnya, dan akan memunculkan pengecualian jika permintaan pembuatan tugas menyediakan deliveryVehicleId yang ditetapkan. Untuk menetapkan tugas ke kendaraan, gunakan UpdateDeliveryVehicleRequest. Untuk mengetahui informasi selengkapnya, lihat Memperbarui tugas.

KolomNilai
type

Ditetapkan ke jenis yang cocok dengan jenis tugas, yaitu salah satu dari:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id ID tugas unik. Ini tidak boleh berupa nomor pelacakan pengiriman. Jika Anda tidak memiliki ID tugas di sistem, Anda dapat membuat ID unik universal (UUID). Untuk mengetahui spesifikasinya, lihat ID Tugas.
tracking_id Hanya tugas PICKUP atau DELIVERY: Nomor atau ID yang Anda gunakan untuk melacak pengiriman. Jangan memberikan kolom ini untuk tugas non-pengiriman.
planned_location Tugas PICKUP, DELIVERY, atau SCHEDULED_STOP saja: Lokasi tempat tugas harus diselesaikan. Tidak diperlukan untuk tugas UNAVAILABLE.
task_duration Perkiraan waktu yang dibutuhkan untuk menyelesaikan tugas. Misalnya, untuk mencari tempat parkir, atau berjalan ke lokasi penyerahan.

Kolom tugas pengiriman opsional

KolomNilai
target_time_window Periode waktu saat tugas harus diselesaikan. Kolom ini tidak memengaruhi perilaku perutean.
task_tracking_view_config PICKUP atau DELIVERY saja: Konfigurasi untuk pelacakan tugas yang menentukan elemen data mana yang dapat dilihat oleh pengguna akhir dalam keadaan apa pun.
attributes Daftar atribut tugas kustom. Setiap atribut harus memiliki kunci unik.

Membuat tugas pengambilan kiriman

Untuk menggunakan Fleet Engine guna memantau aktivitas pengemudi yang mengambil kiriman, buat tugas pengambilan kiriman. Hal ini melibatkan penetapan atribut jenis tugas ke PICKUP. Contoh berikut menggambarkan pengambilan kiriman dari Grand Indonesia East Mall.

Contoh berikut menunjukkan cara membuat tugas pengambilan kiriman menggunakan library gRPC Java atau cara membuat permintaan HTTP REST ke 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

Untuk membuat tugas pengambilan kiriman dari lingkungan server, lakukan panggilan HTTP REST ke CreateTask:

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

<id> adalah ID unik untuk tugas.

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> dikeluarkan oleh server Anda sesuai dengan panduan yang dijelaskan dalam Peran akun layanan dan Token Web JSON.

Isi permintaan harus berisi entitas Task dengan kolom yang sesuai yang dijelaskan dalam Kolom tugas pengiriman.

Contoh perintah 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

Membuat tugas pengiriman

Untuk menggunakan Fleet Engine guna memantau aktivitas pengemudi yang mengirimkan pengiriman, buat tugas pengiriman. Hal ini melibatkan penetapan atribut jenis tugas ke DELIVERY. Contoh berikut mengilustrasikan pengiriman ke Grand Indonesia East Mall.

Contoh berikut menunjukkan cara membuat tugas pengambilan kiriman menggunakan library gRPC Java atau cara membuat permintaan HTTP REST ke 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

Untuk membuat tugas pengambilan kiriman dari lingkungan server, lakukan panggilan HTTP REST ke CreateTask:

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

<id> adalah ID unik untuk tugas.

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> dikeluarkan oleh server Anda sesuai dengan panduan yang dijelaskan dalam Peran akun layanan dan Token Web JSON.

Isi permintaan harus berisi entitas Task:

Contoh perintah 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
 ```

Langkah berikutnya