Solusi Armada Terakhir saat ini hanya tersedia untuk pelanggan tertentu. Hubungi bagian penjualan untuk mempelajari lebih lanjut.

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 REST atau gRPC.

Penyiapan awal

Fleet Engine Deliveries API dikonfigurasi melalui Google Cloud Console. Untuk mengetahui informasi tentang langkah-langkah yang harus dilakukan dalam konsol, serta 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 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 utama penyiapan Anda: penandatanganan token otorisasi dan pembuatan kendaraan pengiriman uji coba.

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

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 mengetahui petunjuk cara memperoleh library klien bagi aplikasi server Anda, lihat Library Klien.

Contoh Java dalam dokumentasi ini mengasumsikan pemahaman tentang gRPC.

Struktur data

Deliveries API menggunakan dua struktur data untuk memodelkan pengambilan dan pengiriman pengiriman:

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

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

Kendaraan pengiriman

Kendaraan pengiriman mengangkut pengiriman dari depot ke lokasi pengiriman, dan dari lokasi pengambilan 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 diberikan kepadanya. Hal ini dapat mencakup tugas pengambilan atau pengiriman, jeda sementara bagi pengemudi, atau perhentian terjadwal di lokasi drop box atau lokasi pelanggan. Tugas pengambilan dan pengiriman kemungkinan akan ditetapkan ke kendaraan pengiriman yang berbeda. Setiap tugas harus memiliki ID tugas yang unik, tetapi dapat menggunakan ID pelacakan yang sama. Tugas dan urutan penjadwalannya digunakan untuk menghitung periode PWT untuk setiap tugas.

Gunakan Pengelola Tugas Driver SDK untuk membuat tugas di Fleet Engine.

Tugas pengiriman

Tugas pengiriman berkaitan dengan pengambilan atau pengantaran barang. Anda harus menentukan nomor atau ID pelacakan saat membuat tugas pengiriman. Anda juga harus menentukan waktu singgah 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 atau ID pelacakan.
  • Buat tugas pengiriman untuk mengirimkan pengiriman, dengan menentukan lokasi pengiriman dan nomor pelacakan atau ID.

Tugas ketidaktersediaan

Buat tugas ketidaktersediaan untuk jangka waktu saat kendaraan tidak akan tersedia untuk pengambilan atau pengiriman. Ini dapat menjadi waktu istirahat untuk mengisi bahan bakar kendaraan atau istirahat pengemudi. Tentukan durasi jeda saat Anda membuat tugas. Libur tidak harus dilakukan di lokasi tertentu, tetapi menentukan lokasi dapat 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 Inventaris.

Tugas penghentian terjadwal

Buat tugas perhentian terjadwal untuk membuat model perhentian yang akan dilakukan dengan kendaraan pengiriman. Misalnya, Anda dapat membuat tugas perhentian terjadwal untuk perhentian pengumpulan terjadwal harian di lokasi tertentu, terlepas dari pengiriman atau pengambilan lain di lokasi yang sama. Anda juga dapat membuat tugas perhentian terjadwal untuk koleksi dari drop box, atau untuk 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 mengekspos informasi identitas pribadi (PII) atau data teks yang jelas. ID tugas juga harus sesuai dengan persyaratan format berikut:

Berikut ini beberapa contoh ID Tugas yang baik:

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

Tabel berikut menunjukkan contoh ID Tugas yang buruk:

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 dari 64 karakter.

Masa pakai kendaraan

Objek DeliveryVehicle mewakili kendaraan pengantar bermil-mil atau terakhir. Buat 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. Pengujian 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 otomatis dihapus 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 entitas DeliveryVehicle yang ditampilkan kepada entitas 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 antarmuka gRPC atau REST API Deliveries API.

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

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

Tugas hanya dapat ditugaskan ke kendaraan saat dalam status BUKA.

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

Setelah kendaraan tugas menyelesaikan perhentian kendaraan tugas, perbarui kolom hasil tugas menjadi BERHASIL atau GAGAL dan tentukan stempel waktu peristiwa. Hasil tugas dapat ditetapkan kapan saja sebelum atau setelah tugas selesai, tetapi hanya dapat ditetapkan sekali.

