Batas penggunaan

Karena Google Chat API adalah layanan bersama, kami menerapkan kuota dan batasan untuk memastikan bahwa layanan ini digunakan secara adil oleh semua pengguna dan untuk melindungi performa keseluruhan Google Workspace.

Jika Anda melebihi kuota, Anda akan menerima respons kode status HTTP 429: Too many requests. Pemeriksaan batas frekuensi tambahan di backend Chat juga dapat menghasilkan respons error yang sama. Jika error ini terjadi, Anda harus menggunakan algoritma backoff eksponensial dan mencoba lagi nanti. Selama Anda tetap berada dalam kuota per menit yang tercantum dalam tabel berikut, tidak ada batasan jumlah permintaan yang dapat Anda buat per hari.

Beberapa jenis kuota dapat berlaku untuk metode Chat API: kuota per project, per ruang, dan per pengguna.

Kuota per project

Kuota per project membatasi frekuensi kueri untuk project Google Cloud, dan dengan demikian berlaku untuk satu aplikasi Chat yang memanggil metode Chat API yang ditentukan untuk setiap kuota.

Tabel berikut menjelaskan batas kueri per project. Anda juga dapat menemukan batas ini di halaman Kuota.

Kuota per project

Metode Chat API

Batas (per 60 detik)

Penulisan pesan per menit

spaces.messages.create

spaces.messages.patch

spaces.messages.delete

3000

Pembacaan pesan per menit

spaces.messages.get

spaces.messages.list

3000

Penulisan keanggotaan per menit

spaces.members.create

spaces.members.delete

300

Pembacaan keanggotaan per menit

spaces.members.get

spaces.members.list

3000

Penulisan ruang per menit

spaces.setup

spaces.create

spaces.patch

spaces.delete

60

Pembacaan ruang per menit

spaces.get

spaces.list

spaces.findDirectMessage

3000

Penulisan lampiran per menit

media.upload

600

Pembacaan lampiran per menit

spaces.messages.attachments.get

media.download

3000

Penulisan reaksi per menit

spaces.messages.reactions.create

spaces.messages.reactions.delete

600

Pembacaan reaksi per menit

spaces.messages.reactions.list

3000

Penulisan CustomEmoji per menit

customEmojis.create

customEmojis.delete

600

Pembacaan CustomEmoji per menit

customEmojis.get

customEmojis.list

3000

Penulisan bagian per menit

users.sections.create

users.sections.delete

users.sections.patch

users.sections.position

users.sections.items.move

600

Pembacaan bagian per menit

users.sections.list

users.sections.items.list

3000

Pembacaan ketersediaan per menit

users.availability.get

3000

Penulisan ketersediaan per menit

users.availability.update

users.availability.markAsActive

users.availability.markAsAway

users.availability.markAsDoNotDisturb

3000

Kuota per ruang

Kuota per ruang membatasi frekuensi kueri di ruang tertentu dan dibagikan di antara semua aplikasi Chat yang bertindak di ruang tersebut yang memanggil metode Chat API yang tercantum untuk setiap kuota.

Tabel berikut menjelaskan batas kueri per ruang:

Kuota per ruang

Metode Chat API

Batas (per detik)

Pembacaan per detik

media.download

spaces.get

spaces.members.get

spaces.members.list

spaces.messages.get

spaces.messages.list

spaces.messages.attachments.get

spaces.messages.reactions.list

15

Penulisan per detik

media.upload

spaces.delete

spaces.patch

spaces.messages.create (Batas tambahan berlaku untuk webhook masuk)

spaces.messages.delete

spaces.messages.patch

spaces.messages.reactions.delete

1

Penulisan Buat Reaksi per detik

spaces.messages.reactions.create

5

Penulisan pesan per detik saat mengimpor data ke Google Chat

spaces.messages.create

10

Kuota per pengguna

Kuota per pengguna membatasi frekuensi kueri untuk pengguna Google Chat. Kueri berkaitan dengan semua aplikasi Chat yang memanggil metode Chat API atas nama pengguna (menggunakan autentikasi pengguna).

Tabel berikut menjelaskan batas kueri per pengguna:

Kuota per pengguna

Metode Chat API

Batas (per detik)

Penulisan CustomEmoji per detik

customEmojis.create

customEmojis.delete

1

Pembacaan CustomEmoji per detik

customEmojis.get

