Dvaarik asks cash-on-delivery customers to confirm their orders, follows up failed deliveries and reminds Shopify shoppers about unfinished checkouts, on WhatsApp first or by phone, and writes the customer's answer back to the Shopify or WooCommerce order. A new COD order gets a WhatsApp message with buttons to confirm, change the address or cancel; a failed delivery gets Deliver again, New address or Return order. You choose whether the agent messages, calls or does both, and calls go only to customers whose consent to be called is recorded. Several things changed since the first version of this guide. Connecting a store is now self-serve from the dashboard, and the customer's answer now lands on the order: on Shopify a confirmation tags the order cod-confirmed, a cancellation cancels the unpaid order and restocks it, and a new address is written and read back; on WooCommerce a confirmation adds a private order note and moves a pending or on-hold order to processing, a cancellation sets it to cancelled, and a new address is written and read back. A custom-built store can carry each decision out through its own signed actions endpoint, every new COD order gets a risk level with its reasons, and Magento stores can connect in early access. Requests to Shiprocket, such as a reattempt or a return, are still made by your team in Shiprocket. Dvaarik charges ₹0.50 for each call minute, in 30-second steps, and ₹0.05 for each successful AI reply, with no monthly fee. WhatsApp template messages are billed by Meta to your own WhatsApp Business account, and your phone company and speech and AI providers bill you directly for calls. The implementation statements below were checked against the product on 7 Oct 2026.
Which ecommerce order events can Dvaarik act on today?
Dvaarik acts on four kinds of order event. Each one needs a connected store, and the three follow-up workflows stay off until you switch them on.
| Job | Where the event comes from | What Dvaarik does | Guards | What stays with your team |
|---|---|---|---|---|
| COD confirmation | Shopify orders/create, WooCommerce order webhooks, Magento orders read every two minutes, or the custom store API | WhatsApp message with Confirm order, Change address and Cancel order, a call, or both; the answer is applied to the Shopify, WooCommerce or Magento order, or sent to a custom store's actions endpoint | COD payment-method match, fresh Shopify or Magento order, one case per order, a risk level per order, WhatsApp opt-outs, calling hours and recorded call consent | Orders that show an online payment, and custom-store orders without an actions endpoint |
| Failed delivery | Shopify fulfilment updates with a failed attempt, Shiprocket's undelivered push or the custom store API | Deliver again, New address or Return order on WhatsApp or a call; on Shopify-fulfilled parcels the answer becomes a tag and note when you allow it | One case per failed delivery; Shiprocket facts read from your own Shiprocket API user | Reattempt, address and return requests in Shiprocket |
| Unfinished checkout | Shopify checkouts/create and checkouts/update, or the custom store API | WhatsApp reminder with the cart's photo and a Complete checkout button after the delay you choose; optionally a call | Phone required; shoppers who agreed to messages by default; Shopify rechecked for a completed order before sending | Offers and discounts |
| "Where is my order?" | A customer asking on WhatsApp, website chat, Instagram or a call (Shopify, WooCommerce and Magento stores; Magento by order number) | Reads the order's status from the store, with the courier and tracking details | WhatsApp number or caller ID, or the order number plus phone on chat; Magento always needs the order number | Delivery promises the store does not show |
The comparison above states the published row-by-row differences; read each row with its source, date, and qualifying notes.
Shopify documents webhooks as event notifications and uses orders/create as its worked example, and Shiprocket defines an NDR as a shipment the courier could not deliver. Those official definitions explain the triggers; the Dvaarik behaviour in the table comes from the current product code. Setup guides: Shopify, WooCommerce and the custom store API.
How does COD confirmation avoid duplicate or stale messages?
A connected Shopify store signs every order event with its app's secret. Dvaarik verifies the signature, matches the order against your cash-on-delivery payment method and ignores prepaid orders, which get an "order confirmed" message instead. An order that arrives more than six hours after it was placed is ignored rather than treated as a new request. WooCommerce orders are matched on their cash-on-delivery payment method the same way, and a cancelled or refunded WooCommerce order stops the follow-up.
Duplicates are fenced twice. Shopify can retry a delivery with the same webhook ID, and a store can send the same order through two subscriptions; Dvaarik keeps each delivery once and one case per order, so a customer is never asked twice about one order.
The case then follows the strategy you chose: WhatsApp only, WhatsApp then a call, a call first, or manual review, after the delay you set. WhatsApp messages skip anyone who opted out of your messages. Calls wait for calling hours, skip your Do Not Contact list and go only to customers whose consent to be called is recorded.
Each new COD order also gets a risk level, low, medium or high, with up to three reasons, worked out only from your own business's recent orders in Dvaarik and the order itself: an earlier parcel to this number sent back, cancelled or failed orders, several COD orders from one number in a day, a weak address or an invalid PIN code. If you choose, a high-risk order waits for you instead of being messaged or called; it is not held in your store.
What happens to the order when the customer answers?
Once your COD confirmations workflow is on, the customer's answer is applied to the order itself:
- Shopify: a confirmation tags the order cod-confirmed and releases an optional "Waiting for COD confirmation" shipping hold; a cancellation cancels the order and restocks it without requesting a refund; a new address replaces the shipping address and is read back from Shopify. An order that shows a payment is never cancelled, and an address cannot change once shipping has started. The Shopify app needs the write_orders permission, and the hold needs the merchant-managed fulfilment-order permissions.
- WooCommerce: a confirmation adds a private order note and moves a pending or on-hold order to processing; a cancellation sets the order to cancelled and WooCommerce restores the stock, never for an order paid online; a new address is written to the order and read back. The store's REST API keys need Read/Write access.
- A custom-built store: each decision is sent as a signed action to the actions endpoint its developer exposes, and the store answers applied, rejected or pending. Without an actions endpoint, the decision is recorded for your team.
- Magento (early access): a confirmation becomes a private comment in the order's history with the order's status unchanged; a cancellation uses Magento's own Cancel, which returns the stock, never once anything is invoiced or shipped or for an order paid online; a new address is written with the store's own region and the recipient kept. The Magento connection has run end to end on one real Magento Open Source 2.4.9 store so far.
The customer is told the store will confirm, and the WhatsApp note that the change is done goes out only after the store shows it. A failed-delivery answer is applied automatically only if you switch on automatic reattempts or returns; otherwise it waits for your approval on the Failed deliveries page. A Shopify store can also offer "Pay online now": the confirmation message adds a button to Shopify's own payment page for the order, and an order paid before it ships closes as prepaid.
How does the failed-delivery follow-up work?
A failed delivery reaches Dvaarik in one of three ways: a Shopify fulfilment update that shows a failed attempt, Shiprocket's undelivered push, or your own software through the custom store API. For Shiprocket, Dvaarik trusts the push only for the tracking number: the buyer's phone and the order come from Shiprocket's own API on your Shiprocket API user, so a forged push cannot make Dvaarik contact a number of its choosing. The Shiprocket connection is set up with the Dvaarik team.
Each failed delivery opens one case, so repeated courier scans of the same parcel do not repeat the conversation. The customer answers Deliver again, New address or Return order. For a parcel Shopify fulfilled, the answer is added to the Shopify order as a tag with a note for your shipping team, because Shopify has no courier controls of its own.
Requests to Shiprocket are not sent automatically. Shiprocket's NDR processing guide has the seller submit the reattempt, corrected address or RTO choice in its panel, and that step stays with your team.
How do unfinished-checkout reminders avoid messaging a buyer who already paid?
Shopify does not publish an abandoned-checkout event. Dvaarik starts from checkout create and update events that carry a phone number, waits for the delay you choose (1 to 48 hours), and refreshes the same checkout instead of opening another case. By default only shoppers who agreed to receive messages get a reminder.
Immediately before sending, Dvaarik asks Shopify whether the checkout became an order. A completed purchase closes the reminder; if Shopify cannot answer, Dvaarik retries a few times and then stops rather than message a buyer who may have paid. The reminder is a WhatsApp marketing template with the cart's photo, a Complete checkout button and a Stop promotions button, and you can follow it with a call. WooCommerce's order webhooks do not describe an unfinished cart, so a WooCommerce store sends checkout events through the custom store API.
What does COD and NDR follow-up cost at ₹0.50 a call minute?
Dvaarik charges ₹0.50 for each call minute, in 30-second steps of ₹0.25, and ₹0.05 for each successful AI reply. A WhatsApp confirmation, failed-delivery or shipping message is a template that Meta bills to your own WhatsApp Business account; Dvaarik adds no charge to it, and a customer tapping a button is not an AI reply. Language coverage on calls follows the speech models you connect, so check the rate card of the speech model that covers your buyers' languages.
| Illustrative month | Assumption | Dvaarik charge |
|---|---|---|
| 600 COD confirmation messages | WhatsApp templates, buttons tapped | ₹0 |
| 150 COD fallback calls | 1.5 charged minutes each, 225 minutes | ₹112.50 |
| 100 failed-delivery calls | 2 charged minutes each, 200 minutes | ₹100 |
| 400 AI replies | customers writing back | ₹20 |
| Total | ₹232.50 |
The comparison above states the published row-by-row differences; read each row with its source, date, and qualifying notes.
The table is scenario arithmetic, not a measured customer result: replace the counts and durations with your own. A 40-second call is charged as two 30-second steps, ₹0.50. Meta's message charges, your phone company's charges and your speech and AI providers' charges are separate from this table of Dvaarik charges; the pricing page is the current public direct-rate reference.
What must be set up before the first message?
Most of the setup is self-serve:
- Sign up as a D2C brand and connect the store on the Top Products page: for Shopify, a custom app's Client ID and Client secret with the read_products, read_orders, read_customers, read_fulfillments and write_orders permissions (plus the merchant-managed fulfilment-order permissions if you want shipping held until the customer confirms); for WooCommerce, REST API keys with Read/Write access; for Magento, an integration's access token.
- For Shopify, add the connection URL from your dashboard to the store's webhooks; events are verified with your app's secret. For WooCommerce, pressing Test with Read/Write keys creates the order webhooks; with a Read-only key the Dvaarik team sets them up. Magento needs no webhook: new orders are read from the store. The Shiprocket connection is set up with the Dvaarik team.
- Connect your own WhatsApp Business number. The order message templates need Meta's approval in each language you use: English, Hindi or Telugu.
- For calls, connect your phone company account with a working number and your speech and AI accounts, keep credits in your wallet, and make sure the customers you call have recorded consent.
- On the COD confirmations, Failed deliveries and Cart recovery pages, choose the contact strategy, delays and attempts, and switch each workflow on.
- Place a test order with your own number before any customer sees a message.
Magento connects in early access (Magento integration). BigCommerce and other platforms are not connected directly; a custom-built store can send the same events, and carry out the decisions, through the custom store API.
Are COD confirmation and NDR messages treated like cold marketing?
Do not use an order-support workflow as permission to contact an unrelated list. These workflows act on the merchant's own order, checkout or delivery events; bought, rented or scraped lists do not belong in them.
TRAI's current UCC definition excludes transactional and service voice calls, while still placing commercial communications inside a registered-sender and access-provider framework. The exact classification depends on the call's purpose and content. A COD or delivery-problem call should stay limited to that order. An unfinished-checkout reminder is promotional: Dvaarik sends it as a WhatsApp marketing template with a Stop promotions button, by default only to shoppers who agreed to receive messages, and a reminder call needs the merchant's own compliance review.
The primary regulatory reference is TRAI's 2025 amendment to the Telecom Commercial Communications Customer Preference Regulations. This page describes product controls, not legal advice.
Frequently asked questions
Can Dvaarik automatically confirm new Shopify COD orders?
Yes. With the COD confirmations workflow switched on, a fresh Shopify COD order gets a WhatsApp message with buttons to confirm, change the address or cancel, or a call if you choose, only to customers with recorded call consent. The answer is applied to the Shopify order: tagged cod-confirmed, cancelled and restocked, or re-addressed before shipping. Prepaid orders, orders more than six hours old and duplicate deliveries do not start a confirmation.
Does Dvaarik work with WooCommerce cash-on-delivery orders?
Yes. WooCommerce order webhooks start the same confirmation, and with Read/Write REST API keys the answer is written back: a confirmation adds a private order note and moves a pending or on-hold order to processing, a cancellation cancels the order and WooCommerce restocks it (never for an order paid online), and a new address is written and read back. Pressing Test with Read/Write keys creates the order webhooks; with a Read-only key the Dvaarik team sets them up.
How much do COD confirmation calls cost?
Dvaarik charges ₹0.50 for each call minute, in 30-second steps. For illustration, 150 fallback calls averaging 1.5 charged minutes use 225 minutes, ₹112.50 in Dvaarik call fees. WhatsApp confirmation messages carry no Dvaarik charge; Meta bills them to your own account. Your phone company and your speech and AI providers bill you separately for calls.
Will an unfinished-checkout reminder go to a buyer who already paid?
Dvaarik asks Shopify immediately before sending whether the checkout became an order. A completed purchase closes the reminder. If Shopify cannot answer, Dvaarik retries a few times and then stops rather than message a buyer whose payment status it cannot verify.
Can I connect Shopify myself from the dashboard?
Yes. Paste your custom app's Client ID and Client secret on the Top Products page, press Test and add the connection URL to your Shopify webhooks. WooCommerce is self-serve too, and its Test creates the order webhooks when the keys have Read/Write access; the Shiprocket connection is set up with the Dvaarik team.
Does the failed-delivery follow-up update Shiprocket?
No. Dvaarik records the customer's choice and, for a parcel Shopify fulfilled, adds it to the Shopify order as a tag and note when you allow it. Reattempt, address and RTO requests are still submitted by your team in Shiprocket's NDR panel.
Start with one workflow and one measurable outcome: confirmed COD orders, a failed-delivery answer, or a recovered checkout. Test it with your own order, then switch on the next one.
Plan your COD and delivery follow-up
LoginTagged

Written by
Rohith Sriramula
Founder & CEO, Dvaarik AI
A laid-off engineer who went all in on Dvaarik AI. He builds the platform and product workflows from hands-on work with Indian businesses, not theory.