Last Mile Fleet Solution is currently available only to select customers. Contact sales to learn more.

Mulai menggunakan Fleet Engine

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Fleet Engine Deliveries API memungkinkan Anda membuat model aktivitas armada untuk pengiriman pertama dan terakhir. Deliveries API diekspos melalui Driver SDK untuk Android dan iOS, dan juga dapat digunakan langsung melalui panggilan HTTP HTTP atau gRPC.

Penyiapan awal

Fleet Engine Deliveries API dikonfigurasi melalui Google Cloud Console. Untuk mengetahui informasi tentang langkah-langkah yang harus dilakukan di dalam konsol dan cara membuat Token Web JSON untuk otorisasi, lihat Autentikasi dan Otorisasi. Untuk mengetahui detail penggunaan konsol, lihat dokumentasi untuk Google Cloud Console.

Memverifikasi penyiapan Anda

Setelah membuat akun layanan, Anda harus memverifikasi bahwa penyiapan telah selesai dan Anda dapat membuat kendaraan pengiriman. Dengan melakukan verifikasi pada tahap alur kerja ini, Anda akan memastikan bahwa Anda telah mengatasi masalah otorisasi umum yang dapat muncul saat menyiapkan project. Ikuti panduan Memverifikasi penyiapan Anda. Panduan ini menyediakan detail cara menggunakan utilitas command line gcloud untuk menguji dua bagian penting dari penyiapan Anda: penandatanganan token otorisasi dan pembuatan kendaraan uji coba pengiriman.

Atau, Anda dapat menggunakan Contoh Skrip Auth Mesin Flat untuk menguji penyiapan.

Library Klien

Kami memublikasikan library klien dalam beberapa bahasa pemrograman umum. Library ini memberikan pengalaman developer yang lebih baik daripada REST atau gRPC mentah. Untuk petunjuk tentang cara mendapatkan library klien untuk aplikasi server, lihat Library Klien.

Contoh Java dalam dokumentasi ini menganggap Anda sudah memahami gRPC.

Struktur data

Deliveries API menggunakan dua struktur data untuk membuat model pengambilan dan pengiriman:

  • Kendaraan pengiriman yang digunakan untuk mengangkut pengiriman.
  • Tugas pengambilan dan pengiriman pengiriman.

Selain itu, Anda dapat menggunakan tugas untuk menyimulasikan jeda pengemudi dan perhentian terjadwal sepanjang hari.

Kendaraan pengiriman

Kendaraan pengiriman mengangkut pengiriman dari depot ke lokasi pengiriman, dan dari lokasi penjemputan ke depot. Dalam kasus tertentu, mereka juga dapat mengangkut pengiriman langsung dari lokasi pengambilan ke lokasi pengiriman.

Anda dapat menggunakan Driver SDK untuk membuat objek DeliveryVehicle di Fleet Engine dan mengirim pembaruan lokasi untuk pengiriman dan pelacakan armada.

Tasks

Setiap kendaraan memiliki tugas yang ditetapkan kepadanya. Hal ini dapat mencakup tugas pengambilan atau pengiriman, istirahat yang diperlukan untuk pengemudi, atau perhentian terjadwal di kotak turun atau lokasi pelanggan. Tugas pengambilan dan pengiriman kemungkinan ditetapkan ke kendaraan pengiriman yang berbeda. Setiap tugas harus memiliki ID tugas yang unik, tetapi dapat menggunakan ID pelacakan yang sama. Tugas dan urutan jadwal dijadwalkan digunakan untuk menghitung periode PWT untuk setiap tugas.

Menggunakan Driver SDK Task Manager untuk membuat tugas di Fleet Engine.

Tugas pengiriman

Tugas pengiriman berkaitan dengan pengambilan atau pengembalian. Anda harus menentukan nomor pelacakan atau ID saat membuat tugas pengiriman. Anda juga harus menentukan waktu diam untuk memperhitungkan waktu tambahan, guna menyelesaikan tugas, mencari tempat parkir, atau berjalan ke lokasi handoff.

  • Buat tugas pengambilan untuk mengambil pengiriman, dengan menentukan lokasi pengambilan dan nomor pelacakan atau ID.
  • Buat tugas pengiriman untuk pengiriman, dengan menentukan lokasi dan nomor pelacakan atau ID pengiriman.

Tugas tidak tersedia

Buat tugas ketidaktersediaan untuk jangka waktu saat kendaraan tidak akan tersedia untuk pengambilan atau pengiriman. Ini bisa menjadi jeda untuk mengisi bahan bakar kendaraan atau beristirahat bagi pengemudi. Tentukan durasi jeda saat Anda membuat tugas. Liburan tidak harus dilakukan di lokasi tertentu, tetapi menentukan lokasi akan memberikan periode PWT yang lebih akurat sepanjang hari.

Selama tugas ketidaktersediaan, tidak ada informasi lokasi yang dibagikan kepada pengguna akhir. Misalnya, lokasi kendaraan pengiriman disembunyikan dari pengelola armada menggunakan Library Pelacakan Armada.

Tugas penghentian terjadwal

Membuat tugas perhentian terjadwal untuk membuat model perhentian yang akan dilakukan oleh kendaraan pengiriman. Misalnya, Anda dapat membuat tugas perhentian terjadwal untuk perhentian pengumpulan harian yang dijadwalkan di lokasi tertentu, terlepas dari pengiriman atau pengambilan lainnya di lokasi yang sama. Anda juga dapat membuat tugas perhentian terjadwal untuk koleksi dari drop box, atau membuat model transfer kendaraan feeder atau perhentian di pusat layanan dan titik layanan.

Anda dapat melihat kolom tertentu yang terdapat dalam setiap struktur data dengan melihat dokumentasi Referensi API untuk DeliveryVehicle (gRPC, REST) dan Task (gRPC, REST).

Panduan ID Tugas

ID tugas harus unik dan tidak boleh mengungkapkan informasi identitas pribadi (PII) atau data teks yang jelas. ID tugas juga harus sesuai dengan persyaratan format berikut:

Berikut beberapa contoh ID Tugas yang baik:

  • 566c33d9-2a31-4b6a-9cd4-80ba1a0c643b
  • e4708eabcfa39bf2767c9546c9273f747b4626e8cc44e9630d50f6d129013d38
  • NTA1YTliYWNkYmViMTI0ZmMzMWFmOWY2NzNkM2Jk

Tabel berikut menunjukkan contoh ID Tugas yang rusak:

ID Tugas Buruk Alasan
31/8/2019-20:48-46.70746,-130.10807,-85.17909.61.33680 Melanggar persyaratan PII dan karakter: koma, titik, titik dua, dan garis miring.
JohnDoe-577b484da26f-Cupertino-SantaCruz Melanggar persyaratan PII.
4R0oXLToF”112 Musim Panas Dr. East Hartford, CT06118”577b484da26f8a Melanggar persyaratan PII dan karakter: spasi kosong, koma, dan tanda kutip. Lebih panjang dari 64 karakter.

Masa aktif kendaraan

Objek DeliveryVehicle mewakili kendaraan pengiriman mil pertama atau terakhir. Anda membuat objek DeliveryVehicle menggunakan:

  • Project ID dari project Google Cloud yang berisi akun layanan yang digunakan untuk memanggil Fleet Engine API.
  • ID kendaraan milik pelanggan.

ID kendaraan harus unik untuk setiap kendaraan. Fungsi ini tidak boleh digunakan kembali untuk kendaraan lain, kecuali jika tidak ada tugas aktif untuk kendaraan tersebut.

Pastikan untuk memeriksa error NOT_FOUND saat melakukan panggilan ke UpdateDeliveryVehicle, lalu jika perlu, panggil CreateDeliveryVehicle untuk membuat kendaraan baru. Objek DeliveryVehicle yang belum diperbarui menggunakan UpdateDeliveryVehicle akan dihapus secara otomatis setelah tujuh hari. Perhatikan bahwa memanggil CreateDeliveryVehicle dengan pasangan Project ID/ID Kendaraan yang sudah ada akan menghasilkan error.

Atribut kendaraan

Entitas DeliveryVehicle berisi kolom berulang DeliveryVehicleAttribute. Atribut ini tidak ditafsirkan oleh Fleet Engine. API ListDeliveryVehicles menyertakan kolom filter yang dapat membatasi entity DeliveryVehicle yang ditampilkan ke entity yang memiliki atribut yang ditentukan.

Meskipun kolom attributes buram bagi Fleet Engine, jangan sertakan informasi identitas pribadi atau informasi sensitif dalam atribut karena kolom ini dapat terlihat oleh pengguna.

Umur tugas

Tugas di Fleet Engine dapat dibuat, diperbarui, dan diinterogasi menggunakan Deliveries API gRPC atau antarmuka REST.

Objek Task memiliki kolom status untuk melacak progresnya melalui siklus prosesnya. Nilai akan berpindah dari TERBUKA ke TUTUP. Tugas baru dibuat dalam status TERBUKA, yang menunjukkan bahwa:

  • Tugas belum ditugaskan ke kendaraan pengiriman.
  • Kendaraan pengiriman belum melewati perhentian kendaraan yang ditetapkan untuk tugas.

