RTU'lar öncelikle acil durum kapatmaları veya düzenli olarak değişen meta veriler (ör. tahmini varış zamanı) gibi öngöremediğiniz güncellemeler için tasarlanmıştır. Değişikliklerinizin hemen yansıtılması gerekmiyorsa bunun yerine toplu feed beslemeyi kullanabilirsiniz. Gerçek zamanlı güncellemeler en fazla beş dakika içinde işlenir.
Google Cloud Platform kurulumu
- GCP projesi oluşturun. RTU API'ye erişmek için bir GCP projesi gerekir.
- Düzenleyici erişimi verin food-support@google.com
- Google iletişim noktanızı GCP proje numarasından haberdar edin.Gerçek zamanlı güncellemelerin çalışması için GCP projenizin Actions Center hesabınızla ilişkilendirilmiş olması gerekir.
- Maps Booking API'yi etkinleştirme:
- GCP'de API'ler ve Hizmetler > Kitaplık'a gidin.
- "Google Maps Booking API"yi arayın.
- Sandbox örneğini ("Google Haritalar Rezervasyon API'si (Geliştirici)") bulun ve Etkinleştir'i tıklayın.
- Üretim örneğini ("Google Maps Booking API") bulun ve Etkinleştir'i tıklayın
- GCP projeniz için düzenleyici rolüne sahip bir hizmet hesabı oluşturun. Daha fazla bilgi için Hizmet hesabı kurulumu başlıklı makaleyi inceleyin.
- Gerçek zamanlı güncellemeler üzerinde çalıştığınız ortama toplu feed'ler yüklediğinizden emin olun.
- API kimlik doğrulaması için Google istemci kitaplığını seçtiğiniz dile yüklemenizi öneririz. OAuth kapsamı olarak "https://www.googleapis.com/auth/mapsbooking" kullanmalıdır. 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 yapmanız gerekir.
Hizmet hesabı kurulumu
Gerçek zamanlı güncellemeler API'si gibi Google API'lerine kimliği doğrulanmış HTTPS istekleri göndermek için bir hizmet hesabınız olmalıdır.
Hizmet hesabı oluşturmak için aşağıdakileri yapın:
- Google Cloud Platform Console'a erişin.
- İşlemler Merkezi'ndeki hesabınızla ilişkili bir Google Cloud projesi de olmalıdır. Daha önce seçilmemişse ilgili projeyi seçin.
- Sol menüden Hizmet Hesapları'nı tıklayın.
- Create Service Account (Hizmet Hesabı Oluştur) seçeneğini tıklayın.
- Hizmet hesabı için bir ad girin ve Oluştur'u tıklayın.
- Rol seçin bölümünde Proje > Düzenleyici'yi seçin.
- Devam'ı tıklayın.
- İsteğe bağlı: Hizmet hesabına erişim izni vermek için kullanıcı ekleyin ve Bitti'yi tıklayın.
- Yeni oluşturduğunuz hizmet hesabı için diğer > Anahtar oluştur'u tıklayın.
- Biçim olarak JSON'u seçin ve Oluştur'u tıklayın.
- Yeni herkese açık/özel anahtar çiftiniz oluşturulduktan sonra makinenize indirin.
API ile çalışma
Gerçek zamanlı güncellemeler API'si iki tür işlem destekler: Güncelleme ve Silme. Gerçek zamanlı güncelleme API'si aracılığıyla yeni öğe ekleme desteklenmez. Tek bir API isteğine birden fazla güncelleme eklerseniz gerçek zamanlı güncellemeler toplu olarak gönderilebilir. Tek bir API çağrısında en fazla 1.000 güncelleme toplu olarak gönderebilirsiniz. Mümkünse sıklık tabanlı bir yaklaşım (ör. her X dakikada bir sisteminizi değişiklikler için tarayın) yerine RTU aracılığıyla güncelleme göndermek için tetikleyici tabanlı bir yaklaşım (ör. sisteminizde bir veri değişikliği olduğunda Google'da gerçek zamanlı güncelleme tetikleyin) kullanmanızı öneririz.
Gerçek zamanlı güncellemeler API'si hem korumalı alan hem de üretim ortamlarında çalışır. API isteklerini test etmek için korumalı alan ortamı, Sipariş Son Kullanıcısına Görünen İçerikleri güncellemek için üretim ortamı kullanılır.
- Korumalı alan -
partnerdev-mapsbooking.googleapis.com
- Üretim -
mapsbooking.googleapis.com
Uç noktalar
Gerçek zamanlı güncellemeler API'si, envanter güncellemeleri için gelen istekleri işlemek üzere iki uç nokta sağlar:
- GÜNCELLEME -
/v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush
- DELETE -
/v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchDelete
PARTNER_ID parametresini, aşağıdaki ekran görüntüsünde gösterildiği gibi İşlemler Merkezi'ndeki Hesap ve kullanıcılar sayfasında bulabilirsiniz.

Yukarıdaki ekran görüntüsünden örnek olarak PARTNER_ID değerinin 10000001 olduğunu varsayarsak korumalı alanda ve üretimde API isteği göndermek için tam URL'ler aşağıdaki örneklere benzer şekilde görünür.
Korumalı alan güncellemesi
https://partnerdev-mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchPush
Sandbox DELETE
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
https://mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchDelete
Varlıkları güncelleme
Envanterinizdeki öğeleri güncellemek için bir HTTP POST isteğinde update uç noktasını kullanın. Her POST isteği, güncellemek istediğiniz öğeyi içeren bir JSON yükünün yanı sıra 10000001 parametresini içermelidir.
Not: Günlük veri feed'lerinizin, gerçek zamanlı güncellemeler API'si aracılığıyla gönderilen tüm değişiklikleri de içerdiğinden emin olun. Aksi takdirde verileriniz güncel olmayabilir.
İstek yükünü güncelleme
İstek gövdesi, kayıtların listesini içeren bir JSON nesnesidir. Her kayıt, güncellenen bir öğeye karşılık gelir. Bu alan, proto_record
alanından ve öğe güncellemesinin zamanını belirten generation_timestamp
alanından oluşur:
{ "records": [ { "proto_record":"ServiceData PROTO", "generation_timestamp":"UPDATE_TIMESTAMP" } ] }
ServiceData PROTO
: Güncellediğiniz ServiceData öğesinin proto veya JSON çevirisi.UPDATE_TIMESTAMP
: Varlığın arka uç sistemlerinizde oluşturulduğu zaman damgasını eklediğinizden emin olun. Bu alan dahil edilmezse Google'ın isteği aldığı saat olarak ayarlanır. Bir öğebatchPush
isteğiyle güncellenirken öğe sürümlendirmesi içingeneration_timestamp
alanı kullanılır. İlişkisel envanter şemasında zaman değerlerinin beklenen biçimini inceleyin.
- Yük gövdesi 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 bulunabilir.
Örnekler
Tahmini teslimat süresini güncelleme
Bir teslimat hizmetinin tahmini teslimat süresini 30-60 dakika yerine 60-90 dakika olarak güncellemeniz gerektiğini varsayalım. Güncellemeniz, hizmet öğesinin tamamının JSON'unu içermelidir.
Aşağıdaki gibi görünen bir hizmet öğesini ele alalım:
{ "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 ile anlık güncellemeleriniz aşağıdaki gibidir (istek gövdeleri okunabilirlik için güzel bir şekilde yazdırılı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 fazla öğeyi güncelleme
Tek bir API çağrısında birden fazla restoran öğesini 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ı silme
Envanterinizdeki öğeleri silmek için HTTP POST isteğinde DELETE uç noktasını kullanın. Her POST isteği, silmek istediğiniz öğenin tanımlayıcısını içeren JSON yüküyle birlikte PARTNER_ID parametresini içermelidir.
Not: Günlük veri feed'lerinizin, gerçek zamanlı güncelleme API'si aracılığıyla gönderilen tüm değişiklikleri de içerdiğinden emin olun. Aksi takdirde, günlük toplu besleme gerçek zamanlı değişikliklerinizin üzerine yazar.
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" }] }
Öğe ekleme
Veri tutarsızlıklarına neden olabileceğinden yeni öğeler 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 çağrılarında iki tür doğrulama yapılır:
- İstek düzeyi: Bu doğrulamalar, yükün şemaya uyup uymadığını ve her
proto_record
'nin birid
vetype
alanı içerip içermediğini kontrol eder. Bu kontroller senkronizedir ve sonuçlar API yanıt gövdesinde döndürülür. 200 yanıt kodu ve boş bir JSON gövdesi{}
, bu doğrulamaların geçtiği ve söz konusu istekteki öğelerin işleme alınmak üzere sıraya alındığı anlamına gelir. 200 olmayan bir yanıt kodu, bu doğrulama işlemlerinden en az birinin başarısız olduğu ve istek tamamının (yükleyicideki tüm öğeler dahil) reddedildiği anlamına gelir. Örneğin, birproto_record
'de@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." } ] }
- Öğe düzeyinde: Yükte bulunan her öğe (proto_record), şema ile karşılaştırılarak doğrulanır. Doğrulamanın bu aşamasında karşılaşılan sorunlar API yanıtında bildirilmez. Yalnızca İşlem Merkezi'nin RTU Raporlama kontrol panelinde raporlanır.
Not: 200 yanıt kodu, tüm öğelerin başarılı bir şekilde beslendiği anlamına gelmez.
API kotaları
Gerçek zamanlı API güncellemelerinin kotası 60 saniyede 1.500 istek veya ortalama saniyede 25 istektir. Bir kota aşıldığında Google aşağıdaki hata mesajını döndürür:
{ "error": { "code": 429, "message": "Insufficient tokens for quota ...", "status": "RESOURCE_EXHAUSTED", "details": [...] } }
Bu sorunu çözmek için, başarılı olana kadar çağrıyı katlanarak daha uzun aralıklarla tekrar deneyin. Kotayı düzenli olarak tüketirseniz bir API isteğine daha fazla öğe ekleyebilirsiniz. Tek bir API çağrısına en fazla 1.000 öğe ekleyebilirsiniz.
İşlem süreleri için gerçek zamanlı güncellemeler
Gerçek zamanlı güncellemeyle güncellenen bir öğe 5 dakika içinde işlenir.