How to handle multiple WhatsApp images in one workflow execution?

Hey everyone,
I’m building a WhatsApp chatbot for property management using the WhatsApp Business API and facing a challenge with multiple images:
The Problem:
When users send 2-3 images at once, they arrive as separate webhook triggers - each image creates a new workflow execution. This causes several issues:
Images can’t be grouped together - I can’t tell which images belong to the same damage report
Image URLs expire after a few hours, so I need to download them immediately via HTTP Request
High execution costs - each image = separate execution = expensive at scale
Session management breaks - if a user sends another image 1 hour later, I don’t know which ticket it belongs to
Current Workaround:
Download each image via HTTP Request
Store URL in Workflow Static Data with session key
Try to retrieve “latest” image URL later → unreliable!
What I’ve tried:
Merging executions → doesn’t work, they’re separate triggers
Using Workflow Static Data → works but hacky and error-prone
Wait node to collect multiple triggers → doesn’t trigger if only 1 image
Questions:
How do you handle multiple WhatsApp images in your workflows?
Is there a way to batch/merge webhook triggers that arrive within seconds?
Any best practices for storing binary image data instead of just URLs?
Should I use a different architecture (e.g., queue system)?
Would love to hear how others solve this! :folded_hands:
My setup:
WhatsApp Business API → n8n Webhook
AI Agent bot collecting structured data
Need to attach all images to email/ticket
Thanks in advance!

Hi @Mika1 You can try the approach where you can instantly download each image via the HTTP request, and store it in database like supabase, and then you can schedule a trigger to aggregate all the images belonging to the same session and then run your workflow as it is, what i would recommend is that like a more scalable approach is that to add certain modes in your workflow that would receive command like messages and would act on those like /image and /multiple-images and if user sends these messages the workflow would go in a human in the loop and would take specific inputs 1,2,3… and then would continue the flow.

Hey, the core issue is WhatsApp sends each image as its own webhook event so there’s no way around that in n8n directly. What works is a two-workflow setup where workflow 1 just downloads the image immediately and saves it to a database keyed by the user’s phone number, then workflow 2 runs on a schedule every 30s or so and grabs all images for that session and does the actual processing. Way more reliable than static data which has race conditions when multiple executions write at the same time.

Hi guys!
In addition, instead of trying to combine them, it’s better to store each image using something simple like the user’s phone number and a ticket ID as a reference. Then, after the user stops sending images for a short time, you close the ticket and process all saved images together. This way you rely on stored state instead of trying to connect separate webhook runs, which makes your workflow much more stable and easier to manage as it grows.