Skip to main content

Automate Returns with Photo Validation

Returns and replacements almost always hinge on photos. A team typically asks the customer for a fixed set — the invoice, the batch/serial label, the product, and a close-up of the damage — then an agent eyeballs each one, chases the customer for anything missing or blurry, and only then fills a form and escalates to the warehouse. It's slow, and it's all human.

Flowcall can run this end to end. The AI asks for each photo, looks at what the customer uploads, re-asks when an image is missing or unclear, and escalates to the backend team only once the full set is valid — so a human only ever sees a complete, ready-to-action return.

When to Use This Recipe​

Use this setup for any journey that requires the customer to provide evidence before you can act: damaged-product returns, replacement claims, warranty registration, wrong-item deliveries, or reimbursement requests.

The customer experience you're building:

  1. The customer says they received a damaged product.
  2. The AI acknowledges, then asks for each required photo — one clear ask at a time.
  3. As each photo arrives, the AI checks it shows what it should (an invoice, a batch label, the damaged area).
  4. If a photo is missing or too unclear to read, the AI asks again for that specific one.
  5. Once every required photo is in and valid, the AI escalates to the returns/warehouse team with everything attached.

How the Pieces Fit​

This is a flow whose objectives collect and validate images, with a final human-agent objective that escalates. You build and change all of it conversationally with the Copilot — the pieces below are what to ask for.

1. One image objective per required photo​

Add an ask-the-customer objective for each photo you need. Because they're separate objectives, the AI asks for them distinctly rather than lumping "send some photos" into one vague request, and it can send a sample image showing the customer exactly what a good invoice or batch-label photo looks like.

"In the damaged-product flow, ask the customer for four photos: the invoice, the batch/serial label, the full product, and a close-up of the damaged part. Send a sample image for the batch-label ask."

2. Validate each photo as it arrives​

Flowcall runs each uploaded image through a vision check against what that objective is supposed to capture. Describe what a valid photo must show, and the objective only counts as answered when the AI can actually see it.

"The invoice photo must clearly show the order number and invoice date. The batch photo must show a legible batch code."

To read a value out of a photo — a serial number on the label, the order number on the invoice — describe it as the thing you want extracted; the AI pulls it from the image rather than just filing the attachment. (See Data Points → built-in data points for how raw image URLs differ from values extracted from them.)

3. Re-ask when a photo is missing or unclear​

If the customer skips an image or sends one the AI can't read, the objective stays unfilled and the AI asks again for that specific photo — up to a limit you set, so it doesn't nag forever. This is the behavior that replaces an agent manually chasing the customer.

"If the invoice photo isn't shared or is too blurry to read, ask again for a clearer invoice photo. Give up after three attempts and hand off to an agent."

4. Ask for the right photos, conditionally​

You rarely need the same evidence for every case. Use conditions so the customer is only asked for what their situation requires — the damage close-up only when the reason is damaged, no photos at all for a size-exchange.

"Only require the damaged-part photo when the return reason is damaged. For a wrong item return, ask for the product photo and the invoice, but not the batch label."

5. Escalate once — and only once — everything is valid​

End the flow with a human-agent objective that creates a child ticket for your returns or warehouse team. Because it sits after the image objectives, it only fires when the full, valid photo set is in — and the child ticket carries the collected images and order context, so the backend team acts on a complete package. Route it to the right team with the objective's tag (for example, a warehouse or returns team).

"Once all required photos are validated, create a child ticket for the returns team with the photos and order details attached."

Where a Human Still Fits​

Vision checks are reliable for concrete, countable things — is there an invoice, is the batch code legible, are there at least four photos, is this the right product. They're less reliable for subjective judgments — whether a mattress is genuinely sagging, whether a scratch counts as "damage." Keep those calls with a human: collect and validate the photos automatically, then let the warehouse team make the final accept/reject decision on the child ticket. You still remove the chasing and data-entry work, which is where the time goes.