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 żądań na backendzie usługi Chat może też generować tę samą odpowiedź o błędzie. Jeśli wystąpi ten błąd, użyj algorytmu wzrastającego czasu do ponowienia i spróbuj ponownie później. Jeśli nie przekroczysz limitów na minutę podanych w tabelach poniżej, możesz wysyłać nieograniczoną liczbę żądań dziennie.

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

Limity projektu

Limity dotyczące poszczególnych projektów ograniczają liczbę zapytań w projekcie Google Cloud, a tym samym dotyczą jednej aplikacji w Google Chat, która wywołuje określone metody interfejsu Chat API dla każdego limitu.

W tabeli poniżej znajdziesz limity zapytań dla poszczególnych projektów. Te limity znajdziesz też na stronie Limity.

Limit na projekt

Metody interfejsu Chat API

Limit (na 60 sekund)

Zapisywanie wiadomości na minutę

spaces.messages.create

spaces.messages.patch

spaces.messages.delete

3000

Liczba odczytanych wiadomości na minutę

spaces.messages.get

spaces.messages.list

3000

Zapisy dotyczące członkostwa na minutę

spaces.members.create

spaces.members.delete

300

Liczba odczytów w ramach subskrypcji na minutę

spaces.members.get

spaces.members.list

3000

Zapisy w przestrzeni na minutę

spaces.setup

spaces.create

spaces.patch

spaces.delete

60

Odczyty przestrzeni na minutę

spaces.get

spaces.list

spaces.findDirectMessage

3000

Zapisy załączników na minutę

media.upload

600

Odczyty 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

Zapisy CustomEmoji na minutę

customEmojis.create

customEmojis.delete

600

Odczyty niestandardowych emoji na minutę

customEmojis.get

customEmojis.list

3000

Zapisy sekcji na minutę

users.sections.create

users.sections.delete

users.sections.patch

users.sections.position

users.sections.items.move

600

Odczyty sekcji na minutę

users.sections.list

users.sections.items.list

3000

Limity dotyczące poszczególnych przestrzeni

Limity dotyczące poszczególnych pokoi ograniczają częstotliwość zapytań w danym pokoju i są współdzielone przez wszystkie aplikacje w Google Chat działające w tym pokoju, które wywołują wymienione metody interfejsu Chat API dla każdego limitu.

Tabela poniżej zawiera szczegółowe informacje o limitach zapytań w przestrzeni:

Limit na przestrzeń

Metody interfejsu Chat API

Limit (na sekundę)

Odczyty 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

Zapisy na sekundę

media.upload

spaces.delete

spaces.patch

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

spaces.messages.delete

spaces.messages.patch

spaces.messages.reactions.delete

1

Operacje zapisu 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 obsługi 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ę)

Zapisy niestandardowych emoji na sekundę

customEmojis.create

customEmojis.delete

1

Odczyty niestandardowych emoji na sekundę

customEmojis.get

customEmojis.list

15

Zapisy sekcji na sekundę

users.sections.create

users.sections.delete

users.sections.patch

users.sections.position

users.sections.items.move

1

Odczyty sekcji na sekundę

users.sections.list

users.sections.items.list

15

Dodatkowe limity wykorzystania

Duży ruch w interfejsie API kierowany na tę samą przestrzeń 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 wzrastającego czasu do ponowienia, aby urządzenia nie generowały nadmiernego obciążenia.

Wzrastający czas do ponowienia to standardowa strategia obsługi błędów w aplikacjach sieciowych. Algorytm wzrastającego czasu do ponowienia ponawia żądania z wykładniczo rosnącym czasem oczekiwania między żądaniami, aż do maksymalnego czasu do ponowienia. Jeśli żądania nadal są odrzucane, ważne jest, aby opóźnienia między żądaniami z czasem się zwiększały, aż żądanie zostanie zaakceptowane.

Przykładowy algorytm

Algorytm wzrastającego czasu do ponowienia ponawia żądania wykładniczo, zwiększając czas oczekiwania między ponownymi próbami aż do maksymalnego czasu do ponowienia. Na przykład:

  1. Wysyłanie żądania do interfejsu Google Chat API.
  2. Jeśli prośba się nie powiedzie, poczekaj 1 + random_number_milliseconds i spróbuj ponownie.
  3. Jeśli żądanie się nie powiedzie, poczekaj 2 + random_number_milliseconds i spróbuj ponownie.
  4. Jeśli prośba się nie powiedzie, poczekaj 4 + random_number_milliseconds i spróbuj ponownie.
  5. I tak dalej, aż do maximum_backoff razy.
  6. Kontynuuj oczekiwanie i ponawianie prób do osiągnięcia maksymalnej liczby prób, ale nie wydłużaj czasu oczekiwania między próbami.

gdzie:

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

Klient może ponawiać próby po osiągnięciu czasu maximum_backoff. Ponowne próby po tym momencie nie muszą wydłużać czasu do ponowienia. Jeśli na przykład klient używa czasu maximum_backoff 64 sekund, 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 ponownymi próbami i liczba ponownych prób zależą od przypadku użycia i warunków sieciowych.

Prośba o zwiększenie limitu dla projektu

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

Nie wszystkie projekty mają takie same limity. W miarę upływu czasu i zwiększania wykorzystania Google Cloud wartości limitów mogą wymagać zwiększenia. Jeśli spodziewasz się znacznego wzrostu wykorzystania, możesz z wyprzedzeniem poprosić o zmianę limitów na stronie Limity w konsoli Google Cloud.

Więcej informacji znajdziesz w tych materiałach: