Skip to main content

Handle Delayed Deliveries End to End

Delayed and failed deliveries generate a predictable, painful back-and-forth. The order is stuck; the front-line team escalates to logistics; logistics comes back asking for an alternate number or a landmark; the front-line team relays that to the customer, waits, gets the answer, and relays it back. Each hop is a handoff, and the customer stews in between.

Most of that round-trip is avoidable. If you collect the information logistics always ends up asking for before you escalate, the child ticket lands complete, and the ticket closes itself when the shipment moves. This recipe wires that up.

When to Use This Recipe​

Use this for "where is my order," delayed dispatch, failed delivery (NDR), and reattempt journeys — anywhere a shipment stalls and a backend/logistics team has to intervene.

The flow you're building:

  1. The customer reports a delayed or undelivered order.
  2. Before escalating, the AI proactively collects an alternate phone number, a landmark, and a confirmed delivery address — the things logistics always asks for.
  3. The AI escalates to the logistics team via a child ticket that already carries that captured contact info.
  4. If logistics doesn't act in time, an SLA breach notifies a team lead.
  5. When the carrier finally dispatches or delivers, the ticket resolves itself — no one has to close it.

How the Pieces Fit​

This is a flow built and tuned with the Copilot. The steps below are what to ask for.

1. Collect what logistics will need — up front​

Add objectives that ask the customer to confirm their contact and delivery details as part of handling the delay, rather than waiting for logistics to request them later. Ask for an alternate phone number, a landmark, and a confirmation that the delivery address is correct. For a structured, low-friction capture on WhatsApp, ask the customer for it as an address form (a WhatsApp Flow form) instead of free text.

"In the delayed-delivery flow, before escalating, ask the customer to confirm their delivery address and share an alternate phone number and a nearby landmark. Collect it with a WhatsApp address form."

Frame it to the customer as helping the reattempt succeed — "to make sure the reattempt reaches you, please confirm…" — so it feels like progress, not an interrogation.

2. Escalate to logistics with the context attached​

End with a human-agent objective that creates a child ticket for your logistics team. The child ticket inherits the parent's collected data — the order, and the alternate number, landmark, and confirmed address you just captured — so the logistics team opens a ticket that already answers their usual questions. Route it to the right team with the objective's tag.

"Once the details are collected, create a child ticket for the logistics team with the order, alternate number, landmark, and confirmed address included."

If logistics still needs to go back to the customer for something you didn't anticipate, they don't resolve the ticket — they use Awaiting information to keep it open, and their note is reframed by the AI into a customer-friendly message.

3. Escalate on SLA breach​

A stuck delivery that also stalls in the logistics queue is the worst case. Add an SLA rule scoped to the logistics team (or the delayed-delivery task) so that if the child ticket isn't actioned within your target, the breach notifies a team lead. Set tiered thresholds if you want a first nudge and then a harder escalation.

"Add an SLA for the logistics team: notify the team lead if a delayed-delivery child ticket isn't actioned within 4 hours, and again at 8 hours."

4. Let tracking updates close it out​

Once the order dispatches or is delivered, the ticket may no longer need anyone. If your logistics provider (ClickPost, Shiprocket, Shopify fulfillment) can send Flowcall a tracking webhook, Flowcall messages the customer with the status update and can auto-resolve an unowned ticket and its child tickets. An owned parent returns to its owner for the final decision instead. Where many stuck orders resolve at once and there is no webhook, bulk-resolve the child tickets from an exported sheet instead.

The Payoff​

The customer answers logistics' questions once, at the start, instead of being pinged mid-crisis. The logistics team gets complete tickets and never talks to the customer directly. Nobody closes tickets by hand as orders trickle in. The back-and-forth that used to need a human on every hop collapses into a single collect-once, escalate-once, close-itself loop.