{“output”:“كيف يمكنني تجميع رسائل webhook الواردة لمدة 3-5 ثوانٍ قبل معالجتها”}
مرحباً @Anjali_sharma أهلاً وسهلاً!
كل استدعاء webhook هو تنفيذ منفصل، لذا لا يمكن لتشغيل واحد أن “ينتظر” بشكل أصلي الرسائل التالية. النمط الموثوق هو debounce مدعوم بحالة خارجية (Redis): عند كل رسالة واردة، أضفها إلى قائمة Redis مفتاحها باسم المرسل/الجلسة، اكتب معرف التنفيذ الحالي إلى مفتاح علامة، انتظر 3 إلى 5 ثواني، ثم تحقق من العلامة. إذا كانت لا تزال تحتفظ بمعرف التنفيذ الخاص بك، فلم تصل رسالة أحدث، لذا يسحب هذا التشغيل القائمة بالكاملة ويمسحها ويعالج الدفعة. إذا تغيرت العلامة، فقد تولت رسالة أحدث، لذا يخرج هذا التشغيل ببساطة. ترتيب العقد
- Webhook
- Redis (RPUSH الرسالة إلى مفتاح قائمة لكل جلسة)
- Redis (SET مفتاح “آخر تنفيذ” إلى {{ $execution.id }})
- الانتظار (3 إلى 5 ثواني)
- Redis (GET مفتاح “آخر تنفيذ”)
- إذا ({{ $json.value }} يساوي {{ $execution.id }})
- فرع صحيح: Redis (LRANGE للقراءة الكاملة، ثم DEL القائمة) ومعالجة الدفعة؛ فرع خاطئ: لا تفعل شيئاً
هناك نموذج جاهز يطبق debounce بالضبط: