RTU'lar öncelikle, acil durum kapanışları gibi öngöremediğiniz güncellemeler veya düzenli olarak değişen meta veriler (ör. TVS'ler) için tasarlanmıştır. Değişikliğinizin hemen uygulanması gerekmiyorsa bunun yerine toplu feed beslemesini kullanabilirsiniz. Gerçek zamanlı güncellemeler en fazla beş dakika içinde işlenir.
Google Cloud Platform kurulumu
- Bir GCP projesi oluşturun. RTU API'ye erişmek için bir GCP projesi gerekir.
- Düzenleyene, food-support@google.com adresine erişim izni ver
- Google İOOY'nize GCP proje numarasını bildirin.Gerçek zamanlı güncellemelerin çalışması için GCP projenizin Actions Center hesabınızla ilişkilendirilmesi gerekir.
- Haritalar Rezervasyon API'sini etkinleştirin:
- GCP'de API'ler ve Hizmetler > Kitaplık.
- "Google Maps Booking API" ifadesini arayın.
- Korumalı alan örneğini ("Google Haritalar Rezervasyon API'si (Dev)") bulun ve Etkinleştir'i tıklayın
- Üretim örneğini ("Google Haritalar Rezervasyon API'si") bulun ve Etkinleştir'i tıklayın
- GCP projenizde düzenleyici rolüne sahip olan bir hizmet hesabı oluşturun. Daha fazla bilgi için Hizmet hesabı kurulumu başlıklı makaleye bakın.
- Toplu feed'leri, gerçek zamanlı güncellemeler üzerinde çalıştığınız ortama yüklediğinizden emin olun.
- API kimlik doğrulaması için Google İstemci kitaplığını istediğiniz dilde yüklemenizi öneririz. OAuth kapsamı olarak "https://www.googleapis.com/auth/mapsbooking" adresini kullanın. Aşağıda verilen kod örnekleri bu kitaplıkları kullanır. Aksi takdirde, jeton değişimlerini Google API'lerine Erişmek için OAuth 2.0'ı Kullanma başlıklı makalede açıklandığı gibi manuel olarak gerçekleştirmeniz gerekir.
Hizmet hesabı kurulumu
Google API'lerine kimliği doğrulanmış HTTPS istekleri (ör. gerçek zamanlı güncelleme API'si) göndermek için bir hizmet hesabına ihtiyacınız vardır.
Hizmet hesabı oluşturmak için aşağıdakileri yapın:
- Google Cloud Platform konsoluna erişin.
- İşlem Merkezi'ndeki hesabınızla ilişkilendirilmiş bir Google Cloud projesi de mevcuttur. Seçili değilse projeyi seçin.
- Soldaki menüden Hizmet Hesapları'nı tıklayın.
- Hizmet Hesabı Oluştur'u tıklayın.
- Hizmet hesabı için bir ad girin ve Create'i (Oluştur) tıklayın.
- Rol seç bölümünde, Proje > Düzenleyici.
- Devam'ı tıklayın.
- İsteğe bağlı: Hizmet hesabına erişim izni vermek için kullanıcıları ekleyin ve Bitti'yi tıklayın.
- Daha fazla >'ı tıklayın Az önce oluşturduğunuz hizmet hesabı için anahtar oluşturun.
- Biçim olarak JSON'yi seçin ve Oluştur'u tıklayın.
- Yeni ortak/özel anahtar çiftiniz oluşturulduktan sonra bunu makinenize indirin.
API ile çalışma
Gerçek zamanlı güncellemeler API'si iki işlem türünü destekler: Güncelleme ve Silme. Gerçek zamanlı güncelleme API'si aracılığıyla yeni varlık ekleme işlemi desteklenmiyor. Tek bir API isteğine birden fazla güncelleme eklerseniz gerçek zamanlı güncellemeleri toplu olarak düzenleyebilirsiniz. Tek bir API çağrısında en fazla 1.000 güncellemeyi toplu olarak gönderebilirsiniz. Mümkünse güncellemeleri RTU aracılığıyla göndermek için (ör. sisteminizdeki bir veri değişikliği Google'da gerçek zamanlı bir güncellemeyi tetiklediğinde) tetikleyiciye dayalı bir yaklaşım kullanmanızı öneririz (yani, sistemdeki değişiklikler için X dakikada bir tarama yapılması).
Gerçek zamanlı güncelleme API'si hem korumalı alanda hem de üretim ortamlarında çalışır. Korumalı alan ortamı, Sipariş Veren Uçtan Uca kullanıcılara görünür içeriği güncellemek için API isteklerini ve üretim ortamını test etmek amacıyla kullanılır.
- Korumalı Alan -
partnerdev-mapsbooking.googleapis.com
- Üretim -
mapsbooking.googleapis.com
Uç noktalar
Real-time Updates API'si, gelen envanter güncellemeleri isteklerini ele almak için iki uç nokta sunar:
- GÜNCELLEME -
/v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush
- SİL -
/v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchDelete
PARTNER_ID parametresi, aşağıdaki ekran görüntüsünde gösterildiği gibi Hesap ve kullanıcılar sayfasındaki İşlem Merkezi'nde bulunabilir.
Yukarıdaki ekran görüntüsünde örnek olarak PARTNER_ID değeri olarak 10000001 alındığında korumalı alanda ve üretimde API istekleri göndermek için kullanılan URL'lerin tamamı aşağıdaki örneklerdeki gibi görünür.
Korumalı alan güncellemesi
https://partnerdev-mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchPush
Korumalı Alan'ı SİL
https://partnerdev-mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchDelete
Üretim güncellemesi
https://mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchPush
Üretim SİLİN
https://mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchDelete
Varlıkları güncelleme
Envanterinizdeki varlıkları güncellemek için bir HTTP POST isteğinde güncelleme uç noktasını kullanın. Her POST isteği, 10000001 parametresiyle birlikte güncellemek istediğiniz varlığı içeren bir JSON yükünü içermelidir.
Not: Günlük veri feed'lerinizin, gerçek zamanlı güncellemeler API'si aracılığıyla gönderilen değişiklikleri de içerdiğinden emin olun. Aksi takdirde, verileriniz güncel olmayabilir.
İstek yükünü güncelleme
İsteğin gövdesi, kayıt listesini içeren bir JSON nesnesidir. Her kayıt, güncellenen bir varlığa karşılık gelir. proto_record
alanından ve öğe güncellemesinin zamanını gösteren generation_timestamp
sütunundan oluşur:
{ "records": [ { "proto_record":"ServiceData PROTO", "generation_timestamp":"UPDATE_TIMESTAMP" } ] }
ServiceData PROTO
: Güncellediğiniz ServiceData varlığının proto veya JSON çevirisi.UPDATE_TIMESTAMP
: Arka uç sistemlerinizde varlığın oluşturulduğu zamana ait zaman damgasını eklediğinizden emin olun. Bu alan eklenmezse Google'ın isteği aldığı zamana ayarlanır. Bir öğeyibatchPush
isteği aracılığıyla güncellerken öğe sürümü belirleme içingeneration_timestamp
alanı kullanılır. İlişkisel envanter şemasında beklenen zaman değerlerinin biçimini inceleyin.
- Yük gövdesinin boyutu 5 MB'ı aşmamalıdır.
- Boyutu azaltmak için boşlukları kaldırın.
- Bir
batchPush
isteğinde en fazla 1.000 güncelleme olabilir.
Örnekler
TVS güncelleme
Bir teslimat hizmetinin tahmini süresini 30-60 dakika yerine 60-90 dakika arasında acilen güncellemeniz gerektiğini varsayalım. Güncellemeniz, Hizmet varlığının tamamı için JSON içermelidir.
Aşağıdaki gibi görünen bir hizmet varlığını düşünün:
{ "service": { "service_id": "service/entity002", "service_type": "DELIVERY", "parent_entity_id": "entity002", "lead_time": { "min_lead_time_duration": "600s", "max_lead_time_duration": "1800s" }, "action_link_id": "delivery_link/entity002" } }
HTTP POST tarafından yapılan gerçek zamanlı güncellemeniz aşağıdaki gibidir (istek gövdeleri okunabilirlik için oldukça açıktır):
POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush Host: mapsbooking.googleapis.com Content-Type: application/json { "records": [{ "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "service" : { "service_id" : "23456/delivery", "service_type" : "DELIVERY", "parent_entity_id" : "23456", "disabled" : "false", "action_link_id": "delivery_link/entity002", "lead_time" : { "min_lead_time_duration" : { "seconds": "3600" }, "max_lead_time_duration" : { "seconds": "5400" } } } }, "generation_timestamp": "2023-09-13T17:11:10.750Z" }] }
Birden çok öğeyi güncelleme
Tek bir API çağrısında birden fazla restoran varlığını güncellemek için istek gövdesinin proto_record alanına birden fazla kayıt ekleyin.
POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush Host: mapsbooking.googleapis.com Content-Type: application/json { "records": [{ "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "service" : { "service_id" : "23456/delivery", "service_type" : "DELIVERY", "parent_entity_id" : "23456", "disabled" : "false", "action_link_id": "delivery_link/entity002", "lead_time" : { "min_lead_time_duration" : { "seconds": "1800" }, "max_lead_time_duration" : { "seconds": "3600" } } } }, "generation_timestamp": "2023-09-13T17:11:10.750Z" }, { "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "fee" : { "fee_id" : "12345/delivery_fee", "fee_type" : "DELIVERY", "fixed_amount" : { "currency_code" : "USD", "units" : "10", "nanos" : "0" }, "service_ids": ["service/entity002"] } }, "generation_timestamp" : "2023-09-13T17:11:10.750Z" }] }
Varlıkları silin
Envanterinizden varlıkları silmek için bir HTTP POST isteğinde DELETE uç noktasını kullanın. Her POST isteği, PARTNER_ID parametresini ve silmek istediğiniz varlığın tanımlayıcısını içeren JSON yükünü içermelidir.
Not: Günlük veri feed'lerinizin, gerçek zamanlı güncelleme API'si aracılığıyla gönderilen değişiklikleri de içerdiğinden emin olun. Aksi takdirde, günlük toplu kullanım gerçek zamanlı değişikliklerinizin üzerine yazılır.
POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchDelete Host: mapsbooking.googleapis.com Content-Type: application/json { "records": [{ "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "service" : { "service_id" : "23456/delivery" } }, "delete_time": "2023-09-13T17:11:10.750Z" }, { "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "fee" : { "fee_id" : "12345/delivery_fee" } }, "delete_time" : "2023-09-13T17:11:10.750Z" }] }
Varlık ekleme
Veri tutarsızlıklarına neden olabileceğinden yeni varlıklar eklemek için gerçek zamanlı güncellemeleri kullanmayın. Bunun yerine toplu feed'leri kullanın.
Doğrulama ve API yanıt kodları
Gerçek zamanlı güncelleme API'si çağrılarında gerçekleştirilen iki tür doğrulama vardır:
- İstek düzeyinde: Bu doğrulamalar, yükün şemaya uygun olduğunu ve her
proto_record
öğesinin birid
vetype
alanları içerdiğini kontrol eder. Bu kontroller eşzamanlıdır ve sonuçlar API yanıt gövdesinde döndürülür. Yanıt kodu 200 ve boş JSON gövdesi ({}
), bu doğrulamaların geçtiği ve söz konusu istekteki varlıkların işlenmek üzere sıraya alındığı anlamına gelir. 200 olmayan yanıt kodu, bu doğrulamalardan bir veya daha fazlasının başarısız olduğu ve isteğin tamamının (yükteki tüm varlıklar dahil) reddedildiği anlamına gelir. Örneğin,proto_record
öğesinde@type
eksikse aşağıdaki hata yanıtı döndürülür:
{ "error": { "code": 400, "message": "Record:{...}", "status": "INVALID_ARGUMENT", "details": [ { "@type": "type.googleapis.com/google.rpc.DebugInfo", "detail": "[ORIGINAL ERROR] generic::invalid_argument: Failed to parse one or more rtu records. Record:... The entity type could not be extracted from the entity value." } ] }
- Varlık düzeyi: Yükteki her varlık (proto_record) şemaya göre doğrulanır. Bu doğrulama aşamasında karşılaşılan sorunlar API yanıtında bildirilmez. Yalnızca İşlemler Merkezi'nin RTU Raporlama kontrol panelinde raporlanırlar.
Not: 200 yanıt kodu, tüm varlıkların başarıyla beslendiği anlamına gelmez.
API kotaları
Gerçek zamanlı API güncellemelerinin kotası her 60 saniyede 1.500 istek veya saniyede ortalama 25 istektir. Bir kota aşıldığında Google, aşağıdaki hata mesajıyla yanıt verir:
{ "error": { "code": 429, "message": "Insufficient tokens for quota ...", "status": "RESOURCE_EXHAUSTED", "details": [...] } }
Bu sorunu çözmek için çağrı başarılı olana kadar katlanarak daha geniş aralıklarla yeniden deneyin. Kotayı düzenli olarak tüketiyorsanız bir API isteğine daha fazla varlık eklemeyi düşünebilirsiniz. Bir API çağrısına en fazla 1.000 varlık ekleyebilirsiniz.
İşleme sürelerinin gerçek zamanlı güncellemeleri
Gerçek zamanlı güncelleme ile güncellenen bir varlık 5 dakika içinde işlenir.