Update Real Time

Update realtime

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

Penyiapan Google Cloud Platform

  1. Siapkan project GCP. Project GCP diperlukan untuk mengakses RTU API.
    • Memberikan akses editor food-support@google.com
    • Beri tahu POC Google Anda nomor project GCP.Project GCP Anda harus dikaitkan dengan akun Actions Center agar update real-time berfungsi.
    • Aktifkan Maps Booking API:
      • Di GCP, buka APIs & Services > Library.
      • Telusuri “Google Maps Booking API”.
        Menemukan Google Maps Booking API
      • Temukan instance Sandbox (“Google Maps Booking API (Dev)”) dan klik Aktifkan
      • Temukan instance Produksi (“Google Maps Booking API”) dan klik Aktifkan
        Mengaktifkan Google Maps Booking API
      • Buat akun layanan dengan peran editor ke project GCP Anda. Untuk mengetahui detail selengkapnya, lihat Penyiapan 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 menggunakan library ini. Jika tidak, Anda harus menangani pertukaran token secara manual seperti yang dijelaskan dalam Menggunakan OAuth 2.0 untuk Mengakses Google API.

Penyiapan 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 hal berikut:

  1. Akses konsol Google Cloud Platform.
  2. Akun Anda di Actions Center juga memiliki project Google Cloud yang terkait. Pilih project tersebut, jika belum dipilih.
  3. Klik Service Accounts di menu sebelah kiri.
  4. Klik Create Service Account.
  5. Masukkan nama untuk akun layanan, lalu klik Buat.
  6. Untuk Pilih peran, pilih Project > Editor.
  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, lalu klik Create.
  11. Setelah pasangan kunci publik/pribadi baru dibuat, download ke komputer Anda.

Menggunakan API

Real-time updates API mendukung dua jenis operasi: Update dan Delete. Menambahkan entitas 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 pembaruan dalam satu panggilan API. Sebaiknya gunakan pendekatan berbasis pemicu untuk mengirim pembaruan melalui RTU (yaitu, setelah perubahan data di sistem Anda memicu pembaruan real-time ke Google) daripada pendekatan berbasis frekuensi (yaitu, setiap X menit memindai sistem Anda untuk menemukan perubahan) jika memungkinkan.

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

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

Endpoint

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

  • UPDATE - /v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush
  • DELETE - /v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchDelete

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

ID Partner di Partner Portal

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

Update sandbox

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

Pembaruan produksi

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

Production DELETE

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

Mengupdate entity

Untuk memperbarui entity di inventaris, gunakan endpoint update dalam permintaan POST HTTP. Setiap permintaan POST harus menyertakan parameter 10000001 beserta 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 sudah tidak berlaku atau sudah tidak relevan.

Memperbarui payload permintaan

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

  {
    "records": [
      {
        "proto_record":"ServiceData PROTO",
        "generation_timestamp":"UPDATE_TIMESTAMP"
      }
    ]
  }
  • ServiceData PROTO: Terjemahan proto atau JSON dari entitas ServiceData yang Anda perbarui.
  • UPDATE_TIMESTAMP: Pastikan untuk menyertakan stempel waktu saat entity dibuat di sistem backend Anda. Jika tidak disertakan, kolom ini akan ditetapkan 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 melebihi 5 MB.
  • Hapus spasi kosong untuk mengurangi ukuran.
  • Dapat ada hingga 1.000 pembaruan dalam permintaan batchPush.

Contoh

Memperbarui PWT

Misalnya, Anda perlu segera memperbarui perkiraan waktu tiba layanan pengiriman dari 30-60 menjadi 60-90 menit. Pembaruan Anda harus berisi JSON untuk seluruh entitas Layanan.

Pertimbangkan entitas 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"
	}
}

Update real-time Anda melalui HTTP POST adalah sebagai berikut (isi permintaan dicetak dengan baik 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 entity restoran dalam satu panggilan API, sertakan beberapa data di kolom proto_record 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"
  }]
}

Menghapus entity

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

Catatan: Pastikan feed data harian Anda juga berisi perubahan apa pun 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 update real-time untuk menambahkan entitas baru karena dapat menyebabkan inkonsistensi data. Sebagai gantinya, gunakan feed batch.

Kode validasi & 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 lulus dan entitas 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. Data tersebut hanya dilaporkan di dasbor Pelaporan RTU di Action Center.

Catatan: Kode respons 200 tidak berarti 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 menanganinya, coba lakukan lagi panggilan pada beberapa interval yang ditingkatkan secara bertahap hingga berhasil. Jika Anda sering menghabiskan kuota, pertimbangkan untuk menyertakan lebih banyak entitas dalam satu permintaan API. Anda dapat menyertakan hingga 1.000 entity dalam satu panggilan API.

Update waktu pemrosesan real-time

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