Binaryzando Todos os erros →

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.

telegram.error.RetryAfter: Flood control exceeded. Retry in 32 seconds {"ok":false,"error_code":429,"description":"Too Many Requests: retry after 32"}

Os limites, na prática

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