Update Real Time

Update realtime

RTU terutama ditujukan untuk info terbaru yang tidak dapat Anda perkirakan, seperti penutupan darurat, atau metadata yang berubah secara berkala (seperti PWT). Jika perubahan tidak perlu segera diterapkan, Anda dapat menggunakan penyerapan feed batch. Update real-time diproses dalam waktu tidak lebih dari lima menit.

Penyiapan Google Cloud Platform

  1. Siapkan project GCP. Project GCP diperlukan untuk mengakses RTU API.
    • Berikan akses editor food-support@google.com
    • Beri tahu POC Google Anda tentang nomor project GCP.Project GCP Anda harus dikaitkan dengan akun Actions Center agar update real-time dapat berfungsi.
    • Aktifkan Maps Booking API:
      • Di GCP, buka API & Layanan > Library.
      • Cari “Google Maps Booking API”.
        Menemukan Booking API Google Maps
      • Cari instance Sandbox (“Google Maps Booking API (Dev)”) lalu klik Enable
      • Cari instance Produksi (“Google Maps Booking API”) dan klik Aktifkan.
        Mengaktifkan Booking API Google Maps
      • Buat akun layanan dengan peran editor untuk project GCP Anda. Untuk mengetahui detail selengkapnya, lihat Pembuatan akun layanan.
      • Pastikan Anda mengupload feed batch ke lingkungan tempat Anda mengerjakan update real-time.
      • Untuk autentikasi API, sebaiknya instal library Klien Google dalam bahasa pilihan Anda. Gunakan “https://www.googleapis.com/auth/mapsbooking” sebagai cakupan OAuth. Contoh kode yang disertakan di bawah ini menggunakan library ini. Jika tidak, Anda harus menangani pertukaran token secara manual seperti yang dijelaskan di Menggunakan OAuth 2.0 untuk Mengakses Google API.

Pembuatan akun layanan

Anda memerlukan akun layanan untuk membuat permintaan HTTPS yang diautentikasi ke Google API, seperti API update real-time.

Untuk menyiapkan akun layanan, lakukan langkah-langkah berikut:

  1. Akses konsol Google Cloud Platform.
  2. Akun Anda di Actions Center juga memiliki project Google Cloud yang terkait dengannya. Pilih project tersebut, jika belum dipilih.
  3. Klik Akun Layanan di menu kiri.
  4. Klik Create Service Account.
  5. Masukkan nama untuk akun layanan dan klik Create.
  6. Untuk Select a role, pilih Project > Editor Anda.
  7. Klik Lanjutkan.
  8. Opsional: Tambahkan pengguna untuk memberi mereka akses ke akun layanan, lalu klik Selesai.
  9. Klik lainnya > Buat kunci untuk akun layanan yang baru saja Anda buat.
  10. Pilih JSON sebagai format dan klik Create.
  11. Setelah pasangan kunci publik/pribadi baru dibuat, download pasangan kunci tersebut ke mesin Anda.

Menggunakan API

Real-time updates API mendukung dua jenis operasi: Update dan Delete. Penambahan entity baru melalui API update real-time tidak didukung. Update real-time dapat dikelompokkan jika Anda menyertakan beberapa update dalam satu permintaan API. Anda dapat mengelompokkan hingga 1.000 update dalam satu panggilan API. Sebaiknya gunakan pendekatan berbasis pemicu untuk mengirim update melalui RTU (yaitu, setelah perubahan data di sistem Anda, memicu pembaruan real-time ke Google), bukan pendekatan berbasis frekuensi (yakni setiap X menit pindai sistem Anda untuk mengetahui perubahan) jika memungkinkan.

API update real-time beroperasi di lingkungan produksi dan sandbox. Lingkungan sandbox digunakan untuk menguji permintaan API dan lingkungan produksi guna mengupdate konten yang dapat dilihat oleh pengguna End-to-End Pemesanan.

  • Sandbox - partnerdev-mapsbooking.googleapis.com
  • Produksi - mapsbooking.googleapis.com

Endpoint

API update real-time mengekspos dua endpoint untuk menangani permintaan masuk untuk pembaruan inventaris:

  • PERBARUI - /v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush
  • HAPUS - /v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchDelete

Parameter PARTNER_ID dapat ditemukan di Pusat Tindakan pada halaman Akun dan pengguna, seperti yang ditunjukkan pada screenshot di bawah.

ID Partner di Partner Portal

Dengan menggunakan 10000001 sebagai nilai PARTNER_ID sebagai contoh dari screenshot di atas, URL lengkap untuk mengirim permintaan API dalam sandbox dan produksi akan terlihat seperti pada contoh di bawah.

Update sandbox

https://partnerdev-mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchPush

HAPUS Sandbox

https://partnerdev-mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchDelete

Pembaruan produksi

https://mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchPush

HAPUS Produksi

https://mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchDelete

Mengupdate entity

