Telegram 429: Too Many Requests no bot de sinais
O Telegram limita quantas mensagens um bot manda por segundo. Passou do limite, ele recusa e diz quanto tempo esperar — e a maioria dos códigos ignora justamente essa parte, que é a que resolve.
Os limites, na prática
- Cerca de 30 mensagens por segundo no total do bot;
- Cerca de 1 mensagem por segundo para a mesma conversa;
- Cerca de 20 mensagens por minuto em grupos.
Não são números contratuais — o Telegram ajusta conforme a carga. Trate como teto aproximado e fique confortavelmente abaixo.
Como resolver
Respeite o retry_after — ele vem na resposta
A própria recusa diz quantos segundos esperar. Repetir antes disso só aprofunda a punição:
import time, requests
def enviar(token, chat_id, texto, tentativas=5):
url = f'https://api.telegram.org/bot{token}/sendMessage'
for _ in range(tentativas):
r = requests.post(url, json={'chat_id': chat_id, 'text': texto})
if r.status_code != 429:
return r
espera = r.json()['parameters']['retry_after']
time.sleep(espera + 1)
return None
Enfileire os envios em vez de disparar em laço
A causa quase sempre é um for mandando mensagem para cada item sem
respirar. Uma fila com intervalo mínimo entre envios evita o problema em vez de
remediar:
ULTIMO = 0.0
def enviar_com_ritmo(*args, intervalo=1.1):
global ULTIMO
espera = intervalo - (time.time() - ULTIMO)
if espera > 0:
time.sleep(espera)
ULTIMO = time.time()
return enviar(*args)
Junte mensagens em vez de picotar
Cinco linhas em cinco mensagens gastam cinco vezes o orçamento de uma só. Acumule e mande um bloco — ainda por cima fica mais legível para quem recebe.
Não repita o que não vai melhorar
429 é temporário e vale nova tentativa. Já 400 (mensagem malformada) e 403 (o usuário bloqueou o bot) são definitivos: repetir gasta o seu limite à toa e atrapalha os envios que importam.
Antes de deixar o robó operar
Consertar o erro faz o robô rodar — não faz ele ganhar. O Binaryzando testa a sua estratégia no histórico real de velas antes de você arriscar dinheiro nela, e sela o resultado numa carta com código verificável — para o número não poder ser editado depois.
Testar minha estratégia