Gerçek Zamanlı Güncelleme

Gerçek zamanlı güncellemeler

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

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

  1. Google Cloud Platform konsoluna erişin.
  2. Actions Center'daki hesabınızla ilişkilendirilmiş bir Google Cloud projesi de bulunur. Seçili değilse ilgili projeyi seçin.
  3. Soldaki menüde Service Accounts'u (Hizmet Hesapları) tıklayın.
  4. Hizmet Hesabı Oluştur'u 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 istediğiniz kullanıcıları 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'yi seçin ve Oluştur'u tıklayın.
  11. 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

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çin generation_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 bir id ve type 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, bir 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. 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.