Selanjutnya, library Pelacakan Inventaris JavaScript dapat menunjukkan hasil tugas. Status tugas otomatis disetel ke TUTUP. Untuk informasi selengkapnya, lihat Melacak Inventaris 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 pembaruan. Jika ingin menyimpan data tugas lebih 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 update yang dapat Anda lakukan menggunakan Driver SDK. Model yang tidak tepercaya lebih disukai. Model tepercaya sedang dalam pratinjau.

Model tidak tepercaya

Dengan model yang tidak tepercaya, Anda menggunakan peran Fleet Engine Delivery Untrusted 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 Fleet Engine Delivery Trusted Driver User 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 Google Maps Platform Last Fleet 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. Tindakan ini memastikan bahwa keduanya dapat dipercaya 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.

Membuat model hari kerja

Tabel berikut menjelaskan contoh tampilan hari kerja untuk pengemudi pertama atau kilometer terakhir di perusahaan pengiriman dan logistik. Perusahaan Anda mungkin berbeda dalam detailnya, tetapi Anda dapat melihat bagaimana Anda dapat memodelkan 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 pengiriman, ketidaktersediaan terjadwal, atau penghentian terjadwal.

Tugas harus ditetapkan ke kendaraan setelah serangkaian paket pengiriman dan urutan pengirimannya sudah diselesaikan.
Awal hari Pengemudi memulai hari di depot dengan login ke aplikasi Driver. Inisialisasi Delivery Driver API. Buat kendaraan pengiriman di Fleet Engine sesuai kebutuhan.
Pengemudi memuat pengiriman ke kendaraan pengiriman, memindai pengiriman. Jika tugas pengiriman pengiriman tidak dibuat sebelumnya, buat tugas pengiriman pengiriman pada saat pemindaian.
Pengemudi mengonfirmasi urutan tugas yang akan dilakukan. Jika pesanan tidak dibuat sebelumnya, buat tugas pengambilan pengiriman, ketidaktersediaan terjadwal, dan perhentian terjadwal.
Pengemudi meninggalkan depot dan meng-commit ke jumlah tugas berikutnya untuk dieksekusi. Tetapkan semua tugas atau subset tugas ke kendaraan dengan melakukan perintah eksekusinya.
Pengemudi mengirim barang. Setelah tiba di perhentian pengiriman, lakukan tindakan terkait dengan kendaraan yang tiba di perhentian. Setelah pengiriman dikirimkan, tutup tugas pengiriman 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 menyelesaikan perhentian dan kendaraan akan melakukan perjalanan ke perhentian berikutnya.
Pengemudi bertemu dengan kendaraan feeder untuk mentransfer pengiriman tambahan ke kendaraan pengiriman tersebut. Titik pertemuan untuk transfer antara kendaraan pengantaran dan kendaraan pengantar 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 yang berkaitan dengan kendaraan tiba di perhentian, kendaraan menyelesaikan perhentian dan kendaraan dalam perjalanan ke perhentian berikutnya.

