NOUVEAU 📢 Offre de lancement limitée : jusqu'à 70 % de remise sur votre premier mois, pour tous les jeux !Voir les offres

Corriger l’erreur 409 Conflict d’un bot Telegram

Hébergement de bots DiscordUpdated Oct 29, 20268 min read

Un bot Telegram reçoit 409 Conflict pour l’une de ces deux raisons : une autre copie du bot demande des messages à Telegram avec le même token, ou un webhook est défini sur le bot alors que votre code utilise le polling. Telegram n’autorise qu’un seul des deux à recevoir les messages du bot. Lisez la fin de la ligne dans la Console pour savoir lequel, puis :

  1. terminated by other getUpdates request : arrêtez l’autre copie de votre bot (sur votre PC, chez votre ancien hébergeur ou sur un autre serveur), puis redémarrez le bot ici.
  2. Vous ne trouvez pas l’autre copie ? Dans @BotFather, envoyez /mybots, choisissez votre bot, API Token, révoquez-le, puis collez le nouveau token sur la page Bot, volet Telegram.
  3. can't use getUpdates method while webhook is active : cliquez sur Retirer le webhook dans le bandeau (ou sur Retirer le webhook dans le volet Telegram), puis redémarrez le bot.

Sur un bot Telegram PlayNHost, le panel lit la console pour vous et affiche au-dessus un bandeau avec la cause et le bouton qui la règle. La pastille de l’Aperçu indique Ne reçoit pas de messages.

409 : une autre copie de votre bot tourne

Le texte de Telegram, dans l’erreur de votre bibliothèque :

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

Voici à quoi cela ressemble avec chaque bibliothèque :

BibliothèqueLigne de la console
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 confie les messages à une seule copie à la fois, si bien que les deux copies se chassent l’une l’autre. python-telegram-bot, aiogram et pyTelegramBotAPI continuent de réessayer : votre bot semble tourner ici, mais il rate des messages ou ne répond à rien. grammY et Telegraf s’arrêtent avec l’erreur.

Le bandeau indique Votre bot tourne aussi ailleurs. Pour corriger :

  1. Trouvez l’autre copie et arrêtez-la : une fenêtre de terminal ou un script sur votre PC, l’ancien hébergeur que vous avez quitté (une tâche toujours active, un déploiement ou un service), ou un second serveur qui fait tourner le même code.
  2. Appuyez sur Redémarrer ici et surveillez la Console. L’erreur cesse quand votre bot est la seule copie.
  3. Si vous ne trouvez pas l’autre copie, créez un nouveau token pour que l’ancien ne fonctionne plus nulle part : dans @BotFather, envoyez /mybots, choisissez votre bot, API Token, puis Revoke current token.
  4. Sur la page Bot, volet Telegram, cliquez sur Remplacer le token, collez le nouveau token et cliquez sur Enregistrer le token. Le panel indique Le bot utilise toujours l’ancien token jusqu’à son redémarrage. : cliquez sur Redémarrer maintenant.

Le bouton Remplacer le token du bandeau ouvre le même volet. L’ancien token cesse de fonctionner aussitôt : une copie oubliée ne peut donc plus lire les messages de votre bot.

La Console d’un bot Telegram avec le bandeau Votre bot tourne aussi ailleurs au-dessus d’une ligne Conflict: terminated by other getUpdates request, et un bouton Remplacer le token.

409 : un webhook est défini alors que votre bot fait du polling

Le texte de Telegram :

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

Un webhook dit à Telegram d’envoyer les messages de votre bot à une adresse web. Tant qu’il y en a un, le code qui fait du polling (qui demande à Telegram les nouveaux messages) reçoit cette erreur. Il reste souvent d’un ancien hébergeur qui faisait tourner le bot avec un webhook, ou d’un code qui a un jour appelé setWebhook. Sur PlayNHost, votre bot utilise le polling : les webhooks ont besoin d’une adresse HTTPS publique, que ces offres n’incluent pas encore.

Le bandeau indique Un webhook est défini sur votre bot. Le volet Telegram de la page Bot affiche aussi Un webhook est défini sur ce bot avec l’adresse vers laquelle il pointe. Pour corriger :

Le volet Telegram quand un webhook est défini : l’avertissement Un webhook est défini sur ce bot indique old-host.example.com et propose un bouton Retirer le webhook.

  1. Cliquez sur Retirer le webhook dans le bandeau, ou sur Retirer le webhook dans le volet Telegram.
  2. Confirmez dans Retirer le webhook ? avec Retirer le webhook. Telegram cesse d’envoyer les messages de votre bot à cette adresse et garde ceux qui attendent : votre bot les récupère ici.
  3. Redémarrez le bot.

Si une copie de votre bot tourne encore ailleurs sur ce webhook, elle ne reçoit plus de messages quand vous le retirez. Arrêtez aussi cette copie, sinon elle peut redéfinir le webhook en redémarrant.

python-telegram-bot (run_polling()) et grammY (bot.start()) retirent eux-mêmes un webhook au démarrage du polling. aiogram ne le fait pas : il continue de réessayer sur le 409. Utilisez le bouton, ou ajoutez une ligne avant le polling :

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

Votre code essaie de définir un webhook

Si votre code appelle setWebhook, Telegram le refuse avec Bad Request: bad webhook: ... et le bandeau indique Votre code essaie de définir un webhook. Remplacez le démarrage par webhook par l’appel de polling de votre bibliothèque : run_polling() dans python-telegram-bot, start_polling() dans aiogram, bot.start() dans grammY ou launch() dans Telegraf. Le bouton Ouvrir Files du bandeau vous amène à votre code. Exemples : Comment déplacer un bot Telegram vers PlayNHost.

401 Unauthorized : le token est refusé

Telegram répond 401 Unauthorized quand le token a été révoqué dans @BotFather ou mal copié. Exemples :

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

Nos bots de départ affichent à la place une ligne simple :

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

Le bandeau indique Telegram n’a pas accepté le token de votre bot et le volet Telegram affiche Telegram ne l’a pas accepté. Dans @BotFather, envoyez /mybots, choisissez votre bot, puis API Token ; dans le volet, cliquez sur Remplacer le token, collez-le, cliquez sur Enregistrer le token, puis sur Redémarrer maintenant. aiogram et pyTelegramBotAPI continuent de réessayer avec un token refusé : sans le bandeau, le bot semblerait tourner.

Un token que Telegram refuse n’est jamais enregistré. Si vous collez un token Discord, le panel indique C’est un token de bot Discord. : copiez celui que @BotFather vous a donné.

429 Too Many Requests : contrôle du débit

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

Votre bot a envoyé plus de messages que Telegram n’en autorise en peu de temps, et Telegram lui demande d’attendre le nombre de secondes indiqué. Les bibliothèques attendent puis continuent : cela n’arrête donc jamais le bot. Le bandeau Telegram ralentit votre bot est un simple avertissement. Envoyez moins de messages à la fois : Telegram demande environ un message par seconde dans une discussion et 20 par minute dans un groupe.

Votre bot n’a pas pu joindre Telegram

Ce bandeau signifie qu’une requête de votre bot vers api.telegram.org a échoué. La plupart des bibliothèques réessaient d’elles-mêmes : une seule ligne n’est donc pas inquiétante. Si votre bot reste muet, redémarrez-le ; si cela se répète, ouvrez un ticket de support.

Bon à savoir

Votre bot est hébergé ailleurs ? Transférez-le chez nous

NOS DERNIERS ARTICLES