Fleet Engine Deliveries API memungkinkan Anda membuat model aktivitas armada untuk mil pertama dan terakhir pengiriman. Deliveries API ditampilkan melalui Driver SDK untuk Android dan iOS, serta 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 di dalam konsol dan cara membuat Token Web JSON untuk otorisasi, lihat Autentikasi dan otorisasi. Untuk mengetahui detail tentang cara menggunakan konsol, lihat dokumentasi Konsol Google Cloud.
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 Anda. Ikuti panduan Memverifikasi penyiapan Anda.
Panduan ini berisi 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 Contoh Skrip Flet 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 dibandingkan REST mentah atau gRPC. Untuk petunjuk cara mendapatkan library klien untuk aplikasi server, lihat Library Klien.
Contoh Java dalam dokumentasi ini mengasumsikan Anda sudah memiliki pengetahuan tentang gRPC.
Struktur data
Deliveries API menggunakan dua struktur data untuk membuat model pengambilan dan pengiriman pengiriman:
- Kendaraan pengiriman yang digunakan untuk mengangkut kiriman.
- Tugas pengambilan dan pengantaran pengiriman.
Selain itu, Anda dapat menggunakan tugas untuk membuat model jeda bagi pengemudi dan perhentian terjadwal sepanjang hari.
Kendaraan pengiriman
Kendaraan pengiriman mengangkut kiriman dari depot ke lokasi pengiriman, dan dari lokasi pengambilan ke depot. Dalam kasus tertentu, mereka juga dapat memindahkan pengiriman langsung dari lokasi pengambilan ke lokasi pengiriman.
Anda dapat menggunakan Driver SDK untuk membuat objek DeliveryVehicle
di Fleet Engine
dan untuk mengirim pembaruan lokasi untuk pelacakan pengiriman dan armada.
Tugas
Setiap kendaraan memiliki tugas yang ditetapkan padanya. Hal ini dapat mencakup tugas pengambilan atau pengiriman, jeda wajib untuk pengemudi, atau perhentian terjadwal di kotak drop-down atau lokasi pelanggan. Setiap tugas harus memiliki ID tugas unik, tetapi dapat memiliki ID pelacakan yang sama. Tugas dan urutannya dijadwalkan digunakan untuk menghitung periode PWT untuk setiap tugas.
Gunakan Pengelola Tugas Driver SDK untuk membuat tugas di Fleet Engine.
Tugas pengiriman
Tugas pengiriman terkait dengan pengambilan atau pengantaran barang. Anda harus menentukan nomor pelacakan atau ID saat membuat tugas pengiriman. Anda juga harus menentukan waktu singgah untuk memperhitungkan waktu tambahan guna menyelesaikan tugas, mencari tempat parkir, atau berjalan ke lokasi serah terima.
- Buat tugas pengambilan untuk mengambil pengiriman, dengan menentukan lokasi pengambilan dan nomor pelacakan atau ID.
- Buat tugas pengiriman untuk mengirimkan pengiriman, dengan menentukan lokasi pengiriman dan nomor pelacakan atau ID.
Tugas tidak tersedia
Buat tugas tidak tersedia untuk jangka waktu saat kendaraan tidak akan tersedia untuk diambil atau dikirim. Ini bisa menjadi istirahat untuk mengisi bahan bakar kendaraan atau istirahat pengemudi. Tentukan panjang jeda saat Anda membuat tugas. Jeda tidak harus dilakukan di lokasi tertentu, tetapi menentukan lokasi akan memberikan periode PWT yang lebih akurat sepanjang hari.
Selama tugas tidak tersedia, tidak ada informasi lokasi yang dibagikan kepada pengguna akhir. Misalnya, lokasi kendaraan pengiriman disembunyikan dari pengelola armada menggunakan Library Pelacakan Fleet.
Tugas penghentian terjadwal
Buat tugas perhentian terjadwal untuk membuat model perhentian yang akan dibuat oleh kendaraan pengiriman. Misalnya, Anda dapat membuat tugas penghentian terjadwal untuk perhentian pengambilan terjadwal harian 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 untuk membuat model transfer feeder-kendaraan atau perhentian di pusat layanan dan titik layanan.
Anda dapat melihat kolom tertentu yang terdapat di 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 mematuhi persyaratan format berikut:
- ID harus berupa string Unicode yang valid.
- ID harus terdiri dari 64 karakter atau kurang.
- ID akan dinormalkan sesuai dengan Formulir Normalisasi Unicode C.
- ID tidak boleh berisi karakter ASCII berikut: "/", ":", "\", "?", atau "#".
Berikut ini adalah 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 Summer 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 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. Tugas tersebut tidak boleh digunakan kembali untuk kendaraan lain kecuali jika tidak ada tugas aktif untuk kendaraan tersebut.
Pastikan untuk memeriksa error NOT_FOUND saat Anda 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
Entity DeliveryVehicle
berisi kolom berulang
DeliveryVehicleAttribute
. ListDeliveryVehicles
API menyertakan kolom filter
yang dapat membatasi entity DeliveryVehicle
yang ditampilkan kepada entity dengan
atribut yang ditentukan. DeliveryVehicleAttribute
tidak memengaruhi perilaku perutean
Fleet Engine.
Jangan sertakan informasi identitas pribadi atau sensitif di atribut karena kolom ini mungkin dapat dilihat oleh pengguna.
Keberlangsungan tugas
Tugas di Fleet Engine dapat dibuat, diperbarui, dan diinterogasi menggunakan antarmuka gRPC atau REST Deliveries API.
Objek Task
memiliki kolom status untuk melacak progresnya melalui
siklus prosesnya. Nilainya berpindah dari OPEN ke CLOSED. Tugas baru dibuat
dalam status OPEN, yang menunjukkan bahwa:
- Tugas belum ditugaskan ke kendaraan pengiriman.
- Kendaraan pengiriman belum lulus perhentian kendaraan yang ditetapkan untuk tugas.
Tugas hanya dapat diberikan ke kendaraan jika dalam status BUKA.
Tugas dapat dibatalkan dengan menghapusnya dari daftar perhentian kendaraan. Statusnya kemudian akan otomatis ditetapkan ke TUTUP.
Saat kendaraan tugas menyelesaikan penghentian kendaraan tugas, perbarui kolom hasil tugas menjadi Berhasil atau FAILED (Gagal) dan tentukan stempel waktu peristiwa. Hasil tugas dapat ditetapkan kapan saja sebelum atau setelah tugas selesai, tetapi hanya dapat ditetapkan sekali.
Library Pelacakan Fleet JavaScript kemudian dapat menunjukkan hasil tugas. Status tugas otomatis ditetapkan ke CLOSED. Untuk informasi selengkapnya, lihat Melacak Fleet dengan Library Pelacakan Fleet 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 akan otomatis menghapus tugas setelah tujuh hari tanpa pembaruan. Jika ingin menyimpan data tugas lebih dari tujuh hari, Anda harus menerapkan fungsi tersebut sendiri.
Atribut tugas
Entity Task
berisi kolom
TaskAttribute
berulang, yang dapat memiliki nilai dari salah satu dari 3 jenis: string, angka,
dan bool. API ListTasks
menyertakan kolom filter
yang dapat membatasi entity
Task
yang ditampilkan ke entity dengan atribut yang ditentukan. TaskAttribute
tidak
memengaruhi perilaku perutean Fleet Engine.
Jangan sertakan informasi identitas pribadi atau sensitif di atribut karena kolom ini mungkin dapat dilihat oleh pengguna.
Mengelola siklus proses kendaraan dan tugas
Untuk mengelola siklus proses kendaraan dan tugas dalam sistem, Anda menggunakan Fleet Engine Deliveries API untuk membuat, mengupdate, dan melacak kendaraan Anda serta tugasnya yang terkait. Sistem internal Anda bertindak sebagai sumber data tepercaya yang ditambahkan oleh Fleet Engine Deliveries API atas nama Anda.
Pada saat yang sama, aplikasi pengemudi berkomunikasi langsung ke Fleet Engine untuk memperbarui lokasi perangkat dan informasi rute. Model ini memungkinkan Fleet Engine mengelola lokasi real-time secara efisien dan mengirimkannya langsung ke library pelacakan, yang kemudian dapat Anda gunakan untuk konsumen yang memerlukan pembaruan status pesanan mereka.
Misalnya, anggaplah Anda memiliki skenario berikut:
- Pengemudi mendekati perhentian pengiriman dan Fleet Engine mengirimkan lokasi perangkat ke library pelacakan, yang digunakan aplikasi konsumen untuk memberi tahu konsumen tentang jarak paket mereka.
- Setelah pengemudi menyelesaikan pengiriman, mereka mengklik tombol "Pengiriman" di aplikasi pengemudi.
- Tindakan ini mengirimkan informasi ke sistem backend Anda, yang melakukan langkah validasi dan verifikasi bisnis yang diperlukan.
- Sistem Anda akan mengonfirmasi tugas sebagai Berhasil dan mengupdate Fleet Engine menggunakan Deliveries API.
Diagram berikut menggambarkan proses ini di level umum. Tabel ini juga menunjukkan hubungan standar antara sistem Anda, klien, dan Fleet Engine.
Pengelolaan token klien
Setiap pembaruan lokasi yang berasal dari aplikasi pengemudi dan dikirim langsung ke Fleet Engine memerlukan token otorisasi. Pendekatan yang direkomendasikan untuk menangani update dari klien ke Fleet Engine adalah memberikan token dengan cakupan terbatas kepada aplikasi driver sehingga hanya dapat memperbarui lokasi perangkat di Fleet Engine. Untuk jenis token ini, Anda menggunakan peran akun layanan yang dikenal sebagai Fleet Engine Delivery Untrusted Driver User. Hal ini memastikan bahwa panggilan yang berasal dari perangkat seluler--dianggap sebagai lingkungan dengan kepercayaan rendah--mematuhi prinsip hak istimewa terendah.
Peran akun layanan lainnya
Jika Anda ingin mengizinkan aplikasi pengemudi untuk melakukan update Flet Engine langsung di luar yang dibatasi pada peran Pengemudi yang Tidak Tepercaya, seperti untuk pembaruan tugas tertentu, Anda dapat menggunakan peran Pengemudi Tepercaya. Untuk mengetahui informasi tentang model yang menggunakan peran Pengemudi Tepercaya, lihat Model Driver Tepercaya.
Untuk mengetahui informasi selengkapnya tentang penggunaan peran pengemudi yang tidak tepercaya dan tepercaya, lihat Penyiapan project Cloud.
Membuat model hari kerja
Tabel berikut menjelaskan gambaran hari kerja bagi pengemudi jarak pertama atau terakhir di perusahaan pengiriman dan logistik. Detailnya mungkin berbeda dengan perusahaan Anda, tetapi Anda dapat melihat bagaimana Anda dapat membuat model hari kerja.
Waktu | Aktivitas | Pemodelan |
---|---|---|
Dalam 24 jam sejak awal hari | Operator menugaskan 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
perhentian terjadwal.
Tugas harus ditetapkan ke kendaraan setelah rangkaian paket pengiriman dan urutan pengirimannya diselesaikan. |
Awal hari | Pengemudi memulai hari di depot dengan login ke aplikasi Pengemudi. | Melakukan inisialisasi Delivery Driver API. Buat kendaraan pengiriman di Fleet Engine sesuai kebutuhan. |
Pengemudi memuat kiriman ke kendaraan pengiriman, memindai kiriman. | Jika tugas pengiriman pengiriman tidak dibuat sebelumnya, buat tugas pengiriman pengiriman pada saat pemindaian. | |
Pengemudi mengonfirmasi urutan tugas yang akan dilakukan. | Jika tidak dibuat sebelumnya, buat tugas pengambilan pengiriman, ketidaktersediaan terjadwal, dan perhentian terjadwal. | |
Pengemudi meninggalkan depot dan berkomitmen ke jumlah tugas berikutnya yang akan diselesaikan. | Tetapkan semua tugas atau subkumpulan tugas ke kendaraan dengan menetapkan urutan penyelesaiannya. | |
Pengemudi mengirimkan pengiriman. | Setelah tiba di halte pengiriman, lakukan tindakan terkait kendaraan yang tiba di perhentian. Setelah pengiriman, 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 terkait kendaraan menyelesaikan perhentian dan kendaraan akan menuju ke perhentian berikutnya. | |
Pengemudi bertemu kendaraan pengumpan untuk mentransfer pengiriman tambahan ke kendaraan pengiriman. | Titik pertemuan untuk transfer antara kendaraan feeder dan kendaraan pengiriman
harus dimodelkan sebagai perhentian terjadwal.
Setelah mentransfer dan memindai pengiriman, buat tugas pengiriman jika tugas tersebut belum dibuat. Kemudian, perbarui urutan penyelesaian 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. | |
Siang | Pengemudi beristirahat makan siang. | Jika lokasi dikaitkan dengan tugas tidak tersedia, perlakukan seperti
tugas lainnya. Melakukan tindakan terkait kendaraan
tiba di perhentian,
kendaraan menyelesaikan perhentian
dan kendaraan akan menuju ke perhentian berikutnya.
Jika tidak, Anda tidak perlu melakukan tindakan lebih lanjut hingga jeda berakhir. Hapus tugas dengan mengonfirmasi tugas berikutnya dan tugas lainnya, serta memperbarui urutan tugas. |
Pengemudi mengambil kiriman. | Ini dimodelkan seperti perhentian pengiriman. Melakukan tindakan terkait kendaraan yang tiba di perhentian dan menutup tugas serta, (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 menuju ke perhentian berikutnya. Catatan: Untuk memastikan penagihan yang benar, semua pengambilan harus memiliki tugas pengiriman yang sesuai. Jika pengambilan akan dikirim ke lokasi lain pada rute yang sama oleh pengemudi pada hari tersebut, sebaiknya buat model tugas pengiriman tersebut seperti tugas pengiriman lainnya di rute tersebut. Jika pengemudi membawa kembali barang pengambilan ke depot, sebaiknya buat tugas pengiriman di tujuan depot. | |
Pengemudi membuat perhentian terjadwal untuk mengambil pengiriman dari kotak pengantaran. | Ini dimodelkan seperti halte pengambilan lainnya. Melakukan tindakan terkait kendaraan yang tiba di perhentian dan penutupan tugas. Setelah menyelesaikan semua tugas di perhentian dan mulai mengemudi ke perhentian berikutnya, lakukan tindakan yang terkait dengan kendaraan menyelesaikan perhentian dan kendaraan menuju ke perhentian berikutnya. | |
Pengemudi menerima notifikasi bahwa pengiriman dialihkan ke lokasi alternatif. | Tetapkan status tugas pengiriman asli ke COMPLETED dan buat tugas pengiriman baru untuk lokasi pengiriman baru. Untuk informasi selengkapnya, lihat Mengubah rute pengiriman. | |
Pengemudi mencoba mengirimkan paket, tetapi tidak dapat melakukannya. | Pemodelannya 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, jika ingin, 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 menuju ke perhentian berikutnya. | |
Pengemudi diberi tahu untuk menunda (bukan mengirimkan) pengiriman. | Setelah notifikasi diterima dan dikonfirmasi, tetapkan status tugas ke COMPLETED. | |
Pengemudi diberi tahu untuk memberikan pengiriman tertentu berikutnya, sehingga mengubah komitmen pengiriman. | Perbarui urutan tugas. | |
Pengemudi memilih untuk mengirim pengiriman yang tidak berurutan. | Perbarui urutan tugas, lalu lanjutkan seperti biasa. | |
Pengemudi mengirimkan beberapa pengiriman ke satu lokasi. | Model ini mirip dengan satu perhentian pengiriman. Setelah tiba di perhentian, lakukan tindakan terkait kendaraan yang tiba di perhentian. Setelah mengirimkan setiap pengiriman, tutup setiap tugas dan, jika perlu, 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 menuju ke perhentian berikutnya. | |
Akhir hari | Pengemudi kembali ke depot. | Jika pengemudi kembali ke depot dengan pengiriman diambil selama rutenya, Anda juga harus membuat dan menutup setiap paket sebagai tugas pengiriman untuk memastikan penagihan yang benar. Anda dapat melakukannya dengan membuat model depot seperti perhentian pengiriman lainnya. Jika depot tidak digunakan sebagai perhentian pengiriman, Anda masih dapat membuat model depot sebagai perhentian terjadwal. Dengan demikian, pengemudi Anda dapat melihat rute kembali ke depot dan memberikan visibilitas terkait perkiraan waktu kedatangan mereka. |
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.
Update lokasi harus ditangguhkan saat pengemudi tidak mengemudi karena kualitas sinyal lokasi menurun secara drastis saat seseorang berada di dalam gedung.
Frekuensi pembaruan lokasi dapat ditetapkan dalam Driver SDK. Secara default, update akan dikirimkan setiap 10 detik.
Perhentian kendaraan dan lokasi pengiriman
Perhentian kendaraan adalah tempat kendaraan pengiriman menyelesaikan tugas pengiriman atau beberapa tugas lainnya. Lokasi ini dapat berupa titik akses seperti dok pemuatan atau lokasi yang langsung diambil dari jalan.
Lokasi pengiriman adalah lokasi pengiriman atau pengambilan. Perjalanan ke dan dari lokasi pengiriman mungkin memerlukan waktu berjalan kaki dari pemberhentian kendaraan.
Misalnya, saat pengemudi mengirimkan pengiriman ke toko di mal, kendaraan pengiriman akan berhenti di tempat parkir mal dekat pintu masuk terdekat ke toko tersebut. Ini adalah perhentian kendaraan. Pengemudi kemudian berjalan dari perhentian kendaraan ke lokasi dalam mal tempat toko berada. Ini adalah lokasi pengiriman.
Untuk pengalaman pelacakan pengiriman terbaik bagi pengguna, pertimbangkan cara tugas pengiriman ditetapkan ke perhentian kendaraan, dan perhatikan bahwa jumlah pemberhentian kendaraan yang tersisa untuk tugas pengiriman dilaporkan kepada pengguna guna 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 tidak akan terlalu membantu pengguna karena pelacakan hanya tersedia setelah kendaraan berhenti sebelum tujuannya dalam jumlah terbatas. Memiliki banyak perhentian kendaraan yang selesai dalam waktu singkat tidak akan memberikan banyak waktu bagi pengguna untuk melacak progres pengiriman mereka.
Menggunakan SDK seluler
Sebelum melakukan panggilan apa pun ke Driver SDK, pastikan untuk melakukan inisialisasi.
Menginisialisasi Delivery Driver API
Sebelum melakukan inisialisasi 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.
ID entitas unik
Format dan nilai ID entity unik yang digunakan dalam panggilan REST akan buram bagi Fleet Engine. Hindari penggunaan ID yang bertambah secara otomatis, dan pastikan ID tidak berisi informasi identitas pribadi (PII), seperti nomor telepon pengemudi.
Buat 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 sesuai panduan API untuk ID yang ditentukan pengguna.
Anda harus menggunakan kolom DeliveryVehicleId
untuk menetapkan ID kendaraan.
Saat membuat DeliveryVehicle
, Anda dapat menentukan dua kolom secara opsional:
- 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 mengosongkan kolom DeliveryVehicle
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 ID 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
- lokasiterakhir
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 entity 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 menetapkan kolom, 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))
.setTargetTimeWindow(
TimeWindow.newBuilder()
.setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
.setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
.addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
.addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
.addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
.build();
// Task request
CreateTaskRequest createTaskRequest =
CreateTaskRequest.newBuilder() // No need for the header
.setParent(parent) // Avoid using auto-incrementing IDs for the taskId
.setTaskId("task-8241890") // Task ID assigned by the Provider
.setTask(task) // Initial state
.build();
// Error handling
// If Fleet Engine does not have a task with that ID and the credentials of the
// requestor pass, the service creates the task successfully.
try {
Task createdTask = deliveryService.createTask(createTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
Untuk membuat tugas pengambilan pengiriman dari lingkungan server, lakukan panggilan REST HTTP ke `CreateTask':
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>
<id> adalah ID unik untuk tugas tersebut. Nomor 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 yang wajib diisi:
Kolom Nilai tipe {i>Type.PICKUP<i} dengan status tersembunyi akhir Negara Bagian.OPEN ID pelacakan Nomor atau ID yang Anda gunakan untuk melacak pengiriman. lokasi terencana Lokasi tempat tugas akan diselesaikan, dalam hal ini lokasi pengambilan pengiriman. taskDuration Perkiraan waktu, dalam detik, yang diperlukan untuk mengambil pengiriman di lokasi pengambilan. Kolom opsional:
Kolom Nilai targetTimeWindow Rentang waktu saat tugas harus diselesaikan. Hal ini saat ini tidak memengaruhi perilaku pemilihan rute. atribut Daftar atribut Task kustom. Setiap atribut harus memiliki kunci yang unik.
Semua kolom lain dalam entity akan diabaikan untuk pembuatan. Fleet Engine menampilkan
pengecualian jika permintaan menyertakan deliveryvehicleId yang ditetapkan. Anda menetapkan
tugas menggunakan UpdateDeliveryVehicleRequests
. Untuk mengetahui informasi selengkapnya, lihat
Menetapkan tugas ke kendaraan.
Contoh perintah curl
:
# Set $JWT, $PROJECT_ID, $TRACKING_ID, and $TASK_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"type": "PICKUP",
"state": "OPEN",
"trackingId": "${TRACKING_ID}",
"plannedLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
},
"taskDuration": "90s",
"targetTimeWindow": {
"startTime": "2023-03-29T21:00:00Z",
"endTime": "2023-03-29T23:00:00Z"
}
}
EOM
Membuat tugas pengiriman 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))
.setTargetTimeWindow(
TimeWindow.newBuilder()
.setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
.setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
.addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
.addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
.addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
.build();
// Task request
CreateTaskRequest createTaskRequest =
CreateTaskRequest.newBuilder() // No need for the header
.setParent(parent) // Avoid using auto-incrementing IDs for the taskId
.setTaskId("task-8241890") // Task ID assigned by the Provider
.setTask(task) // Initial state
.build();
// Error handling
// If Fleet Engine does not have task with that ID and the credentials of the
// requestor pass, the service creates the task successfully.
try {
Task createdTask = deliveryService.createTask(createTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
Untuk membuat tugas 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. Nomor 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 yang wajib diisi:
Kolom Nilai tipe Type.Pengiriman dengan status tersembunyi akhir Negara Bagian.OPEN ID pelacakan Nomor atau ID yang Anda gunakan untuk melacak pengiriman. lokasi terencana Lokasi tempat tugas akan diselesaikan, dalam hal ini lokasi pengiriman untuk pengiriman ini. taskDuration Perkiraan waktu, dalam detik, yang diperlukan untuk menurunkan pengiriman di lokasi pengiriman. Kolom opsional:
Kolom Nilai targetTimeWindow Rentang waktu saat tugas harus diselesaikan. Hal ini saat ini tidak memengaruhi perilaku pemilihan rute. atribut Daftar atribut Task kustom. Setiap atribut harus memiliki kunci yang unik.
Semua kolom lain dalam entity akan diabaikan untuk pembuatan. Fleet Engine menampilkan
pengecualian jika permintaan menyertakan deliveryvehicleId yang ditetapkan. Anda menetapkan
tugas menggunakan UpdateDeliveryVehicleRequests
. Untuk mengetahui informasi selengkapnya, lihat
Menetapkan tugas ke kendaraan.
Contoh perintah curl
:
# Set $JWT, $PROJECT_ID, $TRACKING_ID, and $TASK_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"type": "DELIVERY",
"state": "OPEN",
"trackingId": "${TRACKING_ID}",
"plannedLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
},
"taskDuration": "90s",
"targetTimeWindow": {
"startTime": "2023-03-29T21:00:00Z",
"endTime": "2023-03-29T23:00:00Z"
}
}
EOM
Membuat Tugas Massal
Anda bisa membuat batch tugas dari lingkungan server.
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk membuat dua tugas, satu untuk pengiriman dan satu 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 tugas pengiriman dan 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 yang wajib diisi:
Kolom Nilai permintaan Array< CreateTasksRequest
>Kolom opsional:
Kolom Nilai header `DeliveryRequestHeader`
Setiap elemen CreateTasksRequest
di requests
harus meneruskan aturan validasi
yang sama seperti permintaan CreateTask
, kecuali kolom parent
dan header
bersifat opsional. Jika ditetapkan, kolom tersebut harus sama persis dengan kolomnya masing-masing di BatchCreateTasksRequest
tingkat atas. Lihat bagian membuat tugas pengambilan pengiriman dan membuat tugas pengiriman untuk mengetahui aturan validasi spesifik bagi 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 tidak tersedia (misalnya, untuk jeda bagi pengemudi atau pengisian daya kendaraan) dari SDK Driver, atau dari lingkungan server. Tugas tidak tersedia terjadwal tidak boleh menyertakan ID pelacakan. Anda dapat memberikan lokasi secara opsional.
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk membuat tugas 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 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 entity Task
:
Kolom yang wajib diisi:
Kolom Nilai tipe Jenis.UNAVAILABLE dengan status tersembunyi akhir Negara Bagian.OPEN taskDuration Durasi jeda dalam detik. Kolom opsional:
Kolom Nilai lokasi terencana Lokasi jeda jika harus diambil di lokasi tertentu.
Semua kolom lain dalam entity akan diabaikan untuk pembuatan. Fleet Engine menampilkan
pengecualian jika permintaan menyertakan deliveryvehicleId yang ditetapkan. Anda menetapkan
tugas menggunakan UpdateDeliveryVehicleRequests
. Untuk mengetahui informasi selengkapnya, lihat
Menetapkan tugas ke kendaraan.
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 mungkin tidak menyertakan ID pelacakan.
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk membuat tugas penghentian 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 penghentian terjadwal 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. 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 yang wajib diisi:
Kolom Nilai tipe Ketik.ScheduleD_STOP dengan status tersembunyi akhir Negara Bagian.OPEN lokasirencana Lokasi perhentian. taskDuration Perkiraan durasi perhentian dalam hitungan detik. Kolom opsional:
- Tidak ada
Semua kolom lain dalam entity akan diabaikan untuk pembuatan. Fleet Engine menampilkan
pengecualian jika permintaan menyertakan deliveryvehicleId yang ditetapkan. Anda menetapkan
tugas menggunakan UpdateDeliveryVehicleRequests
. Untuk mengetahui informasi selengkapnya, lihat
Menetapkan tugas ke kendaraan.
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
Setel interval waktu target
Rentang waktu target adalah TimeWindow saat tugas harus diselesaikan. Misalnya, jika Anda mengomunikasikan jangka waktu pengiriman kepada penerima pengiriman, Anda dapat menggunakan jangka waktu target tugas untuk mencatat jangka waktu ini dan membuat pemberitahuan atau menganalisis performa setelah perjalanan menggunakan kolom ini.
Periode waktu target terdiri dari waktu mulai dan waktu berakhir, serta dapat ditetapkan pada jenis tugas apa pun. Periode waktu target saat ini tidak memengaruhi perilaku pemilihan rute.
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk menetapkan jangka waktu tugas:
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)
.setTargetTimeWindow(
TimeWindow.newBuilder()
.setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
.setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
.build();
// Task request
UpdateTaskRequest updateTaskRequest =
UpdateTaskRequest.newBuilder() // No need for the header
.setTask(task)
.setUpdateMask(FieldMask.newBuilder().addPaths("targetTimeWindow"))
.build();
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 menetapkan periode waktu tugas menggunakan HTTP, panggil UpdateTask
:
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=targetTimeWindow
<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 yang wajib diisi:
Kolom Nilai targetTimeWindow Rentang waktu saat tugas harus diselesaikan. Hal ini saat ini tidak memengaruhi perilaku pemilihan rute Kolom opsional:
- Tidak ada
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=targetTimeWindow" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"targetTimeWindow": {
"startTime": "2023-03-29T21:00:00Z",
"endTime": "2023-03-29T23:00:00Z"
}
}
EOM
Tetapkan konfigurasi visibilitas pelacakan tugas
Visibilitas data di library Pelacakan Pengiriman dan data tersebut
yang ditampilkan dari panggilan ke GetTaskTrackingInfo
dapat dikontrol pada dasar
per tugas dengan menetapkan
TaskTrackingViewConfig
pada tugas. Lihat
Tugas kendaraan aktif
untuk mengetahui informasi selengkapnya. Hal ini dapat dilakukan saat membuat atau memperbarui
tugas. Berikut adalah contoh pembaruan tugas dengan konfigurasi ini:
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk menetapkan konfigurasi tampilan pelacakan tugas:
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)
.setTaskTrackingViewConfig(
TaskTrackingViewConfig.newBuilder()
.setRoutePolylinePointsVisibility(
VisibilityOption.newBuilder().setRemainingStopCountThreshold(3))
.setEstimatedArrivalTimeVisibility(
VisibilityOption.newBuilder().remainingDrivingDistanceMetersThreshold(5000))
.setRemainingStopCountVisibility(
VisibilityOption.newBuilder().setNever(true)))
.build();
// Task request
UpdateTaskRequest updateTaskRequest =
UpdateTaskRequest.newBuilder() // No need for the header
.setTask(task)
.setUpdateMask(FieldMask.newBuilder().addPaths("taskTrackingViewConfig"))
.build();
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 menetapkan jendela konfigurasi tampilan pelacakan tugas menggunakan HTTP, panggil UpdateTask
:
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskTrackingViewConfig
<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 yang wajib diisi:
Kolom Nilai taskTrackingViewConfig Konfigurasi untuk pelacakan tugas yang menentukan elemen data mana yang terlihat oleh pengguna akhir dalam keadaan apa. Kolom opsional:
- Tidak ada
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=taskTrackingViewConfig" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"taskTrackingViewConfig": {
"routePolylinePointsVisibility": {
"remainingStopCountThreshold": 3
},
"estimatedArrivalTimeVisibility": {
"remainingDrivingDistanceMetersThreshold": 5000
},
"remainingStopCountVisibility": {
"never": true
}
}
}
EOM
Menetapkan tugas ke kendaraan
Tugas diberikan ke kendaraan pengiriman dengan memperbarui pengurutan tugas untuk kendaraan. Pengurutan tugas untuk kendaraan ditentukan oleh daftar perhentian kendaraan untuk kendaraan pengiriman. Setiap perhentian kendaraan dapat diberikan satu atau lebih tugas.
Memperbarui urutan tugas untuk tugas yang sebelumnya ditetapkan ke kendaraan lain akan menyebabkan error.
Untuk mengubah pengiriman dari satu kendaraan ke kendaraan lain, tutup tugas awal, lalu buat ulang sebelum menugaskan kendaraan barunya.
Memperbarui pengurutan tugas
Anda dapat memperbarui urutan eksekusi tugas yang ditetapkan ke kendaraan baik dari Driver SDK, atau dari lingkungan server. Kedua metode 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 dimasukkan dalam urutan yang diperbarui. Menetapkan 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:
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();
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 `UpdateDeliveryOwner':
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments
<id> adalah ID unik untuk kendaraan pengiriman di fleet 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 yang wajib diisi:
Kolom Nilai remainingvehicleJourneySegments Daftar segmen perjalanan untuk tugas sesuai urutan harus dieksekusi. Tugas pertama dalam daftar dijalankan terlebih dahulu. sisaKendaraanJourneySegments[i].stop Perhentian untuk tugas i dalam daftar. remainingVehicleJourneySegments[i].stop.plannedLocation Lokasi yang direncanakan untuk perhentian. sisaKendaraanJourneySegments[i].stop.tasks Daftar tugas yang akan dilakukan pada perhentian kendaraan ini. sisaKendaraanJourneySegments[i].stop.state Status.BARU Kolom opsional:
- Tidak ada
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}"
}
]
}
},
{
"stop": {
"state": "NEW",
"plannedLocation": {
"point": {
"latitude": 37.3382,
"longitude": 121.8863
}
},
"tasks": [
{
"taskId": "${TASK2_ID}"
}
]
}
}
]
}
EOM
Kendaraan sedang menuju perhentian berikutnya
Mesin Armada 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 menuju 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();
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 `UpdateDeliveryOwner':
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments
<id> adalah ID unik untuk kendaraan pengiriman di fleet 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 yang wajib diisi:
Kolom Nilai remainingvehicleJourneySegments Daftar perhentian kendaraan yang tersisa dengan statusnya ditandai sebagai State.NEW. Perhentian pertama dalam daftar harus memiliki status yang ditandai sebagai State.ENROUTE. Kolom opsional:
- Tidak ada
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}"
}
]
}
},
{
"stop": {
"state": "NEW",
"plannedLocation": {
"point": {
"latitude": 37.3382,
"longitude": 121.8863
}
},
"tasks": [
{
"taskId": "${TASK2_ID}"
}
]
}
}
]
}
EOM
Kendaraan tiba di perhentian
Mesin Armada harus diberi tahu saat kendaraan tiba di perhentian. Anda dapat memberi tahu Armada 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();
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 `UpdateDeliveryOwner':
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments
<id> adalah ID unik untuk kendaraan pengiriman di fleet 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 yang wajib diisi:
Kolom Nilai remainingvehicleJourneySegments Perhentian yang Anda tiba dengan status ditetapkan sebagai State.ARRIVED, diikuti dengan daftar perhentian kendaraan lainnya dengan statusnya ditandai sebagai State.NEW. Kolom opsional:
- Tidak ada
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}"
}
]
}
},
{
"stop": {
"state": "NEW",
"plannedLocation": {
"point": {
"latitude": 37.3382,
"longitude": 121.8863
}
},
"tasks": [
{
"taskId": "${TASK2_ID}"
}
]
}
}
]
}
EOM
Kendaraan menyelesaikan perhentian
Mesin Armada harus diberi tahu saat kendaraan menyelesaikan perhentian. Hal ini menyebabkan semua tugas yang terkait dengan perhentian ditetapkan ke status DITUTUP. 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 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();
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 fleet 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 yang wajib diisi:
Kolom Nilai last_vehicle_journey_segments Perhentian yang telah Anda selesaikan tidak akan ada lagi dalam daftar perhentian kendaraan yang tersisa. Kolom opsional:
- Tidak ada
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, lokasi hasil tugas, dan atribut 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 untuk kendaraan, beri tahu Fleet Engine bahwa kendaraan telah menyelesaikan perhentian tempat tugas dilakukan atau hapus tugas dari daftar perhentian kendaraan. Untuk melakukannya, Anda dapat menetapkan daftar perhentian kendaraan yang tersisa sama seperti saat memperbarui urutan tugas untuk kendaraan.
Jika tugas belum ditetapkan untuk kendaraan dan harus ditutup, perbarui tugas ke status DITUTUP. Namun, Anda tidak boleh membuka kembali tugas yang DITUTUP.
Menutup tugas tidak menunjukkan keberhasilan atau kegagalan. Hal ini menunjukkan bahwa tugas tidak lagi dianggap sedang berlangsung. Untuk pelacakan perangkat, penting untuk menunjukkan hasil aktual dari suatu tugas agar 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();
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 entity Task
:
Kolom yang wajib diisi:
Kolom Nilai dengan status tersembunyi akhir Status.DITUTUP Kolom opsional:
Kolom Nilai hasil tugas Results.RESULTS atau Hasil.FAILED waktuHasiltugas Waktu saat tugas selesai. taskOutcomeLocation Lokasi tempat tugas diselesaikan. Fleet Engine akan menetapkan parameter ini ke lokasi kendaraan terakhir secara default, 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, hal ini menunjukkan bahwa tugas tidak lagi dianggap sedang berlangsung. Untuk pelacakan perangkat, penting untuk menunjukkan hasil sebenarnya dari suatu tugas agar 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 dalam status DITUTUP dapat ditetapkan hasilnya menjadi BERHASIL atau GAGAL. Fleet Engine hanya menagih tugas pengiriman dengan status down.
Saat menandai hasil tugas, Fleet Engine akan otomatis mengisi lokasi hasil tugas dengan lokasi kendaraan terakhir yang diketahui. Perilaku ini dapat diganti.
gRPC
Anda memiliki opsi untuk menetapkan lokasi hasil tugas saat menetapkan hasilnya. Tindakan ini akan mencegah Fleet Engine menyetelnya ke default lokasi kendaraan terakhir. Anda juga dapat menimpa Fleet Engine lokasi hasil tugas 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 lokasi 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 menjadi perintah 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();
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, buat 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 yang wajib diisi:
Kolom Nilai hasil tugas Results.RESULTS atau Hasil.FAILED waktuHasiltugas Stempel waktu saat hasil tugas ditetapkan (dari penyedia). Ini adalah waktu saat tugas selesai. Kolom opsional:
Kolom Nilai taskOutcomeLocation Lokasi tempat tugas diselesaikan. Fleet Engine akan menetapkan parameter ini ke lokasi kendaraan terakhir secara default, 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 mengalihkan pengiriman, tutup tugas pengiriman tanpa menetapkan hasil, lalu buat tugas baru dengan lokasi terencana yang diperbarui. Setelah membuat tugas baru, tetapkan tugas ke kendaraan yang sama. Untuk mengetahui informasi selengkapnya, lihat menutup tugas pengiriman dan menetapkan tugas.
Gunakan alat pengumpan dan pengiriman
Jika Anda menggunakan kendaraan pengumpan 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, hanya tetapkan tugas pengiriman pengiriman untuk pengiriman yang ditransfer setelah dimuat ke kendaraan pengiriman. Untuk mengetahui informasi selengkapnya, lihat perhentian terjadwal.
Status pengiriman toko dan informasi meta lainnya
Saat tugas pengiriman selesai, status dan hasil tugas dicatat dalam tugas. Namun, Anda mungkin ingin memperbarui informasi meta lainnya yang 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 mengetahui informasi selengkapnya, lihat Masa aktif tugas.
Cari 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, buat 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 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}"
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, buat 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 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}"
Cari informasi tugas pengiriman berdasarkan ID pelacakannya
Anda dapat mencari informasi tugas pengiriman dengan cara berikut, yang masing-masing memiliki tujuan terpisah:
- berdasarkan ID tugas: digunakan oleh pengguna seperti operator fleet yang memiliki akses ke tampilan lengkap data tugas.
- berdasarkan ID pelacakan: digunakan oleh software klien untuk memberikan informasi terbatas kepada pengguna akhir, seperti kapan paket akan tiba di rumah mereka.
Bagian ini membahas pencarian informasi tugas berdasarkan ID pelacakan. Jika Anda ingin mencari tugas berdasarkan ID tugas, buka mencari tugas.
Untuk mencari informasi berdasarkan ID pelacakan, Anda dapat menggunakan salah satu hal berikut:
Persyaratan pencarian
Informasi pengiriman yang diberikan oleh ID pelacakan mematuhi aturan visibilitas yang ditetapkan di Mengontrol visibilitas lokasi yang dilacak.
Gunakan Fleet Engine untuk mencari informasi pengiriman berdasarkan ID pelacakan. Driver SDK tidak mendukung pencarian informasi berdasarkan ID pelacakan. Untuk melakukan ini dengan Fleet Engine, Anda harus menggunakan lingkungan server atau browser.
Gunakan token sesedikit mungkin untuk membatasi risiko keamanan. Misalnya, jika Anda menggunakan Token Konsumen Pengiriman, setiap panggilan Fleet Engine Deliveries API hanya menampilkan informasi yang relevan dengan pengguna akhir tersebut, seperti pengirim atau penerima pengiriman. Semua informasi lain dalam respons disamarkan. Untuk mengetahui informasi selengkapnya tentang token, lihat Membuat Token Web JSON (JWT) untuk otorisasi.
Pencarian dengan Java yang menggunakan gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk mencari informasi tentang tugas pengiriman berdasarkan ID pelacakannya.
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;
GetTaskTrackingInfoRequest getTaskTrackingInfoRequest = GetTaskTrackingInfoRequest.newBuilder() // No need for the header
.setParent(parent)
.setTrackingId(TRACKING_ID)
.build();
try {
TaskTrackingInfo taskTrackingInfo = deliveryService.getTaskTrackingInfo(getTaskTrackingInfoRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
Pencarian yang menggunakan HTTP
Untuk mencari tugas pengiriman dari browser, lakukan panggilan REST HTTP ke
GetTaskTrackingInfo
:
GET https://fleetengine.googleapis.com/v1/providers/<project_id>/taskTrackingInfo/<tracking_id>
<tracking_id> adalah ID pelacakan yang terkait dengan tugas.
Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang diterbitkan oleh factory token Fleet Engine.
Jika pencarian berhasil, isi respons berisi entitas taskTrackingInfo.
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}/taskTrackingInfo/${TRACKING_ID}"
Membuat daftar tugas
Anda dapat membuat daftar tugas dari server atau lingkungan browser. Driver SDK tidak mendukung listingan tugas.
Mencantumkan tugas akan meminta akses yang luas ke tugas. Mencantumkan tugas hanya ditujukan untuk pengguna tepercaya. Menggunakan Token Delivery Fleet Reader atau Delivery Super User Authentication saat membuat permintaan tugas daftar.
Kolom berikut yang disamarkan pada tugas yang tercantum:
- VehicleStop.planned_location
- VehicleStop.state
- VehicleStop.TaskInfo.taskId
Tugas yang tercantum dapat difilter menurut sebagian besar properti tugas. Untuk mengetahui sintaksis kueri filter, lihat AIP-160. Daftar berikut menampilkan properti tugas yang valid yang dapat Anda gunakan untuk pemfilteran:
- atribut
- delivery_vehicle_id
- dengan status tersembunyi akhir
- lokasi_direncanakan
- {i>task_duration<i}
- {i>task_outcome<i}
- task_outcome_location
- {i>task_outcome_location_source<i}
- {i>task_outcome_time<i}
- tracking_id [id_pelacakan]
- tipe
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 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 mengetahui daftar lengkap operator kueri filter.
Jika kueri filter tidak 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, ukuran default yang wajar akan digunakan. Jika ukuran halaman yang diminta melebihi nilai maksimum internal, ukuran 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. Jika token halaman yang ditampilkan kosong, tidak ada lagi tugas yang tersedia untuk diambil.
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk mencantumkan tugas untuk deliveryvehicleId dan atribut tugas. Respons yang berhasil masih boleh kosong. Respons kosong menunjukkan bahwa tidak ada Tugas yang terkait 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 AND attributes.foo = true")
.build();
try {
ListTasksResponse listTasksResponse = 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 boleh kosong. Respons kosong menunjukkan bahwa tidak ditemukan tugas 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}"
Menampilkan daftar kendaraan pengiriman
Anda dapat mencantumkan kendaraan pengiriman dari server atau lingkungan browser. Driver SDK tidak mendukung listingan kendaraan pengiriman.
Mencantumkan kendaraan pengiriman meminta akses luas ke kendaraan pengiriman dan hanya ditujukan bagi pengguna tepercaya. Gunakan Delivery Fleet Reader atau Delivery Super User Authentication Token saat membuat permintaan kendaraan pengiriman daftar.
Kendaraan pengiriman yang tercantum akan menyamarkan kolom berikut karena dampaknya terhadap ukuran respons:
- CurrentRouteSegmen
- Segmen RemainingKendaraanJourney
Anda dapat memfilter kendaraan pengiriman daftar berdasarkan properti attributes
miliknya. Misalnya, untuk mengkueri 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 di attributes.key1 = value1 AND
attributes.key2 = value2
. Lihat AIP-160 untuk mengetahui deskripsi lengkap tentang sintaksis kueri filter.
Anda dapat memfilter kendaraan pengiriman yang tercantum berdasarkan lokasi menggunakan parameter
permintaan viewport
. Parameter permintaan viewport
menentukan area pandang menggunakan dua koordinat
pembatas: lintang/bujur high
(timur laut) dan low
(barat daya).
Permintaan ditolak jika memiliki lintang tinggi yang secara geografis lebih rendah daripada lintang rendah.
Daftar kendaraan pengiriman diberi nomor halaman secara default menggunakan ukuran halaman yang wajar. Jika Anda menentukan ukuran halaman, permintaan hanya menampilkan jumlah kendaraan yang ditentukan oleh batas, atau lebih sedikit. Jika ukuran halaman yang diminta melebihi nilai maksimum internal, ukuran 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 ketika lebih banyak halaman kendaraan pengiriman tersedia untuk diambil. Untuk mengambil halaman tugas berikutnya, gunakan token halaman dengan permintaan yang sama 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 bisa kosong. Jika hal itu terjadi, artinya 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 boleh kosong. Jika hal itu terjadi, artinya tidak ada kendaraan pengiriman yang ditemukan 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 untuk mengaktifkan pelacakan fleet:
Pilihan: Gunakan library Pelacakan Fleet JavaScript. Library ini memungkinkan Anda memvisualisasikan lokasi kendaraan dan lokasi minat yang dilacak di Fleet Engine. File ini berisi komponen peta JavaScript yang merupakan pengganti langsung untuk objek google.maps.Map standar, dan komponen data untuk terhubung dengan Fleet Engine. Dengan begitu, Anda dapat memberikan pengalaman pelacakan fleet yang dapat disesuaikan dan animasi dari web atau aplikasi seluler Anda.
Implementasikan pelacakan inventaris Anda sendiri di atas Fleet Engine Deliveries API.
Logging
Anda dapat mengaktifkan opsi untuk mengizinkan Fleet Engine mengirim log RPC ke Cloud Logging. Untuk mengetahui informasi selengkapnya, lihat Logging.
Peran dan Token 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, yang masing-masing memberikan serangkaian izin yang berbeda.
Untuk mengetahui informasi selengkapnya, baca artikel 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.
Keadaan hilang di Fleet Engine
Saat menggunakan Fleet Engine, implementasikan klien sehingga sistem memulihkan dengan sendirinya jika terjadi kegagalan. Misalnya, saat Fleet Engine mencoba mengupdate kendaraan, fleet Engine mungkin akan merespons dengan error yang menunjukkan bahwa kendaraan tersebut tidak ada. Kemudian, klien harus membuat ulang kendaraan dalam status baru. Hal ini jarang terjadi, sistem harus tahan jika terjadi.
Dalam skenario kegagalan besar Fleet Engine yang sangat jarang terjadi, 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 sejak pemeriksaan kuota dilakukan untuk menghindari serangan denial of service (DOS). Dalam hal ini, perlambat kecepatan pembuatan ulang menggunakan strategi backoff untuk upaya 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 diperhatikan bahwa pemulihan ini harus dilakukan secara otonom tanpa mengandalkan informasi dari Fleet Engine, selain error yang menunjukkan apakah dan kapan entity sudah ada dalam database. Jika entity sudah ada, error tersebut dapat diserap dan entity tersebut dapat diperbarui menggunakan ID-nya.
FAQ
Bagaimana jika pengemudi berhenti karena tugas yang tidak berurutan?
Dalam hal ini, Anda harus memperbarui urutan tugas terlebih dahulu, lalu melanjutkan seperti biasa, menandai kedatangan di perhentian, penyelesaian tugas, dll. Jika tidak, sistem mungkin akan menjadi tidak konsisten. PWT dapat menjadi salah dan error yang tidak terduga dapat dilaporkan.