Jika tidak, Anda tidak perlu melakukan tindakan lebih lanjut hingga akhir jeda. Hapus tugas dengan mengonfirmasi tugas berikutnya dan yang tersisa, serta memperbarui urutan tugas.
Pengemudi mengambil pengiriman. Hal ini dimodelkan seperti perhentian pengiriman. Lakukan tindakan yang terkait dengan kendaraan yang tiba di perhentian dan tutup tugas serta, 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 menyelesaikan perhentian dan kendaraan mengarah ke perhentian berikutnya.
Pengemudi melakukan perhentian terjadwal untuk mengambil pengiriman dari boks pengiriman. Hal ini dimodelkan seperti perhentian pengambilan lainnya. Lakukan tindakan yang terkait dengan kendaraan yang tiba di perhentian dan tutup tugas. Setelah menyelesaikan semua tugas di perhentian dan mulai mengemudi ke perhentian berikutnya, lakukan tindakan yang terkait dengan kendaraan menyelesaikan perhentian dan kendaraan akan melakukan perjalanan 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 yang baru. Untuk mengetahui informasi selengkapnya, lihat Merutekan ulang pengiriman.
Pengemudi mencoba mengirimkan paket, tetapi tidak berhasil. Hal ini dimodelkan mirip dengan penghentian pengiriman yang berhasil, yang menandai tugas pengiriman sebagai selesai. Lakukan tindakan yang terkait dengan 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 menyelesaikan perhentian dan kendaraan mengarah ke perhentian berikutnya.
Pengemudi diberi tahu untuk menahan (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 yang tidak sesuai pesanan. 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 pengiriman 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 menyelesaikan perhentian dan kendaraan mengarah ke perhentian berikutnya.
Akhir hari Pengemudi kembali ke depot. Pemodelan tidak diperlukan. Secara opsional, Anda dapat membuat perhentian terjadwal untuk depot. Selanjutnya, Anda dapat mengikuti kendaraan kembali ke depot dan mengetahui kapan kendaraan tersebut akan tiba.

Memahami pembaruan lokasi

Pembaruan lokasi dikirim ke Fleet Engine setelah kendaraan pengiriman diarahkan dari perhentian (termasuk depot) hingga tiba di perhentian berikutnya. Karena peristiwa ini tidak terdeteksi secara otomatis, Anda harus menandainya secara terprogram. Gunakan 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 defaultnya adalah mengirim update setiap 10 detik.

Perhentian kendaraan dan lokasi pengiriman

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

Lokasi pengiriman adalah lokasi tempat pengiriman dikirimkan atau diambil. Mungkin perlu beberapa langkah dari perhentian kendaraan untuk sampai dan tiba di lokasi pengiriman.

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

Untuk pengalaman pelacakan pengiriman terbaik bagi pengguna Anda, pertimbangkan bagaimana tugas pengiriman ditetapkan ke perhentian kendaraan dan perlu diingat bahwa jumlah penghentian kendaraan yang tersisa untuk tugas pengiriman dilaporkan kepada pengguna untuk membantu mereka melihat progres pengiriman mereka.

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 jumlah perhentian kendaraan yang terbatas sebelum tujuannya. Menyelesaikan banyak perhentian kendaraan dalam waktu singkat tidak akan memberi pengguna banyak waktu untuk melacak progres pengiriman.

Menggunakan SDK seluler

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

Melakukan inisialisasi Delivery Driver API

Sebelum menginisialisasi Delivery Driver API di Driver SDK, pastikan untuk menginisialisasi Navigation SDK. Kemudian lakukan 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 memodelkan 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 menetapkan 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
  • lastLocation

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 lain 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 menetapkan kolom apa pun, Anda dapat mengosongkan isi permintaan POST. ID Kendaraan yang baru dibuat akan 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 SDK Driver 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 pengenal unik untuk tugas. 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 entity Task:

  • Kolom wajib diisi:

    KolomNilai
    jenis Jenis.PENGAMBILAN
    status Status.OPEN
    ID pelacakan Nomor atau ID yang Anda gunakan untuk melacak pengiriman.
    yang direncanakan Lokasi tempat tugas diselesaikan, dalam hal ini lokasi pengambilan pengiriman.
    durasi tugas Perkiraan waktu, dalam detik, yang dibutuhkan untuk mengambil pengiriman di lokasi pengambilan.

  • Kolom opsional:

    • Tidak ada

Semua kolom lain dalam entitas diabaikan untuk pembuatan. Fleet Engine menampilkan pengecualian jika permintaan menyertakan delivery VehicleId 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 SDK Driver 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 pengenal unik untuk tugas. 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 entity Task:

  • Kolom wajib diisi:

    KolomNilai
    jenis Jenis.PENGIRIMAN
    status Status.OPEN
    ID pelacakan Nomor atau ID yang Anda gunakan untuk melacak pengiriman.
    yang direncanakan Lokasi tempat tugas diselesaikan, dalam hal ini lokasi pengiriman untuk pengiriman ini.
    durasi tugas Perkiraan waktu, dalam detik, yang dibutuhkan untuk mengirimkan pengiriman di lokasi pengiriman.

  • Kolom opsional:

    • Tidak ada

Semua kolom lain dalam entitas diabaikan untuk pembuatan. Fleet Engine menampilkan pengecualian jika permintaan menyertakan delivery VehicleId 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

Buat 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 entity 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 tersebut harus sama dengan kolomnya masing-masing di tingkat teratas 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 pengemudi atau pengisian bahan bakar kendaraan) baik dari SDK Driver, 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 yang tidak tersedia:

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 yang tidak tersedia dari lingkungan server, lakukan panggilan REST HTTP ke `CreateTask':

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

<id> adalah pengenal unik untuk tugas. 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 entity Task:

  • Kolom wajib diisi:

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

  • Kolom opsional:

    KolomNilai
    yang direncanakan Lokasi jeda jika harus diambil di lokasi tertentu.

Semua kolom lain dalam entitas diabaikan untuk pembuatan. Fleet Engine menampilkan pengecualian jika permintaan menyertakan delivery VehicleId 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 penghentian terjadwal dari Driver SDK atau dari lingkungan server. Tugas penghentian terjadwal tidak boleh 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 terjadwal dari lingkungan server, lakukan panggilan REST HTTP ke CreateTask:

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

<id> adalah pengenal unik untuk tugas. 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 entity Task:

  • Kolom wajib diisi:

    KolomNilai
    jenis Ketik.ScheduleD_STOP
    status Status.OPEN
    yang direncanakan Lokasi perhentian.
    durasi tugas Perkiraan panjang perhentian dalam detik.

  • Kolom opsional:

    • Tidak ada

Semua kolom lain dalam entitas diabaikan untuk pembuatan. Fleet Engine menampilkan pengecualian jika permintaan menyertakan delivery VehicleId 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 ditugaskan ke kendaraan pengiriman dengan memperbarui urutan tugas untuk kendaraan. Pengurutan tugas untuk kendaraan ditentukan oleh daftar penghentian 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 tugas sebelum menetapkannya ke kendaraan baru.

Perbarui pengurutan tugas

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

Memperbarui pengurutan tugas juga akan menetapkan tugas ke kendaraan jika sebelumnya tidak ditetapkan ke kendaraan, dan menutup tugas yang sebelumnya ditetapkan ke kendaraan dan keluar dari pengurutan yang diperbarui. Penugasan tugas ke kendaraan lain jika sebelumnya telah ditugaskan ke kendaraan lain akan menghasilkan 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 untuk kendaraan tersebut:

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 untuk kendaraan dari lingkungan server, lakukan panggilan REST HTTP ke `UpdateDeliveryKendaraan':

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

