Back to the lifecycle

Why did the payment not go through?

A note that reads how the checkout ended, from a UPI app that didn’t open to a page that was closed.

The checkout abandonment flow, by email and WhatsApp

What does this flow do?

Most checkout emails assume people changed their minds. In India, a lot of them simply had a UPI app that never opened.

This flow reads how the checkout ended and writes for that, starting on WhatsApp when it can.

When does it start?

About half an hour after a checkout ends without payment: either the payment window was dismissed, or the page was closed after contact details were entered.

How does it run, step by step?

A watercolour journey painted down the page through the 6 steps of the checkout abandonment flow, with an exit that dries pale where customers can leave.
  1. A checkout ends unpaid; the event says how it ended.
  2. Any cart flow for this person stops: checkout outranks cart.
  3. WhatsApp goes first, if they have a phone number. If they read it, the first email is skipped.
  4. Otherwise the first email goes out, written for how the checkout ended.
  5. A day later, a note with the cart still saved and the gap to the next discount.
  6. A payment at any point ends the flow.
What happens before every send?

Every email in every flow passes the same quiet check first. Is the customer still in this flow? Have they bought since it started? Have we emailed them in the last couple of days? If any answer says wait, the flow waits a day and asks again, rather than piling another email on top.

After the send, the flow marks a short cooldown, so the next flow that wants this person knows to give them a breather.

Want to try the decision yourself?

How did the checkout end?
A watercolour route forks after checkout: one branch for a payment window that closed, one for a page that was closed.Checkout startedPayment trouble emailSaved cart email

The payment window closed, so the email talks about a UPI app that didn’t open or an OTP that never arrived, and reminds them: don’t pay twice.

The Liquid that picks the email
{%- assign how = src | default: last_source -%}
{%- if how == "dismissed" -%}
payment
{%- else -%}
closed
{%- endif -%}

How do you build this on your platform?

These are the events the flow needs, and where each one comes from on your store.

Your store runs on
  • Checkout abandoned Needs a small recipe

    Native checkout: Shopify Flow “Customer abandons checkout”. Razorpay Magic Checkout, GoKwik or Cashfree: their abandonment webhook through a relay.

Full Shopify setup

  • Checkout abandoned Works out of the box

    The plugin sends $StartedCheckout; the flow waits and checks no order arrived.

Full WooCommerce setup

  • Checkout abandoned Works out of the box

    Our plugin sends Magic Checkout’s abandon events, including whether the payment window was dismissed.

Full Magento setup

How does it connect to the other flows?

  • It pre-empts cart abandonment for the same person.
  • A successful payment hands them to post-purchase.

What does one of the emails say?

An excerpt. The full emails change with each customer’s order and medium.

Questions people ask about this flow?

What is the difference between cart and checkout abandonment?

A cart is a list. A checkout means someone entered their details and was about to pay. Checkout drop-offs are often payment trouble, not second thoughts, so we write to them differently and let checkout outrank cart.

Can you tell why an Indian payment failed?

Partly. With Razorpay Magic Checkout we know whether the payment window was dismissed or the page was closed. A dismissed window and a UPI app that never opened look the same, so the email covers both kindly.

Why send WhatsApp before email here?

A failed payment is urgent and personal, and WhatsApp gets read fast. If the WhatsApp is read, we skip the first email so nobody gets told the same thing twice.