Problemas com bot do Telegram

Por que meu bot de telegram automatizado envia a mesma mensagem várias vezes

Descreva o problema/erro/pergunta

Qual é a mensagem de erro (se houver)?

Por favor, compartilhe seu fluxo de trabalho

(Selecione os nós na sua tela e use os atalhos de teclado CMD+C/CTRL+C e CMD+V/CTRL+V para copiar e colar o fluxo de trabalho.)

Compartilhe a saída retornada pelo último nó

Informações sobre sua configuração de n8n

  • Versão do n8n:
  • Banco de dados (padrão: SQLite):
  • Configuração EXECUTIONS_PROCESS do n8n (padrão: own, main):
  • Executando n8n via (Docker, npm, n8n cloud, desktop app):
  • Sistema operacional:

@Quadri_Abdulsalam1 quando duplica, verifique a lista de Executions. O workflow está rodando múltiplas vezes por mensagem recebida, ou apenas uma vez? múltiplas = Telegram reenviando a atualização (uma tentativa), uma = um loop ou nó multi-item disparando seu send repetidamente. me diga qual é, ou compartilhe o workflow.

Bom ponto do @kall sobre os Retries. Um complemento sobre a causa: o Telegram repete uma chamada de webhook automaticamente se seu workflow do n8n não responder com um status 200 dentro de poucos segundos. Se seu workflow tem muitos nodes (chamada de IA, múltiplas requisições HTTP) antes da resposta voltar ao Telegram, isso já é suficiente para disparar um retry.

Um fix prático além da verificação de ID de atualização: divida o workflow em duas partes. Uma primeira parte enxuta que responde imediatamente com 200 OK (logo após o trigger do Telegram), e uma segunda parte que cuida do processamento real (gerar resposta de IA, enviar mensagem) de forma assíncrona, por exemplo através de um sub-workflow chamado via “Execute Workflow” sem aguardar. Isso previne o problema de retry na raiz, não apenas os sintomas.

Ei @Quadri_Abdulsalam1, ótimos pontos acima. Para deixar a deduplicação de update_id concreta, aqui está um rápido nó Code que você pode colocar logo após o Telegram Trigger:

const updateId = $input.first().json.update_id.toString();
const seen = $getWorkflowStaticData(‘global’);

if (seen[updateId]) {
return []; // already processed, stop here
}

seen[updateId] = true;
return $input.all();

Isso usa os dados estáticos de workflow integrados do n8n para lembrar quais valores de update_id já foram processados, sem necessidade de banco de dados externo. Combine isso com a sugestão de Rene de dividir em um sub-workflow de resposta rápida, e os envios duplicados devem parar completamente.