<id> adalah pengenal unik untuk kendaraan pengiriman di armada yang ingin Anda perbarui urutan 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 entity DeliveryVehicle:

  • Kolom wajib diisi:

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

  • Kolom opsional:

    • Tidak ada

Semua kolom lain di entitas akan diabaikan untuk update tersebut.

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 dalam perjalanan ke perhentian berikutnya

Fleet Engine 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 ini tidak boleh dicampur untuk menghindari kondisi race dan 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 `UpdateDeliveryKendaraan':

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

<id> adalah pengenal unik untuk kendaraan pengiriman di armada yang ingin Anda perbarui urutan 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 entity DeliveryVehicle:

  • Kolom wajib diisi:

    KolomNilai
    tersisaKendaraanJurnalSegmen Daftar perhentian kendaraan yang tersisa dengan status mereka ditandai sebagai Status.BARU. Perhentian pertama pada daftar harus memiliki status yang ditandai sebagai State.ENROUTE.

  • Kolom opsional:

    • Tidak ada

Semua kolom lain dalam entitas diabaikan untuk notifikasi ini.

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

Fleet Engine harus diberi tahu saat kendaraan berhenti di perhentian. Anda dapat memberi tahu Fleet Engine dari Driver SDK, atau dari lingkungan server. Kedua metode ini tidak boleh dicampur untuk menghindari kondisi race dan 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 `UpdateDeliveryKendaraan':

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

<id> adalah pengenal unik untuk kendaraan pengiriman di armada yang ingin Anda perbarui urutan 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 entity DeliveryVehicle:

  • Kolom wajib diisi:

    KolomNilai
    tersisaKendaraanJurnalSegmen Perhentian yang Anda kunjungi dengan status ditetapkan sebagai State.ARRIVED, diikuti dengan daftar perhentian kendaraan yang tersisa dengan status ditandai sebagai State.NEW.

  • Kolom opsional:

    • Tidak ada

Semua kolom lain di entitas akan diabaikan untuk update tersebut.

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

