Limity wykorzystania

Interfejs Google Chat API jest usługą współdzieloną, dlatego stosujemy limity i ograniczenia, aby zapewnić sprawiedliwe korzystanie z niego przez wszystkich użytkowników i chronić ogólną wydajność Google Workspace.

Jeśli przekroczysz limit, otrzymasz odpowiedź z kodem stanu HTTP 429: Too many requests. Dodatkowe sprawdzanie limitu liczby żądań w backendzie Google Chat może też generować tę samą odpowiedź z błędem. Jeśli wystąpi ten błąd, użyj algorytmu wykładniczego wycofywania i spróbuj ponownie później. Dopóki nie przekraczasz limitów na minutę wymienionych w tabelach poniżej, nie ma ograniczeń co do liczby żądań, które możesz wysłać dziennie.

Do metod interfejsu Chat API mogą mieć zastosowanie różne typy limitów: na projekt, na pokój i na użytkownika.

Limity na projekt

Limity na projekt ograniczają liczbę zapytań w projekcie Google Cloud i dlatego dotyczą pojedynczej aplikacji do czatu, która wywołuje określone metody interfejsu Chat API dla każdego limitu.

W tabeli poniżej znajdziesz szczegółowe informacje o limitach zapytań na projekt. Te limity znajdziesz też na stronie Limity.

Limit na projekt

Metody interfejsu Chat API

Limit (na 60 sekund)

Liczba zapisów wiadomości na minutę

spaces.messages.create

spaces.messages.patch

spaces.messages.delete

3000

Liczba odczytów wiadomości na minutę

spaces.messages.get

spaces.messages.list

3000

Liczba zapisów członkostwa na minutę

spaces.members.create

spaces.members.delete

300

Liczba odczytów członkostwa na minutę

spaces.members.get

spaces.members.list

3000

Liczba zapisów pokoju na minutę

spaces.setup

spaces.create

spaces.patch

spaces.delete

60

Liczba odczytów pokoju na minutę

spaces.get

spaces.list

spaces.findDirectMessage

3000

Liczba zapisów załączników na minutę

media.upload

600

Liczba odczytów załączników na minutę

spaces.messages.attachments.get

media.download

3000

Liczba zapisów reakcji na minutę

spaces.messages.reactions.create

spaces.messages.reactions.delete

600

Liczba odczytów reakcji na minutę

spaces.messages.reactions.list

3000

Liczba zapisów niestandardowych emoji na minutę

customEmojis.create

customEmojis.delete

600

Liczba odczytów niestandardowych emoji na minutę

customEmojis.get

customEmojis.list

3000

Liczba zapisów sekcji na minutę

users.sections.create

users.sections.delete

users.sections.patch

users.sections.position

users.sections.items.move

600

Liczba odczytów sekcji na minutę

users.sections.list

users.sections.items.list

3000

Liczba odczytów dostępności na minutę

users.availability.get

3000

Liczba zapisów dostępności na minutę

users.availability.update

users.availability.markAsActive

users.availability.markAsAway

users.availability.markAsDoNotDisturb

3000

Limity na pokój

Limity na pokój ograniczają liczbę zapytań w danym pokoju i są współdzielone przez wszystkie aplikacje do czatu działające w tym pokoju, które wywołują wymienione metody interfejsu Chat API dla każdego limitu.

W tabeli poniżej znajdziesz szczegółowe informacje o limitach zapytań na pokój:

Limit na pokój

Metody interfejsu Chat API

Limit (na sekundę)

Liczba odczytów na sekundę

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

Liczba zapisów na sekundę

media.upload

spaces.delete

spaces.patch

spaces.messages.create (w przypadku webhooków przychodzących obowiązują dodatkowe limity)

spaces.messages.delete

spaces.messages.patch

spaces.messages.reactions.delete

1

Liczba zapisów tworzenia reakcji na sekundę

spaces.messages.reactions.create

5

Liczba zapisów wiadomości na sekundę podczas importowania danych do Google Chat

spaces.messages.create

10

Limity na użytkownika

Limity na użytkownika ograniczają liczbę zapytań użytkownika Google Chat. Zapytania dotyczą wszystkich aplikacji do czatu, które wywołują metodę interfejsu Chat API w imieniu użytkownika (przy użyciu uwierzytelniania użytkownika).

W tabeli poniżej znajdziesz szczegółowe informacje o limitach zapytań na użytkownika:

Limit na użytkownika

