Ritmo e limites do Telegram
30 mensagens por segundo, 20 por minuto num grupo, e o 429 que bloqueia por minutos.
O Telegram corta o bot que envia rápido demais, e o corte não é uma mensagem perdida: é um 429 com retry_after que pode passar de um minuto, e nesse intervalo o bot não responde ninguém.
| Limite | Aproximado | O que estoura |
|---|---|---|
| mensagens no total | ~30 por segundo | um aviso para todos os assinantes num laço |
| num mesmo grupo | ~20 por minuto | um bot que responde toda mensagem de um grupo ativo |
| num mesmo chat privado | ~1 por segundo | uma resposta dividida em vinte partes |
Tg.limitar segura o ritmo antes de enviar — esperar alguns milissegundos custa menos que ser bloqueado por minutos:
dataforge
adopt Arcane.Telegram as Tg
lim := Tg.limitar(50, 18) // até 50 por segundo, e 18 por minuto por chat
inicio := time()
cycle i in range(10):
lim.esperar(1001)
decorrido := time() - inicio
assert decorrido bigger_eq 0.15 // dez envios a 50/s: ao menos 180 msAviso para todos os assinantes#
O caso que mais estoura é o broadcast: mil assinantes num laço sem pausa. Com o limitador, o laço leva o tempo que o Telegram aceita — e numa fila, ele não segura o tratador que disparou o aviso.
dataforge
adopt Arcane.Telegram as Tg
app := Tg.app("123456:TESTE-exemplo")
assinantes := [1001, 1002, 1003]
lim := Tg.limitar(25, 18)
action avisar_todos(texto):
cycle chat in assinantes:
lim.esperar(chat)
app.bot.enviar(chat, texto)
t := Tg.testar(app)
avisar_todos("Manutenção às 22h.")
assert t.quantas("sendMessage") is 3