Logistics · E-commerce · D2C brands

AI calls for failed deliveries (NDR)

From ₹1 a minute at volume (₹1,00,000/month commitment), or ₹5 pay as you go, no commitment

₹1 is the T1 voice rate. On T1, Mirai phone calling (₹0.30/min) and call insights (₹0.20/min) are optional; T5 includes both. All prices exclude GST.

From ₹1 a minute on the volume plan (₹5 a minute pay as you go), an agent calls the customer when a courier reports a failed delivery, hears what actually happened, and settles one of three things: a new day for the next attempt, a corrected address or landmark, or a cancellation so the parcel can go back. You get that decision as fields your system can pass to the courier, plus a flag when the customer disputes the courier's reason. Feed each NDR in as it arrives and the agent calls it inside your calling window.

No sign-up to look around.

On T1, per connected call

₹1.67for a 100-second call at ₹1/min

T1 has a ₹1,00,000 monthly commitment. Pay as you go on T5, the same call is ₹8.34.

Calls
Outbound calls
Languages
Hindi, English, Hinglish
Industries
Logistics, E-commerce, D2C brands
Call length
100 seconds, an assumption
See the working on every tier

Sample conversation

How a call goes

A written example of the script, not a recording. Your agent says what your prompt tells it to, in your customer's language.

  1. Agent

    नमस्ते Sanjay जी, मैं Acme Store की तरफ़ से AI assistant बोल रही हूँ। आपका parcel कल deliver नहीं हो पाया, courier ने लिखा है कि आप available नहीं थे।

    Hello Sanjay, I'm an AI assistant calling for Acme Store. Your parcel couldn't be delivered yesterday; the courier noted that you weren't available.

  2. Caller

    ये गलत है, मैं पूरा दिन घर पे था। किसी ने call भी नहीं किया।

    That's wrong, I was home all day. Nobody even called.

  3. Agent

    असुविधा के लिए माफ़ी। ये बात मैं note कर रही हूँ ताकि team courier से बात करे। Parcel दोबारा कब भिजवाएँ, कल या परसों?

    Sorry for the trouble. I'm noting this so the team can take it up with the courier. When should we send the parcel again, tomorrow or the day after?

  4. Caller

    कल भेज दो, पर शाम छह बजे के बाद।

    Send it tomorrow, but after six in the evening.

  5. Agent

    कल शाम, छह बजे के बाद, note कर लिया। Delivery वाले को घर ढूँढने में कोई landmark बताना चाहेंगे?

    Tomorrow evening after six, noted. Would you like to give a landmark to help the delivery person find the house?

  6. Caller

    हाँ, Hanuman mandir के पीछे वाली गली, नीला gate।

    Yes, the lane behind the Hanuman temple, blue gate.

  7. Agent

    Hanuman mandir के पीछे वाली गली, नीला gate. सही है?

    The lane behind the Hanuman temple, blue gate. Is that right?

  8. Caller

    हाँ।

    Yes.

  9. Agent

    ठीक है, कल शाम की delivery के लिए request भेज दी जाएगी। धन्यवाद Sanjay जी।

    Okay, the request for tomorrow evening's delivery will be sent. Thank you, Sanjay.

What you send

One row per person you call

Upload a CSV to a campaign, or send the same fields as call variables from your own system. The phone number comes first; the other columns are what the agent reads out or decides on.

The template has a header row and one guide row that says what goes in each column. The console skips that row when you upload the file. Download it, add your contacts under it, and upload.
ColumnExampleWhat goes in it
phoneRequired +91… The number to call, with the country code (+91…). A ten-digit Indian mobile gets +91 added. In Excel, format this column as Text first so the number is not changed.
customer_nameOptional Sanjay —
ndr_reasonOptional customer not available The courier's reason, in plain words. The agent reads it out without taking sides.
attempt_dateOptional yesterday —
reattempt_optionsOptional tomorrow or the day after Only offer days your courier can actually do. The agent won't offer any other.
delivery_addressOptional House 14, Shivaji Nagar, Nagpur —
awb_numberOptional AWB7781200453 Extra info: never read out, returned in every webhook so your system can update the right shipment.

