Teslimatların ilk ve son kilometresi için filo aktivitelerinizin modelini Fleet Engine Deliveries API'sinden yardım alır. Bu API'yi, Android için Driver SDK'sı ile kullanabilirsiniz. ya da doğrudan HTTP REST veya gRPC çağrıları kullanarak uygulayabilirsiniz.
İlk kurulum
Fleet Engine Deliveries API'yi Google Cloud Console'da yapılandırırsınız.
Konsolda atılması gereken adımlar ve içerik oluşturma JSON Web Jetonu için, bkz. Kimlik doğrulama ve yetkilendirme.
Konsolu kullanmayla ilgili ayrıntılar için Google Cloud Console belgeleri.
Kurulumu doğrulama
Hizmet hesaplarını oluşturduktan sonra kurulumunuzun tamamlandığını doğrulayın bir teslimat aracı oluşturabilirsiniz. Kurulumunuzu hemen doğrulama çalışırken ortaya çıkabilecek yaygın yetkilendirme sorunlarını giderdiğinizden size yol göstereceğiz. Ayarlarınızı doğrulamanın iki yolu vardır:
Kurulumunuzun iki önemli bölümünü test edin: Yetkilendirme jetonu imzalama ve deneme sürümü teslimi araç üretiminin
gcloud
komut satırı yardımcı programı. Örneğin, daha fazla bilgi için Ayarlarınızı doğrulama rehberini inceleyin.Kurulumunuzu Fleet Engine Auth Örnek Komut Dosyaları.
İstemci Kitaplıkları
Ham gRPC veya REST üzerinde daha iyi bir geliştirici deneyimi için yaygın programlama dillerindeki istemci kitaplıklarının üzerinden geçer. Örneğin, sunucu uygulamanız için istemci kitaplıklarını nasıl edinebileceğinize ilişkin talimatlar için İstemci Kitaplıkları.
Bu belgelerdeki Java örneklerinde gRPC hakkında bilgi sahibi olduğunuz varsayılır.
Veri yapıları
Fleet Engine Deliveries API, teslim alma ve teslimatı modellemek için iki veri yapısı kullanır. oranında gönderim:
- Gönderiyi taşımak için kullanılan teslimat aracı.
- Gönderinin teslim alma ve teslimat görevleri.
Sürücü aralarını ve planlı durakları modellemek için görevleri de kullanabilirsiniz. Gün boyu.
Teslimat araçları
Teslimat araçları, gönderileri bir depodan teslimat konumuna taşır. farklı bir yeri tercih eder. Bazı durumlarda, bir gönderiyi doğrudan teslim alma konumundan teslimat konumuna taşımak.
Fleet Engine'de DeliveryVehicle
nesnesi oluşturmak için Sürücü SDK'sını kullanın
sevkiyat ve filo takibi için konum güncellemeleri
göndermenizi sağlar.
Görevler
Bir aracın gün içinde gerçekleştirdiği işlemler için görevleri, İşlemin türü:
- Teslim almalar ve teslimatlar için Gönderim görevleri atayın.
- Sürücülerin çalışmadığı molalar gibi uygun olmayan zamanlarda, Kullanılabilir olmayan görevler atayın.
- Açılır kutularda veya müşteri konumlarındaki sürüş harici görevler için Planlanmış durdurma görevleri.
Atadığınız her görevin benzersiz bir görev kimliği olmalıdır, ancak görevler aynı izleme kimliği. Fleet Engine TVS'yi hesapladığında her görev için zaman çizelgesinde, tüm görevlerin bu kişilerin tahminlerde bulunmasını sağlar. Görev kimlikleri hakkında daha fazla bilgi için: Görev Kimliği yönergeleri.
Fleet Engine'de görev oluşturmak için Driver SDK Görev Yöneticisi'ni kullanın.
Gönderim görevleri
Bir gönderinin hem teslim alınması hem de teslimatı için kargo görevleri oluşturmak ve şu bilgileri ekleyin:
- Teslim alma veya teslimat konumu.
- Takip numarası veya kimliği.
- Görevi tamamlamak için ek süre kazanmak amacıyla bekleme süresi veya aktarma yerine yürüyün.
- Benzersiz bir görev kimliği. Görev Kimliği yönergeleri bölümüne bakın.
Daha fazla bilgi için aşağıdaki konulara bakın:
Android
iOS
- GMTD DeliveryTaskManager'da oturum açın.
- GMTSTaskType
Kullanılabilir olmayan görevler
Kullanılabilir olmayan görevler, bir aracın müsait olmadığı dönemleri kapsar. kamyonetler veya teslimatlar (ör. araca veya sürücüye yakıt doldurma molaları) dinlenme molaları.
Aşağıdaki bilgilerle bir "kullanmama" görevi oluşturun:
- Aranın uzunluğu.
- İsteğe bağlı olarak, aranın konumu. Bu sayfada ancak bunu yapmanız daha doğru TVS aralıkları sağlar Gün boyu.
Daha fazla bilgi için aşağıdaki konulara bakın:
Android
iOS
- GMTD DeliveryTaskManager'da oturum açın.
- GMTSTaskType
Planlanmış durdurma görevleri
Bir teslimat aracının ihtiyaç duyduğu durakları modellemek için planlanmış durak görevleri oluşturma hazırlıyoruz. Örneğin, zamanlanmış bir günlük etkinlik için planlanmış bir durdurma görevi oluşturun. diğer teslimatlardan bağımsız olarak belirli bir konumda toplama duruşu teslim alma seçeneği oluyor. Ayrıca, planlanmış durak görevleri de oluşturabilirsiniz. açılır kutulardan koleksiyonlar için veya besleyici-araç aktarımlarını modellemek üzere ya da servis merkezlerinde veya servis noktalarında durur.
Daha fazla bilgi için aşağıdaki konulara bakın:
Android
iOS
- GMTD DeliveryTaskManager'da oturum açın.
- GMTSTaskType
Görev Kimliği yönergeleri
Görev kimlikleri oluştururken aşağıdaki içerik ve biçim yönergelerine uyun:
- Benzersiz görev kimlikleri oluşturun
- Kimliği tanımlayabilecek bilgileri (PII) ifşa etmeyin veya metin verilerini temizle.
- Geçerli Unicode dizeleri kullanın.
- En fazla 64 karakter kullanın.
- Şu ASCII karakterlerden hiçbirini eklemeyin: "/", ":", "\", "?" veya "#".
- Unicode Normalleştirme Formu C'ye göre normalleştirin.
Aşağıda, iyi Görev Kimliklerine ilişkin bazı örnekler verilmiştir:
- 566c33d9-2a31-4b6a-9cd4-80ba1a0c643b
- e4708eabcfa39bf2767c9546c9273f747b4626e8cc44e9630d50f6d129013d38
- NTA1YTliYWNkYmViMTI0ZmMzMWFmOWY2NzNkM2Jk
Aşağıdaki tabloda desteklenmeyen görev kimliği örnekleri gösterilmektedir:
Desteklenmeyen Görev Kimlikleri | Neden |
---|---|
8/31/2019-20:48-46.70746,-130.10807,-85.17909,61.33680 | Kimliği tanımlayabilecek bilgiler (PII) ve karakter gereksinimlerini (virgül, nokta, iki nokta, eğik çizgi) ihlal ediyor. |
JohnDoe-577b484da26f-Cupertino-SantaCruz | Kimliği tanımlayabilecek bilgiler (PII) koşullarını ihlal ediyor. |
4R0oXLToF"112 Yaz Dr. East Hartford, CT06118"577b484da26f8a | Kimliği tanımlayabilecek bilgiler (PII) ve karakter gereksinimlerini ihlal ediyor: boşluk, virgül ve tırnak işareti. 64 karakterden uzun olmalıdır. |
Diğer kaynaklar
Her veride yer alan belirli alanları görmek için
DeliveryVehicle
API Referansı belgelerine bakın
(gRPC, REST)
ve Task
(gRPC, REST).
Bir aracın ömrü
DeliveryVehicle
nesnesi, bir ilk veya son mil teslimat aracını temsil eder.
Şunları kullanarak bir DeliveryVehicle
nesnesi oluşturursunuz:
- Hizmet hesabını içeren Google Cloud projesinin proje kimliği Fleet Engine API'lerini çağırmak için kullanılır.
- Müşteriye ait araç kimliği.
Her araç için benzersiz olan araç kimlikleri kullanın. Araç kimliğini yeniden kullanmayın (orijinal araçta etkin bir görev yoksa)
Fleet Engine, şuna ait olmayan DeliveryVehicle
nesneyi otomatik olarak siler:
yedi gün sonra UpdateDeliveryVehicle
kullanılarak güncellenmiştir. Önerilen
yaklaşımı, bir aracı Fleet Engine'de ulaşılabilir tutmanın
kontrol edin. DeliveryVehicle
içindeki diğer alanların çoğunda yapılan güncellemeler
yeni alan değerinin farklı olması kaydıyla varlık, ömrünü de uzatır
farklı olabilir.
Bir aracın mevcut olup olmadığını öğrenmek için:
UpdateDeliveryVehicle
numaralı telefonu arayın.- NOT_FOUND hatası alırsanız
CreateDeliveryVehicle
numaralı telefonu arayın aracı yeniden oluşturabilirsiniz. Aramada araç iade edilirse araç güncellenebilir.
Araç türleri
VehicleType
varlığı, aşağıdakileri içeren isteğe bağlı bir VehicleType
alanını içeriyor:
AUTO
, TWO_WHEELER
, BICYCLE
veya olarak belirtebileceğiniz Category
sıralaması
PEDESTRIAN
. Alanı ayarlamazsanız varsayılan olarak AUTO
olur.
Araçlar için tüm rotalarda ilgili RouteTravelMode
kullanılır
seçin.
Araç özellikleri
DeliveryVehicle
varlığı, tekrarlanan bir alan içeriyor
DeliveryVehicleAttribute
. ListDeliveryVehicles
API, filter
içerir
döndürülen DeliveryVehicle
varlıklarını
özellikler. DeliveryVehicleAttribute
, Fleet Engine'i etkilemez
yönlendirme davranışı.
Kimliği tanımlayabilecek bilgiler (PII) veya hassas bilgiler eklemeyin. özellikler: bu alan kullanıcılar tarafından görülebiliyor olabilir.
Bir görevin ömrü
Fleet Engine'de şu komutu kullanarak görev oluşturabilir, güncelleyebilir ve sorgulayabilirsiniz: Deliveries API gRPC veya REST arayüzleridir.
Bir Task
nesnesinin ilerlemesini izleyebilecek bir durum alanı var
geliştirmenizi sağlar. Değerler OPEN ile KAPALI konumuna taşınır. Yeni görevler oluşturuldu
durumu şu şekildedir:
- Görev henüz bir teslimat aracına atanmadı.
- Teslimat aracı, göreve atanan araç durağından henüz geçmedi.
Görev yönergeleri
Bir aracı yalnızca AÇIK durumunda olan bir araca atayabilirsiniz.
Bir görevi araç durakları listesinden kaldırarak iptal edebilirsiniz. Bu da görev durumunu otomatik olarak KAPATILDI.
Görevin aracı görevin araç durmasını tamamladığında:
Görevin sonuç alanını BAŞARILI veya BAŞARISIZ olarak güncelleyin.
Etkinliğin zaman damgasını belirtin.
Böylece JavaScript Gönderim İzleme kitaplığı görevin sonucunu belirtir ve görev durumu otomatik olarak KAPATILDI şeklinde ayarlanır. Daha fazla bilgi için bkz. JavaScript Gönderim İzleme kitaplığıyla Gönderiminizi takip edin.
Araçlarda olduğu gibi, Fleet Engine aşağıdaki güncellemelerden sonra güncellenmemiş görevleri var olan bir kimlikle görev oluşturmaya çalışırsanız bir hata döndürüyor.
Not: Fleet Engine, görevlerin açıkça silinmesini desteklemez. Hizmet yedi gün sonra güncelleme yapılmadan görevleri otomatik olarak siler. Görev verilerini yedi günden daha uzun süre saklamak istiyorsanız bu yeteneği kendiniz uygulamalısınız.
Görev özellikleri
Task
varlığı, tekrarlanan bir alan içeriyor
TaskAttribute
değeri şu 3 türden birinde olabilir: dize, sayı
ve bool. ListTasks
API, döndürülen sınırlandırılabilecek bir filter
alanı içerir
Task
varlıklarını, belirtilen özelliklere sahip olanlara ekleyin. Görev özellikleri
Fleet Engine yönlendirme davranışını etkileyebilir.
Kimliği tanımlayabilecek bilgiler (PII) veya diğer hassas bilgiler eklemeyin bu özellikler kullanıcılar tarafından görülebileceğinden, özelliklerde bilgi ekleme.
Araç ve görev yaşam döngüsünü yönetin
Hatırlatma: Dahili sisteminiz, verilerinin depolandığı verilerin güvenilir kaynağı Fleet Engine Deliveries API'si sizin adınıza güncellenir.
Sisteminizdeki araç ve görev yaşam döngülerini yönetmek için Fleet Engine Deliveries API'yi kullanın araçlarını ve araçla ilgili görevlerini oluşturmak, güncellemek ve takip etmek için.
Aynı zamanda sürücü uygulaması doğrudan Fleet Engine ile iletişim kurar. dokunun. Bu model, Fleet Engine'in verimli bir şekilde yönetmenizi sağlar. Konumu doğrudan takip edebilirsiniz. Bu kitaplıktan yararlanarak tüketicilerinizi sipariş edebilir.
Örneğin, aşağıdaki senaryoyu izlediğinizi varsayalım:
- Teslimat durağına yaklaşan bir sürücü. Sürücü uygulaması, konumunu Filo Motoru.
- Fleet Engine, cihazın konumunu tüketici uygulamanızın tüketiciyi uyarmak için kullandığı izleme kitaplığı her zaman paket halinde sunuyor.
- Sürücü gönderimi tamamladıktan sonra "Gönderim teslim edildi"yi tıklar. düğmesini tıklayın.
- "Gönderim teslim edildi" arka uç sisteminize bilgi gönderir. sağlayan temel doğrulama ve doğrulama süreci bulunur.
- Sisteminiz görevi BAŞARILI olarak onaylar ve Fleet Engine'i şunu kullanarak günceller: Deliveries API'si.
Aşağıdaki şemada bu süreçler genel olarak gösterilmektedir. Aynı zamanda sisteminiz, istemciniz ve daha fazlası arasındaki ve Fleet Engine'den daha yeni bir ekip oluşturduk.
İstemci jetonlarını yönet
Sürücü uygulamasından gelen ve doğrudan gönderilen konum güncellemeleri için yetkilendirme jetonları gerekir. Önerilen yaklaşım istemciden Fleet Engine'e güncellemeleri işlemek için:
Fleet Engine Delivery Güvenilmeyen Sürücü Kullanıcısı'nı kullanarak jetonu oluşturun hizmet hesabı rolüne sahip olmanız gerekir.
Sürücü uygulamasına sınırlı kapsamlı bir jeton sağlayın. Bu kapsam cihaz konumunu yalnızca Fleet Engine'de güncellemesine izin verir.
Bu yaklaşım sayesinde, mobil cihazlardan gelen aramaların, güvenin düşük olduğu ortamlara karşı hassastır. en az ayrıcalık ilkesi.
Diğer hizmet hesabı rolleri
Bunun yerine, sürücü uygulamalarına doğrudan erişim Güvenilmeyen Sürücü rolüyle sınırlı olanların ötesinde Fleet Engine güncellemeleri, örneğin, belirli görev güncellemelerinde, Güvenilir Sürücü rolünü kullanabilirsiniz. Örneğin, Güvenilir Sürücü rolünü kullanan bir model hakkında bilgi edinmek için Güvenilir Sürücü modeli.
Güvenilir olmayan ve güvenilir sürücü rollerinin kullanım alanları hakkında daha fazla bilgi için Bulut projesi kurulumu.
Bir iş günü modeli oluşturun
Aşağıdaki tabloda ilk veya son adım sürücüleri için bir iş gününün nasıl olduğu açıklanmaktadır. bir teslimat ve lojistik şirketi gibi görünebilir. Şirketiniz ama yine de bir iş gününü nasıl modelleyebileceğinizi görebilirsiniz.
Saat | Etkinlik | Modelleme |
---|---|---|
Gün başlangıcından önceki 24 saat içinde | Sevk görevlisi, sevkiyatları teslimat araçlarına veya rotalarına atar. | Gönderim teslimatları, teslim almalar, molalar
diğer mühendislerle iletişime geçin. Örneğin, Arkadaş Bitkiler projesinin
gönderimi teslim alma görevi
sevkiyat teslimat görevi
zamanlanmış müsaitlik olmaması veya
planlanan durak.
Teslimat paketlerinden sonra bir araca görev atayın ve bunların hangi sırayla teslim edileceği |
Gün başlangıcı | Sürücü, Sürücü uygulamasına giriş yaparak güne depoda başlayabilir. | Delivery Driver API'yi başlatın. Gerektiğinde Fleet Engine'de teslimat aracını oluşturun. |
Sürücü, kargoları tararak teslimat aracına yükler. | Sevkiyat teslimatı görevleri önceden oluşturulmamışsa kargo teslimatı görevleri oluşturma olduğu anlamına gelir. | |
Sürücü, gerçekleştirilecek görevlerin sırasını teyit eder. | Önceden oluşturulmamışsa sevkiyat teslim alma görevleri planlı müsaitlik durumu ve planlanmış aktarmalar. | |
Sürücü depodan ayrılır ve bir sonraki görev sayısına dair taahhütte bulunur tamamlandı. | Tüm görevleri veya görevlerin bir alt kümesini atama yerine getirmesini sağlamak. | |
Sürücü bir gönderi teslim ediyor. | Teslimat durağına vardıktan sonra, bununla ilgili bir durağa gelen araca benzer. Kargoyu teslim ettikten sonra görev ve isteğe bağlı olarak mağaza gönderim durumunu ve diğer meta bilgileri inceleyin. Durdurma aşamasında ve öncesinde tüm görevleri tamamladıktan sonra bir sonraki durağa sürüşe başlamak, aşağıdaki araç duraklamadığında ve araç sonraki durağa gider. | |
Sürücü, ek sevkiyatları teslimat aracına aktarmak için bir besleyici aracıyla karşılaşır. | Besleyici ve teslimat araçları arasındaki aktarım için buluşma noktası
planlanan durak olarak modellenmelidir.
Gönderimleri aktarıp taradıktan sonra teslimat görevleri oluşturun oluşturulmadıysa. Sonra görev tamamlamayı güncelleyin görevleri bir araca atayarak görev sıralamasını güncelleme. |
|
Sürücü, teslim alma isteğiyle ilgili bildirim alır. | Teslim alma isteğini kabul ettikten sonra bir kargo teslim alma görevi oluşturun. Sonra da görev yürütmeyi güncelleyin görevleri bir araca atayarak görev sıralamasını güncelleme. | |
Öğlen | Sürücü öğle molası veriyor. | Bir konum, kullanılamıyor olma göreviyle ilişkiliyse şu şekilde ele alın:
başka bir görev üstlenemezsiniz. Bir araçla ilgili işlemleri gerçekleştirme
bir durağa vardığınızda
araç durağını tamamladığında
ve araç bir sonraki durağa gidiyor.
Aksi takdirde, aranın sonuna kadar başka bir işlem yapmanız gerekmez. Sonraki ve kalan görevleri onaylayarak görevi kaldırın ve görev sıralamasını güncelleme. |
Sürücü bir gönderiyi alıyor. | Bu, tıpkı bir teslimat noktası gibi modellenir. İlgili işlemleri gerçekleştir bir durağa gelen araca görevi kapatma ve isteğe bağlı olarak gönderim durumunu ve diğer meta bilgileri depolama. Durdurulan tüm görevleri tamamladıktan sonra ve araç kullanmaya başlamadan önce bir sonraki durak olarak, araç duraklama işlemini tamamladığında ile ilgili işlemler gerçekleştirin ve araç sonraki durağa gider. Not: Faturalandırmanın doğru olmasını sağlamak için tüm teslim almalarda buna karşılık gelen bir teslimat görevidir. Teslim alma tarihinin bulunduğu gün ve saatte başka bir konuma teslim edilecekse o gün teslimat için aynı rotayı izlemesi gerekiyorsa teslim görevi üstlenilebilir. Sürücü, teslim almayı getiriyorsa depoda depoya döndüğünüzde, depoda bir teslimat görevi oluşturmanızı seçeceğiz. | |
Sürücü, kargo şirketlerinden kargoları almak için planlı bir duraklama yapıyor. | Bu araç, tıpkı diğer teslim alma noktaları gibi modellenmiştir. İlgili işlemleri gerçekleştir bir durağa gelen araca bir görevi tamamlamayı. Tamamladıktan sonra ve sonraki durağa doğru gitmeye başlayana kadar araç molasını tamamladığında ile ilgili işlemler yapma ve araç sonraki durağa gider. | |
Sürücü, bir gönderinin alternatif bir konuma yönlendirildiğine dair bildirim alıyor. | Orijinal gönderi teslimatı görevi durumunu TAMAMLANDI olarak ayarlayıp yeni bir gönderi oluşturun yeni teslimat konumu için yeni bir kargo teslimatı görevi görür. Daha fazla bilgi için Kargoyu yeniden yönlendirme bölümünü inceleyin. | |
Sürücü, bir paketi teslim etmeyi denedi ancak bunu yapamadı. | Bu, başarılı bir teslimi durdurmaya benzer şekilde modellenir ve görevini de yerine getirir. Şununla ilgili işlemler gerçekleştir: bir durağa gelen araç Şu tarihten sonra: gönderiyi teslim edememesi, görevi kapatın ve isteğe bağlı olarak mağaza gönderim durumunu ve diğer meta bilgileri inceleyin. Durdurulan tüm görevleri tamamladıktan sonra ve araç kullanmaya başlamadan önce bir sonraki durak olarak, araç duraklama işlemini tamamladığında ile ilgili işlemler gerçekleştirin ve araç sonraki durağa gider. | |
Sürücüye bir gönderiyi bekletmesi (teslim etmemesi) konusunda bildirim gönderildi. | Bildirim alınıp onaylandıktan sonra görev durumunu TAMAMLANDI olarak ayarlayın. | |
Sürücü, bir sonraki gönderiyi teslim etmesi için bilgilendirildi ve taahhüt edilen teslimat siparişi değiştirildi. | Görev sıralamasını güncelleyin. | |
Sürücü, bir kargoyu yanlışlıkla teslim etmeyi seçiyor. | Görev sıralamasını güncelleyin ve ardından normal şekilde devam edin. | |
Sürücü, tek bir konuma birden fazla gönderi teslim ediyor. | Bu model, tek gönderi teslimat durağına benzer şekilde modellenir. Durağa vardıktan sonra, bir kullanıcı arabanın durağa ulaşması hakkında daha fazla bilgi edinin. Her gönderiyi teslim ettikten sonra her görevi kapatın ve isteğe bağlı olarak mağaza gönderim durumunu ve diğer meta bilgileri içerir. Durdurulan tüm görevleri tamamladıktan sonra ve araç kullanmaya başlamadan önce bir sonraki durak olarak, araç duraklama işlemini tamamladığında ile ilgili işlemler gerçekleştirin ve araç sonraki durağa gider. | |
Gün sonu | Sürücü depoya döner. | Sürücü, teslimatlar sırasında kargoları alarak garaja dönerse her paketi bir teslimat görevi olarak oluşturup faturalandırmanın doğru olmasını sağlamaktır. Bunu depoyu herhangi bir şekilde modelleyerek başka bir teslimat durdurulur. Depo, teslimat noktası olarak kullanılmıyorsa isteğe bağlı olarak planlı bir durak olarak modeller. Durağın modellenmesi, sürücülerinizin garaja geri dönüş rotası üzerinde çalışır ve tahmini süreleriyle ilgili görünürlük sağlar farkına varır. |
Konum güncellemelerinin işleyiş şekli
Fleet Engine ile en iyi performansı elde etmek için Fleet Engine'e bir araç akışı sağlayın Konum güncellemeleri. Bu güncellemeleri sağlamak için aşağıdaki yöntemlerden birini kullanın:
- Sürücü SDK'sını kullanın: Android, iOS -- en basit seçenektir.
- Özel kod kullanın (konumlar şunlardır: veya Android ya da Chrome OS dışında bir cihaz kullanıyorsanız iOS.
Araç konumu güncellemelerini nasıl sağladığınızdan bağımsız olarak, arka ucunuz bir teslimat aracı hazır olduğunda Fleet Engine'i bir durağa gitmek için (depo dahil) ve bir durağa vardığında. Fleet Engine bu etkinlikleri algılamaz otomatik olarak oluşturur.
Araç durakları ve teslimat konumları
Araç durağı, bir teslimat aracının bir sevkiyat görevini tamamladığı yerdir başka bir görev yapabilir. Bu, yükleme yuvası gibi bir erişim noktası veya kilitlenmiş konumdur.
Teslimat konumu, kargonun teslim edildiği konumdur. karar verdim. Teslimat konumuna gidip gelirken biraz yürümek gerekebilir 300.000 ABD doları değerindeydi.
Örneğin, bir sürücü alışveriş merkezindeki bir mağazaya kargo teslim ederken Teslimat aracı yakınındaki alışveriş merkezinin otoparkında duruyor girişe yerleştiriyoruz. Burası araç durağı. Sürücü ardından araç durağından alışveriş merkezinin içinde bulunduğu konuma mağazanın bulunduğu yer. Bu, teslimat konumudur.
Kullanıcılarınıza en iyi kargo takibi deneyimi için araç duruşlarına atanan sevkiyat görevlerinin sayısı gönderim görevleri için kalan araç durağı, kullanıcıya yardımcı olmak amacıyla bildirilir ilerleme durumunu görebilir.
Örneğin, bir sürücü tek bir ofis binasına çok sayıda teslimat yapıyorsa tüm teslimat görevlerini tek bir araç durağına atamayı düşünebilirsiniz. Eğer her teslimat görevi kendi araç durağına atanır; izleme deneyimi kullanıcılarınız açısından daha az yararlı olur. Araç, 2004'e kadar araç belirli bir sayıda duraklamadan önce ve hedefi. Kısa süre içinde çok sayıda aracın durması, kullanıcının teslimatlarının ilerleme durumunu takip etmek için çok zamanları olması demektir.
Mobil SDK'ları kullanma
Sürücü SDK'sına çağrı yapmadan önce SDK'yı başlattığınızdan emin olun.
Delivery Driver API'yi başlatma
Sürücü SDK'sında Delivery Driver API'yi başlatmadan önce Navigasyon SDK'sını başlatmak için Ardından, aşağıdaki örnekte gösterildiği gibi Delivery Driver API'yi başlatın:
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));
}
});
Kullanım alanları
Bu bölümde, yaygın kullanım alanlarını modellemek için Deliveries API'nin nasıl kullanılacağı açıklanmaktadır.
Benzersiz varlık tanımlayıcıları
REST çağrılarında kullanılan benzersiz varlık tanımlayıcılarının biçimi ve değeri: Fleet Engine'e karşı opak olur. Otomatik artan kimlikler kullanmaktan kaçının ve tanımlayıcı herhangi bir kimlik bilgisi (PII) içermiyorsa, örneğin sürücünün telefonu numarası.
Araç oluştur
Araç oluşturmak için Sürücü SDK'sı aracılığıyla ya da gRPC veya REST kullanan bir sunucu ortamından edinebilirsiniz.
gRPC
Yeni araç oluşturmak için Fleet Engine'e CreateDeliveryVehicle
araması yaparsınız.
Şu öğenin özelliklerini tanımlamak için CreateDeliveryVehicleRequest
nesnesini kullanın:
teslim edebilirsiniz. Name
alanı için belirtilen herhangi bir değerin
kullanıcı tarafından belirtilen kimlikler için API kılavuzu uyarınca yoksayılır.
Aracın kimliğini ayarlamak için DeliveryVehicleId
alanını kullanmanız gerekir.
DeliveryVehicle
oluştururken isteğe bağlı olarak şu alanları belirtebilirsiniz:
- Özellikler
- LastLocation
- Tür
Başka alan ayarlamayın. Bu durumda Fleet Engine hata döndürür.
çünkü bu alanlar salt okunurdur ya da yalnızca
UpdateDeliveryVehicle
İsteğe bağlı alanlar ayarlamadan araç oluşturmak için
CreateDeliveryVehicleRequest
içindeki DeliveryVehicle
alanı kaldırıldı.
Aşağıdaki örnekte, Java gRPC kitaplığı araç oluşturmak için:
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
Sunucu ortamından araç oluşturmak için HTTP REST çağrısı yapın
Hedef: CreateDeliveryVehicle
:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles?deliveryVehicleId=<id>
<id>, filonuzdaki bir teslimat aracına ait benzersiz tanımlayıcıdır.
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
POST gövdesi, oluşturulacak DeliveryVehicle
varlığını temsil eder. Tekliflerinizi otomatikleştirmek ve optimize etmek için
şu isteğe bağlı alanları doldurun:
- özellikler
- lastLocation
- tür
Örnek curl
komutu:
# 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, kullanıcı tarafından belirtilen kimlikler için API kılavuzu başına DeliveryVehicle
öğesinin name
alanını yoksayar.
Başka alan ayarlamayın. Bu durumda Fleet Engine hata döndürür.
çünkü bu alanlar salt okunurdur ya da yalnızca
UpdateDeliveryVehicle
Herhangi bir alan ayarlamadan araç oluşturmak için POST gövdesini bırakın
boş bırakın. Yeni oluşturulan araç, daha sonra
deliveryVehicleId
parametresi eklemeniz gerekir.
Örnek curl
komutu:
# 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}"
Kargo teslim alma görevi oluşturma
Buradan kargo teslim alma görevi oluşturabilirsiniz: Sürücü SDK'sı sunucu ortamından yapmanızı sağlar.
gRPC
Aşağıdaki örnekte, Java gRPC kitaplığı gönderi teslim alma görevi oluşturun:
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
Sunucu ortamından kargo teslim alma görevi oluşturmak için HTTP REST çağrısı yapın.
Hedef: CreateTask
:
`POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>`
<id>, görev için benzersiz bir tanımlayıcıdır. Bu, takip numarası olmamalıdır teslim edilir. Sisteminizde görev kimlikleri yoksa evrensel olarak benzersiz bir tanımlayıcı (UUID).
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
İstek gövdesinde bir Task
varlığı bulunmalıdır:
Zorunlu alanlar:
Alan Değer tür Type.PICKUP durum State.OPEN trackingId Bir gönderiyi takip etmek için kullandığınız numara veya tanımlayıcı. plannedLocation Bu durumda görevin tamamlanacağı konum konumu belirler. taskDuration Kargoyu teslim almak için geçmesi gereken tahmini süre (saniye cinsinden) bir teslimat noktası görevi görebilir. İsteğe bağlı alanlar:
Alan Değer targetTimeWindow Görevin tamamlanması gereken zaman aralığı. Bu, yönlendirme davranışını etkiler. özellikler Özel Görev özelliklerinin listesi. Her özelliğin benzersiz bir anahtarı olmalıdır.
Öğedeki diğer tüm alanlar oluşturma işlemi için yoksayılır. Fleet Engine atışları
İstek, atanmış bir deliveryVehicleId
içeriyorsa istisna uygulanır. Siz
görev UpdateDeliveryVehicleRequest
kullanılıyor. Daha fazla bilgi için bkz.
Bir araca görev atama ve UpdateDeliveryVehicleRequest'e atama.
Örnek curl
komutu:
# 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
Gönderim teslimat görevi oluşturma
Şu listeden bir kargo teslimat görevi oluşturun: Sürücü SDK'sı sunucu ortamından yapmanızı sağlar.
gRPC
Aşağıdaki örnekte, Java gRPC kitaplığı bir kargo teslim görevi oluşturun:
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
gRPC veya REST kullanarak bir sunucu ortamından gönderi teslim görevi oluşturmak için HTTP REST çağrısı yapın
Hedef: CreateTask
:
`POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>`
<id>, görev için benzersiz bir tanımlayıcıdır. Bu, takip numarası olmamalıdır teslim edilir. Sisteminizde görev kimlikleri yoksa evrensel olarak benzersiz bir tanımlayıcı (UUID).
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
İstek gövdesinde bir Task
varlığı bulunmalıdır:
Zorunlu alanlar:
Alan Değer tür Type.DELIVERY durum State.OPEN trackingId Bir gönderiyi takip etmek için kullandığınız numara veya tanımlayıcı. plannedLocation Bu durumda görevin tamamlanacağı konum konumu belirler. taskDuration Kargoyu bırakmak için gereken tahmini süre (saniye cinsinden) teslimat konumuna vardık. İsteğe bağlı alanlar:
Alan Değer targetTimeWindow Görevin tamamlanması gereken zaman aralığı. Bu, yönlendirme davranışını etkiler. özellikler Özel Görev özelliklerinin listesi. Her özelliğin benzersiz bir anahtarı olmalıdır.
Öğedeki diğer tüm alanlar oluşturma işlemi için yoksayılır. Fleet Engine atışları
İstekte atanmış bir deliveryVehicleId varsa bir istisna yapılmalıdır. Siz
görev UpdateDeliveryVehicleRequest
kullanılıyor. Daha fazla bilgi için bkz.
Bir araca görev atama ve UpdateDeliveryVehicleRequest'e atama.
Örnek curl
komutu:
# 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
Toplu Görevler Oluşturma
gRPC veya REST kullanarak bir sunucu ortamından toplu görev oluşturabilirsiniz.
gRPC
Aşağıdaki örnekte, Java gRPC kitaplığı biri teslimat için, diğeri aynı anda teslim alma için olmak üzere iki görev oluşturmak konum:
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
Sunucu ortamından teslim ve teslim alma görevi oluşturmak için
BatchCreateTasks
için HTTP REST çağrısı:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks:batchCreate
İstek başlığında, Bearer" değerine sahip bir Authorization alanı bulunmalıdır <token>; burada <jeton>, Fleet Engine jeton fabrikası tarafından kullanıma sunulan jeton.
İstek gövdesinde bir BatchCreateTasksRequest
varlığı bulunmalıdır:
Zorunlu alanlar:
Alan Değer istek Dizi< CreateTasksRequest
>İsteğe bağlı alanlar:
Alan Değer başlık `DeliveryRequestHeader`
requests
içindeki her CreateTasksRequest
öğesi aynı doğrulamayı geçmelidir
kurallarını bir CreateTask
isteği olarak kaydeder (parent
ve header
alanları isteğe bağlıdır. Ayarlanırlarsa
üst düzeyde BatchCreateTasksRequest
görünür. Görüntüleyin
bir kargo teslim alma görevi oluşturun ve
kargo teslimatı görevi oluşturma
her biri için belirli doğrulama kurallarına tabidir.
Daha fazla bilgi için BatchCreateTasks
API Referansı belgelerine bakın
(gRPC, REST).
Örnek curl
komutu:
# 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
Planlanan kullanım dışı kalma
Mevcut olmadığını gösteren bir görev oluşturabilirsiniz (örneğin, sürücü için ya da araçta benzin doldurması gibi) Sürücü SDK'sı sunucu ortamından yapmanızı sağlar. Planlanan bir kullanılabilirlik dışı görevde şunlar yer almamalıdır: izleme kimliği. İsterseniz bir konum da belirtebilirsiniz.
gRPC
Aşağıdaki örnekte, Java gRPC kitaplığı "kullanılamıyor" görevi oluşturun:
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
Sunucu ortamından kullanılabilir olmama görevi oluşturmak için HTTP REST çağrısı yapın
Hedef: CreateTask
:
`POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>`
<id>, görev için benzersiz bir tanımlayıcıdır. Şunu yapmazsanız: sisteminizde görev kimlikleri varsa evrensel olarak benzersiz bir görev tanımlayıcıdır (UUID).
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
İstek gövdesinde bir Task
varlığı bulunmalıdır:
Zorunlu alanlar:
Alan Değer tür Type.UNAVAILABLE durum State.OPEN taskDuration Aranın saniye cinsinden uzunluğu. İsteğe bağlı alanlar:
Alan Değer plannedLocation Belirli bir konumda çekilmesi gerekiyorsa aranın konumu.
Öğedeki diğer tüm alanlar oluşturma işlemi için yoksayılır. Fleet Engine atışları
İstekte atanmış bir deliveryVehicleId varsa bir istisna yapılmalıdır. Siz
görev UpdateDeliveryVehicleRequest
kullanılıyor. Daha fazla bilgi için bkz.
Bir araca görev atama ve UpdateDeliveryVehicleRequest'e atama.
Örnek curl
komutu:
# 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
Planlanan aktarmalar
Planlanmış bir durdurma görevi oluşturmak için Sürücü SDK'sı sunucu ortamından yapmanızı sağlar. Planlanmış bir durdurma görevi, izleme içeremez Kimlik.
gRPC
Aşağıdaki örnekte, Java gRPC kitaplığı zamanlanmış bir durdurma görevi oluşturmak için:
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
Sunucu ortamından planlanmış bir durdurma görevi oluşturmak için HTTP REST çağrısı yapın
Hedef: CreateTask
:
`POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>`
<id>, görev için benzersiz bir tanımlayıcıdır. Herhangi bir görev kimlikleri ekleyebilirsiniz. evrensel olarak benzersiz bir tanımlayıcı (UUID).
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
İstek gövdesinde bir Task
varlığı bulunmalıdır:
Zorunlu alanlar:
Alan Değer tür Type.SCHEDULED_STOP durum State.OPEN plannedLocation Durağın konumu. taskDuration Durmanın saniye cinsinden öngörülen uzunluğu. İsteğe bağlı alanlar:
- Yok
Öğedeki diğer tüm alanlar oluşturma işlemi için yoksayılır. Fleet Engine atışları
İstekte atanmış bir deliveryVehicleId varsa bir istisna yapılmalıdır. Siz
görev UpdateDeliveryVehicleRequest
kullanılıyor. Daha fazla bilgi için bkz.
Bir araca görev atama ve UpdateDeliveryVehicleRequest'e atama.
Örnek curl
komutu:
# 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
Hedef zaman aralığı belirleyin
Hedef zaman aralığı TimeWindow projenin tamamlanması için kritik önem taşır. Örneğin, bir paydaşa alıcısına teslim etmek için gereken süreyi oluşturmak ve uyarı oluşturmak veya gezi sonrası analiz etmek için bu zaman aralığını performansını da görebilirsiniz.
Hedef zaman aralığı, bir başlangıç ve bitiş zamanından oluşur ve daima tetikte olursunuz. Hedef zaman aralığı, yönlendirmeyi etkilemez gösterir.
gRPC
Aşağıdaki örnekte, Java gRPC kitaplığı bir görev zaman aralığı ayarlamak için:
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
HTTP kullanarak görev zaman aralığı ayarlamak için UpdateTask
komutunu çağırın:
`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=targetTimeWindow`
<id>, görev için benzersiz bir tanımlayıcıdır.
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
İstek gövdesinde bir Task
varlığı bulunmalıdır:
Zorunlu alanlar:
Alan Değer targetTimeWindow Görevin tamamlanması gereken zaman aralığı. Bu ayar yönlendirme davranışını etkilemez İsteğe bağlı alanlar:
- Yok
Öğedeki diğer tüm alanlar güncelleme için yoksayılır.
Örnek curl
komutu:
# 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
Görev izleme görünürlük yapılandırmasını ayarla
Gönderim İzleme kitaplığındaki verilerin ve bu verilerin görünürlüğü
GetTaskTrackingInfo
çağrısından sonra döndürülen görev, görev başına kontrol edilebilir
proje yaşam döngüsü boyunca
TaskTrackingViewConfig
tercih edebilirsiniz. Görüntüleyin
Etkin araç görevleri
konulu videomuzu izleyin. Bu işlem,
görevi görebilir. Aşağıda, bu yapılandırmaya sahip görevin güncellenmesine ilişkin bir örnek verilmiştir:
gRPC
Aşağıdaki örnekte, Java gRPC kitaplığı için şu adımları izleyin:
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
Görev izleme görünümü yapılandırma penceresini HTTP kullanarak ayarlamak için UpdateTask
komutunu çağırın:
`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskTrackingViewConfig`
<id>, görev için benzersiz bir tanımlayıcıdır.
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
İstek gövdesinde bir Task
varlığı bulunmalıdır:
Zorunlu alanlar:
Alan Değer taskTrackingViewConfig Hangi veri öğelerini belirten görev izleme yapılandırması kullanıcılar tarafından hangi koşullarda görülebilir? İsteğe bağlı alanlar:
- Yok
Öğedeki diğer tüm alanlar güncelleme için yoksayılır.
Örnek curl
komutu:
# 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
Bir araca görev atama
Görev sırasını güncelleyerek bir teslimat aracına görev atarsınız. araçtan bahsediyoruz. Araçlar için görev sıralaması, teslimat aracı için araç duraklarının sayısını öğrenebilirsiniz. Ayrıca, kullanıcılara bir veya daha fazla görev mola verme süresini artırabilirsiniz. Ayrıntılar için bkz. Görev sıralamasını güncelleyin.
Bir gönderiyi bir araçtan diğerine değiştirmek için orijinal görevi kapatın yeni araca atamadan önce yeniden oluşturmanız gerekir. Görevi güncellerseniz zaten atanmış bir görevi sıralamak başka bir araca geçerseniz hata alırsınız.
Görev sıralamasını güncelleyin
Bir araca atanan sipariş görevlerinin gerçekleştirileceği işlemi şuradan güncelleyebilirsiniz: "the" Sürücü SDK'sı olması gerekir. Kaçınmak için her iki yöntemi de kullanmayın. ve tek ve doğru bir kaynak sağlamak.
Bir araç için görev sıralamasını güncellediğinizde, araç şunları da yapar:
- Araca yeni görevler atar.
- Daha önce araca atanmış, ancak henüz atanmamış olan tüm görevleri kapatır görebilirsiniz.
Bir gönderiyi bir araçtan diğerine değiştirmek için: orijinal görevi kapat yeni araca atamadan önce yeniden oluşturmanız gerekir. Görevi güncellerseniz zaten atanmış bir görevi sıralamak başka bir araca geçerseniz hata alırsınız.
Görev sıralamasını istediğiniz zaman güncelleyebilirsiniz.
gRPC
Aşağıdaki örnekte, Java gRPC kitaplığı aracın görev sıralamasını güncellemek için:
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
Sunucu ortamından bir aracın görev sıralamasını güncellemek için HTTP REST çağrısı yapın
Hedef: UpdateDeliveryVehicle
:
`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
<id>, filonuzdaki bir teslimat aracına ait benzersiz tanımlayıcıdır güncellemeyi düşündüğünüz bir liste var. Bu tanımlayıcı, aracı oluştururken belirttiğinizi unutmayın.
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
İstek gövdesinde bir DeliveryVehicle
varlığı bulunmalıdır:
Zorunlu alanlar:
Alan Değer remainingVehicleJourneySegments Görevlerin yürütülmesi gereken sırayla bir yolculuk segmentleri listesi. Listedeki ilk görev ilk olarak yürütülür. remainingVehicleJourneySegments[i].stop Listede i görevinin durağı. remainingVehicleJourneySegments[i].stop.plannedLocation Durak için planlanan konum. remainingVehicleJourneySegments[i].stop.tasks Bu araç durağında yapılacak görevlerin listesi. remainingVehicleJourneySegments[i].stop.state State.NEW İsteğe bağlı alanlar:
- Yok
Öğedeki diğer tüm alanlar güncelleme için yoksayılır.
Örnek curl
komutu:
# 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
Araç sonraki durakta
Bir araç duraktan ayrıldığında veya yola çıktığında Fleet Engine'e bilgi verilmelidir. yardımcı olabilir. Fleet Engine'i şuradan bilgilendirebilirsiniz: Sürücü SDK'sı sunucu ortamından yapmanızı sağlar. Irktan kaçınmak için her iki yöntemi de kullanmayın ve tek bir doğruluk kaynağı tutmasına yardımcı olur.
gRPC
Aşağıdaki örnekte, Java gRPC kitaplığı Fleet Engine'e bir aracın bir sonraki durağına doğru yolda olduğunu bildirmek için.
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
Fleet Engine'e bir aracın kalkış noktasından bir sonraki durağına doğru ilerlediğini bildirmek için
sunucusu ortamında UpdateDeliveryVehicle
adresine HTTP REST çağrısı yapın:
`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
<id>, filonuzdaki teslimat aracına ait benzersiz bir tanımlayıcıdır güncellemeyi düşündüğünüz bir liste var. Bu tanımlayıcı, aracı oluştururken belirttiğinizi unutmayın.
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
İstek gövdesinde bir DeliveryVehicle
varlığı bulunmalıdır:
Zorunlu alan:
Alan Değer remainingVehicleJourneySegments Durumları eyalet olarak işaretlenmiş kalan araç duraklarının listesi.YENİ. Listedeki ilk durağın durumu State.ENROUTE olarak işaretlenmiş olmalıdır. İsteğe bağlı alanlar:
- Yok
Öğedeki diğer tüm alanlar bildirim için yoksayılır.
Örnek curl
komutu:
# 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
Aracın konumunu güncelleyin
Aracın konumunu güncellemek için Sürücü SDK'sını kullanmıyorsanız bir Fleet Engine'e aracın konumuyla birlikte doğrudan çağrı. Tüm etkin araçlarda Fleet Engine, en az dakikada bir, en çok dakikada bir konum güncellemesi bekler 5 saniyede bir.
gRPC
Aşağıdaki örnekte, Java gRPC kitaplığı Fleet Engine'de bir aracın konumunu güncellemek için:
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 myDeliveryVehicle = DeliveryVehicle.newBuilder()
.setLastLocation(DeliveryVehicleLocation.newBuilder()
.setSupplementalLocation(LatLng.newBuilder()
.setLatitude(37.3382)
.setLongitude(121.8863))
.setSupplementalLocationTime(now())
.setSupplementalLocationSensor(DeliveryVehicleLocationSensor.CUSTOMER_SUPPLIED_LOCATION)
.setSupplementalLocationAccuracy(DoubleValue.of(15.0))) // Optional
.build();
// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
UpdateDeliveryVehicleRequest.newBuilder() // No need for the header
.setName(vehicleName)
.setDeliveryVehicle(myDeliveryVehicle)
.setUpdateMask(FieldMask.newBuilder()
.addPaths("last_location"))
.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
HTTP REST kullanarak Fleet Engine'de bir aracın konumunu güncellemek için
UpdateDeliveryVehicle
:
`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=last_location`
<id>, teslimat aracının benzersiz tanımlayıcısıdır. güncellemeyi amaçladığınız filo ya da filo) Bu tanımlayıcı, aracı oluştururken belirttiğinizi unutmayın.
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
İstek gövdesinde bir DeliveryVehicle
varlığı bulunmalıdır:
Zorunlu alan:
Alan Değer lastLocation.supplementalLocation Aracın konumu. lastLocation.supplementalLocationTime Aracın bu konumda olduğu bilinen son zaman damgası. lastLocation.supplementalLocationSensor CUSTOMER_supPLIED_LOCATION ile doldurulmalıdır. İsteğe bağlı alanlar:
Alan Değer lastLocation.supplementalLocationAccuracy Sağlanan konumun metre cinsinden doğruluğu.
Örnek curl
komutu:
# 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
{
"lastLocation": {
"supplementalLocation": {"latitude": 12.1, "longitude": 14.5},
"supplementalLocationTime": "$(date -u --iso-8601=seconds)",
"supplementalLocationSensor": "CUSTOMER_SUPPLIED_LOCATION",
"supplementalLocationAccuracy": 15
}
}
EOM
Araç durağa geldiğinde
Bir araç durağa geldiğinde Fleet Engine'e bilgi verilmelidir. Bildirimde bulunabilirsiniz Fleet Engine, Sürücü SDK'sı sunucu ortamından yapmanızı sağlar. Irktan kaçınmak için her iki yöntemi de kullanmayın ve tek bir doğruluk kaynağı tutmasına yardımcı olur.
gRPC
Aşağıdaki örnekte, Java gRPC kitaplığı Fleet Engine'e bir aracın durağa geldiğini bildirmek için:
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
Fleet Engine'e bir aracın sunucu ortamından durağa geldiğini bildirmek için
UpdateDeliveryVehicle
adresine HTTP REST çağrısı yapın:
`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
<id>, filonuzdaki teslimat aracına ait benzersiz bir tanımlayıcıdır güncellemeyi düşündüğünüz bir liste var. Bu tanımlayıcı, aracı oluştururken belirttiğinizi unutmayın.
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
İstek gövdesinde bir DeliveryVehicle
varlığı bulunmalıdır:
Zorunlu alanlar:
Alan Değer remainingVehicleJourneySegments Ulaştığınız durak Eyalet.ARRIVED olarak ayarlanmış. ve ardından eyalet.YENİ olarak işaretlenmiş kalan araç duraklarının listesi. İsteğe bağlı alanlar:
- Yok
Öğedeki diğer tüm alanlar güncelleme için yoksayılır.
Örnek curl
komutu:
# 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
Araç durma işlemini tamamlar
Bir araç durma işlemini tamamladığında Fleet Engine'e bilgi verilmelidir. Bu durum, durakla ilişkili tüm görevlerin KAPALI durumuna ayarlanmasını sağlar. Şunları yapabilirsiniz: veya Fleet Engine'e Sürücü SDK'sı sunucu ortamından yapmanızı sağlar. Irk koşullarından kaçınmak ve tek bir doğruluk kaynağı sağlamak için her iki yöntemi de kullanmayın.
gRPC
Aşağıdaki örnekte, Java gRPC kitaplığı (Fleet Engine'e bir aracın durma işlemini tamamladığını bildirmek için).
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
Fleet Engine'e bir sunucu ortamından durdurma işleminin tamamlandığını bildirmek için:
UpdateDeliveryVehicle
adresine HTTP REST çağrısı yapın:
`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remaining_vehicle_journey_segments`
<id>, filonuzdaki teslimat aracına ait benzersiz bir tanımlayıcıdır güncellemeyi düşündüğünüz bir liste var. Bu tanımlayıcı, aracı oluştururken belirttiğinizi unutmayın.
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
İstek gövdesinde bir DeliveryVehicle
varlığı bulunmalıdır:
Zorunlu alanlar:
Alan Değer remaining_vehicle_journey_segments Tamamladığınız durak, artık şu listede olmamalıdır: kalan araç durağı. İsteğe bağlı alanlar:
- Yok
Öğedeki diğer tüm alanlar güncelleme için yoksayılır.
Örnek curl
komutu:
# 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
Görev güncelleme
Çoğu görev alanı değiştirilemez. Ancak, durumu, görev sonucu, görev sonucu zamanı, görevin sonucunun konumu ve doğrudan güncellenmelidir. Örneğin, bir görevin bir araca atandığında, yeni bir görev atanarak doğrudan eyalete götürülür.
gRPC
Bu, gRPC aracılığıyla bir görev güncelleme örneğidir.
REST
Bu, REST aracılığıyla bir görev güncelleme örneğidir.
Görevi kapatma
Bir araca atanan bir görevi kapatmak için Fleet Engine'e bildirim gönderin. Aracın, görevin gerçekleştiği durağı tamamladığını veya araç durakları listesinden kaldırın. Bunun için, iletişim planınızdaki Kalan araç, görev sırasını güncellerken olduğu gibi durur sahip olabilirsiniz.
Bir göreve henüz araç atanmamışsa ve kapatılması gerekiyorsa görevi güncelleyin KAPALI duruma getirin. Ancak KAPALI bir görevi yeniden açamazsınız.
Bir görevin kapatılması, başarılı veya başarısız olduğu anlamına gelmez. Bu, devam eden bir görev olarak kabul edilmez. Kargo takibi için bir görevin son halinin belirtilmesi önemlidir. ve sonucu gösterilebilir.
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) // You can only directly CLOSE a
.build(); // task that 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
Bir görevi sunucu ortamından kapalı olarak işaretlemek için şuraya bir HTTP REST çağrısı yapın:
UpdateTask
:
`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=state`
<id>, görev için benzersiz bir tanımlayıcıdır.
İstek başlığınız, Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
İstek gövdesine bir Task
varlığı eklemeniz gerekir:
Zorunlu alanlar:
Alan Değer durum State.CLOSED İsteğe bağlı alanlar:
Alan Değer taskOutcome Result.SUCCEEDED veya Result.FAILED taskOutcomeTime Görevin tamamlandığı zaman. taskOutcomeLocation Görevin tamamlandığı konum. Fleet Engine bunu varsayılan olarak ayarlar sağlayıcı tarafından manuel olarak geçersiz kılınmadığı sürece aracın son konumuna ekleme yapar.
Öğedeki diğer tüm alanlar güncelleme için yoksayılır.
Örnek curl
komutu:
# 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
Görevin sonucunu ve sonucun yerini belirleyin
Bir görevin kapatılması başarı ya da başarısızlık anlamına gelmez, devam eden bir görev olarak kabul edilmez. Kargo takibi için bir görevin o anki sonucunu belirtmek önemlidir. ve hizmetler için uygun faturalandırmanın söz konusu olduğu, teslimat sonucu gösterilebilir. Ayarlandıktan sonra görev sonucunu değiştiremezsiniz. Ancak, ve görev sonucunun konumuna göre belirlemeniz gerekir.
KAPALI durumdaki görevlerin sonuçları BAŞARILI veya BAŞARISIZ. Fleet Engine, yalnızca şu durumdaki teslimat görevlerini ücretlendirir: BAŞARILI.
Fleet Engine, bir görevin sonucunu işaretlerken, bu işaret için görev sonucunun bilinen son konumuyla birlikte gösterilir. Şunları yapabilirsiniz: bu davranışı geçersiz kılın.
gRPC
Konumu belirlerken görev sonucunun konumunu belirleme seçeneğiniz de vardır. yardımcı olur. Konumun ayarlanması, Fleet Engine'in bunu ayarlamasına engel olur şunun varsayılan değerine kadar: Aracın konumu. Ayrıca, Fleet Engine görev sonucu konumunun üzerine yazabilirsiniz. daha sonra bir tarihe ayarlayabilirsiniz. Fleet Engine, hiçbir zaman görev sonucu konumunun üzerine yazmaz sağlar. Bir görev için görev sonucu konumu ayarlayamazsınız Bu da bir görev sonucu belirtilmemiş. Her iki görev sonucunu da ayarlayabilirsiniz. ve görev sonucunun konumunu belirlemeniz önemlidir.
Aşağıdaki örnekte, Java gRPC kitaplığı bir görev sonucunu SUCCEEDED olarak ayarlamak ve görevin yapıldığı yeri belirlemek tamamlandı:
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
Bir görevi sunucu ortamından tamamlandı olarak işaretlemek için:
UpdateTask
adresine HTTP REST çağrısı yapın:
`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation`
<id>, görev için benzersiz bir tanımlayıcıdır.
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
İstek gövdesinde bir Task
varlığı bulunmalıdır:
Zorunlu alanlar:
Alan Değer taskOutcome Result.SUCCEEDED veya Result.FAILED İsteğe bağlı alanlar:
Alan Değer taskOutcomeLocation Görevin tamamlandığı konum. Ayarlanmazsa Fleet Engine bu, varsayılan olarak aracın son konumuna ayarlanır. taskOutcomeTime Görevin tamamlandığı zaman damgası.
Öğedeki diğer tüm alanlar güncelleme için yoksayılır.
Örnek curl
komutu:
# 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
Gönderimi yeniden yönlendirme
Bir kargo görevi oluşturulduktan sonra planlanan konumu değiştirilemez. Bir gönderiyi yeniden yönlendirmek için, gönderim görevini ayarlamadan kapatın ve güncellenen planlanan yerle yeni bir görev oluşturmaktır. Yeni görevi oluşturduktan sonra görevi aynı araca atayın. Daha fazla kargo görevini kapatma bölümüne bakın ve görevi atayın.
Besleyici ve teslimat araçlarını kullanma
Gönderileri teslimat araçlarına taşımak için besleyici araçları kullanıyorsanız Gün boyunca sevkiyat transferini, planlanmış bir durdurma görevi olarak modelleyin teslimat aracı. Doğru konum izlemesi sağlamak için yüklenen bir sevkiyat için bir gönderi teslimat görevi teslimat aracı. Daha fazla bilgi için planlanan duraklama bölümünü inceleyin.
Mağaza gönderim durumu ve diğer meta bilgiler
Bir sevkiyat görevi tamamlandığında görev durumu ve sonuç kaydedilir görebilirsiniz. Ancak, diğer meta bilgileri güncellemek isteyebilirsiniz belirleneceğini konuşacağız. Kullanabileceğiniz diğer meta bilgileri Fleet Engine hizmetinin dışında bir referans varsa, ilişkili tracking_id parametresini kullanın harici bir tabloda anahtar olarak kullanın.
Daha fazla bilgi edinmek için Görevlerin yaşam döngüsü başlıklı makaleyi inceleyin.
Araç arayın
Bir aracı şuradan arayabilirsiniz: Sürücü SDK'sı sunucu ortamından yapmanızı sağlar.
gRPC
Aşağıdaki örnekte, Java gRPC kitaplığı araç aramak için:
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
Sunucu ortamından araç aramak için:
GetVehicle
adresine HTTP REST çağrısı yapın:
`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<vehicleId>`
<id>, görev için benzersiz bir tanımlayıcıdır.
<vehicleId>, aranacak aracın kimliğidir.
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
İstek metni boş olmalıdır.
Arama başarılı olursa yanıt gövdesi, bir araç varlığı içerir.
Örnek curl
komutu:
# 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}"
Görev arama
gRPC veya REST kullanarak bir sunucu ortamından görev arayabilirsiniz. Sürücü SDK'sı görev arayışına destek olur.
gRPC
Aşağıdaki örnekte, Java gRPC kitaplığı bir görevi aramak için:
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
Sunucu ortamından görev aramak için:
GetTask
adresine HTTP REST çağrısı yapın:
`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<taskId>`
<id>, görev için benzersiz bir tanımlayıcıdır.
<taskId>, aranacak görevin kimliğidir.
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
İstek metni boş olmalıdır.
Arama başarılı olursa yanıt gövdesi, bir görev varlığı içerir.
Örnek curl
komutu:
# 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}"
Takip kimliğine göre kargo görevi bilgilerini arama
Gönderim görevi bilgilerini aşağıdaki şekillerde arayabilirsiniz: Her birinin ayrı bir amacı vardır:
- bir görev kimliği tarafından: Filo operatörleri gibi kullanıcılar tarafından tam bir görünümünü elde edersiniz.
- bir izleme kimliği tarafından: İstemci yazılımınız tarafından sınırlı bilgileri (örneğin, evlerinde ne zaman paket olması beklendiği gibi)
Bu bölümde, izleme kimliğiyle görev bilgilerini arama konuları ele alınmaktadır. Şunu istiyorsanız: bir görevi görev kimliğine göre aramak için Görev arama bölümüne gidin.
İzleme kimliğine göre bilgi aramak için aşağıdakilerden birini kullanabilirsiniz:
Arama koşulları
Takip kimliği tarafından sağlanan gönderim bilgilerinin görünürlük kurallarına uygun olması belirtildiği yer: İzlenen konumların görünürlüğünü kontrol edin.
İzleme kimliğiyle kargo bilgilerini aramak için Fleet Engine'i kullanın. Sürücü SDK, izleme kimliğine göre bilgi aramalarını desteklemiyor. Bunu Fleet ile yapmak için: bir sunucu veya tarayıcı ortamı kullanırsınız.
Güvenlik risklerini sınırlandırmak için mümkün olan en dar jetonu kullanın. Örneğin, Delivery Consumer Token (Teslim Tüketici Jetonu) kullanırsanız tüm Fleet Engine Deliveries API çağrıları döndürülür kargo şirketi veya e-posta adresi gibi son kullanıcıyla ilgili açık bir şekilde belirtin. Yanıtlardaki diğer tüm bilgiler çıkartılır. Jetonlar hakkında daha fazla bilgi için Yetkilendirme için JSON Web Token (JWT) oluşturma.
gRPC kullanarak Java ile arama
Aşağıdaki örnekte, Java gRPC kitaplığı kullanarak bir kargo göreviyle ilgili bilgileri arayabilir.
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;
}
HTTP kullanarak arama yapar
Tarayıcıda bir kargo görevini aramak için şuraya HTTP REST çağrısı yapın:
GetTaskTrackingInfo
:
`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/taskTrackingInfo/<tracking_id>`
<tracking_id>, görevle ilişkilendirilen izleme kimliğidir.
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Taşıyıcı <jeton>; burada <jeton>, Fleet Engine jeton fabrikası tarafından kullanıma sunulan jeton.
Arama başarılı olursa yanıt gövdesi, taskTrackingInfo varlık.
Örnek curl
komutu:
# 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}"
Görevleri listeleyin
Bir sunucu veya tarayıcı ortamındaki görevleri listeleyebilirsiniz. Sürücü SDK'sı ve görev listelemeyi desteklerler.
Görevleri listelemek, görevlere geniş kapsamlı erişim gerektirir. Görevleri listeleme yalnızca güvenilir kullanıcılara ulaşabilirsiniz. Teslimat Filosu Okuyucu veya Yayın Süper Kullanıcı Kimlik Doğrulaması Kullanma Liste görevleri isteğinde bulunurken kullanılan jetonlar.
Listelenen görevlere aşağıdaki alanlar çıkartılır:
- VehicleStop.planned_location
- VehicleStop.state
- VehicleStop.TaskInfo.taskId
Listedeki görevler, çoğu görev özelliğine göre filtrelenebilir. Filtre sorgusu söz dizimi için AIP-160 adlı makaleyi inceleyin. Aşağıdaki listede geçerli bir görev gösterilmektedir filtre uygulayabilirsiniz:
- özellikler
- delivery_vehicle_id
- durum
- planned_location
- task_duration
- task_outcome
- task_outcome_location
- task_outcome_location_source
- task_outcome_time
- tracking_id
- tür
Google API İyileştirme Teklifleri'ne dayalı olarak aşağıdaki alan biçimlerini kullanın:
Alan Türü | Biçim | Örnek |
---|---|---|
Zaman damgası | RFC-3339 | task_outcome_time = 2022-03-01T11:30:00-08:00 |
Süre | Saniyenin ardından s gelmelidir |
task_duration = 120s |
Enum | Dize | state = CLOSED AND type = PICKUP |
Konum | point.latitude ve point.longitude |
planned_location.point.latitude > 36.1 AND planned_location.point.longitude < -122.0 |
Filtre sorgusunun tam listesi için bkz. AIP-160 işleci.
Filtre sorgusu belirtilmemişse tüm görevler listelenir.
Görev listeleri sayfalara ayrılır. Liste görevleri isteklerinde sayfa boyutu belirtilebilir. Sayfa boyutu belirtilirse döndürülen görevlerin sayısı daha fazla olmaz daha yüksek. Sayfa boyutu yoksa makul bir varsayılan değer bu düzenlemelerin nedenlerinden biri. İstenen sayfa boyutu dahili bir maksimum değeri aşıyorsa dahili maksimum değer kullanılır.
Görev listesi, sonuçların sonraki sayfasını okumak için bir jeton içerebilir. Sayfa jetonunu, öncekiyle aynı olan bir istekle kullanın. istek gönderir. Sayfa jetonu döndürüldüğünde boşsa, alınabilecek başka görev yok.
gRPC
Aşağıdaki örnekte, Java gRPC kitaplığı araç kimliği ve görev özelliğiyle ilgili görevleri listelemek için kullanır. Başarılı yanıt boş olabilir. Boş bir yanıt, hiçbir Görevin olmadığını gösterir belirtilen teslimatla ilişkilidir.
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
Bir tarayıcıdan görevleri listelemek için ListTasks
öğesine HTTP REST çağrısı yapın:
`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks`
Listelenen görevlere filtre uygulamak için "filtre" ekleyin Değeri olarak URL çıkışlı filtre sorgusu içeren URL parametresi.
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
Arama başarılı olursa yanıt gövdesi, aşağıdaki yapıya sahip verileri içerir:
// JSON representation
{
"tasks": [
{
object (Task)
}
],
"nextPageToken": string,
"totalSize": integer
}
Başarılı bir yanıt yine de boş olabilir. Boş bir yanıt, hayır belirtilen filtre ölçütlerini karşılayan görev bulundu.
Örnek curl
komutu:
# 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}"
Teslimat araçlarını listeleme
Teslimat araçlarını bir sunucu veya tarayıcı ortamından listeleyebilirsiniz. Sürücü SDK, yayınlama araçlarının listelenmesini desteklemiyor.
Teslimat araçlarını listelemek, teslimat araçlarına geniş kapsamlı erişim talep eder ve yalnızca güvenilir kullanıcılara yöneliktir. Teslimat Filosu Okuyucu veya Delivery Super'ı kullanma Liste teslimi aracı istekleri yapılırken Kullanıcı Kimlik Doğrulama Jetonları.
Listedeki teslimat araçlarında etkileri nedeniyle aşağıdaki alanlar çıkartılmıştır yanıt boyutunda:
- CurrentRouteSegment
- RemainingVehicleJourneySegments
Liste yayınlama araçlarını attributes
özelliklerine göre filtreleyebilirsiniz. Örneğin,
Örneğin, my_key
anahtarı ve my_value
değerine sahip bir özelliği sorgulamak için şunu kullanın:
attributes.my_key = my_value
. Birden fazla özelliği sorgulamak için sorguları birleştirin
Mantıksal AND
ve OR
operatörlerini attributes.key1 = value1 AND
attributes.key2 = value2
'deki gibi kullanarak kullanabilirsiniz. Ayrıntılı bilgi için AIP-160
filtre sorgusu söz diziminin açıklaması.
viewport
isteğini kullanarak listelenen teslimat araçlarını konuma göre filtreleyebilirsiniz
parametresinden sonra bir değer girin. viewport
istek parametresi, iki sınırlama kullanarak görüntü alanlarını tanımlar
koordinatlar: high
(kuzeydoğu) ve low
(Güneybatı) enlemi ve boylamı
koordinat çiftidir. Yüksek enlem içeren istekler reddedilir
coğrafi olarak düşük enlemden daha düşüktür.
Teslimat aracı listeleri, varsayılan olarak makul bir sayfa boyutu kullanılarak sayfalara ayrılır. Eğer bir sayfa boyutu belirtirseniz istek yalnızca araç sayısını döndürür. en fazla bir değer olabilir. İstenen sayfa boyutu dahili bir sınırı aşıyorsa dahili maksimum değer kullanılır. Varsayılan ve maksimum sayfa her ikisi de 100 araç.
Teslimat araçları listesinde sonraki sayfanın okunması için bir jeton sonuç. Sayfa jetonu, yalnızca yayınlama sayfası daha fazla olduğunda yanıtlarda bulunur araç alınabilir. Görevlerin sonraki sayfasını almak için Öncekine benzer bir istek içeren sayfa jetonu isteğinde bulunabilirsiniz.
gRPC
Aşağıdaki örnekte, Java gRPC kitaplığı belirli bir bölgede belirli özelliklere sahip teslimat araçlarını listelemek için kullanılır. CEVAP hâlâ boş olabilir. Bu durumda, kurumda Belirtilen özelliğe sahip araçlar zaten belirtilen görüntü alanında bulunuyor.
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
Bir tarayıcıdan görevleri listelemek için ListDeliveryVehicles
öğesine HTTP REST çağrısı yapın:
`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles`
Listelenen görevlere filtre uygulamak için "filtre" ekleyin URL çıkışlı filtre sorgusunu girin.
İstek başlığında şu değeri içeren Authorization (Yetkilendirme) alanı bulunmalıdır: Bearer <token> (burada <token>, Fleet Engine jeton fabrikası tarafından verilen bir jetondur).
Arama başarılı olursa yanıt gövdesi, aşağıdaki yapıya sahip verileri içerir:
// JSON representation
{
"deliveryVehicles": [
{
object (DeliveryVehicle)
}
],
"nextPageToken": string,
"totalSize": integer
}
Başarılı bir yanıt yine de boş olabilir. Bu durumda, kurumda belirtilen filtre sorgusunu ve görüntü alanını karşılayan teslimat araçları bulundu.
Örnek curl
komutu:
# 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"
Gönderim takibi
İki seçeneğiniz vardır: Fleet Engine Deliveries API'si kullanarak gönderi takibini:
Tercih edilen: JavaScript Gönderim İzleme kitaplığı. Kitaplık, araçların ve konumların konumunu görselleştirmenize olanak tanır %60'ı Fleet Engine'de takip edildi. Bir JavaScript harita bileşeni içeriyor Bu, standart bir google.maps.Map nesnesinin yerine açılan bir nesnedir, veri bileşenlerini kavrayacaksınız. Bu bileşen, Özelleştirilebilir, animasyonlu kargo takibi deneyimi sunmak Google Analytics 4'te tarama yapın.
Fleet Engine Deliveries API'nin üzerine kendi gönderi izlemenizi uygulayın.
Önemli olan, izleme kimliğine göre kargo görevlerini aramaktır.
Teslimat Tüketicisi Rolü kullanırsanız tüm Fleet Engine Deliveries API çağrıları yalnızca taşıyıcı veya alıcıyla ilgili bilgileri döndürecektir. Diğer tüm ülkeler yanıtlardaki bilgiler çıkartılır. Siz sorumlusunuz son kullanıcıların kimliğini doğrulamak için kullanılır. Ayrıca, konum bilgileri filtrelenir. bir hiyerarşiye değineceğiz. "Kullanmama" görevi sırasında Son kullanıcıyla konum bilgisi paylaşılmaz.
Günlük Kaydı
Fleet Engine'i, RPC günlüklerini Cloud Logging'e gönderecek şekilde ayarlayabilirsiniz. Daha fazla bkz. Günlük kaydı.
Yetkilendirme Rolleri ve Jetonları
Araç ve görev yaşam döngüsünü yönetme başlıklı makalede açıklandığı gibi ve tek tek kullanım alanlarına yönelik yetkilendirme notlarını Fleet Engine'e yapılan çağrılar, hizmet hesabı kimlik bilgileri kullanılarak imzalandı. Kullanılan hizmet hesapları Bu jetonları vermek için bir veya daha fazla rol olabilir. Her bir rol izin veriliyor.
Daha fazla bilgi için bkz. Authentication and Authorization (Kimlik Doğrulama ve Yetkilendirme).
Sık karşılaşılan sorunları giderme
Sorunla karşılaşırsanız yardım almak için aşağıdaki bölümlere göz atın.
Esneklik
Fleet Engine, doğru kaynak olarak kabul edilmez. Siz sorumlusunuz sırasında başka bir şablon kullanmadan sisteminizin durumunu geri yüklemek için Filo Motoru.
Fleet Engine'de kayıp durum
Fleet Engine ile çalışırken sistemin iyileşmesi için istemcileri uygulayın kendisi gösterilir. Örneğin, Fleet Engine bir bir hata mesajıyla yanıt verebilir. Bu hata, aracın bulunur. Ardından müşteri, aracı yeni durumda yeniden oluşturmalıdır. Her ne kadar Bu sorun nadiren meydana gelir. Sisteminizin dayanacak kadar dayanıklı olduğundan emin olun somut olarak ortaya koyar.
Fleet Engine'de ciddi bir arızanın yaşanmasının son derece olası senaryosunda, araçları ve görevlerin çoğunu veya tamamını yeniden oluşturmanız gerekebilir. Oluşturma oranı çok yüksek olursa kota sorunları nedeniyle bazı istekler tekrar başarısız olabilir. kota kontrolleri, hizmet reddi (DOS) saldırılarından kaçınmak için uygulanmaktadır. Bu durumda, bir sonraki kullanıcı için geri yükleme stratejisi kullanarak iyi bir fikir olabilir.
Sürücü uygulamasında kayıp durum
Sürücü uygulaması kilitlenirse uygulama, mevcut durumu yeniden oluşturmalıdır Google Drive'da çalışır. Uygulama, kullanıcıların en iyi şekilde çalışmalarını sağlamak için eski durumlarına geri dönmelerini sağlamak. Uygulama ayrıca Driver SDK için durak listesini yeniden oluşturup açıkça ayarlayabilirsiniz.
SSS
Sürücü bir görevin sırasının bozulması nedeniyle durursa ne olur?
Bu durumda önce görevlerin sırasını güncelleyin, sonra da normal şekilde devam edin. durakta varışı, görev tamamlandığını ve diğer ayrıntıları işaretleme. Aksi takdirde sistem tutarsız hale gelebilir, GMR'ler yanlış olabilir, ve beklenmeyen hatalar bildirilebilir.