Telegram le permite crear chatbots dentro del Messenger para múltiples propósitos, pero algunos desarrolladores informan que reciben un error de límite de inundación al enviar solicitudes.
El límite de inundación de Telegram es la cantidad máxima de solicitudes que su bot puede enviar a usuarios o grupos/canales. Si excede esto, obtendrá el código “429”, “reintentar después” o “floodwaiterror”. Para evitar esto, utilice el objeto de entidad del receptor en lugar de la cadena de nombre de usuario o cambie el intervalo de envío de solicitudes y distribúyalas durante un período de tiempo más largo.
En este artículo detallado, exploraremos cuál es el límite de inundación de Telegram y cómo puede evitar recibir el error al enviar solicitudes o mensajes a los usuarios.
¿Qué significa la espera de inundación de Telegram?
El límite de inundación de Telegram es el mecanismo que ha establecido la plataforma para evitar el spam y el abuso de su servicio. Para ello, ha fijado el número máximo de mensajes o solicitudes que un chatbot puede realizar a la API de Telegram en un periodo de tiempo concreto.
Si bien Telegram no especifica el límite exacto para enviar mensajes/solicitudes, esta es la regla general:
La API del bot de Telegram te permite enviar solo 10 solicitudes de código por cuenta. No puedes enviar 1 mensaje por segundo a un solo chat. Telegram no te permitirá enviar más de 30 mensajes por segundo a múltiples usuarios y más de 20 solicitudes a grupos o canales de Telegram. Solo puedes crear 50 grupos o canales por cuenta.
Si excede estos límites, obtendrá el código de estado 429 (por realizar demasiadas solicitudes), error de espera de inundación o el error “reintentar después”. El mensaje puede verse así:
Se invocó el error Floodwait al enviar un mensaje; forzando un intervalo de espera de 70792 segundos para….
Para manejar esta situación, tendrá que esperar la cantidad de tiempo especificada (hasta que se restablezca el límite) y luego intentar enviar solicitudes más tarde.
NOTA: La duración exacta del límite puede variar, según el uso y la carga del servidor.
¿Cómo evito recibir el error de límite de espera de inundación de Telegram?
Para evitar recibir el error de límite de espera de inundación de Telegram, aquí hay 5 soluciones alternativas probadas que han ayudado a muchos usuarios a lidiar con este problema.
Calcule la tasa de espera de inundaciones
La primera solución para evitar recibir el límite de espera de inundación de Telegram o el mensaje de error 429 es calcular su tasa.
Realice N número de llamadas a métodos para recibir un FLOOD_WAIT_X. Esto te dará:
Tasa de espera de inundación: X+Tiempo total para realizar llamadas a métodos
Ahora, use la función de suspensión para realizar N llamadas a métodos dentro de los segundos de tasa de inundación para evitar que la inundación espere.
Utilice el objeto de entidad de la parte receptora
Algunos usuarios informan que en lugar de usar el nombre del receptor como una cadena, usar su objeto de entidad como parámetro también les ayudó a evitar alcanzar el límite de espera de inundación en Telegram. Aquí está el código que puedes usar en la API del bot:
con TelegramClientSync(StringSession(session_id), api_id, api_hash) como cliente:
bot_entity = client.get_input_entity(peer=”mibot”)
resultados = esperar cliente.send_message(entidad=bot_entidad, mensaje=mensaje)
Luego, intente enviar solicitudes a usuarios o grupos y vea si esta solución ayuda.
Realizar pruebas en el bot
Si está en la fase de prueba de su bot de Telegram, puede realizar las siguientes tres pruebas para reducir las posibilidades de recibir errores FLOOD_WAIT.
En lugar del servidor de producción, conéctese al servidor de prueba (solo si es posible). Para conectarse al servidor de prueba, cree cuentas de prueba con los números de teléfono 99966XYYYY y utilícelas (X e Y tienen de 0 a 9 dígitos). En el servidor de prueba, utilice el número de teléfono que utilizó para crear el ID/Hash de API para conectarse con el servidor.
Cambiar el intervalo de envío de solicitudes
Si envía demasiados mensajes o notificaciones a diferentes usuarios, terminará recibiendo errores de límite de Telegram Flood.
Por lo tanto, es recomendable cambiar los intervalos de envío de solicitudes a un período de tiempo amplio de 8 a 12 horas y verificar la solución.
Utilice el complemento de reintento automático
Una vez que alcance el límite de inundación en Telegram, su única opción es esperar el tiempo especificado y luego volver a intentarlo. Para ello, puede utilizar el siguiente código del complemento de reintento automático en la API del bot para evitar volver a recibir el error y enviar mensajes a los usuarios.
función pausa(segundos: número) {
devolver nueva Promesa(resolver => setTimeout(resolver, 1000 * segundos))
}
tipo AutoRetryTransformer = (…argumentos: cualquiera[]) => cualquiera
/**
* Especificar opciones al crear un transformador de reintento automático
* función.
*/
interfaz de exportación AutoRetryOptions {
maxDelaySeconds: infinito
maxRetryAttempts: Infinito
reintentarOnInternalServerErrors: booleano
}
función de exportación reintento automático (
¿opciones?: Parcial
): AutoRetryTransformer {
const maxDelay = opciones?.maxDelaySeconds ?? 3600
const maxRetries = opciones?.maxRetryAttempts ?? 3
const retryOnInternalServerErrors =
¿opciones?.retryOnInternalServerErrors ?? FALSO
devolver asíncrono (anterior, método, carga útil, señal) => {
dejar intentos restantes = maxRetries
let result = await prev(método, carga útil, señal)
while (!resultado.ok && intentos restantes– > 0) {
dejar reintentar = falso
si (
tipo de resultado.parámetros?.retry_after === 'número' &&
resultado.parameters.retry_after <= maxDelay
) {
esperar pausa (resultado.parametros.retry_after)
reintentar = verdadero
} más si (
resultado.código_error >= 500 &&
reintentarOnInternalServerErrors
) {
reintentar = verdadero
}
si (!retry) devuelve resultado
else resultado = esperar anterior (método, carga útil, señal)
}
resultado de retorno
}
}
NOTA: Es posible que necesite usar una cola o configurar el complemento de manera que nunca le lleve mucho tiempo ejecutar eficazmente el bot en webhooks.
Conclusión
En este artículo, exploramos el límite de inundación de Telegram y explicamos algunos métodos para evitar errores al enviar mensajes o solicitudes a usuarios y grupos.
Con suerte, ahora puedes garantizar una experiencia más fluida con tus bots en Telegram.