What comes back

The result of every call

Each call ends with one webhook event that carries the transcript and the result, and the campaign report has a row for every contact. These are the result fields an agent for this job fills in.

FieldExampleWhat it means
flow.variables.ndr_action reattempt With a node-based agent, the values each step extracted. You name them: reattempt, address_fix or return_to_origin.
flow.variables.reattempt_day tomorrow The day the customer chose, from the options you passed in.
flow.variables.time_preference after 6 pm Free text for the courier note.
flow.variables.landmark Hanuman mandir के पीछे वाली गली, नीला gate As the customer said it and confirmed when it was read back.
flow.variables.courier_reason_disputed true Set when the customer says the attempt didn't happen as reported. Worth a separate report for your courier reviews.
flow.nodes_visited ["Confirm the customer", "Hear what happened", "Pick a day", "Landmark", "Close"] The steps the call went through, so you can see where calls stop.
metadata.awb_number AWB7781200453 Your extra info, unchanged.

Campaign webhooks in the docs ↗

Cost

What a 100-second call costs

Worked out from our price list. 100 seconds is our assumption for a typical connected call of this kind, not a measurement from your calls. Put your own volumes into the AI calling cost calculator.

Base voice rate on each tier, before GST. All prices exclude GST.
TierRatePer connected callPer 1,000 connected callsMonthly minimum
T1 ₹1 / min ₹1.67 ₹1,670 ₹1,00,000 a month
T3 ₹3 / min ₹5 ₹5,000 ₹50,000 a month
T5 ₹5 / min ₹8.34 ₹8,340 None
100 s → 10 blocks of 10 s = 100 s billed T1: 100 s × ₹1 ÷ 60 = 1.667, rounded up to ₹1.67T3: 100 s × ₹3 ÷ 60 = ₹5T5: 100 s × ₹5 ÷ 60 = 8.333, rounded up to ₹8.34
  • T5 and T3 include Mirai phone calling and call insights. On T1 they are optional: phone calling at ₹0.30/min and insights at ₹0.20/min. With both on, this call comes to about ₹2.50 on T1. Mirai phone calling is metered on the carrier's billing block, so treat that figure as an estimate.
  • T1's ₹1,00,000 monthly minimum pays for 59,880 calls of this length; T3's ₹50,000 monthly minimum pays for 10,000 calls of this length. Monthly commitments are credited to your wallet. Unused credit never expires. Paid usage counts towards the minimum, and only a shortfall is settled at month end.
  • Calls that ring out, are busy or fail to connect are not billed. A voicemail is billed like a connected call.

In detail

AI calls for failed deliveries (NDR): in detail

Why does an NDR call suit an agent?

A failed delivery gives you a short window. The parcel sits at the hub, the courier allows only so many reattempts, and every day without an answer moves it closer to coming back to you. The call that rescues it is usually simple. You need to know what really happened, when the customer will be in, and how the delivery person can find the place.

NDRs also arrive in uneven heaps. A rainy day or a holiday can turn ten into three hundred, and the calls need to happen that day. An agent can work through the heap at whatever pace your concurrency allows, in Hindi or English, without anybody being pulled off support.

This call branches more than most. The customer may be away, may have refused the parcel, may want to cancel, or may say the courier never came. A node-based agent handles that better than one long prompt. Each step has its own instructions (confirm the customer, hear what happened, pick a day, take a landmark, close), and the model moves between them when the caller’s answer meets a step’s condition. You can draft the flow in Agent Studio from a description of how your team handles NDRs, or from transcripts of a few good calls, then edit it.

How do you set it up?

  1. In Agent Studio, choose Create agent, then Node-based, and describe the call. Mention the three outcomes you want and the values each step should record.
  2. Check every step’s prompt. The pick-a-day step should offer only {{reattempt_options}}, the days your courier can actually do. The close step should repeat the decision back to the customer.
  3. Add a pre-call tool that reads the shipment’s latest status from your system, and a skip_call rule so delivered or already-returned shipments are never called.
  4. Test it in the browser as three customers: one who was out, one who disputes the attempt, one who wants to cancel.
  5. Create an always-on campaign through the API with your calling hours and two or three retries a short gap apart. Your NDR feed adds each shipment with POST /v2/campaigns/{id}/contacts, with the AWB number as metadata.
  6. Point the campaign’s webhook at your backend. For a node-based agent, call.processed carries data.call.flow, with the values extracted at each step and the steps the call visited. Your handler, or a post-call HTTP tool, passes the decision to the courier.

