Fluxo de Resposta Automática do Gmail enviou 50 emails para a mesma pessoa

Descreva o problema/erro/pergunta

Olá a todos!

Tive um problema com um fluxo de resposta automática do Gmail que começou a enviar uma resposta para o mesmo endereço repetidamente, mesmo depois de desativar todos os nós (o que é bem estranho).

Como funciona:
Nosso email recebe cópia de emails que nosso parceiro envia para leads. O primeiro nó é acionado uma vez por hora para encontrar emails do endereço de email do nosso parceiro, com filtro pela linha de assunto E apenas emails não lidos. Depois, define variáveis para o endereço de email do destinatário e o ID da mensagem. O próximo nó marca a mensagem como lida usando o id. Em seguida, o próximo nó responde na conversa usando o thread id do gatilho. Depois adiciona o lead a uma tabela e cria um lead no Zoho.

Comçou uma semana atrás, notamos recentemente. A parte mais estranha é que ainda enviava emails mesmo depois de desativarmos os nós, então despublicamos o fluxo só para ter certeza.

Vi alguns tópicos semelhantes aqui, mas isso parece ser um pouco diferente, estamos filtrando mensagens não lidas, mas ainda assim ele puxa o mesmo email repetidamente.

Informações sobre sua configuração n8n

  • Versão n8n: 2.20.7
  • Executando n8n via n8n cloud

@Arsen a parte “ainda enviando após desativação” são execuções enfileiradas que foram disparadas antes da desativação entrar em vigor — o n8n Cloud não cancela execuções em andamento, apenas para NOVOS triggers. então as 50 respostas são 50 execuções atrasadas que já estavam na fila.

a causa raiz das 50 em primeiro lugar é provavelmente ordenação — se a etapa mark-as-read falhar ou rodar lentamente, a próxima pesquisa horária vê a mesma mensagem não lida novamente e dispara outra resposta. a etapa mark-as-read realmente foi bem-sucedida em cada log de execução, ou falhou silenciosamente?

Oi @achamm !

Obrigado pela resposta. Na verdade, o nó mark-as-read foi executado com sucesso em todas as execuções, pelo que consigo ver.

[quote=“achamm, post:3, topic:297217”]
a parte „ainda enviando após desativação

Bem vindo à comunidade n8n @Arsen
Por favor atualize sua instância para a v2.21.7 através do painel admin.
retorne ao fluxo, destavie os nós e ative novamente. publique
coloque para rodar, nos retorne o resultado se possível.

@kjooleng não, plano iniciante

Também uma coisa estranha - o email foi enviado para a mesma pessoa 50 vezes, mas o endereço dessa pessoa foi adicionado à planilha apenas uma vez

olá @Arsen

Por favor, compartilhe o workflow.

Você pode selecionar todos os nós com Ctrl+A e copiá-los com Ctrl+C. Depois, cole o conteúdo após pressionar o botão </> com Ctrl+V.

Vejo que seu trigger do Gmail tem mais de 1 item, o que pode causar alguns problemas se os nós seguintes foram configurados incorretamente

Olá @Arsen,

Esta funcionando bem antes de uma semana atrás? O que mudou desde então?

O problema real é uma race condition entre o trigger e o node mark-as-read. O Gmail retorna e-mails não lidos com base no status no momento da solicitação da API. Se o trigger buscar o e-mail e o node mark-as-read ainda não foi executado, a próxima execução pode buscar o mesmo e-mail novamente, especialmente se as execuções se sobrepuserem.

A melhor solução é adicionar um filtro de deduplicação baseado no Message-ID após o trigger. Armazene os Message-IDs processados em um Static Data Store ou em uma Google Sheet. Antes de processar, verifique se o ID já existe.

Qual plano você utiliza? Cloud ou self-hosted?

Oi @barn4k !

Consigo enviar capturas de tela se isso funcionar

Oi @Kemal_Automation !

Estou usando o n8n na nuvem.

Acho que faria sentido se o e-mail fosse adicionado à planilha repetidamente também

Oi @Arsen
Poderia verificar as configurações de resposta automática do Gmail?

Você vai em Gmail > Configurações > Geral > Resposta de Ausência (Resposta de ausência desativada/ativada).

Se a resposta automática está desativada. Então, certifique-se de seguir estes passos.