Tugas hanya dapat ditetapkan ke kendaraan saat dalam status TERBUKA.

Tugas dapat dibatalkan dengan menghapusnya dari daftar perhentian kendaraan. Statusnya kemudian otomatis disetel ke TUTUP.

Saat kendaraan tugas menyelesaikan tugas berhenti kendaraan, perbarui kolom output tugas menjadi Eksekusi atau GAGAL dan tentukan stempel waktu peristiwa. Hasil tugas dapat ditetapkan kapan saja sebelum atau setelah tugas selesai, tetapi hanya dapat ditetapkan sekali.

Library Pelacakan Armada JavaScript kemudian dapat menunjukkan hasil tugas. Status tugas secara otomatis ditetapkan ke CLOSED. Untuk informasi selengkapnya, lihat Melacak Armada Anda dengan Library Pelacakan Armada JavaScript.

Seperti halnya kendaraan, tugas yang belum diperbarui setelah tujuh hari akan dihapus, dan upaya untuk membuat tugas dengan ID yang sudah ada akan menampilkan error.

Catatan: Fleet Engine tidak mendukung penghapusan tugas secara eksplisit. Layanan ini otomatis menghapus tugas setelah tujuh hari tanpa perubahan. Jika ingin menyimpan data tugas yang lebih lama dari tujuh hari, Anda harus menerapkan sendiri fungsi tersebut.

Mengintegrasikan Deliveries API

Anda dapat mengintegrasikan Deliveries API menggunakan model yang tidak tepercaya atau tepercaya, yang menentukan pembaruan yang dapat Anda lakukan menggunakan Driver SDK. Model yang tidak tepercaya lebih dipilih. Model tepercaya sedang dalam pratinjau.

Model tidak tepercaya

Dengan model yang tidak tepercaya, Anda menggunakan peran Fleet Engine Delivery Un Trusted Driver User untuk memberikan izin memperbarui lokasi kendaraan pengiriman. Token yang dikeluarkan oleh akun layanan dengan peran ini biasanya digunakan dari perangkat seluler pengemudi pengiriman Anda.

Model tidak tepercaya

Model tepercaya

Dengan model tepercaya, Anda menggunakan peran Pengguna Pengemudi Tepercaya Pengiriman Mesin Flare untuk memberikan izin guna membuat dan memperbarui kendaraan dan tugas pengiriman, termasuk memperbarui lokasi kendaraan pengiriman dan status atau hasil tugas. Token yang dikeluarkan oleh akun layanan dengan peran ini biasanya digunakan dari perangkat seluler pengemudi pengiriman Anda atau dari server backend Anda.

Model tepercaya

Untuk informasi selengkapnya tentang peran yang digunakan Solusi Armada Mil Terakhir Google Maps Platform untuk model tepercaya dan tidak tepercaya, lihat Penyiapan project Cloud.

Integrasi lengkap dari perangkat seluler hanya boleh dilakukan jika Anda memiliki dan mengelola perangkat tersebut. Hal ini memastikan bahwa kredensial tepercaya sepenuhnya. Kemudian, Anda dapat membuat kendaraan dan tugas langsung dari Driver SDK.

Catatan: Untuk alasan keamanan, token hanya boleh dibuat di server backend, lalu dibagikan dengan klien.

Pemodelan hari kerja

Tabel berikut menjelaskan tampilan hari kerja untuk pengemudi jarak jauh atau kilometer pertama mungkin di perusahaan pengiriman dan logistik. Perusahaan Anda mungkin berbeda dalam detailnya, tetapi Anda dapat melihat cara membuat model hari kerja.

WaktuAktivitasPemodelan
Dalam waktu 24 jam sejak awal hari Petugas operator menetapkan pengiriman ke kendaraan atau rute pengiriman. Tugas untuk pengiriman, pengambilan, jeda, dll. dapat dibuat di Fleet Engine terlebih dahulu. Misalnya, Anda dapat membuat tugas pengambilan pengiriman, tugas pengiriman, tidak tersedia terjadwal, atau berhenti terjadwal.

Tugas harus ditetapkan ke kendaraan setelah kumpulan paket pengiriman dan urutan pengirimannya telah diselesaikan.
Awal hari Pengemudi memulai hari di depot dengan login ke aplikasi Driver. Menginisialisasi Delivery Driver API. Membuat kendaraan pengiriman di Fleet Engine sesuai kebutuhan.
Pengemudi memuat pengiriman ke kendaraan pengiriman, memindai pengiriman. Jika tugas pengiriman tidak dibuat sebelumnya, buat tugas pengiriman pengiriman pada saat pemindaian.
Pengemudi mengonfirmasi urutan tugas yang akan dilakukan. Jika belum dibuat sebelumnya, buat tugas pengambilan pengiriman, ketidaktersediaan terjadwal, dan perhentian terjadwal.
Pengemudi meninggalkan depot dan melakukan commit ke jumlah tugas berikutnya yang akan dieksekusi. Menetapkan semua tugas atau subset tugas ke kendaraan dengan melakukan urutan eksekusinya.
Pengemudi mengirimkan pengiriman. Setelah tiba di perhentian pengiriman, lakukan tindakan yang terkait dengan kendaraan yang tiba di perhentian. Setelah pengiriman dikirimkan, tutup tugas pengiriman dan, secara opsional, status pengiriman toko serta informasi meta lainnya. Setelah menyelesaikan semua tugas di perhentian dan sebelum mulai mengemudi ke perhentian berikutnya, lakukan tindakan yang terkait dengan kendaraan menyelesaikan perhentian dan kendaraan menuju ke perhentian berikutnya.
Pengemudi bertemu kendaraan feeder untuk mentransfer pengiriman tambahan ke kendaraan pengiriman. Titik pertemuan untuk transfer antara kendaraan pengiriman dan kendaraan harus dimodelkan sebagai perhentian terjadwal.

Setelah mentransfer dan memindai pengiriman, buat tugas pengiriman jika belum dibuat. Kemudian, perbarui urutan eksekusi tugas dengan menetapkan tugas ke kendaraan dan memperbarui urutan tugas.
Pengemudi menerima notifikasi permintaan pengambilan. Setelah menerima permintaan pengambilan, buat tugas pengambilan pengiriman. Kemudian, perbarui urutan eksekusi tugas dengan menetapkan tugas ke kendaraan dan memperbarui urutan tugas.
Tengah hari Pengemudi istirahat makan siang. Jika lokasi dikaitkan dengan tugas ketidaktersediaan, perlakukan lokasi tersebut seperti tugas lainnya. Melakukan tindakan terkait kendaraan tiba di perhentian, kendaraan menyelesaikan perhentian dan kendaraan berangkat ke perhentian berikutnya.

Jika tidak, Anda tidak perlu melakukan tindakan lebih lanjut hingga akhir jeda. Hapus tugas dengan mengonfirmasi tugas berikutnya dan tugas yang tersisa, serta memperbarui urutan tugas.
Pengemudi mengambil pengiriman. Hal ini dimodelkan seperti perhentian pengiriman. Lakukan tindakan terkait kendaraan yang tiba di perhentian dan menutup tugas dan, secara opsional, menyimpan status pengiriman dan informasi meta lainnya. Setelah menyelesaikan semua tugas di perhentian dan sebelum mulai mengemudi ke perhentian berikutnya, lakukan tindakan yang terkait dengan kendaraan yang menyelesaikan perhentian dan kendaraan menuju ke perhentian berikutnya.
Pengemudi berhenti secara terjadwal untuk mengambil kiriman dari dekoder. Hal ini dimodelkan seperti perhentian pengambilan lainnya. Melakukan tindakan terkait kendaraan yang tiba di perhentian dan menutup tugas. Setelah menyelesaikan semua tugas di perhentian dan mulai mengemudi ke perhentian berikutnya, lakukan tindakan yang terkait dengan kendaraan yang menyelesaikan perhentian dan kendaraan akan dialihkan ke perhentian berikutnya.
Pengemudi menerima notifikasi bahwa pengiriman dialihkan ke lokasi alternatif. Tetapkan status tugas pengiriman pengiriman asli ke SELESAI dan buat tugas pengiriman pengiriman baru untuk lokasi pengiriman baru. Untuk informasi selengkapnya, lihat Merutekan ulang pengiriman.
Pengemudi berusaha mengirimkan paket tetapi tidak berhasil. Hal ini dimodelkan mirip dengan penghentian pengiriman yang berhasil, yang menandai tugas pengiriman sebagai selesai. Melakukan tindakan terkait kendaraan yang tiba di perhentian. Setelah gagal mengirimkan pengiriman, tutup tugas dan, secara opsional, status pengiriman toko dan informasi meta lainnya. Setelah menyelesaikan semua tugas di perhentian dan sebelum mulai mengemudi ke perhentian berikutnya, lakukan tindakan yang terkait dengan kendaraan yang menyelesaikan perhentian dan kendaraan menuju ke perhentian berikutnya.
Pengemudi diberi tahu untuk menangguhkan (tidak mengirimkan) pengiriman. Setelah notifikasi diterima dan dikonfirmasi, tetapkan status tugas ke SELESAI.
Pengemudi diberi tahu untuk mengirimkan pengiriman tertentu berikutnya, yang mengubah komitmen pengiriman. Perbarui urutan tugas.
Pengemudi memilih untuk mengirimkan pengiriman secara tidak berurutan. Perbarui pengurutan tugas, lalu lanjutkan seperti biasa.
Pengemudi mengirimkan beberapa pengiriman ke satu lokasi. Hal ini dimodelkan mirip dengan satu perhentian pengiriman. Setelah tiba di perhentian, lakukan tindakan yang terkait dengan kendaraan yang tiba di perhentian. Setelah mengirimkan setiap pengiriman, tutup setiap tugas dan, secara opsional, status pengiriman toko serta informasi meta lainnya. Setelah menyelesaikan semua tugas di perhentian dan sebelum mulai mengemudi ke perhentian berikutnya, lakukan tindakan yang terkait dengan kendaraan yang menyelesaikan perhentian dan kendaraan menuju ke perhentian berikutnya.
Akhir hari Pengemudi kembali ke depot. Tidak perlu pemodelan. Secara opsional, Anda dapat membuat perhentian terjadwal untuk depot. Selanjutnya, Anda dapat mengikuti kendaraan kembali ke depot dan mengetahui kapan kendaraan diperkirakan akan tiba.

