Fleet Engine Deliveries API memungkinkan Anda membuat model aktivitas armada untuk pengiriman pertama dan terakhir. Deliveries API diekspos melalui Driver SDK untuk Android dan iOS, dan juga dapat digunakan langsung melalui panggilan HTTP REST atau gRPC.
Penyiapan awal
Fleet Engine Deliveries API dikonfigurasi melalui Google Cloud Console. Untuk mengetahui informasi tentang langkah-langkah yang harus dilakukan dalam konsol, serta cara membuat Token Web JSON untuk otorisasi, lihat Autentikasi dan otorisasi. Untuk mengetahui detail penggunaan konsol, lihat dokumentasi Google Cloud Console.
Memverifikasi penyiapan Anda
Setelah membuat akun layanan, Anda harus memverifikasi bahwa penyiapan telah selesai
dan dapat membuat kendaraan pengiriman. Dengan melakukan verifikasi pada tahap alur kerja ini, Anda akan memastikan bahwa Anda telah mengatasi masalah otorisasi umum yang dapat muncul saat menyiapkan project. Ikuti panduan Memverifikasi penyiapan Anda.
Panduan ini menyediakan detail cara menggunakan utilitas command line gcloud
untuk menguji dua bagian utama penyiapan Anda: penandatanganan token otorisasi dan pembuatan kendaraan pengiriman uji coba.
Atau, Anda dapat menggunakan Skrip Contoh Auth Engine Auth untuk menguji penyiapan Anda.
Library Klien
Kami memublikasikan library klien dalam beberapa bahasa pemrograman umum. Library ini memberikan pengalaman developer yang lebih baik daripada REST atau gRPC mentah. Untuk mengetahui petunjuk cara memperoleh library klien bagi aplikasi server Anda, lihat Library Klien.
Contoh Java dalam dokumentasi ini mengasumsikan pemahaman tentang gRPC.
Struktur data
Deliveries API menggunakan dua struktur data untuk memodelkan pengambilan dan pengiriman pengiriman:
- Kendaraan pengiriman yang digunakan untuk mengangkut pengiriman.
- Tugas pengambilan dan pengiriman.
Selain itu, Anda dapat menggunakan tugas untuk membuat model jeda pengemudi dan perhentian terjadwal sepanjang hari.
Kendaraan pengiriman
Kendaraan pengiriman mengangkut pengiriman dari depot ke lokasi pengiriman, dan dari lokasi pengambilan ke depot. Dalam kasus tertentu, mereka juga dapat mengangkut pengiriman langsung dari lokasi pengambilan ke lokasi pengiriman.
Anda dapat menggunakan Driver SDK untuk membuat objek DeliveryVehicle
di Fleet Engine dan mengirim pembaruan lokasi untuk pengiriman dan pelacakan armada.
Tasks
Setiap kendaraan memiliki tugas yang diberikan kepadanya. Hal ini dapat mencakup tugas pengambilan atau pengiriman, jeda sementara bagi pengemudi, atau perhentian terjadwal di lokasi drop box atau lokasi pelanggan. Setiap tugas harus memiliki ID tugas yang unik, tetapi dapat menggunakan ID pelacakan yang sama. Tugas dan urutan penjadwalannya digunakan untuk menghitung periode PWT untuk setiap tugas.
Gunakan Pengelola Tugas Driver SDK untuk membuat tugas di Fleet Engine.
Tugas pengiriman
Tugas pengiriman berkaitan dengan pengambilan atau pengantaran barang. Anda harus menentukan nomor atau ID pelacakan saat membuat tugas pengiriman. Anda juga harus menentukan waktu singgah untuk memperhitungkan waktu tambahan guna menyelesaikan tugas, mencari tempat parkir, atau berjalan ke lokasi handoff.
- Buat tugas pengambilan untuk mengambil pengiriman, dengan menentukan lokasi pengambilan dan nomor atau ID pelacakan.
- Buat tugas pengiriman untuk mengirimkan pengiriman, dengan menentukan lokasi pengiriman dan nomor pelacakan atau ID.
Tugas ketidaktersediaan
Buat tugas ketidaktersediaan untuk jangka waktu saat kendaraan tidak akan tersedia untuk pengambilan atau pengiriman. Ini dapat menjadi waktu istirahat untuk mengisi bahan bakar kendaraan atau istirahat pengemudi.
Tentukan durasi jeda saat Anda membuat tugas. Libur tidak harus dilakukan di lokasi tertentu, tetapi menentukan lokasi dapat memberikan periode PWT yang lebih akurat sepanjang hari.
Tugas penghentian terjadwal
Buat tugas perhentian terjadwal untuk membuat model perhentian yang akan dilakukan dengan kendaraan pengiriman. Misalnya, Anda dapat membuat tugas perhentian terjadwal untuk perhentian pengumpulan terjadwal harian di lokasi tertentu, terlepas dari pengiriman atau pengambilan lain di lokasi yang sama. Anda juga dapat membuat tugas perhentian terjadwal untuk koleksi dari drop box, atau untuk membuat model transfer kendaraan feeder atau perhentian di pusat layanan dan titik layanan.
Anda dapat melihat kolom tertentu yang terdapat dalam setiap struktur data dengan melihat dokumentasi Referensi API untuk DeliveryVehicle
(gRPC, REST) dan Task
(gRPC, REST).
Panduan ID tugas
ID tugas harus unik dan tidak boleh mengekspos informasi identitas pribadi (PII) atau data teks yang jelas.
ID tugas harus sesuai dengan persyaratan format berikut:
- ID harus berupa string Unicode yang valid.
- ID harus berisi 64 karakter atau kurang.
- ID akan dinormalkan sesuai dengan Formulir Normalisasi Unicode C.
- ID tidak boleh berisi salah satu karakter ASCII berikut: "/", ":", "\", "?", atau "#".
Berikut adalah beberapa contoh ID Tugas yang valid:
- 566c33d9-2a31-4b6a-9cd4-80ba1a0c643b
- e4708eabcfa39bf2767c9546c9273f747b4626e8cc44e9630d50f6d129013d38
- NTA1YTliYWNkYmViMTI0ZmMzMWFmOWY2NzNkM2Jk
Tabel berikut menunjukkan contoh ID Tugas yang tidak valid:
ID Tugas Tidak Valid | Alasan |
---|---|
31/8/2019-20.48-46.70746.-130.10807.-85.17909.61.33680 | Melanggar persyaratan PII dan karakter: koma, titik, titik dua, dan garis miring. |
JohnDoe-577b484da26f-Cupertino-SantaCruz | Melanggar persyaratan PII. |
4R0oXLToF”112 Musim Panas Dr. East Hartford, CT06118”577b484da26f8a | Melanggar persyaratan PII dan karakter: spasi kosong, koma, dan tanda kutip. Lebih dari 64 karakter. |
Masa pakai kendaraan
Objek DeliveryVehicle
mewakili kendaraan pengantar bermil-mil atau terakhir.
Buat objek DeliveryVehicle
menggunakan:
- Project ID dari project Google Cloud yang berisi akun layanan yang digunakan untuk memanggil Fleet Engine API.
- ID kendaraan milik pelanggan.
ID kendaraan harus unik untuk setiap kendaraan. Pengujian tidak boleh digunakan kembali untuk kendaraan lain, kecuali jika tidak ada tugas aktif untuk kendaraan tersebut.
Pastikan untuk memeriksa error NOT_FOUND saat melakukan panggilan ke UpdateDeliveryVehicle
, lalu, jika perlu, panggil CreateDeliveryVehicle
untuk membuat kendaraan baru. Objek DeliveryVehicle
yang belum diperbarui menggunakan UpdateDeliveryVehicle
akan otomatis dihapus setelah tujuh hari. Perhatikan bahwa memanggil CreateDeliveryVehicle
dengan pasangan Project ID/ID Kendaraan yang sudah ada akan menghasilkan error.
Atribut kendaraan
Entitas DeliveryVehicle
berisi kolom berulang
DeliveryVehicleAttribute
. Atribut ini tidak ditafsirkan oleh Fleet Engine. API ListDeliveryVehicles
menyertakan kolom filter
yang dapat membatasi
entitas DeliveryVehicle
yang ditampilkan kepada entitas yang memiliki atribut yang ditentukan.
Meskipun kolom attributes
buram bagi Fleet Engine, jangan sertakan
informasi identitas pribadi atau informasi sensitif dalam atribut karena kolom ini
dapat terlihat oleh pengguna.
Umur tugas
Tugas di Fleet Engine dapat dibuat, diperbarui, dan diinterogasi menggunakan antarmuka gRPC atau REST API Deliveries API.
Objek Task
memiliki kolom status untuk melacak progresnya melalui
siklus prosesnya. Nilai akan berubah dari BUKA menjadi TUTUP. Tugas baru dibuat
dalam status BUKA, yang menunjukkan bahwa:
- Tugas belum ditugaskan ke kendaraan pengiriman.
- Kendaraan pengiriman belum melewati perhentian kendaraan yang ditetapkan untuk tugas tersebut.
Tugas hanya dapat ditugaskan ke kendaraan saat dalam status BUKA.
Tugas dapat dibatalkan dengan menghapusnya dari daftar perhentian kendaraan. Statusnya kemudian otomatis disetel ke TUTUP.
Setelah kendaraan tugas menyelesaikan perhentian kendaraan tugas, perbarui kolom hasil tugas menjadi BERHASIL atau GAGAL dan tentukan stempel waktu peristiwa. Hasil tugas dapat ditetapkan kapan saja sebelum atau setelah tugas selesai, tetapi hanya dapat ditetapkan sekali.
Selanjutnya, library Pelacakan Pengiriman JavaScript dapat menunjukkan hasil tugas. Status tugas otomatis disetel ke TUTUP. Untuk informasi selengkapnya, lihat Melacak Pengiriman dengan Library Pelacakan Pengiriman JavaScript.
Seperti halnya kendaraan, tugas yang belum diperbarui setelah tujuh hari akan dihapus, dan upaya untuk membuat tugas dengan ID yang sudah ada akan menampilkan error.
Catatan: Fleet Engine tidak mendukung penghapusan tugas secara eksplisit. Layanan ini otomatis menghapus tugas setelah tujuh hari tanpa pembaruan. Jika ingin menyimpan data tugas lebih dari tujuh hari, Anda harus menerapkan sendiri fungsi tersebut.
Mengintegrasikan Deliveries API
Anda dapat mengintegrasikan Deliveries API menggunakan model yang tidak tepercaya atau tepercaya, yang menentukan update yang dapat Anda lakukan menggunakan Driver SDK. Model yang tidak tepercaya lebih disukai. Model tepercaya sedang dalam pratinjau.
Model tidak tepercaya
Dengan model yang tidak tepercaya, Anda menggunakan peran Fleet Engine Delivery Untrusted Driver User untuk memberikan izin memperbarui lokasi kendaraan pengiriman. Token yang dikeluarkan oleh akun layanan dengan peran ini biasanya digunakan dari perangkat seluler pengemudi pengiriman Anda.
Model tepercaya
Dengan model tepercaya yang sedang dipratinjau, Anda menggunakan peran Fleet Engine Delivery Trusted Driver User untuk memberikan izin membuat dan memperbarui kendaraan dan tugas pengiriman, termasuk memperbarui lokasi kendaraan pengiriman dan status atau hasil tugas. Token yang dikeluarkan oleh akun layanan dengan peran ini biasanya digunakan dari perangkat seluler pengemudi pengiriman Anda atau dari server backend Anda.
Untuk informasi selengkapnya tentang peran yang digunakan Solusi Google Maps Platform Last Fleet untuk model tepercaya dan tidak tepercaya, lihat Penyiapan project cloud.
Integrasi lengkap dari perangkat seluler hanya boleh dilakukan jika Anda memiliki dan mengelola perangkat tersebut. Tindakan ini memastikan bahwa keduanya dapat dipercaya sepenuhnya. Kemudian, Anda dapat membuat kendaraan dan tugas langsung dari Driver SDK.
Catatan: Untuk alasan keamanan, Anda harus membuat token hanya di server backend, lalu membagikannya dengan klien.
Membuat model hari kerja
Tabel berikut menjelaskan contoh tampilan hari kerja untuk pengemudi pertama atau kilometer terakhir di perusahaan pengiriman dan logistik. Perusahaan Anda mungkin berbeda dalam detailnya, tetapi Anda dapat melihat bagaimana Anda dapat memodelkan hari kerja.
Waktu | Aktivitas | Pemodelan |
---|---|---|
Dalam waktu 24 jam sejak awal hari | Petugas operator menetapkan pengiriman ke kendaraan atau rute pengiriman. | Tugas untuk pengiriman, pengambilan, jeda, dll. dapat dibuat
di Fleet Engine terlebih dahulu. Misalnya, Anda dapat membuat
tugas pengambilan pengiriman,
tugas pengiriman pengiriman,
ketidaktersediaan terjadwal, atau
penghentian terjadwal.
Tugas harus ditetapkan ke kendaraan setelah serangkaian paket pengiriman dan urutan pengirimannya sudah diselesaikan. |
Awal hari | Pengemudi memulai hari di depot dengan login ke aplikasi Driver. | Inisialisasi Delivery Driver API. Buat kendaraan pengiriman di Fleet Engine sesuai kebutuhan. |
Pengemudi memuat pengiriman ke kendaraan pengiriman, memindai pengiriman. | Jika tugas pengiriman pengiriman tidak dibuat sebelumnya, buat tugas pengiriman pengiriman pada saat pemindaian. | |
Pengemudi mengonfirmasi urutan tugas yang akan dilakukan. | Jika pesanan tidak dibuat sebelumnya, buat tugas pengambilan pengiriman, ketidaktersediaan terjadwal, dan perhentian terjadwal. | |
Pengemudi meninggalkan depot dan meng-commit ke jumlah tugas berikutnya untuk diselesaikan. | Tetapkan semua tugas atau subset tugas ke kendaraan dengan melakukan perintah penyelesaiannya. | |
Pengemudi mengirim barang. | Setelah tiba di perhentian pengiriman, lakukan tindakan terkait dengan kendaraan yang tiba di perhentian. Setelah pengiriman dikirimkan, tutup tugas pengiriman dan, secara opsional, status pengiriman toko dan informasi meta lainnya. Setelah menyelesaikan semua tugas di perhentian dan sebelum mulai mengemudi ke perhentian berikutnya, lakukan tindakan yang terkait dengan kendaraan menyelesaikan perhentian dan kendaraan akan melakukan perjalanan ke perhentian berikutnya. | |
Pengemudi bertemu dengan kendaraan feeder untuk mentransfer pengiriman tambahan ke kendaraan pengiriman tersebut. | Titik pertemuan untuk transfer antara kendaraan
feeder dan kendaraan pengiriman harus dimodelkan sebagai perhentian terjadwal.
Setelah mentransfer dan memindai pengiriman, buat tugas pengiriman jika 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. | |
Tengah hari | Pengemudi istirahat makan siang. | Jika lokasi dikaitkan dengan tugas ketidaktersediaan, perlakukan lokasi tersebut seperti tugas lainnya. Melakukan tindakan yang berkaitan dengan kendaraan
tiba di perhentian,
kendaraan menyelesaikan perhentian
dan kendaraan dalam perjalanan ke perhentian berikutnya.
Jika tidak, Anda tidak perlu melakukan tindakan lebih lanjut hingga akhir jeda. Hapus tugas dengan mengonfirmasi tugas berikutnya dan yang tersisa, serta memperbarui urutan tugas. |
Pengemudi mengambil pengiriman. | Hal ini dimodelkan seperti perhentian pengiriman. Lakukan tindakan yang terkait dengan kendaraan yang tiba di perhentian dan tutup tugas serta, secara opsional, menyimpan status pengiriman dan informasi meta lainnya. Setelah menyelesaikan semua tugas di perhentian dan sebelum mulai mengemudi ke perhentian berikutnya, lakukan tindakan yang terkait dengan kendaraan menyelesaikan perhentian dan kendaraan mengarah ke perhentian berikutnya. Catatan: Untuk memastikan penagihan yang benar, semua pengambilan harus memiliki tugas pengiriman yang sesuai. Jika pengambilan akan dikirimkan ke lokasi lain pada rute pengemudi yang sama pada hari itu, sebaiknya buat model tugas pengiriman tersebut seperti tugas pengiriman lainnya pada rute tersebut. Jika pengemudi membawa pengambilan kembali ke depot, sebaiknya buat tugas pengiriman di tujuan depot. | |
Pengemudi melakukan perhentian terjadwal untuk mengambil pengiriman dari boks pengiriman. | Hal ini dimodelkan seperti perhentian pengambilan lainnya. Lakukan tindakan yang terkait dengan kendaraan yang tiba di perhentian dan tutup tugas. Setelah menyelesaikan semua tugas di perhentian dan mulai mengemudi ke perhentian berikutnya, lakukan tindakan yang terkait dengan kendaraan menyelesaikan perhentian dan kendaraan akan melakukan perjalanan ke perhentian berikutnya. | |
Pengemudi menerima notifikasi bahwa pengiriman dialihkan ke lokasi alternatif. | Tetapkan status tugas pengiriman pengiriman asli ke SELESAI dan buat tugas pengiriman pengiriman baru untuk lokasi pengiriman yang baru. Untuk mengetahui informasi selengkapnya, lihat Merutekan ulang pengiriman. | |
Pengemudi mencoba mengirimkan paket, tetapi tidak berhasil. | Hal ini dimodelkan mirip dengan penghentian pengiriman yang berhasil, yang menandai tugas pengiriman sebagai selesai. Lakukan tindakan yang terkait dengan kendaraan yang tiba di perhentian. Setelah gagal mengirimkan pengiriman, tutup tugas dan, secara opsional, status pengiriman toko dan informasi meta lainnya. Setelah menyelesaikan semua tugas di perhentian dan sebelum mulai mengemudi ke perhentian berikutnya, lakukan tindakan yang terkait dengan kendaraan menyelesaikan perhentian dan kendaraan mengarah ke perhentian berikutnya. | |
Pengemudi diberi tahu untuk menahan (tidak mengirimkan) pengiriman. | Setelah notifikasi diterima dan dikonfirmasi, tetapkan status tugas ke SELESAI. | |
Pengemudi diberi tahu untuk mengirimkan pengiriman tertentu berikutnya, yang mengubah komitmen pengiriman. | Perbarui urutan tugas. | |
Pengemudi memilih untuk mengirimkan pengiriman yang tidak sesuai pesanan. | Perbarui pengurutan tugas, lalu lanjutkan seperti biasa. | |
Pengemudi mengirimkan beberapa pengiriman ke satu lokasi. | Hal ini dimodelkan mirip dengan satu perhentian pengiriman. Setelah tiba di perhentian, lakukan tindakan yang terkait dengan kendaraan yang tiba di perhentian. Setelah pengiriman setiap pengiriman, tutup setiap tugas dan, secara opsional, status pengiriman toko serta informasi meta lainnya. Setelah menyelesaikan semua tugas di perhentian dan sebelum mulai mengemudi ke perhentian berikutnya, lakukan tindakan yang terkait dengan kendaraan menyelesaikan perhentian dan kendaraan mengarah ke perhentian berikutnya. | |
Akhir hari | Pengemudi kembali ke depot. | Jika pengemudi kembali ke depot dengan pengiriman diambil selama rute mereka, Anda juga harus membuat dan menutup setiap paket sebagai tugas pengiriman untuk memastikan penagihan yang benar. Anda dapat melakukannya dengan memodelkan depot seperti perhentian pengiriman lainnya. Jika depot tidak digunakan sebagai perhentian pengiriman, Anda masih dapat memodelkan depot sebagai perhentian terjadwal. Ini akan memungkinkan pengemudi melihat rute kembali ke depot dan memberikan visibilitas ke 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.
Pembaruan lokasi harus ditangguhkan saat pengemudi tidak mengemudi karena kualitas sinyal lokasi menurun secara drastis saat seseorang berada di dalam gedung.
Frekuensi pembaruan lokasi dapat disetel dalam Driver SDK. Setelan defaultnya adalah mengirim update setiap 10 detik.
Perhentian kendaraan dan lokasi pengiriman
Perhentian kendaraan adalah tempat kendaraan pengiriman menyelesaikan tugas pengiriman atau tugas lainnya. Ini dapat berupa titik akses seperti dok pemuatan atau lokasi yang dipaskan ke jalan.
Lokasi pengiriman adalah lokasi tempat pengiriman dikirimkan atau diambil. Mungkin perlu beberapa langkah dari perhentian kendaraan untuk sampai dan tiba di lokasi pengiriman.
Misalnya, ketika pengemudi mengirimkan pengiriman ke toko di dalam mal, kendara pengiriman berhenti di tempat parkir mal dekat pintu masuk terdekat ke toko. Ini adalah perhentian kendaraan. Pengemudi kemudian berjalan dari perhentian kendaraan ke lokasi di dalam mal tempat toko berada. Ini adalah lokasi pengiriman.
Untuk pengalaman pelacakan pengiriman terbaik bagi pengguna Anda, pertimbangkan bagaimana tugas pengiriman ditetapkan ke perhentian kendaraan dan perlu diingat bahwa jumlah penghentian kendaraan yang tersisa untuk tugas pengiriman dilaporkan kepada pengguna untuk membantu mereka melihat progres pengiriman mereka.
Misalnya, jika pengemudi melakukan banyak pengiriman ke satu gedung kantor, pertimbangkan untuk menetapkan semua tugas pengiriman ke satu perhentian kendaraan. Jika setiap tugas pengiriman ditetapkan ke perhentian kendaraannya sendiri, pengalaman pelacakan pengiriman Anda akan kurang membantu bagi pengguna karena pelacakan hanya tersedia setelah kendaraan berada dalam jumlah perhentian kendaraan yang terbatas sebelum tujuannya. Menyelesaikan banyak perhentian kendaraan dalam waktu singkat tidak akan memberi pengguna banyak waktu untuk melacak progres pengiriman.
Menggunakan SDK seluler
Sebelum melakukan panggilan apa pun ke Driver SDK, pastikan untuk melakukan inisialisasi.
Melakukan inisialisasi Delivery Driver API
Sebelum menginisialisasi Delivery Driver API di Driver SDK, pastikan untuk menginisialisasi Navigation SDK. Kemudian lakukan inisialisasi Delivery Driver API seperti yang ditunjukkan pada contoh berikut:
static final String PROVIDER_ID = "provider-1234";
static final String VEHICLE_ID = "vehicle-8241890";
NavigationApi.getNavigator(
this, // Activity.
new NavigatorListener() {
@Override
public void onNavigatorReady(Navigator navigator) {
DeliveryDriverApi.createInstance(DriverContext.builder(getApplication())
.setNavigator(navigator)
.setProviderId(PROVIDER_ID)
.setVehicleId(VEHICLE_ID)
.setAuthTokenFactory((context) -> "JWT") // AuthTokenFactory returns JWT for call context.
.setRoadSnappedLocationProvider(NavigationApi.getRoadSnappedLocationProvider(getApplication()))
.setNavigationTransactionRecorder(NavigationApi.getNavigationTransactionRecorder(getApplication()))
.setStatusListener((statusLevel,statusCode,statusMsg) -> // Optional, surfaces polling errors.
Log.d("TAG", String.format("New status update. %s, %s, %s", statusLevel, statusCode, statusMsg)))
.build));
}
@Override
public void onError(int errorCode) {
Log.e("TAG", String.format("Error loading Navigator instance: %s", errorCode));
}
});
Kasus penggunaan
Bagian ini menjelaskan cara menggunakan Deliveries API untuk memodelkan kasus penggunaan umum.
ID entitas unik
Format dan nilai ID entitas unik yang digunakan dalam panggilan REST menjadi buram bagi Fleet Engine. Hindari penggunaan ID penambahan otomatis, dan pastikan ID tidak berisi informasi identitas pribadi (PII), seperti nomor telepon pengemudi.
Membuat kendaraan
Anda dapat membuat kendaraan dari Driver SDK atau dari lingkungan server.
gRPC
Untuk membuat kendaraan baru, Anda melakukan panggilan CreateDeliveryVehicle
ke Fleet Engine.
Gunakan objek CreateDeliveryVehicleRequest
untuk menentukan atribut
kendaraan pengiriman baru. Perhatikan bahwa nilai apa pun yang ditentukan untuk kolom Name
akan
diabaikan per panduan API untuk ID yang ditentukan pengguna.
Anda harus menggunakan kolom DeliveryVehicleId
untuk menetapkan ID kendaraan.
Saat membuat DeliveryVehicle
, Anda dapat secara opsional menentukan dua kolom:
- Atribut
- Lokasi Terakhir
Semua kolom lainnya tidak boleh ditetapkan; jika tidak, Fleet Engine akan menampilkan error karena kolom tersebut bersifat hanya baca atau hanya dapat diperbarui melalui panggilan UpdateDeliveryVehicle
.
Untuk membuat kendaraan tanpa menetapkan kolom opsional, Anda dapat membiarkan kolom DeliveryVehicle
tidak disetel di CreateDeliveryVehicleRequest
.
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk membuat kendaraan:
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890"; // Avoid auto-incrementing IDs.
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String parent = "providers/" + PROJECT_ID;
DeliveryVehicle vehicle = DeliveryVehicle.newBuilder()
.addAttributes(DeliveryVehicleAttribute.newBuilder()
.setKey("route_number").setValue("1")) // Opaque to the Fleet Engine
.build();
// Vehicle request
CreateDeliveryVehicleRequest createVehicleRequest =
CreateDeliveryVehicleRequest.newBuilder() // No need for the header
.setParent(parent)
.setDeliveryVehicleId(VEHICLE_ID) // Vehicle ID assigned by the Provider
.setDeliveryVehicle(vehicle)
.build();
// Error handling
// If Fleet Engine does not have vehicle with that ID and the credentials of the
// requestor pass, the service creates the vehicle successfully.
try {
DeliveryVehicle createdVehicle =
deliveryService.createDeliveryVehicle(createVehicleRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
Untuk membuat kendaraan dari lingkungan server, lakukan panggilan REST HTTP ke CreateDeliveryVehicle
:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles?deliveryVehicleId=<id>
<id> adalah pengenal unik untuk kendaraan pengiriman di armada Anda.
Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dikeluarkan oleh factory token Fleet Engine.
Isi POST mewakili entity DeliveryVehicle
yang akan dibuat. Anda dapat menentukan kolom opsional berikut:
- atribut
- lastLocation
Contoh perintah curl
:
# Set $JWT, $PROJECT_ID, and $VEHICLE_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles?deliveryVehicleId=${VEHICLE_ID}" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"attributes": [{"key": "model", "value": "sedan"}],
"lastLocation": {"location": {"latitude": 12.1, "longitude": 14.5}}
}
EOM
Fleet Engine mengabaikan kolom name
dari entitas DeliveryVehicle
per panduan API untuk ID yang ditentukan pengguna.
Semua kolom lain tidak boleh ditetapkan; jika tidak, Fleet Engine akan menampilkan error karena kolom tersebut bersifat hanya baca atau hanya dapat diperbarui melalui panggilan UpdateDeliveryVehicle
.
Untuk membuat kendaraan tanpa menetapkan kolom apa pun, Anda dapat mengosongkan isi permintaan POST.
ID Kendaraan yang baru dibuat akan diekstrak dari parameter deliveryVehicleId
di URL POST.
Contoh perintah curl
:
# Set $JWT, $PROJECT_ID, and $VEHICLE_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles?deliveryVehicleId=${VEHICLE_ID}" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}"
Membuat tugas pengambilan pengiriman
Anda dapat membuat tugas pengambilan pengiriman dari SDK Driver atau dari lingkungan server.
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk membuat tugas pengambilan pengiriman:
static final String PROJECT_ID = "my-delivery-co-gcp-project";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task settings
String parent = "providers/" + PROJECT_ID;
Task task = Task.newBuilder()
.setType(Task.Type.PICKUP)
.setState(Task.State.OPEN)
.setTrackingId("my-tracking-id")
.setPlannedLocation( // Grand Indonesia East Mall
LocationInfo.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.setTaskDuration(
Duration.newBuilder().setSeconds(2 * 60))
.setTargetTimeWindow(
TimeWindow.newBuilder()
.setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
.setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
.build();
// Task request
CreateTaskRequest createTaskRequest =
CreateTaskRequest.newBuilder() // No need for the header
.setParent(parent) // Avoid using auto-incrementing IDs for the taskId
.setTaskId("task-8241890") // Task ID assigned by the Provider
.setTask(task) // Initial state
.build();
// Error handling
// If Fleet Engine does not have a task with that ID and the credentials of the
// requestor pass, the service creates the task successfully.
try {
Task createdTask = deliveryService.createTask(createTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
Untuk membuat tugas pengambilan pengiriman dari lingkungan server, lakukan panggilan REST HTTP ke `CreateTask':
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>
<id> adalah pengenal unik untuk tugas. ID ini tidak boleh berupa nomor pelacakan untuk pengiriman. Jika tidak memiliki ID tugas di sistem, Anda dapat membuat ID unik universal (UUID).
Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dikeluarkan oleh factory token Fleet Engine.
Isi permintaan harus berisi entity Task
:
Kolom wajib diisi:
Kolom Nilai tipe Jenis.PENGAMBILAN status Status.OPEN ID pelacakan Nomor atau ID yang Anda gunakan untuk melacak pengiriman. yang direncanakan Lokasi tempat tugas diselesaikan, dalam hal ini lokasi pengambilan pengiriman. durasi tugas Perkiraan waktu, dalam detik, yang dibutuhkan untuk mengambil pengiriman di lokasi pengambilan. Kolom opsional:
Kolom Nilai targetTimeWindow Rentang waktu saat tugas harus diselesaikan. Hal ini saat ini tidak memengaruhi perilaku pemilihan rute
Semua kolom lain dalam entitas diabaikan untuk pembuatan. Fleet Engine menampilkan
pengecualian jika permintaan menyertakan delivery VehicleId yang ditetapkan. Anda memberikan
tugas menggunakan UpdateDeliveryVehicleRequest
. Untuk 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 SDK Driver atau dari lingkungan server.
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk membuat tugas pengiriman pengiriman:
static final String PROJECT_ID = "my-delivery-co-gcp-project";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task settings
String parent = "providers/" + PROJECT_ID;
Task task = Task.newBuilder()
.setType(Task.Type.DELIVERY)
.setState(Task.State.OPEN)
.setTrackingId("my-tracking-id")
.setPlannedLocation( // Grand Indonesia East Mall
LocationInfo.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.setTaskDuration(
Duration.newBuilder().setSeconds(2 * 60))
.setTargetTimeWindow(
TimeWindow.newBuilder()
.setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
.setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
.build();
// Task request
CreateTaskRequest createTaskRequest =
CreateTaskRequest.newBuilder() // No need for the header
.setParent(parent) // Avoid using auto-incrementing IDs for the taskId
.setTaskId("task-8241890") // Task ID assigned by the Provider
.setTask(task) // Initial state
.build();
// Error handling
// If Fleet Engine does not have task with that ID and the credentials of the
// requestor pass, the service creates the task successfully.
try {
Task createdTask = deliveryService.createTask(createTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
Untuk membuat tugas pengiriman pengiriman dari lingkungan server, lakukan panggilan REST HTTP ke `CreateTask':
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>
<id> adalah pengenal unik untuk tugas. ID ini tidak boleh berupa nomor pelacakan untuk pengiriman. Jika tidak memiliki ID tugas di sistem, Anda dapat membuat ID unik universal (UUID).
Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dikeluarkan oleh factory token Fleet Engine.
Isi permintaan harus berisi entity Task
:
Kolom wajib diisi:
Kolom Nilai tipe Jenis.PENGIRIMAN status Status.OPEN ID pelacakan Nomor atau ID yang Anda gunakan untuk melacak pengiriman. yang direncanakan Lokasi tempat tugas diselesaikan, dalam hal ini lokasi pengiriman untuk pengiriman ini. durasi tugas Perkiraan waktu, dalam detik, yang dibutuhkan untuk mengirimkan pengiriman di lokasi pengiriman. Kolom opsional:
Kolom Nilai targetTimeWindow Rentang waktu saat tugas harus diselesaikan. Hal ini saat ini tidak memengaruhi perilaku pemilihan rute
Semua kolom lain dalam entitas diabaikan untuk pembuatan. Fleet Engine menampilkan
pengecualian jika permintaan menyertakan delivery VehicleId yang ditetapkan.
Anda memberikan tugas menggunakan UpdateDeliveryVehicleRequest
. Untuk 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
Buat Tugas secara Batch
Anda dapat membuat batch tugas dari lingkungan server.
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk membuat dua tugas, satu untuk pengiriman dan satu lagi untuk pengambilan di lokasi yang sama:
static final String PROJECT_ID = "my-delivery-co-gcp-project";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Delivery Task settings
Task deliveryTask = Task.newBuilder()
.setType(Task.Type.DELIVERY)
.setState(Task.State.OPEN)
.setTrackingId("delivery-tracking-id")
.setPlannedLocation( // Grand Indonesia East Mall
LocationInfo.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.setTaskDuration(
Duration.newBuilder().setSeconds(2 * 60))
.build();
// Delivery Task request
CreateTaskRequest createDeliveryTaskRequest =
CreateTaskRequest.newBuilder() // No need for the header or parent fields
.setTaskId("task-8312508") // Task ID assigned by the Provider
.setTask(deliveryTask) // Initial state
.build();
// Pickup Task settings
Task pickupTask = Task.newBuilder()
.setType(Task.Type.PICKUP)
.setState(Task.State.OPEN)
.setTrackingId("pickup-tracking-id")
.setPlannedLocation( // Grand Indonesia East Mall
LocationInfo.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.setTaskDuration(
Duration.newBuilder().setSeconds(2 * 60))
.build();
// Pickup Task request
CreateTaskRequest createPickupTaskRequest =
CreateTaskRequest.newBuilder() // No need for the header or parent fields
.setTaskId("task-8241890") // Task ID assigned by the Provider
.setTask(pickupTask) // Initial state
.build();
// Batch Create Tasks settings
String parent = "providers/" + PROJECT_ID;
// Batch Create Tasks request
BatchCreateTasksRequest batchCreateTasksRequest =
BatchCreateTasksRequest.newBuilder()
.setParent(parent)
.addRequests(createDeliveryTaskRequest)
.addRequests(createPickupTaskRequest)
.build();
// Error handling
// If Fleet Engine does not have any task(s) with these task ID(s) and the
// credentials of the requestor pass, the service creates the task(s)
// successfully.
try {
BatchCreateTasksResponse createdTasks = deliveryService.batchCreateTasks(
batchCreateTasksRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
Untuk membuat pengiriman dan tugas pengambilan dari lingkungan server, lakukan panggilan REST HTTP ke BatchCreateTasks
:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks:batchCreate
Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dikeluarkan oleh factory token Fleet Engine.
Isi permintaan harus berisi entity BatchCreateTasksRequest
:
Kolom wajib diisi:
Kolom Nilai permintaan Array< CreateTasksRequest
>Kolom opsional:
Kolom Nilai header `DeliveryRequestHeader`
Setiap elemen CreateTasksRequest
di requests
harus meneruskan aturan validasi
yang sama dengan permintaan CreateTask
, dengan pengecualian bahwa kolom parent
dan header
bersifat opsional. Jika ditetapkan, nilai tersebut harus sama dengan kolomnya masing-masing di tingkat teratas BatchCreateTasksRequest
. Lihat membuat tugas pengambilan pengiriman dan membuat tugas pengiriman pengiriman untuk aturan validasi tertentu untuk setiap tugas.
Untuk informasi selengkapnya, lihat dokumentasi Referensi API untuk BatchCreateTasks
(gRPC, REST).
Contoh perintah curl
:
# Set $JWT, $PROJECT_ID, $DELIVERY_TRACKING_ID, $DELIVERY_TASK_ID,
# $PICKUP_TRACKING_ID, and $PICKUP_TASK_ID in the local environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks:batchCreate" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"requests" : [
{
"taskId": "${DELIVERY_TASK_ID}",
"task" : {
"type": "DELIVERY",
"state": "OPEN",
"trackingId": "${DELIVERY_TRACKING_ID}",
"plannedLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
},
"taskDuration": "90s"
}
},
{
"taskId": "${PICKUP_TASK_ID}",
"task" : {
"type": "PICKUP",
"state": "OPEN",
"trackingId": "${PICKUP_TRACKING_ID}",
"plannedLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
},
"taskDuration": "90s"
}
}
]
}
EOM
Ketidaktersediaan terjadwal
Anda dapat membuat tugas yang menunjukkan ketidaktersediaan (misalnya, untuk jeda pengemudi atau pengisian bahan bakar kendaraan) baik dari SDK Driver, atau dari lingkungan server. Tugas ketidaktersediaan terjadwal tidak boleh menyertakan ID pelacakan. Anda dapat memberikan lokasi secara opsional.
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk membuat tugas yang tidak tersedia:
static final String PROJECT_ID = "my-delivery-co-gcp-project";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task settings
String parent = "providers/" + PROJECT_ID;
Task task = Task.newBuilder()
.setType(Task.Type.UNAVAILABLE)
.setState(Task.State.OPEN)
.setTaskDuration(
Duration.newBuilder().setSeconds(60 * 60)) // 1hr break
.build();
// Task request
CreateTaskRequest createTaskRequest =
CreateTaskRequest.newBuilder() // No need for the header
.setParent(parent) // Avoid using auto-incrementing IDs for the taskId
.setTaskId("task-8241890") // Task ID assigned by the Provider
.setTask(task) // Initial state
.build();
// Error handling
// If Fleet Engine does not have task with that ID and the credentials of the
// requestor pass, the service creates the task successfully.
try {
Task createdTask = deliveryService.createTask(createTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
Untuk membuat tugas yang tidak tersedia dari lingkungan server, lakukan panggilan REST HTTP ke CreateTask
:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>
<id> adalah pengenal unik untuk tugas. Jika tidak memiliki ID tugas di sistem, Anda dapat membuat ID unik universal (UUID).
Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dikeluarkan oleh factory token Fleet Engine.
Isi permintaan harus berisi entity Task
:
Kolom wajib diisi:
Kolom Nilai tipe Jenis.TIDAK TERSEDIA status Status.OPEN durasi tugas Durasi jeda dalam detik. Kolom opsional:
Kolom Nilai yang direncanakan Lokasi jeda jika harus diambil di lokasi tertentu.
Semua kolom lain dalam entitas diabaikan untuk pembuatan. Fleet Engine menampilkan
pengecualian jika permintaan menyertakan delivery VehicleId yang ditetapkan. Anda memberikan
tugas menggunakan UpdateDeliveryVehicleRequest
. Untuk 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 tidak boleh menyertakan ID pelacakan.
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk membuat tugas perhentian terjadwal:
static final String PROJECT_ID = "my-delivery-co-gcp-project";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task settings
String parent = "providers/" + PROJECT_ID;
Task task = Task.newBuilder()
.setType(Task.Type.SCHEDULED_STOP)
.setState(Task.State.OPEN)
.setPlannedLocation( // Grand Indonesia East Mall
LocationInfo.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.setTaskDuration(
Duration.newBuilder().setSeconds(2 * 60))
.build();
// Task request
CreateTaskRequest createTaskRequest =
CreateTaskRequest.newBuilder() // No need for the header
.setParent(parent)
.setTaskId("task-8241890") // Task ID assigned by the Provider
.setTrip(task) // Initial state
.build();
// Error handling
// If Fleet Engine does not have task with that ID and the credentials of the
// requestor pass, the service creates the task successfully.
try {
Task createdTask = deliveryService.createTask(createTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
Untuk membuat tugas berhenti terjadwal dari lingkungan server, buat panggilan REST HTTP ke `CreateTask':
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>
<id> adalah pengenal unik untuk tugas. Jika tidak memiliki ID tugas di sistem, Anda dapat membuat ID unik universal (UUID).
Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dikeluarkan oleh factory token Fleet Engine.
Isi permintaan harus berisi entity Task
:
Kolom wajib diisi:
Kolom Nilai tipe Ketik.ScheduleD_STOP status Status.OPEN yang direncanakan Lokasi perhentian. durasi tugas Perkiraan panjang perhentian dalam detik. Kolom opsional:
- Tidak ada
Semua kolom lain dalam entitas diabaikan untuk pembuatan. Fleet Engine menampilkan
pengecualian jika permintaan menyertakan delivery VehicleId yang ditetapkan. Anda memberikan
tugas menggunakan UpdateDeliveryVehicleRequest
. Untuk 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
Menetapkan tugas ke kendaraan
Tugas diberikan ke kendaraan pengiriman dengan memperbarui urutan tugas untuk kendaraan. Pengurutan tugas untuk kendaraan ditentukan oleh daftar penghentian kendaraan untuk kendaraan pengiriman. Setiap perhentian kendaraan dapat diberi satu atau beberapa tugas.
Memperbarui pengurutan tugas untuk tugas yang sebelumnya ditetapkan ke kendaraan lain akan menyebabkan error.
Untuk mengubah pengiriman dari satu kendaraan ke kendaraan lainnya, tutup tugas asli, lalu buat ulang tugas sebelum menetapkannya ke kendaraan baru.
Perbarui pengurutan tugas
Anda dapat memperbarui urutan eksekusi tugas yang ditetapkan ke kendaraan baik dari Driver SDK, atau dari lingkungan server. Kedua metode ini tidak boleh dicampur untuk menghindari kondisi race.
Memperbarui pengurutan tugas juga akan menetapkan tugas ke kendaraan jika sebelumnya tidak ditetapkan ke kendaraan, dan menutup tugas yang sebelumnya ditetapkan ke kendaraan dan keluar dari pengurutan yang diperbarui. Penugasan tugas ke kendaraan lain jika sebelumnya telah ditugaskan ke kendaraan lain akan menghasilkan error. Tutup tugas yang ada terlebih dahulu, lalu buat tugas baru sebelum menetapkannya ke kendaraan baru.
Pengurutan tugas dapat diperbarui kapan saja.
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk memperbarui pengurutan tugas untuk kendaraan tersebut:
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
static final String TASK1_ID = "task-756390";
static final String TASK2_ID = "task-849263";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder() // 1st stop
.setStop(VehicleStop.newBuilder()
.setPlannedLocation(LocationInfo.newBuilder()
.setPoint(LatLng.newBuilder()
.setLatitude(37.7749)
.setLongitude(122.4194)))
.addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
.setState(VehicleStop.State.NEW)))
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder() // 2nd stop
.setStop(VehicleStop.newBuilder()
.setPlannedLocation(LocationInfo.newBuilder()
.setPoint(LatLng.newBuilder()
.setLatitude(37.3382)
.setLongitude(121.8863)))
.addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
.setState(VehicleStop.State.NEW)))
.build();
// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryRequest =
UpdateDeliveryVehicleRequest.newBuilder() // No need for the header
.setName(vehicleName)
.setDeliveryVehicle(deliveryVehicle)
.setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
.build();
try {
DeliveryVehicle updatedDeliveryVehicle =
deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
Untuk memperbarui pengurutan tugas untuk kendaraan dari lingkungan server, lakukan panggilan REST HTTP ke `UpdateDeliveryKendaraan':
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments
<id> adalah pengenal unik untuk kendaraan pengiriman di armada yang ingin Anda perbarui urutan tugasnya. Ini adalah ID yang Anda tentukan saat membuat kendaraan.
Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dikeluarkan oleh factory token Fleet Engine.
Isi permintaan harus berisi entity DeliveryVehicle
:
Kolom wajib diisi:
Kolom Nilai tersisaKendaraanJurnalSegmen Daftar segmen perjalanan untuk tugas dalam urutan yang harus dijalankan. Tugas pertama dalam daftar dijalankan terlebih dahulu. tersisaKendaraanJourneySegmen[i].stop Perhentian untuk tugas i dalam daftar. tersisa VehicleJourneySegmen[i].stop.plannedLocation Lokasi terencana untuk perhentian. tersisaKendaraanJourneySegmen[i].stop.tasks Daftar tugas yang akan dilakukan di perhentian kendaraan ini. tersisaKendaraanJourneySegmen[i].stop.state Status.BARU Kolom opsional:
- Tidak ada
Semua kolom lain di entitas akan diabaikan untuk update tersebut.
Contoh perintah curl
:
# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"remainingVehicleJourneySegments": [
{
"stop": {
"state": "NEW",
"plannedLocation": {
"point": {
"latitude": 37.7749,
"longitude": -122.084061
}
},
"tasks": [
{
"taskId": "${TASK1_ID}"
}
]
}
},
{
"stop": {
"state": "NEW",
"plannedLocation": {
"point": {
"latitude": 37.3382,
"longitude": 121.8863
}
},
"tasks": [
{
"taskId": "${TASK2_ID}"
}
]
}
}
]
}
EOM
Kendaraan sedang dalam perjalanan ke perhentian berikutnya
Armada Mesin harus diberi tahu saat kendaraan berangkat dari perhentian atau memulai navigasi. Anda dapat memberi tahu Fleet Engine dari Driver SDK, atau dari lingkungan server. Kedua metode ini tidak boleh dicampur untuk menghindari kondisi race dan mempertahankan satu sumber kebenaran.
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk memberi tahu Fleet Engine bahwa kendaraan sedang dalam perjalanan ke perhentian berikutnya.
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
// Next stop marked as ENROUTE
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder() // 1st stop
.setStop(VehicleStop.newBuilder()
.setPlannedLocation(LocationInfo.newBuilder()
.setPoint(LatLng.newBuilder()
.setLatitude(37.7749)
.setLongitude(122.4194)))
.addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
.setState(VehicleStop.State.ENROUTE)))
// All other stops marked as NEW
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder() // 2nd stop
.setStop(VehicleStop.newBuilder()
.setPlannedLocation(LocationInfo.newBuilder()
.setPoint(LatLng.newBuilder()
.setLatitude(37.3382)
.setLongitude(121.8863)))
.addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
.setState(VehicleStop.State.NEW)))
.build();
// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
UpdateDeliveryVehicleRequest.newBuilder() // No need for the header
.setName(vehicleName)
.setDeliveryVehicle(deliveryVehicle)
.setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
.build();
try {
DeliveryVehicle updatedDeliveryVehicle =
deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
Untuk memberi tahu Fleet Engine bahwa kendaraan sedang dalam perjalanan ke perhentian berikutnya dari lingkungan server, lakukan panggilan REST HTTP ke `UpdateDeliveryKendaraan':
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments
<id> adalah pengenal unik untuk kendaraan pengiriman di armada yang ingin Anda perbarui urutan tugasnya. Ini adalah ID yang Anda tentukan saat membuat kendaraan.
Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dikeluarkan oleh factory token Fleet Engine.
Isi permintaan harus berisi entity DeliveryVehicle
:
Kolom wajib diisi:
Kolom Nilai tersisaKendaraanJurnalSegmen Daftar perhentian kendaraan yang tersisa dengan status mereka ditandai sebagai Status.BARU. Perhentian pertama pada daftar harus memiliki status yang ditandai sebagai State.ENROUTE. Kolom opsional:
- Tidak ada
Semua kolom lain dalam entitas diabaikan untuk notifikasi ini.
Contoh perintah curl
:
# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"remainingVehicleJourneySegments": [
{
"stop": {
"state": "ENROUTE",
"plannedLocation": {
"point": {
"latitude": 37.7749,
"longitude": -122.084061
}
},
"tasks": [
{
"taskId": "${TASK1_ID}"
}
]
}
},
{
"stop": {
"state": "NEW",
"plannedLocation": {
"point": {
"latitude": 37.3382,
"longitude": 121.8863
}
},
"tasks": [
{
"taskId": "${TASK2_ID}"
}
]
}
}
]
}
EOM
Kendaraan tiba di perhentian
Armada Mesin harus diberi tahu saat kendaraan tiba di perhentian. Anda dapat memberi tahu Fleet Engine dari Driver SDK, atau dari lingkungan server. Kedua metode ini tidak boleh dicampur untuk menghindari kondisi race, dan 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 `UpdateDeliveryKendaraan':
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments
<id> adalah pengenal unik untuk kendaraan pengiriman di armada yang ingin Anda perbarui urutan tugasnya. Ini adalah ID yang Anda tentukan saat membuat kendaraan.
Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dikeluarkan oleh factory token Fleet Engine.
Isi permintaan harus berisi entity DeliveryVehicle
:
Kolom wajib diisi:
Kolom Nilai tersisaKendaraanJurnalSegmen Perhentian yang Anda kunjungi dengan status ditetapkan sebagai State.ARRIVED, diikuti dengan daftar perhentian kendaraan yang tersisa dengan status ditandai sebagai State.NEW. Kolom opsional:
- Tidak ada
Semua kolom lain di entitas akan diabaikan untuk update tersebut.
Contoh perintah curl
:
# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"remainingVehicleJourneySegments": [
{
"stop": {
"state": "ARRIVED",
"plannedLocation": {
"point": {
"latitude": 37.7749,
"longitude": -122.084061
}
},
"tasks": [
{
"taskId": "${TASK1_ID}"
}
]
}
},
{
"stop": {
"state": "NEW",
"plannedLocation": {
"point": {
"latitude": 37.3382,
"longitude": 121.8863
}
},
"tasks": [
{
"taskId": "${TASK2_ID}"
}
]
}
}
]
}
EOM
Kendaraan menyelesaikan perhentian
Armada Mesin harus diberi tahu saat kendaraan menyelesaikan perhentian. Ini menyebabkan semua tugas yang terkait dengan perhentian ditetapkan ke status TUTUP. Anda dapat memberi tahu Fleet Engine dari Driver SDK, atau dari lingkungan server. Kedua metode ini tidak boleh dicampur untuk menghindari kondisi race dan untuk mempertahankan satu sumber kebenaran.
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk memberi tahu Fleet Engine bahwa kendaraan telah menyelesaikan perhentian.
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
// This stop has been completed and is commented out to indicate it
// should be removed from the list of vehicle journey segments.
// .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
// .setStop(VehicleStop.newBuilder()
// .setPlannedLocation(LocationInfo.newBuilder()
// .setPoint(LatLng.newBuilder()
// .setLatitude(37.7749)
// .setLongitude(122.4194)))
// .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
// .setState(VehicleStop.State.ARRIVED)))
// All other remaining stops marked as NEW.
// The next stop could be marked as ENROUTE if the vehicle has begun
// its journey to the next stop.
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder() // Next stop
.setStop(VehicleStop.newBuilder()
.setPlannedLocation(LocationInfo.newBuilder()
.setPoint(LatLng.newBuilder()
.setLatitude(37.3382)
.setLongitude(121.8863)))
.addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
.setState(VehicleStop.State.NEW)))
.build();
// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
UpdateDeliveryVehicleRequest.newBuilder() // no need for the header
.setName(vehicleName)
.setDeliveryVehicle(deliveryVehicle)
.setUpdateMask(FieldMask.newBuilder()
.addPaths("remaining_vehicle_journey_segments"))
.build();
try {
DeliveryVehicle updatedDeliveryVehicle =
deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
Untuk memberi tahu Fleet Engine tentang penyelesaian perhentian dari lingkungan server, lakukan panggilan REST HTTP ke `UpdateDeliveryKendaraan':
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remaining_vehicle_journey_segments
<id> adalah pengenal unik untuk kendaraan pengiriman di armada yang ingin Anda perbarui urutan tugasnya. Ini adalah ID yang Anda tentukan saat membuat kendaraan.
Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dikeluarkan oleh factory token Fleet Engine.
Isi permintaan harus berisi entity DeliveryVehicle
:
Kolom wajib diisi:
Kolom Nilai segmen_perjalanan_kendaraan_tetap Perhentian yang telah Anda selesaikan seharusnya tidak lagi tercantum dalam daftar perhentian kendaraan yang tersisa. Kolom opsional:
- Tidak ada
Semua kolom lain di entitas akan diabaikan untuk update tersebut.
Contoh perintah curl
:
# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"remainingVehicleJourneySegments": [
{
"stop": {
"state": "NEW",
"plannedLocation": {
"point": {
"latitude": 37.3382,
"longitude": 121.8863
}
},
"tasks": [
{
"taskId": "${TASK2_ID}"
}
]
}
}
]
}
EOM
Memperbarui tugas
Sebagian besar kolom tugas tidak dapat diubah. Namun, Anda dapat mengubah status, hasil tugas, waktu hasil tugas, dan lokasi hasil tugas dengan memperbarui entity tugas secara langsung. Misalnya, jika tugas belum ditetapkan ke kendaraan, Anda dapat menutup tugas dengan memperbarui status secara langsung.
gRPC
Ini adalah contoh pembaruan tugas melalui gRPC.
REST
Ini adalah contoh pembaruan tugas melalui REST.
Menutup tugas
Untuk menutup tugas yang telah ditetapkan ke kendaraan, beri tahu Fleet Engine bahwa kendaraan telah menyelesaikan perhentian tempat tugas dilakukan atau hapus dari daftar perhentian kendaraan. Untuk melakukannya, Anda dapat menetapkan daftar perhentian kendaraan yang tersisa, seperti saat memperbarui urutan tugas untuk kendaraan.
Jika tugas belum ditetapkan ke kendaraan dan harus ditutup, perbarui tugas ke status TUTUP. Namun, Anda tidak boleh membuka kembali tugas TUTUP.
Menutup tugas tidak mengindikasikan keberhasilan atau kegagalan. Hal ini menunjukkan bahwa tugas tidak lagi dipertimbangkan dalam proses. Untuk pelacakan pengiriman, penting untuk menunjukkan hasil sebenarnya dari tugas sehingga hasil pengiriman dapat ditampilkan.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TASK_ID = "task-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
.setName(taskName)
.setState(Task.State.CLOSED) // It's only possible to directly CLOSE a
.build(); // task which is NOT assigned to a vehicle.
// Task request
UpdateTaskRequest updateTaskRequest =
UpdateTaskRequest.newBuilder() // No need for the header
.setTask(task)
.setUpdateMask(FieldMask.newBuilder().addPaths("state"))
.build();
try {
Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
Untuk menandai tugas sebagai tutup dari lingkungan server, lakukan panggilan REST HTTP ke UpdateTask
:
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=state
<id> adalah pengenal unik untuk tugas.
Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dikeluarkan oleh factory token Fleet Engine.
Isi permintaan harus berisi entity Task
:
Kolom wajib diisi:
Kolom Nilai status Status.DITUTUP. Kolom opsional:
Kolom Nilai tugasHasil Outcome.eksekusi atau Hasil.GAGAL taskOutcomeTime Waktu ketika tugas selesai. taskResultsLocation Lokasi tempat tugas diselesaikan. Fleet Engine akan menetapkan ini secara default ke lokasi kendaraan terakhir kecuali jika diganti secara manual oleh penyedia.
Semua kolom lain di entitas akan diabaikan untuk update tersebut.
Contoh perintah curl
:
# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=state,taskOutcome,taskOutcomeTime" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"state": "CLOSED",
"taskOutcome": "SUCCEEDED",
"taskOutcomeTime": "$(date -u --iso-8601=seconds)"
}
EOM
Menetapkan hasil tugas dan lokasi hasil
Penutupan tugas tidak mengindikasikan keberhasilan atau kegagalan. Hal ini menunjukkan bahwa tugas tidak lagi dipertimbangkan dalam proses. Untuk pelacakan pengiriman, penting untuk menunjukkan hasil tugas yang sebenarnya sehingga hasil pengiriman dapat ditampilkan dan ada penagihan yang tepat untuk layanan tersebut. Setelah ditetapkan, hasil tugas tidak dapat diubah. Anda dapat mengubah waktu hasil tugas dan lokasi hasil tugas setelah ditetapkan.
Tugas yang memiliki status TUTUP dapat ditetapkan hasilnya ke eksekusi atau GAGAL. Fleet Engine hanya menagih tugas pengiriman dengan status Berhasil.
Saat menandai hasil tugas, Fleet Engine otomatis mengisi lokasi hasil tugas dengan lokasi kendaraan yang terakhir diketahui. Anda dapat mengganti perilaku ini.
gRPC
Anda memiliki opsi untuk menetapkan lokasi hasil tugas saat menetapkan hasil. Ini akan mencegah Fleet Engine menyetelnya ke default lokasi kendaraan terakhir. Anda juga dapat menimpa lokasi hasil tugas yang ditetapkan Fleet Engine di lain waktu. Fleet Engine tidak akan pernah menimpa lokasi hasil tugas yang Anda berikan. Lokasi hasil tugas tidak dapat ditetapkan untuk tugas yang belum menetapkan hasil tugas. Anda dapat menetapkan hasil tugas dan lokasi hasil tugas dalam permintaan yang sama.
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk menetapkan hasil tugas ke Execute dan menyetel 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,
lakukan panggilan REST HTTP ke UpdateTask
:
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation
<id> adalah pengenal unik untuk tugas.
Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dikeluarkan oleh factory token Fleet Engine.
Isi permintaan harus berisi entity Task
:
Kolom wajib diisi:
Kolom Nilai tugasHasil Outcome.eksekusi atau Hasil.GAGAL taskOutcomeTime Stempel waktu saat hasil tugas ditetapkan (dari penyedia). Ini adalah waktu saat tugas selesai. Kolom opsional:
Kolom Nilai taskResultsLocation Lokasi tempat tugas diselesaikan. Fleet Engine akan menetapkan ini secara default ke lokasi kendaraan terakhir kecuali jika diganti secara manual oleh penyedia.
Semua kolom lain di entitas akan diabaikan untuk update tersebut.
Contoh perintah curl
:
# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"taskOutcome": "SUCCEEDED",
"taskOutcomeTime": "$(date -u --iso-8601=seconds)",
"taskOutcomeLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
}
}
EOM
Mengubah rute pengiriman
Setelah tugas pengiriman dibuat, lokasi yang direncanakan tidak dapat diubah. Untuk mengubah rute pengiriman, tutup tugas pengiriman tanpa menetapkan hasil, lalu buat tugas baru dengan lokasi yang direncanakan dan diperbarui. Setelah membuat tugas baru, tetapkan tugas ke kendaraan yang sama. Untuk mengetahui informasi selengkapnya, lihat menutup tugas pengiriman dan menetapkan tugas.
Gunakan feeder dan kendaraan pengiriman
Jika Anda menggunakan kendaraan feeder untuk mengangkut pengiriman ke kendaraan pengiriman sepanjang hari, buat model transfer pengiriman sebagai tugas perhentian terjadwal untuk kendaraan pengiriman. Untuk memastikan pelacakan lokasi yang akurat, cukup tetapkan tugas pengiriman untuk pengiriman yang ditransfer setelah dimuat ke kendaraan pengiriman. Untuk informasi selengkapnya, lihat perhentian terjadwal.
Status pengiriman toko dan informasi meta lainnya
Setelah tugas pengiriman selesai, status dan hasil tugas dicatat dalam tugas. Namun, Anda mungkin ingin memperbarui informasi meta lain khusus untuk pengiriman. Untuk menyimpan informasi meta lain yang dapat Anda referensikan di luar layanan Fleet Engine, gunakan tracking_id yang terkait dengan tugas sebagai kunci dalam tabel eksternal.
Untuk informasi selengkapnya, lihat Masa berlaku tugas.
Mencari kendaraan
Anda dapat mencari kendaraan dari SDK Driver, atau dari lingkungan server.
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk mencari kendaraan:
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle request
String name = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
GetDeliveryVehicleRequest getVehicleRequest = GetDeliveryVehicleRequest.newBuilder() // No need for the header
.setName(name)
.build();
try {
DeliveryVehicle vehicle = deliveryService.getDeliveryVehicle(getVehicleRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
Untuk mencari kendaraan dari lingkungan server, lakukan panggilan REST HTTP ke `GetKendaraan':
GET https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<vehicleId>
<id> adalah pengenal unik untuk tugas.
<vehicleId> adalah ID kendaraan yang akan dicari.
Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dikeluarkan oleh factory token Fleet Engine.
Isi permintaan harus kosong.
Jika pencarian berhasil, isi respons berisi entitas kendaraan.
Contoh perintah curl
:
# Set JWT, PROJECT_ID, and VEHICLE_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
"https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}"
Cari tugas
Anda dapat mencari tugas dari lingkungan server. Driver SDK tidak mendukung pencarian tugas.
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk mencari tugas:
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TASK_ID = "task-8597549";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task request
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
GetTaskRequest getTaskRequest = GetTaskRequest.newBuilder() // No need for the header
.setName(taskName)
.build();
try {
Task task = deliveryService.getTask(getTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
Untuk mencari tugas dari lingkungan server, lakukan panggilan REST HTTP ke `GetTask':
GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<taskId>
<id> adalah pengenal unik untuk tugas.
<taskId> adalah ID tugas yang akan dicari.
Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dikeluarkan oleh factory token Fleet Engine.
Isi permintaan harus kosong.
Jika pencarian berhasil, isi respons berisi entity tugas.
Contoh perintah curl
:
# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
"https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}"
Mencari informasi tugas pengiriman berdasarkan ID pelacakannya
Anda dapat mencari informasi tugas pengiriman dengan cara berikut, yang masing-masing memiliki tujuan terpisah:
- oleh ID tugas: digunakan oleh pengguna seperti operator armada yang memiliki akses ke tampilan lengkap data tugas.
- dengan ID pelacakan: digunakan oleh software klien Anda untuk memberikan informasi terbatas kepada pengguna akhir, seperti ketika 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 menurut ID pelacakan, Anda dapat menggunakan salah satu cara berikut:
Persyaratan pencarian
Informasi pengiriman yang diberikan oleh ID pelacakan mematuhi aturan visibilitas yang dinyatakan dalam Mengontrol visibilitas lokasi yang dilacak.
Gunakan Fleet Engine untuk mencari informasi pengiriman dengan melacak ID. Driver SDK tidak mendukung pencarian informasi dengan ID pelacakan. Untuk melakukannya dengan Fleet Engine, Anda akan menggunakan lingkungan server atau browser.
Gunakan token tersempit yang mungkin untuk membatasi risiko keamanan. Misalnya, jika Anda menggunakan Token Konsumen Penayangan, panggilan API Fleet Engine Deliveries hanya akan menampilkan informasi yang relevan dengan pengguna akhir tersebut, seperti pengirim atau penerima pengiriman. Semua informasi lain dalam respons disamarkan. Untuk informasi lebih lanjut tentang token, lihat Membuat Token Web JSON (JWT) untuk otorisasi.
Menelusuri dengan Java 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 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 dikeluarkan 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 mencantumkan tugas dari server atau lingkungan browser. Driver SDK tidak mendukung tugas-tugas listingan.
Tugas listingan meminta akses luas ke tugas. Tugas listingan hanya ditujukan untuk pengguna tepercaya. Gunakan Delivery Armada Pembaca atau Token Autentikasi Pengguna Super Penayangan saat membuat permintaan tugas daftar.
Tugas yang tercantum memiliki kolom berikut yang disamarkan:
- KendaraanStop.planned_location
- KendaraanStop.state
- VehicleStop.TaskInfo.taskId
Tugas yang tercantum dapat difilter menurut sebagian besar properti tugas. Untuk sintaksis kueri filter, lihat AIP-160. Daftar berikut menunjukkan properti tugas valid yang dapat Anda gunakan untuk pemfilteran:
- id_kendaraan_pengiriman
- status
- rencana_lokasi
- durasi_tugas
- tugas_keluar
- task_outcome_location
- task_outcome_location_source
- tugas_keluar_waktu
- id_pelacakan
- 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 yang diikuti dengan 's' | task_duration = 120s |
Enum | String | state = CLOSED AND type = PICKUP |
Lokasi | point.latitude dan point.longitude |
planned_location.point.latitude > 36.1 AND planned_location.point.longitude < -122.0 |
Lihat AIP-160 untuk daftar lengkap operator kueri filter.
Jika tidak ada kueri filter yang ditentukan, semua tugas akan dicantumkan.
Daftar tugas diberi penomoran halaman. Ukuran halaman dapat ditentukan dalam permintaan tugas daftar. Jika ukuran halaman ditentukan, jumlah tugas yang ditampilkan tidak lebih dari ukuran halaman yang ditentukan. Jika tidak ada ukuran halaman, default yang wajar akan digunakan. Jika ukuran halaman yang diminta melebihi nilai maksimum internal, maka nilai maksimum internal akan digunakan.
Daftar tugas dapat menyertakan token untuk membaca halaman hasil berikutnya. Gunakan token halaman dengan permintaan yang identik dengan permintaan sebelumnya untuk mengambil halaman tugas berikutnya. Saat token halaman yang ditampilkan kosong, tidak ada lagi tugas yang tersedia untuk pengambilan.
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk mencantumkan tugas delivery deliveryId. Respons yang berhasil masih dapat kosong. Respons kosong menunjukkan bahwa tidak ada Tasks yang dikaitkan dengan deliveryDeliveryId yang disediakan.
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TRACKING_ID = "TID-7449w087464x5";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Tasks request
String parent = "providers/" + PROJECT_ID;
ListTasksRequest listTasksRequest = ListTasksRequest.newBuilder() // No need for the header
.setParent(parent)
.setFilter("delivery_vehicle_id = 123")
.build();
try {
ListTasksResponse 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 dikeluarkan oleh factory token Fleet Engine.
Jika pencarian berhasil, isi respons berisi data dengan struktur berikut:
// JSON representation
{
"tasks": [
{
object (Task)
}
],
"nextPageToken": string,
"totalSize": integer
}
Respons yang berhasil masih dapat kosong. Respons kosong menunjukkan bahwa tidak ada tugas yang ditemukan yang memenuhi kriteria filter yang ditentukan.
Contoh perintah curl
:
# Set JWT, PROJECT_ID, and VEHICLE_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
"https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?filter=state%20%3D%20OPEN%20AND%20delivery_vehicle_id%20%3D%20${VEHICLE_ID}"
Mencantumkan kendaraan pengiriman
Anda dapat mencantumkan kendaraan pengiriman dari server atau lingkungan browser. Driver SDK tidak mendukung listingan kendaraan pengiriman.
Listingan kendaraan pengiriman meminta akses luas ke kendaraan pengiriman dan ditujukan hanya untuk pengguna tepercaya. Gunakan Delivery Armada Pembaca atau Token Autentikasi Pengguna Super Penayangan saat membuat permintaan kendaraan pengiriman daftar.
Kendaraan pengiriman yang tercantum memiliki kolom berikut yang disamarkan karena dampaknya terhadap ukuran respons:
- CurrentRouteSegmen
- Segmen Kendaraan Lainnya
Anda dapat memfilter kendaraan pengiriman daftar berdasarkan properti attributes
-nya. Misalnya, untuk membuat kueri atribut dengan kunci my_key
dan nilai my_value
, gunakan
attributes.my_key = my_value
. Untuk membuat kueri beberapa atribut, gabungkan kueri
menggunakan operator AND
dan OR
yang logis seperti dalam attributes.key1 = value1 AND
attributes.key2 = value2
. Lihat AIP-160 untuk deskripsi lengkap sintaksis kueri filter.
Anda dapat memfilter kendaraan pengiriman yang tercantum menurut lokasi menggunakan parameter permintaan viewport
. Parameter permintaan viewport
menentukan area pandang menggunakan dua koordinat pembatas: high
(timur laut) dan low
(barat daya) lintang/bujur.
Permintaan ditolak jika berisi garis lintang tinggi yang secara geografis lebih rendah dari garis lintang rendah.
Daftar kendaraan pengiriman diberi nomor halaman secara default menggunakan ukuran halaman yang wajar. Jika Anda menentukan ukuran halaman, permintaan tersebut hanya akan menampilkan jumlah kendaraan yang ditentukan oleh batas, atau lebih sedikit. Jika ukuran halaman yang diminta melebihi nilai maksimum internal, nilai maksimum internal akan digunakan. Ukuran halaman default dan maksimum adalah 100 kendaraan.
Daftar kendaraan pengiriman dapat menyertakan token untuk membaca halaman hasil berikutnya. Token halaman hanya ada dalam respons saat lebih banyak halaman pengiriman kendaraan tersedia untuk pengambilan. Untuk mengambil halaman tugas berikutnya, gunakan token halaman dengan permintaan yang identik dengan permintaan sebelumnya.
gRPC
Contoh berikut menunjukkan cara menggunakan library gRPC Java untuk mencantumkan kendaraan pengiriman di wilayah tertentu dengan atribut tertentu. Respons yang berhasil masih dapat kosong. Jika itu terjadi, berarti tidak ada kendaraan dengan atribut yang ditentukan yang saat ini berada di area pandang yang ditentukan.
static final String PROJECT_ID = "my-delivery-co-gcp-project";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Tasks request
String parent = "providers/" + PROJECT_ID;
ListDeliveryVehiclesRequest listDeliveryVehiclesRequest =
ListDeliveryVehiclesRequest.newBuilder() // No need for the header
.setParent(parent)
.setViewport(
Viewport.newBuilder()
.setHigh(LatLng.newBuilder()
.setLatitude(37.45)
.setLongitude(-122.06)
.build())
.setLow(LatLng.newBuilder()
.setLatitude(37.41)
.setLongitude(-122.11)
.build())
.setFilter("attributes.my_key = my_value")
.build();
try {
ListDeliveryVehiclesResponse listDeliveryVehiclesResponse =
deliveryService.listDeliveryVehicles(listDeliveryVehiclesRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
Untuk mencantumkan tugas dari browser, lakukan panggilan REST HTTP ke ListDeliveryVehicles
:
GET https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles
Untuk menerapkan filter ke tugas yang tercantum, sertakan parameter URL "filter" dengan kueri filter yang di-escape URL sebagai nilainya.
Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> adalah token yang dikeluarkan oleh factory token Fleet Engine.
Jika pencarian berhasil, isi respons berisi data dengan struktur berikut:
// JSON representation
{
"deliveryVehicles": [
{
object (DeliveryVehicle)
}
],
"nextPageToken": string,
"totalSize": integer
}
Respons yang berhasil masih dapat kosong. Jika hal itu terjadi, berarti tidak ada kendaraan pengiriman yang ditemukan yang memenuhi kueri filter dan area pandang yang ditentukan.
Contoh perintah curl
:
# Set JWT, PROJECT_ID, and VEHICLE_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
"https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles?filter=attributes.my_key%20%3D%20my_value%20&viewport.high.latitude=37.45&viewport.high.longitude=-122.06&viewport.low.latitude=37.41&viewport.low.longitude=-122.11"
Pelacakan pengiriman
Anda memiliki dua opsi untuk menggunakan Fleet Engine Deliveries API guna mengaktifkan pelacakan pengiriman:
Direkomendasikan: Gunakan library Pelacakan Pengiriman JavaScript. Library memungkinkan Anda memvisualisasikan lokasi kendaraan dan lokasi minat yang dilacak di Fleet Engine. Folder ini berisi komponen peta JavaScript yang merupakan pengganti drop-in untuk objek google.maps.Map standar, dan komponen data untuk dihubungkan dengan Fleet Engine. Hal ini memungkinkan Anda untuk memberikan pengalaman pelacakan pengiriman animasi yang dapat disesuaikan dari aplikasi web atau seluler.
Terapkan pelacakan pengiriman Anda sendiri selain Fleet Engine Deliveries API. Kuncinya adalah mencari tugas pengiriman dengan ID pelacakan.
Jika Anda menggunakan Peran Konsumen Pengiriman, setiap panggilan Fleet Engine Deliveries API hanya akan menampilkan informasi yang relevan untuk pengirim atau penerima. Semua informasi lainnya dalam respons akan disamarkan. Anda bertanggung jawab untuk mengautentikasi pengguna akhir. Selain itu, informasi lokasi akan difilter berdasarkan tugas yang saat ini sedang dieksekusi. Selama tugas tidak tersedia, informasi lokasi tidak akan dibagikan kepada pengguna akhir.
Logging
Anda dapat mengaktifkan opsi untuk mengizinkan Fleet Engine mengirim log RPC ke Cloud Logging. Untuk informasi selengkapnya, lihat Logging.
Peran dan Token Otorisasi
Seperti yang dijelaskan dalam Mengintegrasikan Deliveries API dan catatan otorisasi untuk setiap kasus penggunaan, melakukan panggilan ke Fleet Engine memerlukan autentikasi dengan Token Web JSON yang telah ditandatangani menggunakan kredensial akun layanan. Akun layanan yang digunakan untuk membuat token tersebut mungkin memiliki satu atau beberapa peran, dengan setiap peran memberikan serangkaian izin yang berbeda.
Untuk mengetahui informasi selengkapnya, baca Autentikasi dan Otorisasi.
Pemecahan masalah
Ketahanan
Fleet Engine tidak dianggap sebagai sumber kebenaran. Anda bertanggung jawab untuk memulihkan status sistem, jika perlu, tanpa mengandalkan Fleet Engine.
Kehilangan kondisi di Fleet Engine
Saat bekerja dengan Fleet Engine, implementasikan klien sehingga sistem akan pulih dengan sendirinya jika terjadi kegagalan. Misalnya, saat Fleet Engine mencoba mengupdate kendaraan, kendaraan tersebut mungkin merespons dengan error yang menunjukkan bahwa kendaraan tersebut tidak ada. Klien kemudian harus membuat ulang kendaraan dalam status baru. Hal ini jarang terjadi, sistem harus tangguh jika memang demikian.
Dalam skenario kegagalan bencana Fleet Engine yang sangat tidak mungkin, Anda mungkin perlu membuat ulang sebagian besar atau semua kendaraan dan tugas. Jika tingkat pembuatan menjadi terlalu tinggi, beberapa permintaan mungkin akan gagal lagi karena masalah kuota karena pemeriksaan kuota dilakukan untuk menghindari serangan denial of service (DOS). Dalam hal ini, perlambatkan rasio rekreasi menggunakan strategi backoff untuk mencoba ulang.
Kehilangan status di aplikasi pengemudi
Jika aplikasi driver error, aplikasi harus membuat ulang status saat ini dalam Driver SDK. Aplikasi harus mencoba membuat ulang tugas untuk memastikan bahwa tugas tersebut ada dan memulihkan statusnya saat ini. Aplikasi juga harus membuat ulang dan secara eksplisit menetapkan daftar perhentian untuk Driver SDK.
Perhatikan bahwa pemulihan ini harus dilakukan secara otonom tanpa mengandalkan informasi dari Fleet Engine, selain error yang menunjukkan apakah dan kapan entity sudah ada di database. Jika entitas sudah ada, error tersebut dapat diserap dan entitas dapat diperbarui menggunakan ID-nya.
FAQ
Bagaimana jika pengemudi berhenti mengerjakan tugas yang tidak berurutan?
Dalam hal ini, Anda harus mengupdate urutan tugas terlebih dahulu, lalu melanjutkan seperti biasa, dengan menandai kedatangan di perhentian, penyelesaian tugas, dll. Jika tidak, sistem mungkin menjadi tidak konsisten. PWT mungkin menjadi salah dan error yang tidak terduga dapat dilaporkan.