Metody interfejsu Chat API

Limit (na sekundę)

Liczba zapisów niestandardowych emoji na sekundę

customEmojis.create

customEmojis.delete

1

Liczba odczytów niestandardowych emoji na sekundę

customEmojis.get

customEmojis.list

15

Liczba zapisów na sekundę

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

Liczba odczytów na sekundę

users.sections.list

users.sections.items.list

users.availability.get

15

Dodatkowe limity wykorzystania

Duży ruch w interfejsie API kierowany do tego samego pokoju może spowodować przekroczenie dodatkowych limitów wewnętrznych, które nie są widoczne na stronie Limity.

Rozwiązywanie błędów związanych z limitami czasowymi

W przypadku wszystkich błędów związanych z czasem (maksymalnie N żądań na X minut) zalecamy aby kod przechwytywał wyjątek i używał skróconego wykładniczego wycofywania, aby urządzenia nie generowały nadmiernego obciążenia.

Wykładnicze wycofywanie to standardowa strategia obsługi błędów w aplikacjach sieciowych. Algorytm wykładniczego wycofywania ponawia żądania, używając wykładniczo rosnących czasów oczekiwania między żądaniami, aż do maksymalnego czasu wycofywania. Jeśli żądania nadal się nie powiodą, ważne jest, aby opóźnienia między żądaniami z czasem się zwiększały, aż żądanie się powiedzie.

Przykładowy algorytm

Algorytm wykładniczego wycofywania ponawia żądania wykładniczo, zwiększając czas oczekiwania między ponowieniami aż do maksymalnego czasu wycofywania. Na przykład:

  1. Wyślij żądanie do interfejsu Google Chat API.
  2. Jeśli żądanie się nie powiedzie, odczekaj 1 + random_number_milliseconds i ponów żądanie.
  3. Jeśli żądanie się nie powiedzie, odczekaj 2 + random_number_milliseconds i ponów żądanie.
  4. Jeśli żądanie się nie powiedzie, odczekaj 4 + random_number_milliseconds i ponów żądanie.
  5. I tak dalej, aż do czasu maximum_backoff.
  6. Kontynuuj oczekiwanie i ponawianie prób aż do maksymalnej liczby ponowień, ale nie zwiększaj czasu oczekiwania między ponowieniami.

gdzie:

  • Czas oczekiwania to min(((2^n)+random_number_milliseconds), maximum_backoff), a n jest zwiększane o 1 w każdej iteracji (żądaniu).
  • random_number_milliseconds to losowa liczba milisekund mniejsza lub równa 1000. Pomaga to uniknąć sytuacji, w których wiele klientów jest zsynchronizowanych przez jakąś sytuację i wszyscy ponawiają próbę jednocześnie, wysyłając żądania w zsynchronizowanych falach. Wartość random_number_milliseconds jest ponownie obliczana po każdym żądaniu ponowienia.
  • maximum_backoff to zwykle 32 lub 64 sekundy. Odpowiednia wartość zależy od przypadku użycia.

Klient może kontynuować ponawianie prób po osiągnięciu czasu maximum_backoff. Ponowienia po tym momencie nie muszą już zwiększać czasu wycofywania. Jeśli na przykład klient używa czasu maximum_backoff wynoszącego 64 sekundy, po osiągnięciu tej wartości może ponawiać próbę co 64 sekundy. W pewnym momencie, należy uniemożliwić klientom ponawianie prób w nieskończoność.

Czas oczekiwania między ponowieniami i liczba ponowień zależą od przypadku użycia i warunków sieciowych.

Wysyłanie prośby o zwiększenie limitu na projekt

W zależności od wykorzystania zasobów w projekcie możesz poprosić o zmianę limitu. Wywołania interfejsu API przez konto usługi są traktowane jako korzystanie z jednego konta. Wysłanie wniosku o zmianę limitu nie gwarantuje jego zatwierdzenia. Zatwierdzenie próśb o zmianę limitu, które znacznie zwiększyłyby jego wartość, może potrwać dłużej.

Nie wszystkie projekty mają te same limity. W miarę upływu czasu i zwiększania wykorzystania Google Cloud może być konieczne zwiększenie wartości limitu. Jeśli przewidujesz znaczny wzrost wykorzystania, możesz aktywnie poprosić o zmianę limitu na stronie Limity i ograniczenia systemu w konsoli Google Cloud.

Więcej informacji znajdziesz w tych materiałach: