Skip to content

Guide · For businesses

How to automate WhatsApp order notifications from WooCommerce (confirmation, shipped, delivered)

A step-by-step set-up that sends an approved WhatsApp template when a WooCommerce order is placed and when its status changes, with the exact field mapping, phone-number fixes and the traps to avoid.

By Broadchat teamPublished 8 min read

हिन्दी में पढ़ें

In short

WooCommerce can call a URL whenever an order is created or updated. Point a WooCommerce webhook at a Broadchat workflow's Custom Webhook URL, clean the billing phone number into 91XXXXXXXXXX format, route by order status, and send an approved utility template for each stage. Store the last status you notified on the contact so repeated 'order updated' events do not send duplicates, and only message customers who agreed at checkout.

Key takeaways

  • WooCommerce's own webhooks (WooCommerce → Settings → Advanced → Webhooks) are the trigger; no plugin is required.
  • Use one workflow for Order created and another for Order updated, with a router that sends a template only for the statuses you care about.
  • Checkout phone numbers rarely include the country code; the formula 91slice(parseNumber(...);-10) fixes Indian numbers.
  • Order updated fires on many edits, so save the last notified status on the contact and skip repeats.
  • Order and shipping messages are utility templates; keep them free of offers or Meta may recategorise them as marketing.

Send WhatsApp order notifications from WooCommerce

Time needed: 1 h 30 min. You will need: WordPress admin access to your WooCommerce store, Broadchat panel with Automations and a connected WhatsApp number.

  1. Get the order templates approved

    Create utility templates for order confirmation, shipped (with a tracking URL button) and delivered in CRM → WhatsApp Templates, with realistic sample values, and wait for approval.

  2. Create the workflow and webhook URL

    In Automations → Workflow create a workflow, add the Custom Webhook trigger, generate the hook and copy the Webhook URL.

  3. Add the webhook in WooCommerce

    In WooCommerce → Settings → Advanced → Webhooks click Add webhook, set Status Active, Topic Order created, paste the URL as Delivery URL and save.

  4. Capture a real order

    Click Capture Incoming Webhook in the workflow, place a test order with your own number, then Show Received Data to see billing, number and total fields.

  5. Clean the number and send the confirmation

    Add Send Template Message (V2) with WhatsApp Number 91slice(parseNumber({{1.billing.phone}});-10) and map name, order number and total to the template variables.

  6. Add status updates without duplicates

    Create a second workflow for the Order updated topic, route by {{1.status}}, compare with a last_notified_status custom field and send the matching template only once.

  7. Go live and monitor

    Activate both workflows, place real test orders through each status, and check the run history and WooCommerce's webhook delivery log.

How the pieces fit

WooCommerce WhatsApp order notifications need three things: an event from the store, something that turns it into a WhatsApp message, and an approved template. WooCommerce supplies the event through its built-in webhooks: when an order is created or updated, it POSTs the order as JSON to a URL you choose. A Broadchat workflow receives it, cleans the data and sends a template from your WhatsApp number.

Broadchat's WooCommerce integration syncs products and creates orders from WhatsApp chats, but it does not receive orders placed on your website. That is what this guide adds. Shopify stores follow the same webhook pattern; see the Shopify integration for what is native there.

Step 1: get the order templates approved

Business-initiated messages need approved templates. Create three Utility templates in CRM → WhatsApp Templates for Rangoli Home, an online home-decor store:

TemplateBodyButton
order_confirmedHi {{1}}, thank you for your order {{2}} of {{3}} at Rangoli Home. We will message you here when it ships.none
order_shippedHi {{1}}, your Rangoli Home order {{2}} has been shipped with {{3}}. Track it with the button below.URL: Track order, https://rangolihome.in/track/{{1}}
order_deliveredHi {{1}}, your order {{2}} has been delivered. Reply here if anything is not right and we will help.none

