Connect Shopify to Walytic and automate order confirmation on WhatsApp
Wire up Shopify webhooks to a Walytic flow and start sending order confirmations, payment receipts, shipping updates, and cancellation notices on WhatsApp — in under 10 minutes.
What you'll build
When a customer places an order in your Shopify store, Walytic automatically sends them a WhatsApp message that looks like a personal note — order ID, items, total, payment status, and a tracking link once the order ships. No code, no Zapier middleman, no per-conversation fees from Meta.
The same wiring handles the rest of the order lifecycle too:
- Order confirmation — fired on
orders/create - Payment receipt — fired on
orders/paid - Shipping / fulfillment update — fired on
orders/fulfilled - Cancellation notice — fired on
orders/cancelled - Abandoned checkout nudge — fired on
checkouts/abandoned
This guide focuses on order confirmation. The other events work the same way; just repeat Steps 3–5 with a different Shopify event.
What you'll need
- A live Shopify store (any plan — Starter, Basic, Shopify, Advanced, or Shopify Plus)
- A Walytic account with at least one connected WhatsApp number (free 14-day trial works; see Connect your first WhatsApp number)
- Admin access to both Shopify and Walytic
Step 1: Create a new flow in Walytic
In your Walytic dashboard:
1. Go to Auto Flows in the left sidebar.
2. Click New Flow.
3. Name it something clear — for example, "Shopify — Order Confirmation".
4. Pick the WhatsApp session (the connected number) that should send these messages. Use a business number, not your personal one.
Click Create.
Step 2: Add a Webhook trigger
Inside the flow editor:
1. Open the Triggers category in the left palette.
2. Drag the Webhook Received node onto the canvas.
3. Click the node to open its settings.
4. Copy the Webhook URL shown in the panel. It looks like:
https://api.walytic.com/v1/flows/<your-flow-id>/webhook?token=<your-secret>Keep this tab open. You'll paste the URL into Shopify in a moment.
> Tip: the ?token=… query parameter is your shared secret. Shopify doesn't include custom auth headers in webhook calls, so the token is how Walytic verifies the request is genuinely from your store. Don't share this URL publicly.
Step 3: Build the order-confirmation message
Now wire up what gets sent when the webhook fires.
1. Drag a Send Template (or Send Message) node from the palette onto the canvas.
2. Connect the Webhook trigger's bottom handle to the new node's top handle.
3. Click the Send node and compose the message. You can mix static text with template variables pulled from the Shopify payload:
Hi {{customer.first_name}} 👋
Thanks for shopping with {{shop.name}}! Your order is confirmed.
🧾 Order #{{order.name}}
📦 {{order.line_items_0_title}} ({{order.line_items_0_quantity}}x)
💰 Total: {{order.total_price}} {{order.currency}}
🚚 Estimated delivery: 3–5 business days
We'll message you again as soon as your order ships. If you have any questions, just reply to this chat.4. In the Recipient field of the node, set it to the dynamic field {{customer.phone}}. Walytic extracts this from the Shopify payload automatically.
> Variable names match Shopify's webhook payload keys with dots replacing slashes. customer.first_name → Shopify's customer/first_name. order.total_price → order/total_price. If a variable is empty, the literal {{...}} is dropped from the message — your customer never sees a broken token.
Step 4: Add a Jitter node (recommended)
Between the Webhook trigger and the Send node, drop a Jitter node and connect the chain as:
Webhook Received → Jitter → Send TemplateConfigure:
- Min: 10 seconds
- Max: 45 seconds
- Unit: seconds
This adds a small, randomized delay so that burst orders (e.g. a flash sale) don't fire 200 messages at the same exact millisecond. The randomized cadence is one of the strongest signals that a number is operated by a real human team, not a bot farm.
Step 5: Test the flow
Before pointing Shopify at the real webhook, send a sample payload manually.
1. Click the Webhook trigger node. You'll see a Send Test Payload button.
2. Click it. Walytic shows a panel with a sample JSON body. You can either accept the sample or paste a real Shopify-shaped payload you grabbed from your own store.
3. Click Fire Test.
Walytic processes the test payload through the flow, the Jitter waits its random delay, then the Send node attempts to deliver to the recipient number. Check the Flow History tab to see the exact result and message preview.
If anything fails, Flow History shows which node errored and why (bad variable, missing session, etc.).
Step 6: Create the webhook in Shopify
Switch to your Shopify admin in a new tab.
1. Go to Settings → Notifications (in older versions, Settings → Webhooks).
2. Scroll to the bottom of the page to the Webhooks section.
3. Click Create webhook.
4. Configure the webhook:
- Event: Order creation (this is the orders/create event)
- Format: JSON (required — Walytic does not parse XML)
- URL: paste the Walytic webhook URL you copied in Step 2
- API version: leave on the latest stable version
5. Click Save webhook.
Shopify immediately sends a verification ping to that URL. Walytic responds with HTTP 200 and the webhook becomes Active in your Shopify list.
Step 7: Place a real test order
Now run the full pipeline end-to-end with a real customer order.
1. Open your Shopify storefront in an incognito window.
2. Place a small test order using a phone number you can read WhatsApp messages on.
3. Watch the Flow History tab in Walytic. Within a few seconds you should see:
- Webhook received from Shopify
- Jitter delay applied
- Send node dispatched to the session
- WhatsApp delivery confirmation
4. Check the customer's WhatsApp. The message should land within the jitter window — usually 10–45 seconds after the order.
If the message doesn't arrive, walk through Troubleshooting below.
Step 8: Turn the flow on
Once the test order works:
1. Open your flow in Walytic.
2. Click the Active toggle in the top right so it turns green.
3. Confirm in Flow History that new Shopify orders are landing as received.
The flow now runs forever on every order, until you pause it.
Optional: add more events
Repeat Steps 3–6 for any other Shopify events you want Walytic to react to. Each event needs its own Walytic flow (one webhook URL per flow), but the same connected WhatsApp number can send for all of them.
Common follow-up flows:
| Shopify event | When it fires | Suggested message |
|---|---|---|
orders/paid | Payment captured | "Payment received for order #{{order.name}}. We're preparing it now." |
orders/fulfilled | Tracking number generated | "Your order has shipped! Track it: {{fulfillment.tracking_url}}" |
orders/cancelled | Order cancelled | "Order #{{order.name}} has been cancelled. Refund of {{order.total_price}} processed." |
checkouts/abandoned | Customer left checkout (10+ min, configured in Shopify) | "You left something in your cart. Complete your order: {{checkout.abandoned_checkout_url}}" |
In each case, the variable names are pulled from the corresponding Shopify payload.
Optional: add a Condition node
If you only want to confirm orders above a certain value, or only send shipping updates for domestic orders, drop a Condition node between the Webhook trigger and the Send node.
Example: only confirm orders over $50.
IF {{order.total_price_usd}} >= 50
→ Send Template
ELSE
→ End (do nothing)Conditions support AND/OR groups, regex, and comparisons against any payload field. See the flow builder reference for the full list of operators.
Troubleshooting
Webhook returns 401 / 403 in Shopify
The ?token=… part of the URL got truncated. Copy the full URL from the Walytic trigger node again, including the query string.
Flow History shows the webhook arrived but no message was sent
Open the Send node's run log. Usually one of three things:
- The recipient number is missing. Verify
{{customer.phone}}is set as the Send node's recipient. - The variable name doesn't match. Use the payload viewer in Flow History to see the actual JSON keys.
- The session isn't connected. Open WhatsApp Connections and confirm the session shows a green Connected badge.
Messages land but variables are blank
You're using a variable that doesn't exist in that event's payload. orders/fulfilled doesn't have {{customer.phone}} in the same place as orders/create. Open the payload viewer in Flow History to see what's actually present and adjust the variable name.
Shopify says the webhook is "Failed"
Click the failed webhook in Shopify. The most common reason is that Walytic returned a non-200 response. Two things to check:
- Is the flow Active in Walytic? Paused flows reject webhooks with 503.
- Is the connected WhatsApp number in good standing? If the session is logged out, Walytic returns 503 to prevent backlogs.
Re-deliver from the Shopify webhook list once you've fixed the underlying issue.
Customer says they didn't get the message
Verify the phone number on the order is a WhatsApp-enabled number. The Walytic send will succeed even if the number isn't on WhatsApp — the message simply won't arrive. To check, open Settings → Number Checker in Walytic and validate the customer's number.
What to try next
- Build your first WhatsApp automation flow
- Mimic human cadence with the Jitter node
- Set up API keys for custom server-side integrations
- Use the AI Conversation node to answer "where is my order?" automatically
- Browse the help center for more guides
Need help?
If you get stuck, our team will set up the integration with you. Email [email protected] with a link to your Shopify store and we'll configure the flows together over a 30-minute screen-share.
Looking for another integration?
Walytic works with any tool that can send a webhook. If you don't see your platform here, you can build the same flow in minutes, or email us and we'll add it.