Fleet Engine harus diberi tahu saat kendaraan selesai berhenti. Ini menyebabkan semua tugas yang terkait dengan perhentian ditetapkan ke status TUTUP. Anda dapat memberi tahu Fleet Engine baik dari Driver SDK, atau dari lingkungan server. Kedua metode ini 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 menyelesaikan 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()
    // This stop has been completed and is commented out to indicate 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 `UpdateDeliveryKendaraan':

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

<id> adalah pengenal unik untuk kendaraan pengiriman di armada yang ingin Anda perbarui urutan 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 entity DeliveryVehicle:

  • Kolom wajib diisi:

    KolomNilai
    segmen_perjalanan_kendaraan_tetap Perhentian yang telah Anda selesaikan seharusnya tidak lagi tercantum dalam daftar perhentian kendaraan yang tersisa.

  • Kolom opsional:

    • Tidak ada

Semua kolom lain di entitas akan diabaikan untuk update tersebut.

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 memperbarui 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 ke kendaraan, beri tahu Fleet Engine bahwa kendaraan telah menyelesaikan perhentian tempat tugas dilakukan 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 ke kendaraan dan harus ditutup, perbarui tugas ke status TUTUP. Namun, Anda tidak boleh membuka kembali tugas TUTUP.

Menutup tugas tidak mengindikasikan keberhasilan atau kegagalan. Hal ini menunjukkan bahwa tugas tidak lagi dipertimbangkan dalam proses. Untuk pelacakan armada, penting untuk menunjukkan hasil sebenarnya dari tugas 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 tutup 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 entity Task:

  • Kolom wajib diisi:

    KolomNilai
    status Status.DITUTUP.

  • Kolom opsional:

    KolomNilai
    tugasHasil Outcome.eksekusi atau Hasil.GAGAL
    taskOutcomeTime Waktu ketika 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 di entitas akan diabaikan untuk update tersebut.

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 mengindikasikan keberhasilan atau kegagalan. Hal ini menunjukkan bahwa tugas 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 tersebut. Setelah ditetapkan, hasil tugas tidak dapat diubah. Anda dapat mengubah waktu hasil tugas dan lokasi hasil tugas setelah ditetapkan.

Tugas yang memiliki status TUTUP dapat ditetapkan hasilnya ke eksekusi atau GAGAL. Hanya tugas pengambilan dan pengiriman yang memiliki status Berhasil yang ditagih.

Saat menandai hasil tugas, Fleet Engine 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 yang ditetapkan Fleet Engine di lain waktu. Fleet Engine tidak akan pernah menimpa lokasi hasil tugas yang Anda berikan. Lokasi hasil tugas tidak dapat ditetapkan untuk tugas yang belum 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 Parcelable dan menetapkan lokasi tempat tugas diselesaikan:

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 entity Task:

  • Kolom wajib diisi:

    KolomNilai
    tugasHasil Outcome.eksekusi atau Hasil.GAGAL
    taskOutcomeTime 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 di entitas akan diabaikan untuk update tersebut.

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 yang direncanakan dan diperbarui. Setelah membuat tugas baru, tetapkan tugas ke kendaraan yang sama.

Gunakan feeder dan kendaraan pengiriman

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

Status pengiriman toko dan informasi meta lainnya

Setelah tugas pengiriman selesai, status dan hasil tugas dicatat dalam tugas. Namun, Anda mungkin ingin memperbarui informasi meta lain 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 berlaku tugas.

Mencari kendaraan

