Como faço para agrupar mensagens de webhook recebidas por 3-5 segundos antes de processar
Oi @Anjali_sharma Bem-vinda!
Cada chamada de webhook é sua própria execução, portanto uma única execução não pode nativamente “aguardar” as próximas mensagens. O padrão confiável é um debounce apoiado por estado externo (Redis): em cada mensagem recebida, anexe-a a uma lista Redis com chave do remetente/sessão, escreva o ID da execução atual em uma chave de marcador, aguarde 3 a 5 segundos e depois verifique o marcador. Se ainda contiver o ID da sua execução, nenhuma mensagem mais nova chegou, portanto esta execução extrai toda a lista, a limpa e processa o lote. Se o marcador mudou, uma mensagem mais nova assumiu, portanto esta execução apenas sai. Ordem dos nós
- Webhook
- Redis (RPUSH a mensagem para uma chave de lista por sessão)
- Redis (SET uma chave de “última execução” para {{ $execution.id }})
- Wait (3 a 5 segundos)
- Redis (GET a chave de “última execução”)
- If ({{ $json.value }} equals {{ $execution.id }})
- ramo true: Redis (LRANGE para ler tudo e depois DEL a lista) e processar o lote; ramo false: não fazer nada
Há um template pronto que implementa exatamente este debounce: