NUEVO 📢 Oferta de lanzamiento limitada: ¡hasta un 70% de descuento en tu primer mes, en todos los juegos!Ver planes

Solucionar el error 409 Conflict de un bot de Telegram

Hosting de bots de DiscordUpdated Oct 29, 20268 min read

Un bot de Telegram recibe 409 Conflict por una de dos razones: otra copia del bot le está pidiendo mensajes a Telegram con el mismo token, o hay un webhook configurado en el bot mientras tu código usa polling. Telegram deja que solo una de las dos cosas reciba los mensajes del bot. Lee el final de la línea en la Console para saber cuál es, y después:

  1. terminated by other getUpdates request: detén la otra copia de tu bot (en tu PC, en tu hosting anterior o en otro servidor) y reinicia el bot aquí.
  2. ¿No encuentras la otra copia? En @BotFather envía /mybots, elige tu bot, API Token, revócalo y pega el token nuevo en la página Bot, sección Telegram.
  3. can't use getUpdates method while webhook is active: haz clic en Quitar el webhook en el aviso (o en Quitar webhook en la sección Telegram) y reinicia el bot.

En un bot de Telegram de PlayNHost el panel lee la consola por ti y muestra encima un aviso con la causa y el botón que lo soluciona. La etiqueta del Resumen dice No recibe mensajes.

409: otra copia de tu bot se está ejecutando

El texto de Telegram, dentro del error de tu librería:

Conflict: terminated by other getUpdates request; make sure that only one bot instance is running

Así se ve con cada librería:

LibreríaLínea de la consola
python-telegram-bottelegram.error.Conflict: Conflict: terminated by other getUpdates request; ...
aiogram 3Failed to fetch updates - TelegramConflictError: Telegram server says - Conflict: terminated by other getUpdates request; ...
pyTelegramBotAPIA request to the Telegram API was unsuccessful. Error code: 409. Description: Conflict: terminated by other getUpdates request; ...
grammYGrammyError: Call to 'getUpdates' failed! (409: Conflict: terminated by other getUpdates request; ...)
TelegrafTelegramError: 409: Conflict: terminated by other getUpdates request; ...

Telegram entrega los mensajes a una sola copia a la vez, así que las dos copias se echan la una a la otra. python-telegram-bot, aiogram y pyTelegramBotAPI siguen reintentando: tu bot parece estar en marcha aquí, pero pierde mensajes o no responde nada. grammY y Telegraf se detienen con el error.

El aviso dice Tu bot también se está ejecutando en otro sitio. Para solucionarlo:

  1. Busca la otra copia y detenla: una ventana de terminal o un script en tu PC, el hosting anterior del que te mudaste (una tarea siempre activa, un despliegue o un servicio), o un segundo servidor que ejecuta el mismo código.
  2. Pulsa Reiniciar aquí y mira la Console. El error se detiene cuando tu bot es la única copia.
  3. Si no encuentras la otra copia, crea un token nuevo para que el anterior deje de funcionar en todas partes: en @BotFather envía /mybots, elige tu bot, API Token y después Revoke current token.
  4. En la página Bot, sección Telegram, haz clic en Reemplazar token, pega el token nuevo y haz clic en Guardar token. El panel dice El bot sigue usando el token anterior hasta que se reinicie.: haz clic en Reiniciar ahora.

El botón Reemplazar el token del aviso abre la misma sección. El token anterior deja de funcionar al instante, así que ninguna copia olvidada puede seguir leyendo los mensajes de tu bot.

La Console de un bot de Telegram con el aviso Tu bot también se está ejecutando en otro sitio sobre una línea Conflict: terminated by other getUpdates request, y un botón Reemplazar el token.

409: hay un webhook configurado mientras tu bot usa polling

El texto de Telegram:

Conflict: can't use getUpdates method while webhook is active; use deleteWebhook to delete the webhook first

