Filo Performansı için Fleet Engine'i kullanmaya başlayın

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.

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:

İ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.

Not: En fazla 500 görev ve kalan 300 görev atayabilirsiniz araç yolculuğu segmentlerini DeliveryVehicle nesneye böler.

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

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

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

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:

  1. UpdateDeliveryVehicle numaralı telefonu arayın.
  2. NOT_FOUND hatası alırsanız CreateDeliveryVehicle numaralı telefonu arayın aracı yeniden oluşturabilirsiniz. Aramada araç iade edilirse araç güncellenebilir.

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:

  1. Görevin sonuç alanını BAŞARILI veya BAŞARISIZ olarak güncelleyin.

  2. Etkinliğin zaman damgasını belirtin.

    Ardından JavaScript Filo İzleme kitaplığı görevin sonucunu belirtir ve görev durumu otomatik olarak KAPATILDI şeklinde ayarlanır. Daha fazla bilgi için bkz. JavaScript Filo İzleme kitaplığıyla Filonuzu izleyin.

Araçlarda olduğu gibi, Fleet Engine şu tarihten 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.

Deliveries API diyagramını entegre etme>

İ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:

  1. Fleet Engine Delivery Güvenilmeyen Sürücü Kullanıcısı'nı kullanarak jetonu oluşturun hizmet hesabı rolüne sahip olmanız gerekir.

  2. 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.

SaatEtkinlikModelleme
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:

  1. Sürücü SDK'sını kullanın: Android, iOS -- en basit seçenektir.
  2. Ö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>

&lt;id&gt;, 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>`

&lt;id&gt;, 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:

    AlanDeğ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:

    AlanDeğ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>`

&lt;id&gt;, 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:

    AlanDeğ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:

    AlanDeğ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:

    AlanDeğer
    istek Dizi<CreateTasksRequest>

  • İsteğe bağlı alanlar:

    AlanDeğ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>`

&lt;id&gt;, 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:

    AlanDeğer
    tür Type.UNAVAILABLE
    durum State.OPEN
    taskDuration Aranın saniye cinsinden uzunluğu.

  • İsteğe bağlı alanlar:

    AlanDeğ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>`

&lt;id&gt;, 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:

    AlanDeğ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`

&lt;id&gt;, 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:

    AlanDeğ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`

&lt;id&gt;, 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:

    AlanDeğ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`

&lt;id&gt;, 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:

    AlanDeğ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`

&lt;id&gt;, 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:

    AlanDeğ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`

&lt;id&gt;, 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:

    AlanDeğ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:

    AlanDeğ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`

&lt;id&gt;, 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:

    AlanDeğ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`

&lt;id&gt;, 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:

    AlanDeğ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. Filo 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`

&lt;id&gt;, 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:

    AlanDeğer
    durum State.CLOSED

  • İsteğe bağlı alanlar:

    AlanDeğ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. Filo 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`

&lt;id&gt;, 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:

    AlanDeğer
    taskOutcome Result.SUCCEEDED veya Result.FAILED

  • İsteğe bağlı alanlar:

    AlanDeğ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>`

&lt;id&gt;, görev için benzersiz bir tanımlayıcıdır.

&lt;vehicleId&gt;, 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>`

&lt;id&gt;, görev için benzersiz bir tanımlayıcıdır.

&lt;taskId&gt;, 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

Filo 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>`

&lt;tracking_id&gt;, 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ği gönderin.

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"

Filo izleme

İki seçeneğiniz vardır: Fleet Engine Deliveries API'si kullanarak filo izlemeyi etkinleştirebilir:

  • Tercih edilen: JavaScript Filo İzleme kitaplığı. Kitaplık, araçların ve konumların konumunu görselleştirmenizi sağlar %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 kapsıyor. Bu bileşen, Özelleştirilebilir, animasyonlu bir filo izleme deneyimi sunmak Google Analytics 4'te tarama yapın.

  • Fleet Engine Deliveries API'sine ek olarak kendi filo izlemenizi uygulayın.

Önemli olan, filo görevlerini izleme kimliğiyle aramaktır.

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.