Memahami pembaruan lokasi

Pembaruan lokasi dikirim ke Fleet Engine setelah kendaraan pengiriman dikirim dari perhentian (termasuk depot) hingga tiba di perhentian berikutnya. Karena peristiwa ini tidak terdeteksi secara otomatis, Anda harus menandainya secara terprogram. Menggunakan library yang mendeteksi perubahan dalam moda transportasi untuk memicu pengiriman notifikasi yang diperlukan ke Fleet Engine.

Pembaruan lokasi harus ditangguhkan saat pengemudi tidak mengemudi karena kualitas sinyal lokasi menurun secara drastis saat seseorang berada di dalam gedung.

Frekuensi pembaruan lokasi dapat disetel dalam Driver SDK. Setelan ini secara default mengirimkan pembaruan setiap 10 detik.

Perhentian kendaraan dan lokasi pengiriman

Perhentian kendaraan adalah tempat kendaraan pengiriman menyelesaikan tugas pengiriman atau tugas lainnya. Ini bisa berupa titik akses seperti dok pemuatan atau lokasi yang dipasukan jalan.

Lokasi pengiriman adalah lokasi tujuan pengiriman atau pengambilan. Mungkin perlu jalan kaki dari kendaraan kendaraan untuk mencapai dan tiba dari lokasi pengiriman.

Misalnya, saat pengemudi mengirimkan pengiriman ke toko di dalam mal, kendaraan pengiriman berhenti di tempat parkir pada mal di dekat pintu masuk terdekat ke toko. Ini perhentian kendaraan. Pengemudi kemudian berjalan dari halte kendaraan ke lokasi dalam mal tempat toko berada. Ini adalah lokasi pengiriman.

Untuk memberikan pengalaman pelacakan pengiriman yang terbaik bagi pengguna, pertimbangkan bagaimana tugas pengiriman ditetapkan ke perhentian kendaraan dan perhatikan bahwa jumlah penghenti kendaraan yang tersisa untuk tugas pengiriman telah dilaporkan kepada pengguna untuk membantu mereka melihat progres pengiriman.

Misalnya, jika pengemudi melakukan banyak pengiriman ke satu gedung kantor, pertimbangkan untuk menetapkan semua tugas pengiriman ke satu perhentian kendaraan. Jika setiap tugas pengiriman ditetapkan ke perhentian kendaraannya sendiri, pengalaman pelacakan pengiriman Anda akan kurang membantu bagi pengguna karena pelacakan hanya tersedia setelah kendaraan berada dalam sejumlah terbatas kendaraan. Sebelum tujuannya. Jika banyak perhentian kendaraan yang diselesaikan dalam waktu singkat, pengguna tidak akan memiliki banyak waktu untuk melacak progres pengirimannya.

Menggunakan SDK seluler

Sebelum melakukan panggilan apa pun ke Driver SDK, pastikan untuk menginisialisasinya.

Menginisialisasi Delivery Driver API

Sebelum menginisialisasi Delivery Driver API di Driver SDK, pastikan untuk menginisialisasi Navigation SDK. Kemudian, inisialisasi Delivery Driver API seperti yang ditunjukkan pada contoh berikut:

static final String PROVIDER_ID = "provider-1234";
static final String VEHICLE_ID = "vehicle-8241890";

NavigationApi.getNavigator(
   this, // Activity.
   new NavigatorListener() {
     @Override
     public void onNavigatorReady(Navigator navigator) {
       DeliveryDriverApi.createInstance(DriverContext.builder(getApplication())
         .setNavigator(navigator)
         .setProviderId(PROVIDER_ID)
         .setVehicleId(VEHICLE_ID)
         .setAuthTokenFactory((context) -> "JWT") // AuthTokenFactory returns JWT for call context.
         .setRoadSnappedLocationProvider(NavigationApi.getRoadSnappedLocationProvider(getApplication()))
         .setNavigationTransactionRecorder(NavigationApi.getNavigationTransactionRecorder(getApplication()))
         .setStatusListener((statusLevel,statusCode,statusMsg) -> // Optional, surfaces polling errors.
             Log.d("TAG", String.format("New status update. %s, %s, %s", statusLevel, statusCode, statusMsg)))
         .build));
     }

     @Override
     public void onError(int errorCode) {
       Log.e("TAG", String.format("Error loading Navigator instance: %s", errorCode));
     }
   });

Kasus penggunaan

Bagian ini menjelaskan cara menggunakan Deliveries API untuk membuat model kasus penggunaan umum.

Membuat kendaraan

Anda dapat membuat kendaraan dari Driver SDK atau dari lingkungan server.

gRPC

Untuk membuat kendaraan baru, Anda melakukan panggilan CreateDeliveryVehicle ke Fleet Engine. Gunakan objek CreateDeliveryVehicleRequest untuk menentukan atribut kendaraan pengiriman baru. Perhatikan bahwa nilai apa pun yang ditentukan untuk kolom Name akan diabaikan per panduan API untuk ID yang ditentukan pengguna. Anda harus menggunakan kolom DeliveryVehicleId untuk menetapkan ID kendaraan.

Saat membuat DeliveryVehicle, Anda dapat secara opsional menentukan dua kolom:

  • Atribut
  • Lokasi Terakhir

Semua kolom lainnya tidak boleh ditetapkan; jika tidak, Fleet Engine akan menampilkan error karena kolom tersebut bersifat hanya baca atau hanya dapat diperbarui melalui panggilan UpdateDeliveryVehicle.

Untuk membuat kendaraan tanpa menyetel kolom opsional, Anda dapat membiarkan kolom DeliveryVehicle tidak disetel di CreateDeliveryVehicleRequest.

Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk membuat kendaraan:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890"; // Avoid auto-incrementing IDs.

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String parent = "providers/" + PROJECT_ID;
DeliveryVehicle vehicle = DeliveryVehicle.newBuilder()
  .addAttributes(DeliveryVehicleAttribute.newBuilder()
    .setKey("route_number").setValue("1"))  // Opaque to the Fleet Engine
  .build();

// Vehicle request
CreateDeliveryVehicleRequest createVehicleRequest =
  CreateDeliveryVehicleRequest.newBuilder()  // No need for the header
      .setParent(parent)
      .setDeliveryVehicleId(VEHICLE_ID)     // Vehicle ID assigned by the Provider
      .setDeliveryVehicle(vehicle)
      .build();

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