Un webhook le dice a Telegram que envíe los mensajes de tu bot a una dirección web. Mientras haya uno configurado, el código que usa polling (que le pide a Telegram los mensajes nuevos) recibe este error. Suele quedar de un hosting anterior que ejecutaba el bot con un webhook, o de código que una vez llamó a setWebhook. En PlayNHost tu bot usa polling: los webhooks necesitan una dirección HTTPS pública, que estos planes todavía no incluyen.

El aviso dice Hay un webhook configurado en tu bot. La sección Telegram de la página Bot también muestra Hay un webhook configurado en este bot con la dirección a la que apunta. Para solucionarlo:

La sección Telegram cuando hay un webhook configurado: la advertencia Hay un webhook configurado en este bot indica old-host.example.com y tiene un botón Quitar webhook.

  1. Haz clic en Quitar el webhook en el aviso, o en Quitar webhook en la sección Telegram.
  2. Confirma en ¿Quitar el webhook? con Quitar webhook. Telegram deja de enviar los mensajes de tu bot a esa dirección y conserva los que están esperando, así que tu bot los recoge aquí.
  3. Reinicia el bot.

Si una copia de tu bot sigue ejecutándose en otro sitio con ese webhook, dejará de recibir mensajes cuando lo quites. Detén también esa copia, o puede volver a configurar el webhook cuando se reinicie.

python-telegram-bot (run_polling()) y grammY (bot.start()) quitan un webhook por sí solos cuando empieza el polling. aiogram no: sigue reintentando con el 409. Usa el botón, o añade una línea antes del polling:

await bot.delete_webhook()
await dp.start_polling(bot)

Tu código intenta configurar un webhook

Si tu código llama a setWebhook, Telegram lo rechaza con Bad Request: bad webhook: ... y el aviso dice Tu código intenta configurar un webhook. Cambia el inicio con webhook por la llamada de polling de tu librería: run_polling() en python-telegram-bot, start_polling() en aiogram, bot.start() en grammY o launch() en Telegraf. El botón Abrir Files del aviso te lleva a tu código. Ejemplos: Cómo mover un bot de Telegram a PlayNHost.

401 Unauthorized: el token se rechaza

Telegram responde 401 Unauthorized cuando el token se revocó en @BotFather o se copió mal. Ejemplos:

telegram.error.InvalidToken
TelegramUnauthorizedError: Telegram server says - Unauthorized
GrammyError: Call to 'getMe' failed! (401: Unauthorized)
TelegramError: 401: Unauthorized

Nuestros bots iniciales imprimen en su lugar una línea simple:

Telegram did not accept the bot token. Paste the current one from @BotFather on the Bot page, then restart.

El aviso dice Telegram no aceptó el token de tu bot y la sección Telegram muestra Telegram no lo aceptó. En @BotFather envía /mybots, elige tu bot y después API Token; en la sección haz clic en Reemplazar token, pégalo, haz clic en Guardar token y después en Reiniciar ahora. aiogram y pyTelegramBotAPI siguen reintentando con un token rechazado, así que sin el aviso el bot parecería estar en marcha.

Un token que Telegram rechaza nunca se guarda. Si pegas un token de Discord, el panel dice Ese es un token de bot de Discord.: copia el que te dio @BotFather.

429 Too Many Requests: control de flujo

Too Many Requests: retry after 22
telegram.error.RetryAfter: Flood control exceeded. Retry in 39.0 seconds

Tu bot envió más mensajes de los que Telegram permite en poco tiempo, y Telegram le pide que espere el número de segundos indicado. Las librerías esperan y siguen, así que esto nunca detiene el bot. El aviso Telegram está frenando a tu bot es solo una advertencia. Envía menos mensajes a la vez: Telegram pide como máximo un mensaje por segundo en un chat y 20 por minuto en un grupo.

Tu bot no pudo conectar con Telegram

Este aviso significa que falló una petición de tu bot a api.telegram.org. La mayoría de las librerías lo reintentan solas, así que una sola línea no es motivo de preocupación. Si tu bot sigue en silencio, reinícialo; si sigue pasando, abre un ticket de soporte.

Conviene saber

¿Ya tienes tu bot en otro proveedor? Tráelo con nosotros

NUESTROS ÚLTIMOS BLOGS