Skip to content
Vaakyo
← Blog

How to reduce RTO and failed deliveries with calls in Hindi and regional languages

Most RTO is decided at two moments, before dispatch and after a failed delivery attempt. A short call in the customer's language at each one confirms the order, books the re-attempt and fixes the address, and the result goes back to your systems.

The Vaakyo team6 min read

  • E-commerce
  • CRM
  • Playbooks

Every parcel that comes back unaccepted means shipping both ways, packaging, and days of stock sitting in a truck. The market is moving in the right direction. In ClickPost's data on more than 63 crore orders, prepaid orders rose from 32% to 41% in 2025, and returns fell from about 29% to under 22% (Social Samosa). Failed deliveries are still common, though. ClickPost, a logistics software company, puts first-attempt failures at about 1 in 5 parcels (CRN India), and couriers usually allow about three attempts before a parcel goes back as RTO (ClickPost).

So there are two moments where a phone call changes the outcome: before dispatch and after a failed attempt. This playbook covers both, in the customer's own language.

Before dispatch: confirm the order

A cash-on-delivery order that was never going to be accepted is easiest to catch before it ships. Call soon after the order is placed and confirm four things: that the customer still wants it, the address, a landmark, and a good time to deliver. Our COD confirmation playbook covers the script, retries and timing in detail.

The rest of this post is about the second moment, which most stores leave to the courier.

After a failed attempt: the NDR call

When a delivery fails, the courier raises a non-delivery report (NDR) with a reason: customer not available, address incomplete, customer refused. That reason isn't always the whole story ("main ghar pe hi tha!"). Whatever happened, you usually have until the next attempt to fix it.

Create a call as soon as the NDR reaches your system, from your shipping platform's webhook or your order system, with what the agent needs to know:

curl -X POST https://api.vaakyo.com/api/v1/agents/$AGENT_ID/call \
  -H "Authorization: Bearer $VAAKYO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to": "+919812345678", "user_data": {"name": "Ritu", "order_id": "KV-20931", "items": "a cotton kurta set", "ndr_reason": "customer not available", "attempt": "1"}}'

The user_data fills the agent's {variables} and comes back with the call's results, so the order_id ties the call to the shipment.

What the call sounds like

Here's an example call from Kurtaville, a clothing store that ships across India:

Agent: Namaste Ritu ji, main Kurtaville se bol rahi hoon. Aapke cotton kurta set ki delivery kal hone wali thi, par courier ne likha hai ki aap mil nahi paayi. Kya aap abhi bhi order lena chahengi?

Caller: Haan bilkul! Main toh ghar pe hi thi, kisi ne bell nahi bajayi.

Agent: Maafi chahti hoon. Hum dobara bhejte hain. Kal kis time aap ghar pe hongi, subah, dopahar ya shaam?

Caller: Shaam ko, chhe baje ke baad.

Agent: Theek hai. Aur ghar dhoondhne mein aasani ho, koi landmark bata dijiye?

Caller: Hanuman mandir ke peeche wali gali, teesra ghar.

Agent: Note kar liya. Koi doosra number hai jis pe delivery wale call kar sakein?

Caller: Haan, mere husband ka, 98XXX XX507.

Agent: Shukriya Ritu ji. Kal shaam ko delivery dobara hogi.

Keep it under two minutes: confirm the customer still wants the order, then get the re-attempt slot, the landmark and an alternate number. If they don't want it any more, ask why once and end the call politely. Set the agent to reply in the caller's language, so a customer who answers in Hindi, Hinglish or a regional language hears the same back.

Save the answers as data

Add these analytics fields on the Analytics tab so every call returns the same, typed result:

  • wants_delivery (yes or no);
  • reattempt_date (date: "kal" is worked out from the call's date);
  • reattempt_slot (choice: morning, afternoon, evening);
  • landmark (text);
  • alternate_phone (text);
  • customer_says_attempted (choice: no_attempt, missed_it, unclear): whether the customer says nobody came;
  • cancel_reason (choice: changed_mind, ordered_elsewhere, price, delay, other).

A field the call didn't cover comes back empty. It's never guessed.

The last two fields are worth tracking over time. A rise in no_attempt from one courier in one city is evidence you can take to that courier.

Send it back before the next attempt

The call.completed webhook carries the whole call: your user_data (with the order_id), the transcript, the summary and the extracted values. Your endpoint then updates the shipment before the courier's next attempt:

  • Wants delivery, with a slot: ask for a re-attempt on that date, with the landmark and alternate number added.
  • Doesn't want it: stop further attempts, record the reason, and get the stock back sooner.
  • Not reached: retry the call, and decide your rule for parcels you couldn't confirm.

Reliable webhooks explains how to receive these safely and handle retries.

Keep it on the customer's record

If your workspace has Vaakyo's CRM switched on, turn on Use the CRM in calls and Save each call on the caller's contact for this agent. Every call is then added to the customer's contact, and extracted values whose keys match your contact fields are copied across. Add contact fields called landmark and alternate_phone, and Ritu's landmark is on her contact for good. The next time you call her, about this order or the next one, the agent already knows how to find her house. If you also take orders by phone into the CRM, the agent can read the caller's orders and their status when someone calls asking "mera order kahan hai?".

Calling hours, retries and "baad mein call karo"

  • Turn on calling hours (Call tab) so an NDR raised at 10 PM is called the next morning, not at night.
  • People miss calls. Try once or twice more with a few hours in between, so the next try lands at a different time of day. A day's NDRs uploaded as a campaign retry no-answer and busy by themselves. For calls you place one at a time, place the next try from your system.
  • Turn on auto reschedule and "abhi bahar hoon, ek ghante baad call karna" becomes a call back booked for that time. See voicemail, retries and call-backs.
  • Answer rates depend on being recognised. In the State of Business Calling 2026 study, 79% of businesses said customers avoid calls from unrecognised numbers (Business Today). Call from one number your customers learn to recognise, and look at verified caller ID.

Measure it on your own orders

Industry averages won't tell you whether this works for you. Your own split will. For a few weeks, call some NDRs and leave the rest to the courier's usual process, picking them at random. Then compare the share delivered on the next attempt and the share that ended as RTO. Do the same for COD confirmation before dispatch. That comparison, on your orders, is the number to act on.

Set it up in Vaakyo

  1. Create an agent for NDR calls, with a prompt that follows the script above and uses {name}, {items} and {ndr_reason}.
  2. On the Analytics tab, add the fields above and turn on the summary.
  3. On the Call tab, turn on calling hours and auto reschedule.
  4. In Webhooks, add an endpoint for call.completed.
  5. If the CRM is on for your workspace, switch on Use the CRM in calls on the Tools tab and add the matching contact fields in CRM › Settings.
  6. Send a test NDR to your own number and check that the extracted values reach your endpoint.

Try it

Start your first NDR calls at vaakyo.com, and get more parcels delivered on the next attempt.

Get started today

Talk to an expert

Tell us about your calls. We'll help you plan the agent, the numbers and the rollout for your team.

Contact sales

Start building

Build an agent and talk to it in your browser in minutes. New workspaces start with ₹100 of free credits.

Start free