Gerçek Zamanlı Güncelleme

Gerçek zamanlı güncellemeler

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

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

  1. Google Cloud Platform konsoluna erişin.
  2. İşlem Merkezi'ndeki hesabınızla ilişkilendirilmiş bir Google Cloud projesi de mevcuttur. Seçili değilse projeyi seçin.
  3. Soldaki menüden Hizmet Hesapları'nı tıklayın.
  4. Hizmet Hesabı Oluştur'u tıklayın.
  5. Hizmet hesabı için bir ad girin ve Create'i (Oluştur) tıklayın.
  6. Rol seç bölümünde, Proje > Düzenleyici.
  7. Devam'ı tıklayın.
  8. İsteğe bağlı: Hizmet hesabına erişim izni vermek için kullanıcıları ekleyin ve Bitti'yi tıklayın.
  9. Daha fazla >'ı tıklayın Az önce oluşturduğunuz hizmet hesabı için anahtar oluşturun.
  10. Biçim olarak JSON'yi seçin ve Oluştur'u tıklayın.
  11. 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.

İş Ortağı Portalı'nda İş Ortağı Kimliği

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 öğeyi batchPush isteği aracılığıyla güncellerken öğe sürümü belirleme için generation_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 bir id ve type 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.