try {
  DeliveryVehicle createdVehicle =
    deliveryService.createDeliveryVehicle(createVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case ALREADY_EXISTS:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Untuk membuat kendaraan dari lingkungan server, lakukan panggilan REST HTTP ke CreateDeliveryVehicle:

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

<id> adalah pengenal unik untuk kendaraan pengiriman di armada Anda.

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dibuat oleh factory token Fleet Engine.

Isi POST mewakili entity DeliveryVehicle yang akan dibuat. Anda dapat menentukan kolom opsional berikut:

  • atribut
  • lokasi terakhir

Contoh perintah curl:

# Set $JWT, $PROJECT_ID, and $VEHICLE_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles?deliveryVehicleId=${VEHICLE_ID}" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
  "attributes": [{"key": "model", "value": "sedan"}],
  "lastLocation": {"location": {"latitude": 12.1, "longitude": 14.5}}
}
EOM

Fleet Engine mengabaikan kolom name dari entitas DeliveryVehicle per panduan API untuk ID yang ditentukan pengguna. Semua kolom lainnya tidak boleh ditetapkan; jika tidak, Fleet Engine akan menampilkan error karena kolom tersebut bersifat hanya baca atau hanya dapat diperbarui melalui panggilan UpdateDeliveryVehicle.

Untuk membuat kendaraan tanpa menyetel kolom apa pun, Anda dapat mengosongkan isi permintaan POST. Kendaraan yang baru dibuat akan memiliki ID kendaraan yang diekstrak dari parameter deliveryVehicleId di URL POST.

Contoh perintah curl:

# Set $JWT, $PROJECT_ID, and $VEHICLE_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles?deliveryVehicleId=${VEHICLE_ID}" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}"

Membuat tugas pengambilan pengiriman

Anda dapat membuat tugas pengambilan pengiriman dari Driver SDK atau dari lingkungan server.

gRPC

Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk membuat tugas pengambilan pengiriman:

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))
  .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 REST HTTP ke `CreateTask':

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

<id> adalah ID unik untuk tugas tersebut. ID ini tidak boleh berupa nomor pelacakan untuk pengiriman. Jika tidak memiliki ID tugas di sistem, Anda dapat membuat ID unik universal (UUID).

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dibuat oleh factory token Fleet Engine.

Isi permintaan harus berisi entitas Task:

  • Kolom wajib diisi:

    KolomNilai
    jenis Jenis.PICKUP
    status Status.OPEN
    id pelacakan Nomor atau ID yang Anda gunakan untuk melacak pengiriman.
    terencanaLocation Lokasi tempat tugas diselesaikan, dalam hal ini lokasi pengambilan pengiriman.
    tugasDurasi Perkiraan waktu, dalam detik, yang diperlukan untuk mengambil pengiriman di lokasi pengambilan.

  • Kolom opsional:

    • None

Semua kolom lain dalam entity akan diabaikan untuk dibuat. Fleet Engine memunculkan pengecualian jika permintaan menyertakan deliveryVehicleId yang ditetapkan. Penetapan tugas dilakukan melalui UpdateVehicleRequests.

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"
}
EOM

Membuat tugas pengiriman pengiriman

Anda dapat membuat tugas pengiriman pengiriman dari Driver SDK atau dari lingkungan server.

gRPC

Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk membuat tugas pengiriman pengiriman:

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))
  .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 pengiriman pengiriman dari lingkungan server, lakukan panggilan REST HTTP ke `CreateTask':

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

<id> adalah ID unik untuk tugas tersebut. ID ini tidak boleh berupa nomor pelacakan untuk pengiriman. Jika tidak memiliki ID tugas di sistem, Anda dapat membuat ID unik universal (UUID).

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dibuat oleh factory token Fleet Engine.

Isi permintaan harus berisi entitas Task:

  • Kolom wajib diisi:

    KolomNilai
    jenis Jenis.PENGIRIMAN
    status Status.OPEN
    id pelacakan Nomor atau ID yang Anda gunakan untuk melacak pengiriman.
    terencanaLocation Lokasi tempat tugas diselesaikan, dalam hal ini lokasi pengiriman untuk pengiriman ini.
    tugasDurasi Waktu yang diperkirakan, dalam detik, untuk dalam proses pengiriman di lokasi pengiriman.

  • Kolom opsional:

    • None

Semua kolom lain dalam entity akan diabaikan untuk dibuat. Fleet Engine memunculkan pengecualian jika permintaan menyertakan deliveryVehicleId yang ditetapkan. Penetapan tugas dilakukan melalui UpdateVehicleRequests.

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"
}
EOM

Membuat Tugas Secara Batch

Anda dapat membuat batch tugas dari lingkungan server.

gRPC

Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk membuat dua tugas, satu untuk pengiriman dan satu lagi untuk pengambilan di lokasi yang sama:

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Delivery Task settings
Task deliveryTask = Task.newBuilder()
  .setType(Task.Type.DELIVERY)
  .setState(Task.State.OPEN)
  .setTrackingId("delivery-tracking-id")
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .build();

// Delivery Task request
CreateTaskRequest createDeliveryTaskRequest =
  CreateTaskRequest.newBuilder()  // No need for the header or parent fields
      .setTaskId("task-8312508")  // Task ID assigned by the Provider
      .setTask(deliveryTask)      // Initial state
      .build();

// Pickup Task settings
Task pickupTask = Task.newBuilder()
  .setType(Task.Type.PICKUP)
  .setState(Task.State.OPEN)
  .setTrackingId("pickup-tracking-id")
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .build();

// Pickup Task request
CreateTaskRequest createPickupTaskRequest =
  CreateTaskRequest.newBuilder()  // No need for the header or parent fields
      .setTaskId("task-8241890")  // Task ID assigned by the Provider
      .setTask(pickupTask)        // Initial state
      .build();

// Batch Create Tasks settings
String parent = "providers/" + PROJECT_ID;

// Batch Create Tasks request
BatchCreateTasksRequest batchCreateTasksRequest =
  BatchCreateTasksRequest.newBuilder()
      .setParent(parent)
      .addRequests(createDeliveryTaskRequest)
      .addRequests(createPickupTaskRequest)
      .build();

// Error handling
// If Fleet Engine does not have any task(s) with these task ID(s) and the
// credentials of the requestor pass, the service creates the task(s)
// successfully.

try {
  BatchCreateTasksResponse createdTasks = deliveryService.batchCreateTasks(
    batchCreateTasksRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case ALREADY_EXISTS:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Untuk membuat pengiriman dan tugas pengambilan dari lingkungan server, lakukan panggilan REST HTTP ke BatchCreateTasks:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks:batchCreate

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dibuat oleh factory token Fleet Engine.

Isi permintaan harus berisi entitas BatchCreateTasksRequest:

  • Kolom wajib diisi:

    KolomNilai
    permintaan Array<CreateTasksRequest>

  • Kolom opsional:

    KolomNilai
    header `DeliveryRequestHeader`

Setiap elemen CreateTasksRequest di requests harus meneruskan aturan validasi yang sama dengan permintaan CreateTask, dengan pengecualian bahwa kolom parent dan header bersifat opsional. Jika ditetapkan, nilai harus identik dengan kolom masing-masing di tingkat atas BatchCreateTasksRequest. Lihat membuat tugas pengambilan pengiriman dan membuat tugas pengiriman pengiriman untuk aturan validasi tertentu untuk setiap tugas.

Untuk informasi selengkapnya, lihat dokumentasi Referensi API untuk BatchCreateTasks (gRPC, REST).

Contoh perintah curl:

# Set $JWT, $PROJECT_ID, $DELIVERY_TRACKING_ID, $DELIVERY_TASK_ID,
# $PICKUP_TRACKING_ID, and $PICKUP_TASK_ID in the local environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks:batchCreate" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "requests" : [
    {
      "taskId": "${DELIVERY_TASK_ID}",
      "task" : {
        "type": "DELIVERY",
        "state": "OPEN",
        "trackingId": "${DELIVERY_TRACKING_ID}",
        "plannedLocation": {
          "point": {
              "latitude": -6.195139,
              "longitude": 106.820826
          }
        },
        "taskDuration": "90s"
      }
    },
    {
      "taskId": "${PICKUP_TASK_ID}",
      "task" : {
        "type": "PICKUP",
        "state": "OPEN",
        "trackingId": "${PICKUP_TRACKING_ID}",
        "plannedLocation": {
          "point": {
              "latitude": -6.195139,
              "longitude": 106.820826
          }
        },
        "taskDuration": "90s"
      }
    }
  ]
}
EOM

Ketidaktersediaan terjadwal

Anda dapat membuat tugas yang menunjukkan ketidaktersediaan (misalnya, untuk jeda bagi pengemudi atau pengisian bahan bakar kendaraan) dari Driver SDK, atau dari lingkungan server. Tugas ketidaktersediaan terjadwal tidak boleh menyertakan ID pelacakan. Anda dapat memberikan lokasi secara opsional.