Teste em um escopo pequeno duplicando o workflow, apenas mude as configurações em vez de ler do email do parceiro para ler do seu email (outro que não seja o ccd)

  1. Mantenha todas as suas configurações e use um email (novo email do qual você possa enviar ou receber para testar)

  2. reduza o tempo de disparo para 1 minuto apenas para teste,

  3. pare de responder a mensagem (já que isso é o gargalo)

    Certifique-se de fazer um teste de fluxo passo a passo (antes de publicar)
    Se funcionou bem, então publique o escopo pequeno
    teste novamente em produção, e deve funcionar!

Exatamente, se o mesmo e-mail aparece repetidamente na planilha,
isso confirma o problema.

A solução é um nó de código logo após o acionador, que verifica se
a Message-ID já foi processada. Se você precisar de ajuda com a
configuracao exata, fico feliz em ajudar!

@Arsen nos logs de execução, 49 daquelas execuções mostram uma falha/erro no nó imediatamente após o nó de resposta? Se sim, o workflow estava completando a resposta com sucesso, mas depois batia em um erro mais adiante, mas como o n8n já tinha enviado o email, o estrago já estava feito.

que é que o gatilho do Gmail retorna quando faz a sondagem?

@sergeys @Kemal_Automation

Obrigado pessoal pelas respostas!

Esse é exatamente o problema; NÃO havia erros nas execuções, e cada execução foi concluída com sucesso. O email não estava sendo adicionado à planilha repetidamente. Foi adicionado uma vez, e pronto

Então, se não há erros e a tabela tem apenas uma entrada, o problema provavelmente é que a resposta do seu parceiro marca o e-mail como não lido novamente no Gmail. Com isso, o trigger puxa a cada hora de novo. Como solução, adicione um filtro logo depois do trigger que verifique se o e-mail chegou nos últimos 2 horas. Assim, e-mails antigos não conseguem entrar no loop novamente.

@Kemal_Automation

Obrigado!

Na verdade, nosso parceiro não responde, somos nós quem está respondendo aos e-mails. Estamos respondendo apenas ao destinatário e deixamos nosso parceiro de fora mesmo assim. É por isso que é realmente estranho

Ok então a teoria do parceiro está descartada. Minha próxima suspeita é que o Gmail marca o e-mail como não lido novamente após sua resposta, porque o thread é atualizado.

Como teste, adicione um pequeno atraso de 1-2 segundos após o node “Mark as Read”, depois marque como lido novamente. Às vezes o Gmail precisa de um momento para a mudança surtir efeito.

ok olhando os screenshots do workflow — Gmail Trigger com filtro (não lido + remetente parceiro + assunto), Mark as Read usando $('Edit Fields').item.json.id, Reply usando $('Gmail Trigger').item.json.threadId. tudo isso faz sentido.

se 50 execuções horárias separadas continuam encontrando a MESMA mensagem não lida E mark-as-read continua reportando sucesso, algo está marcando o email como não lido entre as verificações — pode ser uma regra de filtro do Gmail, o app mobile, ou outro cliente IMAP acessando a caixa de entrada. você não vai corrigir essa causa raiz de dentro do n8n. o que você PODE corrigir é fazer o workflow recusar enviar a mesma resposta duas vezes independentemente do estado de leitura.

coloque este nó Code entre o Gmail Trigger e Edit Fields. ele persiste os IDs das mensagens processadas nos dados estáticos do workflow do n8n para que duplicatas sejam filtradas entre execuções:

{
  "nodes": [
    {
      "parameters": {
        "jsCode": "const staticData = $getWorkflowStaticData('global');\nstaticData.processedIds = staticData.processedIds || [];\n\nconst fresh = $input.all().filter(item =\
  const id = item.json.id;\n  if (staticData.processedIds.includes(id)) return false;\n  staticData.processedIds.push(id);\n  return true;\n});\n\nif (staticData.processedIds.length \
  staticData.processedIds = staticData.processedIds.slice(-1000);\n}\n\nreturn fresh;"
      },
      "name": "Dedupe by Message ID",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [400, 300]
    }
  ],
  "connections": {}
}

$getWorkflowStaticData('global') persiste entre execuções no n8n Cloud para que a lista de IDs se mantenha. na primeira vez que uma mensagem chega ela é registrada + passada para a frente; na segunda vez o filtro a descarta e o workflow vai a zero itens. agora mesmo que o Gmail continue marcando como não lido, você envia a resposta exatamente uma vez por ID de mensagem único.