Os 4 minutos de espera estão dentro da função que responde o webhook, e a Meta reenvia quando a resposta demora. O id vira chave única na chegada, então o reenvio morre no conflict. Se a Vercel cortar a função nos 300 segundos antes da resposta sair, não sobra retry: a mensagem já foi marcada como vista. Eu gravaria a chave só depois de enviar, ou tiraria esses 4 minutos do request e poria numa fila.
1