Anti-duplicidade: como o robô não manda a mesma mensagem duas vezes
Um fluxo vê o mesmo evento dezenas de vezes antes da consulta. A solução é uma chave única por evento, gravada depois do envio confirmado.
Um fluxo que roda a cada 30 minutos vê o mesmo evento da agenda dezenas de vezes antes da consulta. Um fluxo de cobrança vê a mesma fatura todo dia. Sem uma memória do que já foi feito, cada execução mandaria a mensagem de novo. A solução é uma chave única por evento.
A chave identifica a mensagem, não o destinatário: lembrete:{id_do_evento}:{inicio}, cobranca:{id_da_cobranca}:{etapa}. Antes de enviar, o fluxo pergunta a tn_enviados se a chave existe. Se existe, pula. Se não, envia e grava.
A ordem importa. Os templates TN gravam depois do envio confirmado. Se o envio foi descartado (fora da janela, PARE, telefone inválido) ou falhou, a chave não é gravada e a próxima execução tenta de novo. O risco do outro lado (enviou, mas a gravação falhou em seguida) existe, mas é raro e gera um erro visível no Alerta de erro, e uma mensagem repetida uma vez é menos grave do que um lembrete que nunca sai.
Detalhes:
- Remarcou a consulta? O Google Agenda mantém o ID do evento quando você arrasta para outro dia. Por isso a chave do lembrete inclui a data e hora de início: evento movido é um lembrete novo, para a nova data.
- Reenviou o formulário do site duas vezes? A chave do lead é o telefone dentro de uma janela de horas; a boas-vindas sai uma vez.
- Restaurou um backup antigo? As chaves gravadas depois do backup se perdem, e o que foi enviado nesse intervalo pode sair de novo. Restauração pede modo teste ligado por um dia.