Read flow.nodes_visited across a few hundred calls. If many calls end at the hear-what-happened step, the problem is usually in what the agent says there, and you can see it in the transcripts.

What should your team still handle?

Disputes about the courier are yours to raise with the courier, and the courier_reason_disputed flag gives you the list with transcripts as evidence. High-value parcels, a second NDR on the same order, and customers asking for a refund belong with your support team. The agent can’t transfer calls today, so it should note the request and tell the customer someone will call.

What should you check before you call?

TRAI’s Third Amendment to the TCCCPR, notified on 18 September 2026, describes a service call as one giving a customer information about a product or service they bought, and it names information about delivery of goods. It says these calls are not promotional and don’t need explicit consent. An NDR call fits that description as long as it stays about the delivery; adding an offer changes what kind of call it is.

The same amendment asks senders to declare calls placed by software, including artificial-voice calls, to their originating telecom provider in advance with the numbers they’ll use, and treats undeclared ones as unsolicited. Parts of it take effect in stages after publication, so confirm the timing with your provider. Calling hours are your choice inside the campaign; check TRAI’s current rules and your consent records before you set them. We don’t scrub your list against the national DND register, so do that before upload.

What does an NDR call cost?

On T1 a connected minute costs ₹1 with a ₹1,00,000 monthly commitment, plus ₹0.30 for Mirai phone calling and ₹0.20 for call insights if you switch them on. On T5 it’s ₹5 a minute, pay as you go, with both included. Prices exclude GST. Answered calls are billed and unanswered ones aren’t. The cost block assumes about 100 seconds of connected time, an estimate for a call with one reattempt day and a landmark; a quick “कल भेज दो” is shorter. The comparison that matters is one answered call against the two-way shipping and repacking of a parcel that comes back. See Pricing for the plans, or put your NDR volume into the cost calculator.

By Mirai Minds · Published

Questions

Can the agent update the courier directly?

Not by itself. A post-call HTTP tool can send the decision to an endpoint you control, which then calls your courier's API, or your webhook handler can do the same when call.processed arrives. There's no built-in courier connector.

What if the parcel was delivered after the NDR was raised?

Give the agent a pre-call tool that reads the latest tracking status and a skip_call rule for delivered shipments. The call is then never dialled and costs nothing.

Does it understand addresses and landmarks spoken in Hindi?

It's tuned for Hindi, Indian English and the mix of the two, and the transcript keeps the words as spoken. Have the agent read every landmark back and wait for a yes, because a misheard house number costs another failed attempt.

What happens when the customer doesn't answer?

Unanswered calls are free and the campaign retries them after the gap you set. Keep the gap short for NDRs. A contact still unreached after every attempt shows as exhausted, which is your list for an SMS or a call from your team.

How can an NDR call cost ₹1 a minute?

₹1 a minute is the T1 voice rate, for teams that commit ₹1,00,000 a month, and the commitment is credited to your wallet. We can price it there because we run our own speech recognition, language model and voice on our own GPUs in India; owning the stack is how we keep a minute cheap at volume. On T1, Mirai phone calling adds ₹0.30 a minute (nothing from us if you bring your own Plivo number) and call insights add ₹0.20 a minute if you turn them on. Wallet credit never expires, though the commitment is a minimum monthly spend. A brand with a few NDRs a day can start on T5 at ₹5 a minute, pay as you go, with phone calling and insights included. T3 is ₹3 a minute with a ₹50,000 commitment. Prices exclude GST.

Put your own script in an agent.

Open the sandbox, paste your prompt and listen to it. Nobody asks for an email until you test a call.

Book a call

15 minutes with Sneh Mehta

Finding a time for us…

Open the sandbox