gRPC

Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk membuat tugas ketidaktersediaan:

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.UNAVAILABLE)
  .setState(Task.State.OPEN)
  .setTaskDuration(
    Duration.newBuilder().setSeconds(60 * 60))  // 1hr break
  .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 ketidaktersediaan dari lingkungan server, buat panggilan REST HTTP ke `CreateTask':

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

<id> adalah ID unik untuk tugas tersebut. Jika tidak memiliki ID tugas di sistem, Anda dapat membuat ID unik universal (UUID).

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dibuat oleh factory token Fleet Engine.

Isi permintaan harus berisi entitas Task:

  • Kolom wajib diisi:

    KolomNilai
    jenis Jenis.TIDAK TERSEDIA
    status Status.OPEN
    tugasDurasi Durasi jeda dalam detik.

  • Kolom opsional:

    KolomNilai
    terencanaLocation Lokasi jeda jika harus diambil di lokasi tertentu.

Semua kolom lain dalam entity akan diabaikan untuk dibuat. Fleet Engine memunculkan pengecualian jika permintaan menyertakan deliveryVehicleId yang ditetapkan. Penetapan tugas dilakukan melalui UpdateVehicleRequests.

Contoh perintah curl:

# Set $JWT, $PROJECT_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": "UNAVAILABLE",
  "state": "OPEN",
  "plannedLocation": {
     "point": {
        "latitude": -6.195139,
        "longitude": 106.820826
     }
  },
  "taskDuration": "300s"
}
EOM

Perhentian terjadwal

Anda dapat membuat tugas perhentian terjadwal dari Driver SDK, atau dari lingkungan server. Tugas penghentian terjadwal mungkin tidak menyertakan ID pelacakan.

gRPC

Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk membuat tugas perhentian terjadwal:

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.SCHEDULED_STOP)
  .setState(Task.State.OPEN)
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .build();

// Task request
CreateTaskRequest createTaskRequest =
  CreateTaskRequest.newBuilder()  // No need for the header
      .setParent(parent)
      .setTaskId("task-8241890")  // Task ID assigned by the Provider
      .setTrip(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 berhenti yang dijadwalkan dari lingkungan server, buat panggilan REST HTTP ke CreateTask:

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

<id> adalah ID unik untuk tugas tersebut. Jika tidak memiliki ID tugas di sistem, Anda dapat membuat ID unik universal (UUID).

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dibuat oleh factory token Fleet Engine.

Isi permintaan harus berisi entitas Task:

  • Kolom wajib diisi:

    KolomNilai
    jenis Ketik.ScheduleD_STOP
    status Status.OPEN
    terencanaLocation Lokasi perhentian.
    tugasDurasi Perkiraan panjang perhentian dalam detik.

  • Kolom opsional:

    • None

Semua kolom lain dalam entity akan diabaikan untuk dibuat. Fleet Engine memunculkan pengecualian jika permintaan menyertakan deliveryVehicleId yang ditetapkan. Penetapan tugas dilakukan melalui UpdateVehicleRequests.

Contoh perintah curl:

# Set $JWT, $PROJECT_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": "SCHEDULED_STOP",
  "state": "OPEN",
  "plannedLocation": {
     "point": {
        "latitude": -6.195139,
        "longitude": 106.820826
     }
  },
  "taskDuration": "600s"
}
EOM

Menetapkan tugas ke kendaraan

Tugas diberikan pada kendaraan pengiriman dengan memperbarui urutan tugas untuk kendaraan. Penetapan tugas untuk kendaraan ditentukan oleh daftar perhentian kendaraan untuk kendaraan pengiriman. Setiap perhentian kendaraan dapat diberi satu atau beberapa tugas.

Memperbarui pengurutan tugas untuk tugas yang sebelumnya ditetapkan ke kendaraan lain akan menyebabkan error.

Untuk mengubah pengiriman dari satu kendaraan ke kendaraan lainnya, tutup tugas asli, lalu buat ulang sebelum menugaskannya ke kendaraan baru.

Perbarui pengurutan tugas

Anda dapat memperbarui urutan eksekusi tugas yang ditetapkan ke kendaraan dari Driver SDK, atau dari lingkungan server. Kedua metode tersebut tidak boleh dicampur untuk menghindari kondisi race.

Memperbarui urutan tugas juga akan menetapkan tugas ke kendaraan jika sebelumnya tidak ditetapkan ke kendaraan, dan menutup tugas yang sebelumnya ditetapkan ke kendaraan dan tidak disertakan dalam pengurutan yang diperbarui. Menetapkan tugas ke kendaraan lain jika sebelumnya telah ditugaskan ke kendaraan lain akan menyebabkan error. Tutup tugas yang ada terlebih dahulu lalu buat tugas baru sebelum menetapkannya ke kendaraan baru.

Pengurutan tugas dapat diperbarui kapan saja.

gRPC

Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk memperbarui pengurutan tugas kendaraan:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
static final String TASK1_ID = "task-756390";
static final String TASK2_ID = "task-849263";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 1st stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.7749)
                   .setLongitude(122.4194)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
           .setState(VehicleStop.State.NEW)))
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.3382)
                   .setLongitude(121.8863)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
           .setState(VehicleStop.State.NEW)))
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(deliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
      .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 {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Untuk memperbarui pengurutan tugas kendaraan dari lingkungan server, lakukan panggilan REST HTTP ke `UpdateDeliveryVehicle':

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

<id> adalah ID unik untuk kendaraan pengiriman di inventaris Anda yang ingin Anda perbarui pengurutan tugasnya. Ini adalah ID yang Anda tentukan saat membuat kendaraan.

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dibuat oleh factory token Fleet Engine.

Isi permintaan harus berisi entitas DeliveryVehicle:

  • Kolom wajib diisi:

    KolomNilai
    tersisaVehicleJourneySegmen Daftar segmen perjalanan untuk tugas yang urutannya harus dijalankan. Tugas pertama dalam daftar dijalankan terlebih dahulu.
    tersisaVehicleJourneysegments[i].stop Perhentian untuk tugas i dalam daftar.
    tersisaVehicleJourneySegmen[i].stop.plannedLocation Lokasi terencana untuk perhentian.
    tersisaVehicleJourneysegments[i].stop.tasks Daftar tugas yang akan dilakukan di perhentian kendaraan ini.
    tersisaVehicleJourneySegmen[i].stop.state Status.BARU

  • Kolom opsional:

    • None

Semua kolom lain dalam entity akan diabaikan untuk update.

Contoh perintah curl:

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "remainingVehicleJourneySegments": [
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.7749,
            "longitude": -122.084061
          }
        },
        "tasks": [
          {
            "taskId": "${TASK1_ID}",
            "taskDuration": "90s"
          }
        ]
      }
    },
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}",
            "taskDuration": "120s"
          }
        ]
      }
    }
  ]
}
EOM

Kendaraan sedang menuju ke perhentian berikutnya

Mesin Fleet harus diberi tahu saat kendaraan berangkat dari perhentian atau memulai navigasi. Anda dapat memberi tahu Fleet Engine dari Driver SDK, atau dari lingkungan server. Kedua metode tersebut tidak boleh dicampur untuk menghindari kondisi race dan untuk mempertahankan satu sumber kebenaran.

gRPC

Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk memberi tahu Fleet Engine bahwa kendaraan sedang dalam perjalanan ke perhentian berikutnya.

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
    // Next stop marked as ENROUTE
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 1st stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.7749)
                   .setLongitude(122.4194)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
           .setState(VehicleStop.State.ENROUTE)))
    // All other stops marked as NEW
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.3382)
                   .setLongitude(121.8863)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
           .setState(VehicleStop.State.NEW)))
    .build();


// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(deliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
      .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 {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Untuk memberi tahu Fleet Engine bahwa kendaraan sedang dalam perjalanan ke perhentian berikutnya dari lingkungan server, lakukan panggilan REST HTTP ke `UpdateDeliveryVehicle':

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

<id> adalah ID unik untuk kendaraan pengiriman di inventaris Anda yang ingin Anda perbarui pengurutan tugasnya. Ini adalah ID yang Anda tentukan saat membuat kendaraan.

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dibuat oleh factory token Fleet Engine.

Isi permintaan harus berisi entitas DeliveryVehicle:

  • Kolom wajib diisi:

    KolomNilai
    tersisaVehicleJourneySegmen Daftar perhentian kendaraan lainnya dengan negara bagian yang ditandai sebagai State.NEW. Perhentian pertama dalam daftar harus memiliki status yang ditandai sebagai State.ENROUTE.

  • Kolom opsional:

    • None

Semua kolom lain dalam entity akan diabaikan untuk notifikasi.

Contoh perintah curl:

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "remainingVehicleJourneySegments": [
    {
      "stop": {
        "state": "ENROUTE",
        "plannedLocation": {
          "point": {
            "latitude": 37.7749,
            "longitude": -122.084061
          }
        },
        "tasks": [
          {
            "taskId": "${TASK1_ID}",
            "taskDuration": "90s"
          }
        ]
      }
    },
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}",
            "taskDuration": "120s"
          }
        ]
      }
    }
  ]
}
EOM

Kendaraan tiba di perhentian

Mesin Fleet harus diberi tahu saat kendaraan tiba di halte. Anda dapat memberi tahu Fleet Engine dari Driver SDK, atau dari lingkungan server. Kedua metode tersebut tidak boleh dicampur untuk menghindari kondisi race dan untuk mempertahankan satu sumber kebenaran.

gRPC

Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk memberi tahu Fleet Engine bahwa kendaraan tiba di perhentian:

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
    // Marking the arrival at stop.
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.7749)
                   .setLongitude(122.4194)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
           .setState(VehicleStop.State.ARRIVED)))
    // All other remaining stops marked as NEW.
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.3382)
                   .setLongitude(121.8863)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
           .setState(VehicleStop.State.NEW))) // Remaining stops must be NEW.
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(deliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder()
          .addPaths("remaining_vehicle_journey_segments"))
      .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 {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Untuk memberi tahu Fleet Engine tentang kedatangan kendaraan di perhentian dari lingkungan server, lakukan panggilan REST HTTP ke `UpdateDeliveryVehicle':

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

<id> adalah ID unik untuk kendaraan pengiriman di inventaris Anda yang ingin Anda perbarui pengurutan tugasnya. Ini adalah ID yang Anda tentukan saat membuat kendaraan.

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dibuat oleh factory token Fleet Engine.

Isi permintaan harus berisi entitas DeliveryVehicle:

  • Kolom wajib diisi:

    KolomNilai
    tersisaVehicleJourneySegmen Perhentian yang telah Anda kunjungi dengan statusnya yang ditetapkan sebagai State.ARRIVED, diikuti dengan daftar perhentian kendaraan yang tersisa dengan status negara bagian yang ditandai sebagai State.NEW.

  • Kolom opsional:

    • None

Semua kolom lain dalam entity akan diabaikan untuk update.

Contoh perintah curl:

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "remainingVehicleJourneySegments": [
    {
      "stop": {
        "state": "ARRIVED",
        "plannedLocation": {
          "point": {
            "latitude": 37.7749,
            "longitude": -122.084061
          }
        },
        "tasks": [
          {
            "taskId": "${TASK1_ID}",
            "taskDuration": "90s"
          }
        ]
      }
    },
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}",
            "taskDuration": "120s"
          }
        ]
      }
    }
  ]
}
EOM

