Comment traiter par lot les messages webhook entrants pendant 3-5 secondes avant traitement

Comment puis-je regrouper les messages webhook entrants pendant 3-5 secondes avant le traitement ?

Salut @Anjali_sharma Bienvenue !
Chaque appel webhook est sa propre exécution, donc une seule exécution ne peut pas nativement « attendre » les messages suivants. Le modèle fiable est un debounce appuyé par un état externe (Redis) : à chaque message entrant, l’ajouter à une liste Redis clé par l’expéditeur/la session, écrire l’ID de l’exécution actuelle sur une clé marqueur, attendre 3 à 5 secondes, puis vérifier le marqueur. S’il contient toujours votre ID d’exécution, aucun message plus récent n’est arrivé, donc cette exécution récupère la liste entière, la vide et traite le lot. Si le marqueur a changé, un message plus récent a pris le relais, donc cette exécution sort simplement. Ordre des nœuds

  1. Webhook
  2. Redis (RPUSH le message sur une clé de liste par session)
  3. Redis (SET une clé « dernière exécution » à {{ $execution.id }})
  4. Wait (3 à 5 secondes)
  5. Redis (GET la clé « dernière exécution »)
  6. If ({{ $json.value }} equals {{ $execution.id }})
  7. branche vraie : Redis (LRANGE pour lire tout, puis DEL la liste) et traiter le lot ; branche fausse : ne rien faire

Il existe un modèle prêt à l’emploi qui implémente exactement ce debounce :