Untuk memperbarui entitas di inventaris Anda, gunakan endpoint update dalam permintaan HTTP POST. Setiap permintaan POST harus menyertakan parameter 10000001 bersama dengan payload JSON yang berisi entitas yang ingin Anda perbarui.

Catatan: Pastikan feed data harian Anda juga berisi perubahan yang dikirimkan melalui API update real-time. Jika tidak, data Anda mungkin akan menjadi usang atau tidak relevan.

Memperbarui payload permintaan

Isi permintaan adalah objek JSON dengan daftar kumpulan data. Setiap kumpulan data sesuai dengan entitas yang diperbarui. Paket ini terdiri dari kolom proto_record dan generation_timestamp yang menunjukkan waktu update entity:

  {
    "records": [
      {
        "proto_record":"ServiceData PROTO",
        "generation_timestamp":"UPDATE_TIMESTAMP"
      }
    ]
  }
  • ServiceData PROTO: Terjemahan proto atau JSON dari entity ServiceData yang Anda perbarui.
  • UPDATE_TIMESTAMP: Pastikan untuk menyertakan stempel waktu saat entity dibuat di sistem backend Anda. Jika kolom ini tidak disertakan, kolom ini akan disetel ke waktu saat Google menerima permintaan. Saat memperbarui entity melalui permintaan batchPush, kolom generation_timestamp digunakan untuk pembuatan versi entity. Lihat format nilai waktu yang diharapkan dalam skema inventaris relasional.
  • Ukuran isi payload tidak boleh lebih dari 5 MB.
  • Hapus spasi kosong untuk mengurangi ukuran.
  • Mungkin ada hingga 1.000 update dalam permintaan batchPush.

Contoh

Memperbarui PWT

Misalkan Anda harus segera memperbarui PWT layanan pengiriman dari 30-60 menjadi 60-90 menit. Update Anda harus berisi JSON untuk seluruh entity Service.

Pertimbangkan entity layanan yang terlihat seperti berikut:

{
	"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"
	}
}

Pembaruan real-time Anda oleh HTTP POST adalah sebagai berikut (isi permintaan cukup dicetak agar mudah dibaca):

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"
  }]
}

Memperbarui beberapa entity

Untuk memperbarui beberapa entitas restoran dalam satu panggilan API, sertakan beberapa data di kolom proto_record pada isi permintaan.

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"
  }]
}

Hapus entity

Untuk menghapus entity dari inventaris Anda, gunakan endpoint DELETE dalam permintaan HTTP POST. Setiap permintaan POST harus menyertakan parameter PARTNER_ID bersama dengan payload JSON yang berisi ID entitas yang ingin dihapus.

Catatan: Pastikan feed data harian Anda juga berisi perubahan yang dikirimkan melalui API update real-time. Jika tidak, penyerapan batch harian akan menimpa perubahan real-time Anda.

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"
  }]
}

Menambahkan entity

Jangan gunakan pembaruan real-time untuk menambahkan entitas baru karena dapat menyebabkan inkonsistensi data. Sebagai gantinya, gunakan feed batch.

Validasi & Kode respons API

Ada dua jenis validasi yang dilakukan pada panggilan API update real-time:

  • Tingkat permintaan - Validasi ini memeriksa apakah payload mengikuti skema dan setiap proto_record berisi kolom id dan type. Pemeriksaan ini bersifat sinkron dan hasilnya ditampilkan dalam isi respons API. Kode respons 200 dan isi JSON kosong {} berarti validasi ini diteruskan dan entity dalam permintaan tersebut dimasukkan ke dalam antrean untuk diproses. Kode respons non-200 berarti satu atau beberapa validasi ini gagal dan seluruh permintaan ditolak (termasuk semua entity dalam payload). Misalnya, jika proto_record tidak memiliki @type, respons error berikut akan ditampilkan:
  {
      "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." 
      }
    ]
  }
  • Tingkat entitas: Setiap entitas (proto_record) dalam payload divalidasi berdasarkan skema. Masalah yang ditemukan pada fase validasi ini tidak dilaporkan dalam respons API. Peristiwa tersebut hanya dilaporkan di dasbor RTU Reporting pada Actions Center.

Catatan: Kode respons 200 tidak berarti bahwa semua entitas berhasil diserap.

Kuota API

Update API real-time memiliki kuota 1.500 permintaan setiap 60 detik, atau rata-rata 25 permintaan per detik. Jika kuota terlampaui, Google akan merespons dengan pesan error berikut:

{
  "error": {
    "code": 429,
    "message": "Insufficient tokens for quota ...",
    "status": "RESOURCE_EXHAUSTED",
    "details": [...]
  }
}

Untuk menangani hal ini, coba lagi panggilan lagi pada interval yang lebih besar secara eksponensial hingga berhasil. Jika Anda sering menghabiskan kuota, pertimbangkan untuk menyertakan lebih banyak entity dalam satu permintaan API. Anda dapat menyertakan hingga 1.000 entity dalam satu panggilan API.

Update real-time waktu pemrosesan

Entity yang diperbarui melalui update real-time akan diproses dalam 5 menit.