Failed delivery rescue
Call a shopper after a failed delivery attempt, check they still want the order, fix the address if needed and book a new day, or cancel it.
Failed delivery rescue calls a shopper after the courier couldn't deliver. It checks they still want the order, checks the address (and takes a new one if needed), then books a new day. If they no longer want it, it cancels the order so it doesn't travel back and forth unpaid.
| Library key | failed_delivery |
| Call type | Service. See Call types and consent |
| Languages | Starts in Hindi, or in the language input; English too, and it follows the shopper if they switch |
| Longest call | 4 minutes |
| Tries per shopper | 2, 90 minutes apart |
When to use it
Start it as soon as a courier marks a delivery attempt as failed. The parcel is still with the courier, so a new day or a corrected address can save the order before it starts its trip back to you.
What the shopper hears
Agent: Hi Meera, this is Halden's automated assistant. Our courier couldn't deliver your order 7042 today. This call is recorded. Do you have a minute to rebook it?
Shopper: Yes, I was out.
Agent: Do you still want the order?
Shopper: Yes.
Agent: Should we try again at 4 Lake View, Bengaluru?
Shopper: Yes, same address.
Agent: Which day should we come?
Shopper: Saturday.
Agent: Done, we'll deliver on Saturday. Thank you, goodbye.
Inputs it needs
| Input | Label | Type | Required | Sample |
|---|---|---|---|---|
customer_name | Name | text | Yes | Meera |
phone | Phone | phone | Yes | +919812345604 |
order_id | Order | text | Yes | 7042 |
address | Delivery address | text | Yes | 4 Lake View, Bengaluru |
language | Language | text | No | en-IN to start in English |
Questions it asks
| Key | Question | Answer |
|---|---|---|
good_time | Do you have a minute to rebook it? | Yes or no. A "no" ends the call politely |
still_want | Do you still want the order? | Yes or no. A "no" cancels it |
address_ok | Should we try again at {address}? | Yes or no |
new_address | What address should we deliver to? | Text, only when the address changes. Read back before anything changes |
pick_day | Which day should we come? | A date |
Outcomes
| Outcome | Label | When |
|---|---|---|
rescheduled | Rescheduled | A new day was booked (and the address updated, if it changed) |
cancelled | Cancelled | They no longer want it; the order was cancelled |
needs_team | Needs the team | An action was refused or didn't answer in time |
Actions it may take
| Action | Kind | What it does |
|---|---|---|
update_delivery_address | Write | Changes the delivery address, after the read-back |
book_delivery_slot | Write | Books the new delivery day |
cancel_order | Write | Cancels an order the shopper no longer wants |
How to start it
- From your store or courier, by API:
POST /v1/runswith"flowKey": "failed_delivery", when the courier reports the failed attempt. - From the dashboard: Call a shopper on the flow, or Call N contacts from Contacts for a day's failed attempts.
What to measure
In Results, for the flow:
- How the calls ended:
rescheduledagainstcancelledandneeds_team. - Returned to origin: in your logistics data, how many failed deliveries came back before and after you started calling.
Set it up, step by step
Copy it from the library
Flows → Library → Failed delivery rescue → Use this flow.Simulate it
Simulate → Talk as the shopper. Rebook at the same address, then run it again with a new address, then once saying you no longer want it.
Publish and connect the actions
Publish, then connect
update_delivery_address,book_delivery_slotandcancel_orderin Developers → Actions.Start it from the courier's update
Send one run per failed attempt, as soon as your courier reports it.
Offer an exchange before a return.