Gerçek Zamanlı Güncelleme

Gerçek zamanlı güncellemeler

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

  1. 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.
        Google Haritalar Booking API'lerini bulma
      • 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
        Google Maps Booking API'yi etkinleştirme
      • 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:

  1. Google Cloud Platform Console'a erişin.
  2. İş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.
  3. Sol menüden Hizmet Hesapları'nı tıklayın.
  4. Create Service Account (Hizmet Hesabı Oluştur) seçeneğini tıklayın.
  5. Hizmet hesabı için bir ad girin ve Oluştur'u tıklayın.
  6. Rol seçin bölümünde Proje > Düzenleyici'yi seçin.
  7. Devam'ı tıklayın.
  8. İsteğe bağlı: Hizmet hesabına erişim izni vermek için kullanıcı ekleyin ve Bitti'yi tıklayın.
  9. Yeni oluşturduğunuz hizmet hesabı için diğer > Anahtar oluştur'u tıklayın.
  10. Biçim olarak JSON'u seçin ve Oluştur'u tıklayın.
  11. 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.

İş Ortağı Portalı'ndaki iş ortağı kimliği

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 öğe batchPush isteğiyle güncellenirken öğe sürümlendirmesi için generation_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 bir id ve type 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, bir proto_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.