RTU'lar temel olarak, acil durum kapanışları gibi öngörülemeyen güncellemeler veya düzenli olarak değişen meta veriler (ör. GMR'ler) için tasarlanmıştır. Yaptığınız değişikliğin hemen yansıtılması 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 gereklidir.
- food-support@google.com adresine düzenleyici erişimi ver
- Google İOOY'nize GCP proje numarasını bildirin.Gerçek zamanlı güncellemelerin işe yaraması için GCP projenizin Actions Center hesabınızla ilişkilendirilmiş olması gerekir.
- Maps Booking API'sini etkinleştir:
- GCP'de API'ler ve Hizmetler > Kitaplık'a gidin.
- "Google Maps Booking API'sini" arayın.
- Korumalı Alan örneğini ("Google Maps Booking API (Dev)") 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.
- 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 seçtiğiniz dilde Google İstemci kitaplığını 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 bölümünde açıklandığı gibi manuel olarak gerçekleştirmeniz gerekir.
Hizmet hesabı kurulumu
Google API'lerine, gerçek zamanlı güncellemeler API'si gibi kimliği doğrulanmış HTTPS istekleri göndermek için bir hizmet hesabına ihtiyacınız vardır.
Hizmet hesabı oluşturmak için şunları yapın:
- Google Cloud Platform konsoluna erişin.
- Actions Center'daki hesabınızla ilişkilendirilmiş bir Google Cloud projesi de bulunur. Seçili değilse ilgili projeyi seçin.
- Soldaki menüde Service Accounts'u (Hizmet Hesapları) tıklayın.
- Hizmet Hesabı Oluştur'u 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 istediğiniz kullanıcıları 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'yi seçin ve Oluştur'u tıklayın.
- Genel/özel anahtar çiftiniz oluşturulduktan sonra makinenize indirin.
API ile çalışma
Gerçek Zamanlı Güncellemeler API'si iki tür işlemi destekler: Güncelleme ve Silme. Gerçek zamanlı güncelleme API'si aracılığıyla yeni varlık ekleme desteklenmemektedir. Tek bir API isteğine birden fazla güncelleme eklerseniz gerçek zamanlı güncellemeler toplu olarak işlenebilir. Tek bir API çağrısında en fazla 1.000 güncellemeyi toplu olarak ekleyebilirsiniz. Güncellemeleri RTU üzerinden göndermek için mümkünse sıklık tabanlı bir yaklaşım yerine (yani sisteminizi her X dakikada bir taramak) yerine, RTU üzerinden güncelleme göndermek için (yani sisteminizdeki bir veri değişikliği Google'a gerçek zamanlı bir güncelleme tetikledikten sonra) tetikleyici temelli bir yaklaşım kullanmanızı öneririz.
Gerçek zamanlı güncellemeler API'si hem korumalı alanda hem de üretim ortamlarında çalışır. Korumalı alan ortamı, API isteklerini ve üretim ortamını test ederek Sipariş Verme Uçtan Uca kullanıcılarına görünen içeriği güncellemek için 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 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 İşlemler Merkezi'nde bulunabilir.
![İş Ortağı Portalı'nda İş Ortağı Kimliği](https://developers-dot-devsite-v2-prod.appspot.com/static/actions-center/verticals/ordering/images/rtu-partnerid.png?authuser=7&hl=tr)
Yukarıdaki ekran görüntüsünde örnek olarak PARTNER_ID değeri olarak 10000001 kullanılır. Korumalı alanda ve üretimde API istekleri göndermek için kullanılan URL'lerin tamamı aşağıdaki örneklerdeki gibi olacaktı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 DELETE
https://mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchDelete
Varlıklar güncelleniyor
Envanterinizdeki varlıkları güncellemek için bir HTTP POST isteğindeki update uç noktasını kullanın. Her POST isteği, güncellemek istediğiniz varlığı içeren bir JSON yüküyle birlikte 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üncelliğini yitirmiş veya eski olabilir.
İstek yükünü güncelle
İsteğin gövdesi, kayıt listesi 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ı belirten generation_timestamp
bölümünden oluşur:
{ "records": [ { "proto_record":"ServiceData PROTO", "generation_timestamp":"UPDATE_TIMESTAMP" } ] }
ServiceData PROTO
: Güncellemekte olduğunuz ServiceData varlığının proto veya JSON çevirisi.UPDATE_TIMESTAMP
: Varlığın arka uç sistemlerinizde oluşturulduğu zamanı gösteren zaman damgasını eklediğinizden emin olun. Bu alan eklenmemişse, Google'ın isteği aldığı zamana ayarlanır. Bir varlığıbatchPush
isteği aracılığıyla güncellerken, varlık sürümü içingeneration_timestamp
alanı kullanılır. İlişkisel envanter şemasında beklenen zaman değerlerinin biçimini görün.
- Yük gövdesinin boyutu 5 MB'ı aşmamalıdır.
- Boyutu küçültmek için boşlukları kaldırın.
- Bir
batchPush
isteğinde en fazla 1.000 güncelleme olabilir.
Örnekler
TVS güncelleme
Teslimat hizmetinin TVS'sini acilen 30-60 dakikadan 60-90 dakikaya güncellemeniz gerektiğini varsayalım. Güncellemeniz, tüm Hizmet varlığının JSON dosyasını içermelidir.
Aşağıdaki gibi görünen bir hizmet kuruluşu 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 gerçek zamanlı güncellemeniz aşağıdaki gibidir (istek gövdeleri okunabilirlik için oldukça yazdırılmıştı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 çok restoran varlığını güncellemek için istek gövdesinin proto_record alanına birden çok 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ı sil
Envanterinizden varlık silmek için bir HTTP POST isteğindeki DELETE uç noktasını kullanın. Her POST isteği, silmek istediğiniz varlığın 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 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
Yeni varlıklar eklemek için gerçek zamanlı güncellemeleri kullanmayın; aksi takdirde veri tutarsızlıklarına neden olabilir. Bunun yerine toplu feed'leri kullanın.
Doğrulama ve API yanıt kodları
Gerçek zamanlı güncelleme API çağrılarında gerçekleştirilen iki tür doğrulama vardır:
- İstek düzeyi - Bu doğrulamalar, yükün şemayı takip edip etmediğini ve her
proto_record
öğesinin birid
vetype
alanı 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çildiği ve bu istekteki varlıkların işlenmek üzere sıraya alındığı anlamına gelir. 200 olmayan bir yanıt kodu, bu doğrulamalardan birinin veya birkaçı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, birproto_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. Doğrulamanın bu aşamasında karşılaşılan sorunlar API yanıtında bildirilmez. Bunlar yalnızca Actions Center'ın RTU Raporlaması kontrol panelinde raporlanır.
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 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ıyı işlem başarılı olana kadar katlanarak artan 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 1.000'e kadar varlık ekleyebilirsiniz.
İşleme süreleri ile ilgili gerçek zamanlı güncellemeler
Gerçek zamanlı güncellemeyle güncellenen bir öğe 5 dakika içinde işlenir.