Anda dapat mencari kendaraan dari SDK Driver, 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 `GetKendaraan':

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

<id> adalah pengenal unik untuk tugas.

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

Cari 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 pengenal unik untuk tugas.

<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 berisi 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 menurut 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 Delivery, panggilan API Penayangan Mesin Fleet hanya akan menampilkan informasi yang relevan dengan pengguna akhir tersebut, seperti pengirim atau penerima pengiriman. Semua informasi lain dalam respons disamarkan. Untuk informasi lebih lanjut tentang token, lihatMembuat Token Web JSON (JWT) untuk otorisasi.

Tugas pengiriman akan memiliki kolom tertentu yang disamarkan. Selain itu, saat kendaraan sedang dalam tugas yang tidak tersedia, semua informasi pelacakan armada disamarkan. Satu-satunya pengecualian adalah jika kendaraan berada di perhentian terakhirnya dan perhentian tersebut memiliki tugas yang tidak tersedia 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 mungkin masih 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 pengenal unik untuk tugas.

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 berisi data dengan struktur berikut:

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

Respons yang berhasil untuk ID pelacakan mungkin masih 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 mencantumkan tugas dari server atau lingkungan browser. Driver SDK tidak mendukung tugas-tugas listingan.

Tugas listingan meminta akses luas ke tugas. Tugas listingan hanya ditujukan untuk pengguna tepercaya. Gunakan Delivery Armada Pembaca atau Token Autentikasi Pengguna Super Penayangan saat membuat permintaan tugas daftar.

Tugas yang tercantum memiliki kolom berikut yang disamarkan:

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

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

  • id_kendaraan_pengiriman
  • status
  • rencana_lokasi
  • durasi_tugas
  • tugas_keluar
  • task_outcome_location
  • task_outcome_location_source
  • tugas_keluar_waktu
  • id_pelacakan
  • jenis

Gunakan format kolom berikut berdasarkan Proposal Peningkatan Google API:

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

Lihat AIP-160 untuk daftar lengkap operator kueri filter.

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

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

Daftar tugas dapat menyertakan 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 untuk mencantumkan tugas delivery deliveryId. Respons yang berhasil masih dapat kosong. Respons kosong menunjukkan bahwa tidak ada Tasks yang dikaitkan dengan deliveryDeliveryId 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 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 berisi 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 yang 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}"

Mencantumkan kendaraan pengiriman

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

Listingan kendaraan pengiriman meminta akses luas ke kendaraan pengiriman dan ditujukan hanya untuk pengguna tepercaya. Gunakan Delivery Armada Pembaca atau Token Autentikasi Pengguna Super Penayangan saat membuat permintaan kendaraan pengiriman daftar.

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

  • CurrentRouteSegmen
  • Segmen Kendaraan Lainnya

Anda dapat memfilter kendaraan pengiriman daftar berdasarkan properti attributes-nya. 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 AND dan OR yang logis seperti dalam attributes.key1 = value1 AND attributes.key2 = value2. Lihat AIP-160 untuk deskripsi lengkap sintaksis kueri filter.

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

Daftar kendaraan pengiriman diberi nomor halaman secara default menggunakan ukuran halaman yang wajar. Jika Anda menentukan ukuran halaman, permintaan tersebut hanya akan menampilkan jumlah kendaraan yang ditentukan oleh batas, atau lebih sedikit. Jika ukuran halaman yang diminta melebihi nilai maksimum internal, nilai maksimum internal 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 pengiriman kendaraan 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 wilayah tertentu dengan atribut tertentu. Respons yang berhasil masih dapat kosong. Jika itu terjadi, berarti tidak ada kendaraan dengan atribut yang ditentukan yang saat ini berada 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 berisi 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 ditemukan 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 Fleet Engine Deliveries API guna mengaktifkan pelacakan armada:

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

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

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

Logging

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

Peran dan Token Otorisasi

Seperti yang dijelaskan dalam Mengintegrasikan Deliveries API dan catatan otorisasi untuk kasus penggunaan individual, 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 selengkapnya, baca 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.

Kehilangan kondisi di Fleet Engine

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

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

Kehilangan status di aplikasi pengemudi

Jika aplikasi driver 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.

Perhatikan bahwa pemulihan ini harus dilakukan secara otonom tanpa mengandalkan informasi dari Fleet Engine, selain error yang menunjukkan apakah dan kapan entity sudah ada di database. Jika entitas sudah ada, error tersebut dapat diserap dan entitas dapat diperbarui menggunakan ID-nya.

FAQ

Bagaimana jika pengemudi berhenti mengerjakan tugas yang tidak berurutan?

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

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

Anda mungkin tidak menandai tugas sebagai TUTUP atau menghapusnya dari daftar perhentian kendaraan yang tersisa, atau ada kegagalan jaringan saat mencoba menandai tugas sebagai ditutup. Anda harus mencari tahu dari sumber sistem tepercaya Anda sendiri, tugas mana yang gagal ditandai sebagai TUTUP. Pastikan untuk mendeteksi kegagalan jaringan dan coba lagi jika operasi pembaruan gagal.