How to Notify Customers About Shipping Delays — Automatically
Nothing erodes trust faster than silence. A customer pays, gets the "your order is on its way" email, and then… nothing moves. The package sits in a carrier facility three days past its promised date, and the first they hear about it is the tracking page that hasn't updated. So they open a ticket. Then another. Then they email asking for a refund.
The fix is well understood and boring: tell people before they have to ask. Every best-practice guide — from Jeff Toister to Square to Omnisend — says the same thing: reach out the moment a delay is confirmed, be specific about the new date, apologize, and tell them you're watching it. The hard part isn't the message. It's noticing the delay across thousands of orders without a human babysitting a tracking dashboard.
This post shows how to build that proactive notification with Macha — the AI agent layer that sits on top of the helpdesk you already run (Zendesk, Freshdesk, Gorgias, Front) and connects to the commerce tools you already use, like Shopify and Slack. The goal: when an order falls behind, an agent detects it, posts a personalized update onto the Zendesk ticket, and quietly flags your ops team in Slack. No human in the loop until one is actually needed.
Quick framing: Macha isn't a shipping app or a helpdesk replacement. It's the layer that reads your Shopify orders, decides what to do, and takes the action inside the tools your team already lives in.
Why proactive beats reactive (the numbers)
"Where is my order?" — WISMO — is one of the largest, dullest, most automatable categories in ecommerce support. Gorgias data puts it at roughly 18% of incoming requests on average, and most operators see it land somewhere in the 20–40% of total support volume band, spiking past 50% during peak seasons. A large slice of that is delay-driven: the order didn't arrive when the confirmation email promised, so the customer comes looking.
The lever is timing. Vendors who sell proactive delivery notifications (so take the magnitudes as directional, not gospel) report meaningful WISMO reductions and higher CSAT on delayed shipments specifically when customers are told first — the intuition being that a customer who hears bad news proactively is far less likely to open a ticket than one who discovers the delay themselves. You don't need the exact figure to act on it. The mechanism is obvious: a delay you announce is an apology; a delay they discover is a complaint.
So the job is to turn a delay you'd otherwise find out about from the customer into a delay you surface first. That's an automation problem, and it's a good fit for an agent.
What the workflow looks like
Here's the shape of it, using the three tools this use case needs — Shopify (order data), Zendesk (the customer-facing update), and Slack (the internal heads-up):
| Step | Tool | What happens |
|---|---|---|
| 1. Detect | Shopify | Agent finds orders past their expected fulfillment/delivery date that haven't shipped or are stuck in transit |
| 2. Decide | Macha | For each late order, pull full details (line items, fulfillment status, new ETA) and draft a specific, empathetic update |
| 3. Notify customer | Zendesk | Post the update as a public reply on the order's ticket (creating one if needed) |
| 4. Alert the team | Slack | Drop a short note in #ops so a human can intervene on the worst cases |
A real customer-facing message from this flow reads like this:
Hi! We noticed your order #1523 is running a bit behind schedule. It's currently in transit and we now expect it to arrive by March 6. We're sorry for the delay and we're keeping an eye on it for you — no need to do anything on your end.
Specific order number, honest status, a concrete new date, an apology, and a commitment to watch it. That's the entire best-practice checklist in four sentences — and the agent fills in the order number and ETA from live Shopify data, so it's never a generic "sorry for any inconvenience" blast.
The honest part: how the delay actually gets detected
Here's where most "just automate it" articles wave their hands. Macha's Shopify connector exposes tools, not event triggers — you get search_orders, get_order, lookup_customer, get_customer_orders, and a handful more, but there is no native "Order Updated" webhook firing into Macha out of the box. So you have two genuinely different ways to make this proactive, and the right choice depends on how fast you need to react.
Option A — a scheduled trigger (the simple, robust default)
Macha's scheduled triggers run an agent on a recurring cron interval. You point one at a "shipping-delay sweep" agent and it runs every hour (or a few times a day), uses Shopify's Search Orders tool to pull orders that are unfulfilled or in-transit past their expected date, and for each one posts the Zendesk update and the Slack alert.
This is the approach I'd start with, because it's stateless and self-healing: if the run fails, the next sweep picks up the same orders. A few guardrails to know going in:
- Minimum interval is 1 hour, with a 24-runs-per-day cap and an org concurrency limit — so this is "checked hourly," not "instant to the second."
- Triggers auto-disable after 5 consecutive failures and email you, so a broken Shopify token can't silently spin forever.
- Scheduled triggers are plan-limited — Professional includes a few, Enterprise more — so budget one slot for this sweep. See the pricing page for current limits.
The one thing you must build in is idempotency: tell the agent not to re-notify an order it already messaged. The cleanest way is to have it tag the Zendesk ticket (or check for its own prior public reply) before posting, so a customer doesn't get the same "you're running behind" message every hour. Make that explicit in the agent's instructions.
Option B — a custom webhook (closer to real-time)
If "checked hourly" isn't tight enough, use Macha's universal webhook trigger: Macha generates a unique webhook URL with a signing secret — no connector required — and you point Shopify at it. With Shopify Flow (or a native Shopify orders/updated webhook), you fire that URL the instant fulfillment status changes, and the agent runs per event. You filter inside the agent's instructions: only act when the order is genuinely late, ignore the rest.
The trade-off is real: Option B reacts in seconds but needs Shopify Flow set up and is chattier (it fires on every order update, late or not, so your filtering logic has to be tight). Option A is slower but dead simple and needs nothing on the Shopify side beyond the existing connector. Most teams are well served by the hourly sweep; reach for the webhook only if your SLA genuinely demands sub-hour reaction.
Building it: the three tools on one agent
However you trigger it, the agent itself is the same. In the agent builder you wire three actions:
- Shopify → Get Order / Search Orders — read the order and its fulfillment status.
- Zendesk → Add Comment — post the public reply (or, if you want a human to send it, an internal note for an agent to approve).
- Slack → Send Message — drop the alert into
#ops.
Then the instructions do the reasoning: for each late order, write a short, specific, apologetic update that names the order number and the new expected date; post it as a public reply; if the delay is severe (e.g. more than a week past ETA or a high-value order), also post to #ops so someone can offer a discount or expedite. Because the message is generated per order from live data, you don't maintain a pile of canned macros — the agent adapts the wording to what's actually happening to that order.
If you'd rather not hand-configure all of this, Macha's build-with-AI flow lets you describe the workflow in plain language and it wires up the tools, trigger, and instructions for you — then you tune from there.
A note on credits and cost
Macha is credit-based, and credits are spent per AI action, not per ticket or per "deflection." The default model (GPT-5.4 Mini) costs 1 credit per action, with other models ranging roughly 0.5–9 credits depending on how heavy you go. So a sweep that notifies ten late orders is on the order of a few dozen credit-actions, not thousands. Before any batch run you get an estimate, and you're only billed for actions that actually succeed — a cancelled or errored step costs nothing. No per-seat surprise, no charge for the 990 orders that weren't late. See pricing for the plan that fits your volume, or start a 7-day free trial, no credit card required and meter it on your real store.
Watch-outs — when not to reach for this
Automation is a force multiplier in both directions, so be deliberate:
- Don't fully automate the public reply on day one. Start the agent in "internal note" mode — it drafts the delay message onto the ticket for a human to approve and send. Watch a week of its judgement (is it calling orders "late" that aren't? is the tone right?) before you let it post publicly without review.
- Get idempotency right or you'll spam people. A scheduled sweep with no "already notified" check will message the same customer every hour. This is the single most common way this workflow goes wrong — bake the dedupe into the instructions and tags before you turn it on.
- It's only as accurate as your fulfillment data. If your Shopify "expected delivery" dates are unreliable or your 3PL doesn't sync tracking back cleanly, the agent will mis-classify on-time orders as late. Fix the data source first.
- Severe delays still need a human. A two-day slip is a polite heads-up. A lost shipment or a two-week delay on a high-value order is a judgement call about refunds, reships, and goodwill — which is exactly why the Slack alert exists. Don't try to automate the apology and the remedy.
- Channel matters. This use case posts to the Zendesk ticket, which reaches customers who already have an open conversation. If you want to reach every delayed customer (most of whom never opened a ticket), pair this with a proactive email/SMS flow in your ecommerce stack — the agent handles the support-side communication, not your marketing broadcast.
This pairs naturally with Macha's other order-management agents — see the related use cases for auto-resolving "where is my order" inquiries and looking up order details mid-conversation, and the Shopify integration page for the full list of order tools.
FAQ
Does Macha have a native Shopify "order delayed" trigger? No — the Shopify connector provides tools (search orders, get order, lookup customer, etc.), not event triggers. You make the workflow proactive with a scheduled trigger (an agent that sweeps for late orders on a recurring interval) or a custom webhook (Shopify Flow calls Macha's universal webhook URL on order updates). Both are first-class in Macha.
How quickly will a customer be notified after a delay? With the scheduled approach, as fast as your interval — minimum one hour. With the webhook approach, within seconds of Shopify firing the event. Pick based on your SLA; most teams find an hourly sweep is plenty.
Will it message the same customer repeatedly? Not if you set it up correctly. Instruct the agent to tag the ticket (or check for its own prior reply) before posting, so each delayed order is notified once. This dedupe step is essential for any scheduled sweep.
Can a human approve the message before it goes out? Yes. Run the Zendesk action as an internal note so an agent reviews and sends, or as a public reply for full automation. Start with notes, graduate to public replies once you trust it.
What does it cost to run? Credits are spent per AI action (default model = 1 credit/action; 0.5–9 by model), billed only on success, with an estimate shown before batch runs. Notifying a handful of late orders is a handful of credit-actions. See pricing.
Which helpdesks does this work with? This example uses Zendesk, but Macha sits on top of Freshdesk, Gorgias, and Front too — swap the "Add Comment" action for the equivalent on your helpdesk.
Build it
If WISMO is eating your queue, the highest-leverage fix is to stop being the last to know. Start a 7-day free trial, no credit card required, connect Shopify and your helpdesk, wire up a shipping-delay agent, and let it tell customers what's happening before they open a ticket. Read the triggers and scheduling docs for the full setup, or browse the blog for more order-management automations.
Written by Abbas (Customer Support & AI, Macha) · Reviewed by Ankeet Guha (Co-founder & CTO) · Published 2026-06-24 · Last updated 2026-06-24.
Automate your support workflows
Macha's AI agents run entire workflows end to end across your stack.
Shopify
Stripe
Slack
Notion
Google Workspace
Confluence

