Dokumen ini mengasumsikan bahwa Anda telah membaca panduan pengantar [Tugas terjadwal][1] di bagian Pengantar Fleet Engine serta [Apa yang dimaksud dengan tugas terjadwal?][2] di bagian ini.
Fleet Engine untuk tugas terjadwal menyediakan berbagai kategori tugas yang luas:
- Tugas pengiriman: Gunakan untuk tugas mengemudi, termasuk pengambilan dan pengiriman paket.
- Tugas ketidaktersediaan: Gunakan untuk waktu saat pengemudi tidak tersedia, seperti saat istirahat yang diperlukan.
- Tugas perhentian terjadwal: Gunakan untuk tugas non-mengemudi di kotak pengiriman atau lokasi pelanggan, seperti waktu untuk memasuki bangunan 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 pengiriman.
Kolom tugas wajib diisi
Untuk setiap tugas yang Anda buat di Fleet Engine, Anda harus memberikan kolom wajib diisi, dan juga dapat memberikan kolom opsional. Fleet Engine
mengabaikan semua kolom lainnya, dan menampilkan pengecualian jika permintaan pembuatan tugas
memberikan deliveryVehicleId yang ditetapkan. Untuk menetapkan tugas ke kendaraan,
gunakan UpdateDeliveryVehicleRequest. Untuk mengetahui informasi selengkapnya, lihat
Mengupdate tugas.
| Kolom | Nilai |
|---|---|
type |
Tetapkan ke jenis yang cocok dengan jenis tugas, yang merupakan salah satu dari:
|
state |
State.OPEN |
task_id |
ID tugas unik. Nomor ini tidak boleh berupa nomor pelacakan untuk pengiriman. Jika tidak memiliki ID tugas dalam sistem, Anda dapat membuat ID unik universal (UUID). Untuk mengetahui detailnya, lihat ID Tugas. |
tracking_id |
Khusus tugas PICKUP atau DELIVERY:
Nomor atau ID yang Anda gunakan untuk melacak pengiriman. Jangan
berikan kolom ini untuk tugas non-pengiriman. |
planned_location |
Khusus tugas PICKUP, DELIVERY, atau
SCHEDULED_STOP: Lokasi
tempat tugas akan diselesaikan. Tidak diperlukan untuk tugas UNAVAILABLE. |
task_duration |
Perkiraan waktu yang ditambahkan untuk menyelesaikan tugas. Misalnya, untuk mencari tempat parkir, atau berjalan ke lokasi penyerahan. |
Kolom tugas pengiriman opsional
| Kolom | Nilai |
|---|---|
target_time_window |
Rentang waktu saat tugas harus diselesaikan. Kolom ini tidak memengaruhi perilaku perutean. |
task_tracking_view_config |
Khusus tugas PICKUP atau DELIVERY:
Konfigurasi untuk pelacakan tugas yang menentukan elemen data mana yang dapat dilihat oleh pengguna akhir dalam situasi tertentu. |
attributes |
Daftar atribut tugas kustom. Setiap atribut harus memiliki kunci unik. |
Membuat tugas pengambilan pengiriman
Untuk menggunakan Fleet Engine guna mengikuti aktivitas pengemudi yang mengambil pengiriman,
buat tugas pengambilan pengiriman. Hal ini melibatkan penetapan atribut jenis tugas ke
PICKUP. Contoh berikut mengilustrasikan pengambilan pengiriman dari Grand
Indonesia East Mall.
Contoh berikut menunjukkan cara membuat tugas pengambilan pengiriman menggunakan
[library gRPC Java][4] atau cara membuat permintaan HTTP REST ke
[CreateTask][5].
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 pengiriman 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][6] dan [Token Web JSON][7].
Isi permintaan harus berisi entity Task dengan kolom yang sesuai
yang dijelaskan dalam [Kolom tugas pengiriman][8].
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"
}
}
EOMMembuat tugas pengiriman paket
Untuk menggunakan Fleet Engine guna mengikuti aktivitas pengemudi yang mengirimkan pengiriman,
buat tugas pengiriman paket. 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 pengiriman menggunakan
[library gRPC Java][4] atau cara membuat permintaan HTTP REST ke
[CreateTask][5].
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 pengiriman 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][6] dan [Token Web JSON][7].
Isi permintaan harus berisi entity 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
```placeidtrips1: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#locationinfo placeidtrips2: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html placeidtrips3: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#maps.fleetengine.delivery.v1.LocationInfo.FIELDS.string.maps.fleetengine.delivery.v1.LocationInfo.place placeidtrips4: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html#FIELDS.place
Langkah berikutnya
- [Membuat jenis tugas lainnya][13]
- [Memperbarui tugas][3]
[1]: /maps/documentation/mobility/fleet-engine/essentials/tasks-intro [2]: /maps/documentation/mobility/fleet-engine/journeys/tasks [3]: update-tasks [4]: /maps/documentation/mobility/fleet-engine/essentials/client-libraries-tasks#java [5]: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/providers.tasks/create [6]: /maps/documentation/mobility/fleet-engine/essentials/set-up-fleet/service-accounts [7]: /maps/documentation/mobility/fleet-engine/essentials/set-up-fleet/jwt [8]: /maps/documentation/mobility/fleet-engine/journeys/tasks/create-shipment-tasks#shipment_task_fields [13]: /maps/documentation/mobility/fleet-engine/journeys/tasks/create-other-tasks