NOVO 📢 Oferta de lançamento limitada: até 70% de desconto no seu primeiro mês, em todos os jogos!Ver planos

Como corrigir o erro 409 Conflict do bot do Telegram

Hospedagem de bot do DiscordUpdated Oct 29, 20268 min read

Um bot do Telegram recebe 409 Conflict por um de dois motivos: outra cópia do bot está pedindo mensagens ao Telegram com o mesmo token, ou há um webhook configurado no bot enquanto o seu código usa polling. O Telegram deixa só um dos dois receber as mensagens do bot. Leia o fim da linha no Console para saber qual é, e depois:

  1. terminated by other getUpdates request: pare a outra cópia do seu bot (no seu PC, na sua hospedagem antiga ou em outro servidor) e depois reinicie o bot aqui.
  2. Não acha a outra cópia? No @BotFather, envie /mybots, escolha o seu bot, API Token, revogue-o e cole o novo token na página Bot, seção Telegram.
  3. can't use getUpdates method while webhook is active: clique em Remover o webhook no aviso (ou em Remover webhook na seção Telegram) e depois reinicie o bot.

Em um bot do Telegram na PlayNHost, o painel lê o console por você e mostra um aviso acima dele com a causa e o botão que corrige. O chip em Visão geral mostra Não está recebendo mensagens.

409: outra cópia do seu bot está rodando

O texto do Telegram, dentro do erro da sua biblioteca:

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

Como aparece em cada biblioteca:

BibliotecaLinha no 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; ...

O Telegram entrega as mensagens a uma cópia por vez, então as duas cópias ficam se tirando do caminho. python-telegram-bot, aiogram e pyTelegramBotAPI continuam tentando: o seu bot parece estar rodando aqui, mas perde mensagens ou não responde nada. grammY e Telegraf param com o erro.

O aviso diz Seu bot também está rodando em outro lugar. Para corrigir:

  1. Ache a outra cópia e pare-a: uma janela de terminal ou um script no seu PC, a hospedagem antiga de onde você migrou (uma tarefa sempre ativa, um deploy ou um serviço) ou um segundo servidor rodando o mesmo código.
  2. Clique em Reiniciar aqui e acompanhe o Console. O erro para quando o seu bot é a única cópia.
  3. Se você não achar a outra cópia, crie um token novo para que o antigo pare de funcionar em todo lugar: no @BotFather, envie /mybots, escolha o seu bot, API Token e depois Revoke current token.
  4. Na página Bot, seção Telegram, clique em Substituir token, cole o token novo e clique em Salvar token. O painel diz O bot continua usando o token antigo até reiniciar.: clique em Reiniciar agora.

O botão Substituir o token do aviso abre a mesma seção. O token antigo para de funcionar na hora, então qualquer cópia esquecida não consegue mais ler as mensagens do seu bot.

O Console de um bot do Telegram com o aviso Seu bot também está rodando em outro lugar acima de uma linha Conflict: terminated by other getUpdates request, e um botão Substituir o token.

409: há um webhook configurado enquanto o seu bot usa polling

O texto do Telegram:

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

Um webhook diz ao Telegram para enviar as mensagens do seu bot a um endereço web. Enquanto houver um configurado, o código que usa polling (pede ao Telegram as mensagens novas) recebe esse erro. Em geral ele fica de uma hospedagem antiga que rodava o bot com webhook, ou de um código que um dia chamou setWebhook. Na PlayNHost o seu bot usa polling: webhooks precisam de um endereço HTTPS público, que esses planos ainda não incluem.

O aviso diz Há um webhook configurado no seu bot. A seção Telegram da página Bot também mostra Há um webhook configurado neste bot com o endereço para onde ele aponta. Para corrigir:

A seção Telegram quando há um webhook configurado: o alerta Há um webhook configurado neste bot mostra old-host.example.com e tem um botão Remover webhook.

  1. Clique em Remover o webhook no aviso, ou em Remover webhook na seção Telegram.
  2. Confirme em Remover o webhook? com Remover webhook. O Telegram deixa de enviar as mensagens do seu bot para esse endereço e guarda as que estão esperando, para que o seu bot as busque aqui.
  3. Reinicie o bot.

Se uma cópia do seu bot ainda rodar em outro lugar nesse webhook, ela deixa de receber mensagens quando você o remove. Pare essa cópia também, ou ela pode configurar o webhook de novo quando reiniciar.

python-telegram-bot (run_polling()) e grammY (bot.start()) removem um webhook sozinhos quando o polling começa. O aiogram não: ele continua tentando no 409. Use o botão, ou adicione uma linha antes do polling:

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

Seu código tenta configurar um webhook

Se o seu código chama setWebhook, o Telegram o recusa com Bad Request: bad webhook: ... e o aviso diz Seu código tenta configurar um webhook. Troque o início com webhook pela chamada de polling da sua biblioteca: run_polling() no python-telegram-bot, start_polling() no aiogram, bot.start() no grammY ou launch() no Telegraf. O botão Abrir Files do aviso leva você ao seu código. Exemplos: Como migrar um bot do Telegram para a PlayNHost.

401 Unauthorized: o token é recusado

O Telegram responde 401 Unauthorized quando o token foi revogado no @BotFather ou copiado errado. Exemplos:

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

Nossos bots iniciais imprimem uma linha simples no lugar:

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

O aviso diz O Telegram não aceitou o token do seu bot e a seção Telegram mostra O Telegram não aceitou. No @BotFather, envie /mybots, escolha o seu bot e depois API Token; na seção, clique em Substituir token, cole-o, clique em Salvar token e depois em Reiniciar agora. aiogram e pyTelegramBotAPI continuam tentando com um token recusado, então sem o aviso o bot pareceria estar rodando.

Um token que o Telegram recusa nunca é salvo. Se você colar um token do Discord, o painel diz Esse é um token de bot do Discord.: copie o que o @BotFather deu a você.

429 Too Many Requests: controle de flood

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

O seu bot enviou mais mensagens do que o Telegram permite em pouco tempo, e o Telegram pede que ele espere o número de segundos mostrado. As bibliotecas esperam e seguem em frente, então isso nunca para o bot. O aviso O Telegram está desacelerando seu bot é só um alerta. Envie menos mensagens de uma vez: o Telegram pede cerca de uma mensagem por segundo em um chat e 20 por minuto em um grupo.

Seu bot não conseguiu alcançar o Telegram

Este aviso significa que uma requisição do seu bot para api.telegram.org falhou. A maioria das bibliotecas tenta de novo sozinha, então uma única linha não é motivo de preocupação. Se o seu bot ficar em silêncio, reinicie-o; se continuar acontecendo, abra um ticket de suporte.

Bom saber

Seu bot já está em outro lugar? Traga-o para nós

NOSSOS ÚLTIMOS ARTIGOS