Kendaraan menyelesaikan perhentian

Mesin Fleet harus diberi tahu saat kendaraan selesai berhenti. Dengan demikian, semua tugas yang terkait dengan perhentian akan ditetapkan ke status TUTUP. Anda dapat memberi tahu Fleet Engine dari Driver SDK, atau dari lingkungan server. Kedua metode tidak boleh dicampur untuk menghindari kondisi race dan untuk mempertahankan satu sumber kebenaran.

gRPC

Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk memberi tahu Fleet Engine bahwa kendaraan telah selesai berhenti.

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
    // This stop has been completed and is commented out to indiciate it
    // should be removed from the list of vehicle journey segments.
    // .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
    //    .setStop(VehicleStop.newBuilder()
    //        .setPlannedLocation(LocationInfo.newBuilder()
    //            .setPoint(LatLng.newBuilder()
    //                .setLatitude(37.7749)
    //                .setLongitude(122.4194)))
    //        .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
    //        .setState(VehicleStop.State.ARRIVED)))
    // All other remaining stops marked as NEW.
    // The next stop could be marked as ENROUTE if the vehicle has begun
    // its journey to the next stop.
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // Next stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.3382)
                   .setLongitude(121.8863)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
           .setState(VehicleStop.State.NEW)))
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // no need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(deliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder()
          .addPaths("remaining_vehicle_journey_segments"))
      .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 {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Untuk memberi tahu Fleet Engine tentang penyelesaian perhentian dari lingkungan server, lakukan panggilan REST HTTP ke `UpdateDeliveryVehicle':

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

<id> adalah ID unik untuk kendaraan pengiriman di inventaris Anda yang ingin Anda perbarui pengurutan tugasnya. Ini adalah ID yang Anda tentukan saat membuat kendaraan.

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dibuat oleh factory token Fleet Engine.

Isi permintaan harus berisi entitas DeliveryVehicle:

  • Kolom wajib diisi:

    KolomNilai
    tersisa_kendaraan_perjalanan_segmen Perhentian yang telah Anda selesaikan tidak lagi berada dalam daftar perhentian kendaraan lainnya.

  • Kolom opsional:

    • None

Semua kolom lain dalam entity akan diabaikan untuk update.

Contoh perintah curl:

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "remainingVehicleJourneySegments": [
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}",
            "taskDuration": "120s"
          }
        ]
      }
    }
  ]
}
EOM

Memperbarui tugas

Sebagian besar kolom tugas tidak dapat diubah. Namun, Anda dapat mengubah status, hasil tugas, waktu hasil tugas, dan lokasi hasil tugas dengan memperbarui entity tugas secara langsung. Misalnya, jika tugas belum ditetapkan ke kendaraan, Anda dapat menutup tugas dengan mengupdate status secara langsung.

gRPC

Ini adalah contoh pembaruan tugas melalui gRPC.

REST

Ini adalah contoh pembaruan tugas melalui REST.

Menutup tugas

Untuk menutup tugas yang telah ditetapkan untuk kendaraan, beri tahu Fleet Engine bahwa kendaraan telah menyelesaikan perhentian tempat tugas berlangsung atau hapus dari daftar perhentian kendaraan. Untuk melakukannya, Anda dapat menetapkan daftar perhentian kendaraan yang tersisa seperti saat memperbarui urutan tugas untuk kendaraan.

Jika tugas belum ditetapkan untuk kendaraan dan harus ditutup, perbarui tugas ke status CLOSED. Namun, Anda tidak dapat membuka kembali tugas TUTUP.

Menutup tugas tidak menunjukkan keberhasilan atau kegagalan. Ini menunjukkan bahwa tugas tidak lagi dipertimbangkan dalam proses. Untuk pelacakan armada, penting untuk menunjukkan hasil tugas yang sebenarnya sehingga hasil pengiriman dapat ditampilkan.

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) // It's only possible to directly CLOSE a
  .build();                    // task which 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();

// 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 updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Untuk menandai tugas sebagai ditutup dari lingkungan server, lakukan panggilan REST HTTP ke UpdateTask:

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

<id> adalah ID unik untuk tugas tersebut.

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dibuat oleh factory token Fleet Engine.

Isi permintaan harus berisi entitas Task:

  • Kolom wajib diisi:

    KolomNilai
    status Status.DITUTUP

  • Kolom opsional:

    KolomNilai
    taskResults Results.execute atau Results.FAILED
    taskResultsTime Waktu saat tugas selesai.
    taskResultsLocation Lokasi tempat tugas diselesaikan. Fleet Engine akan menetapkan ini secara default ke lokasi kendaraan terakhir kecuali jika diganti secara manual oleh penyedia.

Semua kolom lain dalam entity akan diabaikan untuk update.

Contoh perintah 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 --iso-8601=seconds)"
}
EOM

Menetapkan hasil tugas dan lokasi hasil

Penutupan tugas tidak menunjukkan keberhasilan atau kegagalan, tetapi menunjukkan bahwa tugas tersebut tidak lagi dipertimbangkan dalam proses. Untuk pelacakan armada, penting untuk menunjukkan hasil tugas yang sebenarnya sehingga hasil pengiriman dapat ditampilkan dan ada penagihan yang tepat untuk layanan. Setelah ditetapkan, hasil tugas tidak dapat diubah. Anda dapat mengubah waktu hasil tugas dan lokasi hasil tugas setelah ditetapkan.

Tugas yang berada dalam status TUTUP dapat ditetapkan hasilnya ke eksekusi atau GAGAL. Hanya tugas pengambilan dan pengiriman yang memiliki status apksigner yang akan ditagih.

Saat menandai hasil tugas, Fleet Engine secara otomatis mengisi lokasi hasil tugas dengan lokasi kendaraan yang terakhir diketahui. Anda dapat mengganti perilaku ini.

gRPC

Anda memiliki opsi untuk menetapkan lokasi hasil tugas saat menetapkan hasil. Ini akan mencegah Fleet Engine menyetelnya ke default lokasi kendaraan terakhir. Anda juga dapat menimpa lokasi hasil tugas Fleet Engine yang ditetapkan di lain waktu. Fleet Engine tidak akan pernah menimpa lokasi hasil tugas yang Anda berikan. Anda tidak dapat menetapkan lokasi hasil tugas untuk tugas yang tidak menetapkan hasil tugas. Anda dapat menetapkan hasil tugas dan lokasi hasil tugas dalam permintaan yang sama.

Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk menetapkan hasil tugas ke apksigner dan menetapkan lokasi tempat tugas selesai:

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();

// 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 updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Untuk menandai tugas sebagai selesai dari lingkungan server, lakukan panggilan REST HTTP ke UpdateTask:

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

<id> adalah ID unik untuk tugas tersebut.

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dibuat oleh factory token Fleet Engine.

Isi permintaan harus berisi entitas Task:

  • Kolom wajib diisi:

    KolomNilai
    taskResults Results.execute atau Results.FAILED
    taskResultsTime Stempel waktu saat hasil tugas ditetapkan (dari penyedia). Ini adalah waktu saat tugas selesai.

  • Kolom opsional:

    KolomNilai
    taskResultsLocation Lokasi tempat tugas diselesaikan. Fleet Engine akan menetapkan ini secara default ke lokasi kendaraan terakhir kecuali jika diganti secara manual oleh penyedia.

Semua kolom lain dalam entity akan diabaikan untuk update.

Contoh perintah 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=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "taskOutcome": "SUCCEEDED",
  "taskOutcomeTime": "$(date -u --iso-8601=seconds)",
  "taskOutcomeLocation": {
    "point": {
      "latitude": -6.195139,
      "longitude": 106.820826
    }
  }
}
EOM

Mengubah rute pengiriman

Setelah tugas pengiriman dibuat, lokasi yang direncanakan tidak dapat diubah. Untuk mengubah rute pengiriman, tutup tugas pengiriman tanpa menetapkan hasil, lalu buat tugas baru dengan lokasi terencana yang telah diperbarui. Setelah membuat tugas baru, tetapkan tugas ke kendaraan yang sama.

Menggunakan feeder dan kendaraan pengiriman

Jika Anda menggunakan kendaraan feeder untuk mengangkut pengiriman ke kendaraan pengiriman sepanjang hari, buat model transfer pengiriman sebagai tugas pemberhentian terjadwal untuk kendaraan pengiriman. Untuk memastikan pelacakan lokasi yang akurat, hanya tetapkan tugas pengiriman untuk pengiriman yang ditransfer setelah tugas dimuat ke kendaraan pengiriman.

Menyimpan status pengiriman dan informasi meta lainnya

Saat tugas pengiriman selesai, status dan hasil dicatat dalam tugas. Namun, Anda mungkin ingin memperbarui informasi meta lainnya khusus untuk pengiriman. Untuk menyimpan informasi meta lain yang dapat Anda referensikan di luar layanan Fleet Engine, gunakan tracking_id yang terkait dengan tugas sebagai kunci dalam tabel eksternal.

Untuk informasi selengkapnya, lihat Masa aktif tugas.

Mencari kendaraan

Anda dapat mencari kendaraan dari Driver SDK, atau dari lingkungan server.

gRPC

Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk mencari kendaraan:

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle request
String name = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
GetDeliveryVehicleRequest getVehicleRequest = GetDeliveryVehicleRequest.newBuilder()  // No need for the header
    .setName(name)
    .build();

try {
  DeliveryVehicle vehicle = deliveryService.getDeliveryVehicle(getVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Untuk mencari kendaraan dari lingkungan server, lakukan panggilan REST HTTP ke `GetVehicle':

GET https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<vehicleId>

<id> adalah ID unik untuk tugas tersebut.

<vehicleId> adalah ID kendaraan yang akan dicari.

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dibuat oleh factory token Fleet Engine.

Isi permintaan harus kosong.

Jika pencarian berhasil, isi respons memuat entitas kendaraan.

Contoh perintah curl:

# Set JWT, PROJECT_ID, and VEHICLE_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
  "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}"

Mencari tugas

Anda dapat mencari tugas dari lingkungan server. Driver SDK tidak mendukung pencarian tugas.

gRPC

Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk mencari tugas:

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task request
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
GetTaskRequest getTaskRequest = GetTaskRequest.newBuilder()  // No need for the header
    .setName(taskName)
    .build();

try {
  Task task = deliveryService.getTask(getTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;

     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Untuk mencari tugas dari lingkungan server, lakukan panggilan REST HTTP ke `GetTask':

GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<taskId>

<id> adalah ID unik untuk tugas tersebut.

<taskId> adalah ID tugas yang akan dicari.

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dibuat oleh factory token Fleet Engine.

Isi permintaan harus kosong.

Jika pencarian berhasil, isi respons memuat entity tugas.

Contoh perintah curl:

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
  "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}"

Mencari tugas pengiriman berdasarkan ID pelacakannya

Anda dapat mencari tugas pengiriman berdasarkan ID pelacakannya dari lingkungan server atau browser. Driver SDK tidak mendukung pencarian tugas pengiriman berdasarkan ID pelacakannya.

Jika Anda mencari tugas pengiriman dari lingkungan browser, pastikan untuk menggunakan token tersempit yang mungkin untuk membatasi risiko keamanan. Misalnya, jika Anda menggunakan Token Konsumen Pengiriman, setiap panggilan API Fleet Engine Deliveries hanya akan menampilkan informasi yang relevan dengan pengguna akhir tersebut, seperti pengirim atau penerima pengiriman. Semua informasi lain dalam respons disamarkan. Untuk informasi selengkapnya tentang token, lihat Membuat Token Web JSON (JWT) untuk otorisasi.

Tugas pengiriman akan memiliki kolom tertentu yang disamarkan. Selain itu, jika kendaraan bertugas tugas ketidaktersediaan, semua informasi pelacakan armada disamarkan. Satu-satunya pengecualian adalah jika kendaraan berada di perhentian terakhir dan perhentian tersebut memiliki tugas ketidaktersediaan dan jenis tugas lainnya.

gRPC

Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk mencari tugas pengiriman berdasarkan ID pelacakannya. Respons yang berhasil untuk ID pelacakan tetap kosong. Respons kosong menunjukkan bahwa tidak ada tugas yang dikaitkan dengan ID pelacakan yang diberikan.

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TRACKING_ID = "TID-7449w087464x5";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Tasks request
String parent = "providers/" + PROJECT_ID;
SearchTasksRequest searchTasksRequest = SearchTasksRequest.newBuilder()  // No need for the header
    .setParent(parent)
    .setTrackingId(TRACKING_ID)
    .build();

try {
  SearchTasksResponse searchTasksResponse = deliveryService.searchTasks(searchTasksRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;

     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Untuk mencari tugas pengiriman dari browser, lakukan panggilan REST HTTP ke `SearchTasks':

GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks:search?trackingId=<tracking_id>

<id> adalah ID unik untuk tugas tersebut.

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dibuat oleh factory token Fleet Engine.

Jika pencarian berhasil, isi respons memuat data dengan struktur berikut:

// JSON representation
{
  "tasks": [
    {
      object (Task)
    }
  ]
}

Respons yang berhasil untuk sebuah ID pelacakan tetap kosong. Respons kosong menunjukkan bahwa tidak ada tugas yang dikaitkan dengan ID pelacakan yang diberikan.

Contoh perintah curl:

# Set JWT, PROJECT_ID, and TRACKING_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
  "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks:search?trackingId=${TRACKING_ID}"

Membuat daftar tugas

Anda dapat menampilkan daftar tugas dari server atau lingkungan browser. Driver SDK tidak mendukung tugas listingan.

Tugas listingan meminta akses luas ke tugas. Tugas listingan hanya ditujukan untuk pengguna tepercaya. Gunakan Delivery Fleet Reader atau Delivery Super User Authentication Tokens saat membuat permintaan tugas daftar.

Tugas yang tercantum mencantumkan kolom berikut:

  • KendaraanStop.planned_location
  • KendaraanStop.state
  • KendaraanStop.TaskInfo.taskId

Tugas yang tercantum dapat difilter menurut sebagian besar properti tugas. Untuk sintaksis kueri filter, lihat AIP-160. Daftar berikut menampilkan properti tugas valid yang dapat Anda gunakan untuk pemfilteran:

  • id_kendaraan_pengiriman
  • status
  • terencana_lokasi
  • durasi_tugas
  • tugas_keluar
  • task_outcome_location
  • task_outcome_location_source
  • tugas_waktu_keluar
  • id_pelacakan
  • jenis

Gunakan format kolom berikut berdasarkan Proposal Peningkatan API Google:

Jenis Kolom Format Contoh
Stempel waktu RFC-3.339 task_outcome_time = 2022-03-01T11:30:00-08:00
Durasi Jumlah detik yang diikuti 's' task_duration = 120s
Enum String state = CLOSED AND type = PICKUP
Location point.latitude dan point.longitude planned_location.point.latitude > 36.1 AND planned_location.point.longitude < -122.0

Buka AIP-160 untuk mengetahui daftar lengkap operator kueri filter.

Jika tidak ada kueri filter yang ditentukan, semua tugas akan dicantumkan.

Daftar tugas diberi nomor halaman. Ukuran halaman dapat ditentukan dalam permintaan tugas daftar. Jika ukuran halaman ditentukan, jumlah tugas yang ditampilkan tidak lebih besar dari ukuran halaman yang ditentukan. Jika tidak ada ukuran halaman, setelan default yang wajar akan digunakan. Jika ukuran halaman yang diminta melebihi nilai maksimum internal, maka nilai maksimum internalnya akan digunakan.

Daftar tugas dapat berisi token untuk membaca halaman hasil berikutnya. Gunakan token halaman dengan permintaan yang identik dengan permintaan sebelumnya untuk mengambil halaman tugas berikutnya. Saat token halaman yang ditampilkan kosong, tidak ada lagi tugas yang tersedia untuk pengambilan.

gRPC

Contoh berikut menunjukkan cara menggunakan library gRPC Java guna mencantumkan tugas untuk deliveryVehicleId. Respons yang berhasil masih dapat kosong. Respons kosong menunjukkan bahwa tidak ada Tasks yang dikaitkan dengan deliveryVehicleId yang disediakan.

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TRACKING_ID = "TID-7449w087464x5";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Tasks request
String parent = "providers/" + PROJECT_ID;
ListTasksRequest listTasksRequest = ListTasksRequest.newBuilder()  // No need for the header
    .setParent(parent)
    .setFilter("delivery_vehicle_id = 123")
    .build();

try {
  ListTasksResponse searchTasksResponse = deliveryService.listTasks(listTasksRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;

     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Untuk mencantumkan tugas dari browser, lakukan panggilan REST HTTP ke ListTasks:

GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks

Untuk menerapkan filter ke tugas yang dicantumkan, sertakan "filter" parameter URL dengan kueri filter yang di-escape URL sebagai nilainya.

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dibuat oleh factory token Fleet Engine.

Jika pencarian berhasil, isi respons memuat data dengan struktur berikut:

// JSON representation
{
  "tasks": [
    {
      object (Task)
    }
  ],
  "nextPageToken": string,
  "totalSize": integer
}

Respons yang berhasil masih dapat kosong. Respons kosong menunjukkan bahwa tidak ada tugas yang ditemukan memenuhi kriteria filter yang ditentukan.

Contoh perintah curl:

# Set JWT, PROJECT_ID, and VEHICLE_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
  "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?filter=state%20%3D%20OPEN%20AND%20delivery_vehicle_id%20%3D%20${VEHICLE_ID}"

Daftar kendaraan pengiriman

Anda dapat mencantumkan kendaraan pengiriman dari lingkungan server atau browser. Driver SDK tidak mendukung listingan kendaraan pengiriman.

Listingan kendaraan pengiriman meminta akses luas ke kendaraan pengiriman dan hanya ditujukan untuk pengguna tepercaya. Gunakan Delivery Fleet Reader atau Delivery Super User Authentication Tokens saat membuat permintaan kendaraan pengiriman daftar.

Kendaraan pengiriman yang tercantum memiliki kolom berikut yang disamarkan karena pengaruhnya terhadap ukuran respons:

  • CurrentRouteSegmen
  • SisaSegmen Perjalanan

Anda dapat memfilter kendaraan pengiriman daftar berdasarkan properti attributes mereka. Misalnya, untuk membuat kueri atribut dengan kunci my_key dan nilai my_value, gunakan attributes.my_key = my_value. Untuk membuat kueri beberapa atribut, gabungkan kueri menggunakan operator logis AND dan OR seperti pada attributes.key1 = value1 AND attributes.key2 = value2. Lihat AIP-160 untuk deskripsi lengkap sintaksis kueri filter.

Anda dapat memfilter kendaraan pengiriman yang tercantum berdasarkan lokasi menggunakan parameter permintaan viewport. Parameter permintaan viewport mendefinisikan area pandang menggunakan dua koordinat pembatas: lintang/bujur high (timur laut) dan low (barat daya). Permintaan ditolak jika berisi lintang tinggi yang secara geografis lebih rendah dari lintang rendah.

Daftar kendaraan pengiriman diberi nomor halaman secara default menggunakan ukuran halaman yang wajar. Jika Anda menentukan ukuran halaman, permintaan hanya akan menampilkan jumlah kendaraan yang ditentukan oleh batas, atau lebih sedikit. Jika ukuran halaman yang diminta melebihi nilai maksimum internal, maka nilai maksimum internalnya akan digunakan. Ukuran halaman default dan maksimum adalah 100 kendaraan.

Daftar kendaraan pengiriman dapat menyertakan token untuk membaca halaman hasil berikutnya. Token halaman hanya ada dalam respons saat lebih banyak halaman kendaraan pengiriman tersedia untuk pengambilan. Untuk mengambil halaman tugas berikutnya, gunakan token halaman dengan permintaan yang identik dengan permintaan sebelumnya.

gRPC

Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk mencantumkan kendaraan pengiriman di region tertentu dengan atribut tertentu. Respons yang berhasil masih kosong. Jika itu terjadi, berarti tidak ada kendaraan dengan atribut yang ditentukan saat ini di area pandang yang ditentukan.

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Tasks request
String parent = "providers/" + PROJECT_ID;
ListDeliveryVehiclesRequest listDeliveryVehiclesRequest =
  ListDeliveryVehiclesRequest.newBuilder()  // No need for the header
      .setParent(parent)
      .setViewport(
            Viewport.newBuilder()
              .setHigh(LatLng.newBuilder()
                  .setLatitude(37.45)
                  .setLongitude(-122.06)
                  .build())
              .setLow(LatLng.newBuilder()
                  .setLatitude(37.41)
                  .setLongitude(-122.11)
                  .build())
      .setFilter("attributes.my_key = my_value")
      .build();

try {
  ListDeliveryVehiclesResponse listDeliveryVehiclesResponse =
      deliveryService.listDeliveryVehicles(listDeliveryVehiclesRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
      case NOT_FOUND:
          break;

      case PERMISSION_DENIED:
          break;
  }
  return;
}

REST

Untuk mencantumkan tugas dari browser, lakukan panggilan REST HTTP ke ListDeliveryVehicles:

GET https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles

Untuk menerapkan filter ke tugas yang tercantum, sertakan parameter URL "filter" dengan kueri filter yang di-escape URL sebagai nilainya.

Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dibuat oleh factory token Fleet Engine.

Jika pencarian berhasil, isi respons memuat data dengan struktur berikut:

// JSON representation
{
  "deliveryVehicles": [
    {
      object (DeliveryVehicle)
    }
  ],
  "nextPageToken": string,
  "totalSize": integer
}

Respons yang berhasil masih dapat kosong. Jika hal itu terjadi, berarti tidak ada kendaraan pengiriman yang memenuhi kueri filter dan area pandang yang ditentukan.

Contoh perintah curl:

# Set JWT, PROJECT_ID, and VEHICLE_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
  "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles?filter=attributes.my_key%20%3D%20my_value%20&viewport.high.latitude=37.45&viewport.high.longitude=-122.06&viewport.low.latitude=37.41&viewport.low.longitude=-122.11"

Pelacakan armada

Anda memiliki dua opsi untuk menggunakan Feet Engine Deliveries API guna mengaktifkan pelacakan armada:

  • Gunakan library Pelacakan Armada JavaScript. Library ini memungkinkan Anda memvisualisasikan lokasi kendaraan dan lokasi minat yang dilacak di Fleet Engine. Ini berisi komponen peta JavaScript yang merupakan pengganti drop-in untuk objek google.maps.Map standar, dan komponen data agar terhubung dengan Fleet Engine. Hal ini memungkinkan Anda memberikan pengalaman pelacakan armada animasi yang dapat disesuaikan dari web atau aplikasi seluler Anda.

  • Terapkan pelacakan armada Anda sendiri selain API Fleet Engine Deliveries. Kuncinya adalah mencari tugas pengiriman dengan ID pelacakan. Pencarian ini dapat menampilkan beberapa tugas yang terkait dengan ID pelacakan.

Selama tugas ketidaktersediaan, informasi lokasi tidak akan dibagikan kepada pengguna akhir.

Logging

Anda dapat mengaktifkan opsi untuk mengizinkan Fleet Engine mengirim log RPC ke Cloud Logging. Untuk mengetahui informasi lebih lanjut, lihat Logging.

Token dan Peran Otorisasi

Seperti yang dijelaskan dalam Mengintegrasikan Deliveries API dan catatan otorisasi untuk setiap kasus penggunaan, melakukan panggilan ke Fleet Engine memerlukan autentikasi dengan Token Web JSON yang telah ditandatangani menggunakan kredensial akun layanan. Akun layanan yang digunakan untuk membuat token tersebut mungkin memiliki satu atau beberapa peran, dengan setiap peran memberikan serangkaian izin yang berbeda.

Untuk mengetahui informasi lebih lanjut, baca bagian Autentikasi dan Otorisasi.

Pemecahan masalah

Ketahanan

Fleet Engine tidak dianggap sebagai sumber kebenaran. Anda bertanggung jawab untuk memulihkan status sistem, jika perlu, tanpa mengandalkan Fleet Engine.

Status hilang di Fleet Engine

Saat bekerja dengan Fleet Engine, implementasikan klien agar sistem pulih dengan sendirinya jika terjadi kegagalan. Misalnya, saat mencoba memperbarui kendaraan, Fleet Engine mungkin merespons dengan error yang menunjukkan bahwa kendaraan tidak ada. Klien kemudian harus membuat ulang kendaraan dalam status baru. Hal ini jarang terjadi, sistem harus tangguh jika terjadi.

Dalam skenario kegagalan Fleet Engine yang sangat tidak terduga, Anda mungkin harus membuat ulang sebagian besar atau semua kendaraan dan tugas. Jika rasio pembuatan terlalu tinggi, beberapa permintaan mungkin akan gagal lagi karena masalah kuota karena pemeriksaan kuota diterapkan untuk menghindari serangan denial of service (DOS). Dalam hal ini, perlambatan rasio rekreasi menggunakan strategi backoff untuk percobaan ulang.

Status hilang di aplikasi pengemudi

Jika aplikasi driver mengalami error, aplikasi harus membuat ulang status saat ini dalam Driver SDK. Aplikasi harus mencoba membuat ulang tugas untuk memastikan bahwa tugas tersebut ada dan memulihkan statusnya saat ini. Aplikasi juga harus membuat ulang dan secara eksplisit menetapkan daftar perhentian untuk Driver SDK.

Perlu diketahui bahwa pemulihan ini harus dilakukan secara otonom tanpa mengandalkan informasi dari Fleet Engine, selain error yang menunjukkan apakah entity sudah ada dan berada dalam database. Jika suatu entity sudah ada, error tersebut dapat diserap dan entity dapat diperbarui menggunakan ID-nya.

Pertanyaan Umum (FAQ)

Bagaimana jika pengemudi berhenti mengerjakan suatu tugas secara tidak berurutan?

Dalam hal ini, Anda harus terlebih dahulu memperbarui urutan tugas, lalu melanjutkan seperti biasa, menandai kedatangan di halte, penyelesaian tugas, dll. Jika tidak, sistem mungkin menjadi tidak konsisten. PWT mungkin salah dan error yang tidak terduga mungkin dilaporkan.

Panggilan ke SearchTasks menampilkan lebih dari dua tugas yang terbuka untuk pengambilan atau pengiriman. Apa yang salah?

Anda tidak menandai tugas sebagai TUTUP atau menghapusnya dari daftar penghenti kendaraan yang tersisa, atau terjadi kegagalan jaringan saat mencoba menandai tugas sebagai ditutup. Anda perlu mencari tahu dari sumber sistem kebenaran Anda sendiri yang tugasnya gagal ditandai sebagai TUTUP. Pastikan untuk mendeteksi kegagalan jaringan dan coba lagi jika operasi pembaruan gagal.