Now inviting stores. Join the waitlist to hear the agent call you.

Join the waitlist

Search the docs

Find a docs page

API reference

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 keyfailed_delivery
Call typeService. See Call types and consent
LanguagesStarts in Hindi, or in the language input; English too, and it follows the shopper if they switch
Longest call4 minutes
Tries per shopper2, 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

InputLabelTypeRequiredSample
customer_nameNametextYesMeera
phonePhonephoneYes+919812345604
order_idOrdertextYes7042
addressDelivery addresstextYes4 Lake View, Bengaluru
languageLanguagetextNoen-IN to start in English

Questions it asks

KeyQuestionAnswer
good_timeDo you have a minute to rebook it?Yes or no. A "no" ends the call politely
still_wantDo you still want the order?Yes or no. A "no" cancels it
address_okShould we try again at {address}?Yes or no
new_addressWhat address should we deliver to?Text, only when the address changes. Read back before anything changes
pick_dayWhich day should we come?A date

Outcomes

OutcomeLabelWhen
rescheduledRescheduledA new day was booked (and the address updated, if it changed)
cancelledCancelledThey no longer want it; the order was cancelled
needs_teamNeeds the teamAn action was refused or didn't answer in time

Actions it may take

ActionKindWhat it does
update_delivery_addressWriteChanges the delivery address, after the read-back
book_delivery_slotWriteBooks the new delivery day
cancel_orderWriteCancels an order the shopper no longer wants

How to start it

  • From your store or courier, by API: POST /v1/runs with "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: rescheduled against cancelled and needs_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

  1. Copy it from the library

    Flows → Library → Failed delivery rescue → Use this flow.
  2. 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.

  3. Publish and connect the actions

    Publish, then connect update_delivery_address, book_delivery_slot and cancel_order in Developers → Actions.

  4. Start it from the courier's update

    Send one run per failed attempt, as soon as your courier reports it.

Next stepReturn-intent save

Offer an exchange before a return.