Submit them with realistic samples (Priya, #48213, ₹2,349). Utility templates must not promote anything; "Use code WELCOME10 on your next order" turns a confirmation into marketing. Meta's review can take up to 24 hours. The order update templates have more approved-style variants.

Step 2: create the workflow and webhook URL

  1. Open Automations → Workflow and click Create Workflow; rename it "Woo: order created".
  2. Click Add Trigger, choose Webhook → Custom Webhook, enter a Webhook Title and click + Generate Hook.
  3. Copy the Webhook URL (https://<your panel domain>/api/automations/hook/<token>). Treat it like a password.

Step 3: add the webhook in WooCommerce

  1. In WordPress, open WooCommerce → Settings → Advanced → Webhooks and click Add webhook.
  2. Name: Broadchat order created. Status: Active. Topic: Order created.
  3. Delivery URL: the Webhook URL from step 2. API version: the latest WP REST API version offered.
  4. Click Save webhook.

On save, WooCommerce sends a small "ping" containing only webhook_id. The Custom Webhook accepts it (it takes JSON and form-encoded bodies), but it is not an order, so do not map fields from it.

Step 4: capture a real order

In the workflow, click Capture Incoming Webhook, then place a test order on your store with your own mobile number (a cash-on-delivery order you cancel later is fine). When the data arrives, click Show Received Data. The fields you will use most:

WooCommerce fieldMappingExample
Customer first name{{1.billing.first_name}}Priya
Phone{{1.billing.phone}}98290 12345
Order number{{1.number}}48213
Total and currency{{1.total}}, {{1.currency}}2349.00, INR
Status{{1.status}}processing
Payment method{{1.payment_method_title}}Cash on delivery

Step 5: clean the number and send the confirmation

Checkout phone fields are typed by customers, so you will see 9829012345, 09829012345 and +91 98290 12345. WhatsApp needs digits with the country code. Add CRM → Send Template Message (V2) and map:

FieldValue
Select Channel / Select Templateyour number / order_confirmed
WhatsApp Number91slice(parseNumber({{1.billing.phone}});-10)
Variable 1{{1.billing.first_name}}
Variable 2#{{1.number}}
Variable 3₹{{1.total}}

parseNumber keeps only digits, slice(…;-10) keeps the last ten, and 91 adds India's country code. If you also ship abroad, put a Basic Router before the send with a filter on {{1.billing.country}} is IN for this formula, and map the international path as parseNumber({{1.billing.phone}}) after making the phone field require a country code.

Before the send, you can also add CRM → Create / Update Contact (same number formula, Name {{1.billing.first_name}} {{1.billing.last_name}}) and Assign Tags to Contact (Creates Tag if Tag not exist) with customer and src-woocommerce, so buyers appear in CRM → Contact for later segments. For cash-on-delivery orders, a confirm-or-cancel flow reduces returns; see COD order confirmation.

Step 6: add status updates without duplicates

Create a second workflow, "Woo: order updated", with its own Custom Webhook, and a second WooCommerce webhook with Topic Order updated. WooCommerce fires this topic on many edits (a note, an address correction, a status change), so the workflow must decide when to message:

  1. CRM → Create / Update Contact with the cleaned number, so the contact exists.
  2. CRM → Get Single Custom Field of a Contact for a Super Field last_notified_status (create it first in CRM → Super Field).
  3. Basic Router with one path per status you notify, each with two filter conditions joined by AND: {{1.status}} is completed (or your shipped status), AND the field value from step 2 is not completed.
  4. On each path: Send Template Message (V2) with the matching template, then CRM → Update a Custom Field setting last_notified_status to the new status.

Plain WooCommerce has no separate "shipped" status; many stores use a shipment-tracking plugin or a custom status, and the tracking number and courier are stored as order meta. Look in the captured sample for where your plugin puts them, and map the courier name and tracking id into order_shipped. If the last-notified check is skipped, a customer can receive the same "delivered" message several times when staff edit the order, which is a fast way to collect blocks.

Step 7: go live and monitor

Switch both workflows to Active (an inactive workflow answers WooCommerce with 409, which WooCommerce logs as a failed delivery). Place one order and move it through each status. Then check:

  • the workflow History: each run, each step's input and output, and errors such as "Enter the receiver WhatsApp number with country code";
  • WooCommerce's webhook log (the webhook's edit page and WooCommerce → Status → Logs), which shows response codes; WooCommerce disables a webhook after repeated delivery failures, so fix errors quickly;
  • the channel's messaging wallet, because template sends fail when the balance is too low.
ProblemLikely causeFix
No run appearsWebhook disabled in WooCommerce or wrong URLRe-enable it; paste the current Webhook URL
Run fails at the sendTemplate not approved for the selected channel, or variable count mismatchRe-pick the template; map every variable
Same message twiceOrder updated fired twice and no last-notified checkAdd steps 2-4 of the status workflow
Wrong person messagedNumber without country code taken as another countryUse the number formula and the country router

What it costs

Every order notification is a utility template, charged per delivered message even if the customer chatted with you that day: ₹0.115 per utility message to India (Meta rate card effective 1 Oct 2026, excl. GST). A store sending three updates per order pays three utility messages per order to Meta, plus your platform plan. Each workflow step also counts as a task. See WhatsApp API pricing and use the pricing calculator for your volumes.

For how workflows, triggers and webhooks work in general, read the WhatsApp automation workflows guide; for template rules, the WhatsApp message templates guide. Agencies that build WooCommerce stores can add WhatsApp notifications as a recurring service under their own brand with the white-label platform.

Sources

  1. Webhooks — WooCommerce, checked 12 October 2026
  2. WooCommerce REST API: orders — WooCommerce, checked 12 October 2026
  3. Template categorization — Meta for Developers, checked 12 October 2026
  4. Pricing on the WhatsApp Business Platform — Meta for Developers, checked 12 October 2026

Broadchat team · Product and partner success team

The people who build and support Broadchat, the white-label WhatsApp Business API platform. We write from what we see while onboarding partners and their clients on the official WhatsApp Cloud API, and we check every article against Meta's current documentation.

Last updated:

Frequently asked questions

Do I need a WooCommerce WhatsApp plugin?

No. WooCommerce's built-in webhooks can call a Broadchat workflow's Custom Webhook URL when an order is created or updated, and the workflow sends an approved WhatsApp template. A checkout-field plugin is useful only to add a WhatsApp consent checkbox.

Why do customers get the same order update twice?

WooCommerce's Order updated topic fires on many edits, not only status changes. Save the last status you notified in a contact custom field and send only when the new status differs, as described in this guide.

Are WhatsApp order notifications charged?

Yes. They are utility templates, charged per delivered message by Meta, including when sent inside an open 24-hour window since 1 Oct 2026. Keep them free of promotions so they stay in the utility category.

Can I send the tracking link in the WhatsApp message?

Yes. Use a utility template with a URL button whose link ends in a variable, such as your tracking page plus the order number, and map the order number or tracking id into that button variable in the send step.

See Broadchat on a real WhatsApp number

A short walkthrough of campaigns, chatbots, the team inbox and the partner panel, built around your use case.