customEmojis.list

15

Penulisan per detik

users.sections.create

users.sections.delete

users.sections.patch

users.sections.position

users.sections.items.move

users.availability.update

users.availability.markAsActive

users.availability.markAsAway

users.availability.markAsDoNotDisturb

1

Pembacaan per detik

users.sections.list

users.sections.items.list

users.availability.get

15

Batas penggunaan tambahan

Traffic API yang tinggi yang menargetkan ruang yang sama dapat memicu batas internal tambahan yang tidak terlihat di halaman Kuota.

Mengatasi error kuota berbasis waktu

Untuk semua error berbasis waktu (maksimum N permintaan per X menit), sebaiknya kode Anda menangkap pengecualian dan menggunakan backoff eksponensial terpotong untuk memastikan perangkat Anda tidak menghasilkan beban yang berlebihan.

Backoff eksponensial adalah strategi penanganan error standar untuk aplikasi jaringan. Algoritma backoff eksponensial mencoba ulang permintaan menggunakan waktu tunggu yang meningkat secara eksponensial di antara permintaan, hingga waktu backoff maksimum. Jika permintaan masih gagal, penting untuk meningkatkan penundaan antara permintaan dari waktu ke waktu hingga permintaan berhasil.

Contoh algoritma

Algoritma backoff eksponensial mencoba ulang permintaan secara eksponensial, sehingga meningkatkan waktu tunggu antar-percobaan ulang hingga waktu backoff maksimum. Contoh:

  1. Buat permintaan ke Google Chat API.
  2. Jika permintaan gagal, tunggu 1 + random_number_milliseconds dan coba lagi permintaan.
  3. Jika permintaan gagal, tunggu 2 + random_number_milliseconds dan coba lagi permintaan.
  4. Jika permintaan gagal, tunggu 4 + random_number_milliseconds dan coba lagi permintaan.
  5. Dan seterusnya, hingga waktu maximum_backoff.
  6. Lanjutkan menunggu dan mencoba ulang hingga jumlah maksimum percobaan ulang, tetapi jangan tambah waktu tunggu antar-percobaan ulang.

dengan:

  • Waktu tunggu adalah min(((2^n)+random_number_milliseconds), maximum_backoff), dengan n bertambah 1 untuk setiap iterasi (permintaan).
  • random_number_milliseconds adalah bilangan acak milidetik yang kurang dari atau sama dengan 1.000. Hal ini membantu menghindari kasus saat banyak klien disinkronkan oleh situasi tertentu dan semua mencoba lagi secara bersamaan, sehingga mengirimkan permintaan dalam gelombang yang disinkronkan. Nilai random_number_milliseconds dihitung ulang setelah setiap permintaan coba lagi.
  • maximum_backoff biasanya 32 atau 64 detik. Nilai yang sesuai bergantung pada kasus penggunaan.

Klien dapat terus mencoba lagi setelah mencapai waktu maximum_backoff. Percobaan ulang setelah tahap ini tidak perlu terus meningkatkan waktu backoff. Misalnya, jika klien menggunakan waktu maximum_backoff 64 detik, setelah mencapai nilai ini, klien dapat mencoba lagi setiap 64 detik. Pada suatu saat, klien harus dicegah untuk mencoba lagi tanpa batas.

Waktu tunggu antara percobaan ulang dan jumlah percobaan ulang bergantung pada kasus penggunaan dan kondisi jaringan Anda.

Meminta penambahan kuota per project

Bergantung pada penggunaan resource project Anda, Anda mungkin ingin meminta penyesuaian kuota. Panggilan API oleh akun layanan dianggap menggunakan satu akun. Mengajukan permohonan untuk penyesuaian kuota belum tentu disetujui. Permintaan penyesuaian kuota yang akan meningkatkan nilai kuota secara signifikan dapat memerlukan waktu lebih lama untuk disetujui.

Tidak semua project memiliki kuota yang sama. Seiring meningkatnya penggunaan Google Cloud dari waktu ke waktu, nilai kuota Anda mungkin perlu ditingkatkan. Jika Anda memperkirakan adanya peningkatan penggunaan yang signifikan di masa mendatang, Anda dapat secara proaktif meminta penyesuaian kuota dari halaman Kuota & Batas Sistem di konsol Google Cloud.

Untuk mempelajari lebih lanjut, lihat referensi berikut: