Skip to main content

WhatsApp

Send WhatsApp messages from any system with a webhook

Your store, CRM or booking tool already knows when an order is placed, a payment fails or an appointment is booked. A webhook can turn each of those events into a WhatsApp message, without code on your side. Here is how to plan it, secure it and test it.

MonoChat Team Updated: 7 min read

On this page
  1. What a webhook is, and what it is not
  2. Which events deserve a WhatsApp message
  3. The WhatsApp rules that apply
  4. Secure the webhook URL
  5. Where to create the webhook in Shopify and WooCommerce
  6. Test with real requests before you go live
  7. How to do it in MonoChat
  8. Sources

To send a WhatsApp message when something happens in another system, point that system’s webhook at a receiver that finds the customer by phone number and sends an approved WhatsApp template. Your store, CRM or booking tool already fires webhooks for orders, payments and appointments; the work is choosing which events deserve a message, writing the templates, securing the URL and testing with real requests before customers see anything.

This guide covers the plan, the WhatsApp rules that shape it, and how to build it in MonoChat with a flow that starts from its own webhook URL.

What a webhook is, and what it is not

A webhook is an HTTP request that one system sends to a URL you give it when an event happens. Shopify can send one when an order is created, WooCommerce when an order is updated, a CRM when a deal moves stage, a booking tool when an appointment is made. The request carries the details of the event, usually as JSON: an order number, an amount, a customer name and, most importantly for WhatsApp, a phone number.

A webhook does not send anything to the customer by itself. Something has to receive the request, decide what to do with it and call the WhatsApp Business API. That “something” is either code you write and host, or an automation platform that gives you a webhook URL and lets you build the rest without code.

Which events deserve a WhatsApp message

Not every event is worth a message. A customer who gets five notifications for one order starts ignoring all of them. Pick the moments they are actually waiting for:

EventMessageTemplate category
Order created or paidConfirmation with the order number and what happens nextUtility
Payment failed or pendingA short note and a way to pay againUtility
Order shippedCarrier and tracking linkUtility
Cash-on-delivery order createdA question: confirm the order, change the address or cancelUtility
Appointment booked, changed or due tomorrowDate, time, place and a way to rescheduleUtility
Deal won or lost in the CRMA handover to the account manager, or a feedback questionUtility or marketing, depending on the text
Cart abandonedA reminder, perhaps with an offerMarketing

Meta decides the category from what the template says, not from the label you pick. A message about a specific order, payment or booking is utility; anything that promotes, offers or tries to persuade is marketing, and needs consent that covers marketing. Our WhatsApp template examples have wording for the utility cases above.

The WhatsApp rules that apply

Most webhook messages need a template

A customer service window opens when a customer messages or calls you, and lasts 24 hours from their last message. Inside it you can reply freely; outside it you can only send pre-approved template messages. Store and CRM events rarely happen inside that window, so plan every webhook message as a template, and submit the templates for review before you switch anything on.

The phone number must be usable

The webhook has to carry a phone number that WhatsApp can reach: in international format, with the country code. Many stores let customers type their number any way they like, so check a few real orders. A number without a country code is the most common reason a test works and production doesn’t.

Pricing changed on 1 October 2026

Meta has charged per delivered message since 1 July 2025. Since 1 October 2026, utility templates sent inside an open customer service window are charged again, after a period in which they were free, and every business phone number gets 1,000 free service messages a month. Rates depend on the category and the customer’s country. In practice: an order confirmation costs money whether or not the customer wrote to you recently, so send the messages that matter and skip the ones that don’t. The WhatsApp API pricing guide explains the rate card.

Secure the webhook URL

Anyone who knows a webhook URL can call it. If that URL sends WhatsApp messages, a leaked URL means someone else can message your customers in your name, or run up your bill. Three habits prevent that:

  • Require a secret. The sending system adds the secret to a header, or signs the request body with it (HMAC-SHA256) so the receiver can check the request wasn’t changed on the way. Requests without a valid secret or signature are rejected.
  • Keep one URL per purpose. An order flow and a booking flow should have different URLs and secrets, so you can rotate one without touching the other.
  • Watch for failures on the sending side. WooCommerce disables a webhook after more than five consecutive failed deliveries, and Shopify deletes a webhook subscription whose destination repeatedly returns a non-200 response. A receiver that is switched off or misconfigured can silently stop your notifications.

Where to create the webhook in Shopify and WooCommerce

  • Shopify: Settings › Notifications › Webhooks, then Create webhook. Choose one event (Order creation, Order payment, Fulfillment creation and many more), JSON as the format, and an https:// URL. The event can’t be changed after the webhook is created, so make one webhook per event. Send test checks that it reaches the URL.
  • WooCommerce: WooCommerce › Settings › Advanced › Webhooks, then Add webhook. Pick a topic (order, customer, coupon or product events), enter the delivery URL and a secret; WooCommerce adds a hash of the payload made with that secret to the request headers.
  • A CRM or booking tool: look for “webhooks”, “automations” or “outgoing integrations”. If it only offers a fixed format, check which field holds the customer’s phone number before you build anything.

Test with real requests before you go live

Webhook payloads are long and every platform names its fields differently: the phone number may be phone, billing.phone or customer.default_address.phone. Don’t guess. Send a real test request, look at what arrived, and map the fields from that. Then test the edge cases:

  • an order without a phone number, or with a number missing the country code;
  • the same event delivered twice, which platforms do when they retry;
  • an order placed at 3 a.m., if you’d rather the message waits until morning;
  • a customer who replies to the notification, so a person or an AI assistant is ready to answer.

How to do it in MonoChat

MonoChat is an official Meta Business Partner. Since version 3.8.37 (October 2026), a flow can start from a webhook, so your store or CRM can trigger WhatsApp messages without code on your side.

1. Start the flow with a Webhook Received node. Add it from the event nodes. It gets its own webhook URL and secret. Choose the channel, for example your WhatsApp number, and the Identity Path, where the customer’s phone number is in the request (request.body.phone by default). MonoChat finds the customer on that channel, or creates them, and runs the flow for them. The node answers the sender with 202 once the flow is queued, and with a clear error when the channel or the phone number isn’t found.

2. Turn on Require Secret. The sender can put the secret in the token header (Authorization by default, on its own or as Bearer <secret>) or send an HMAC-SHA256 signature of the raw body in the signature header (X-Signature by default). Both header names can be changed to match the sending system.

3. Capture a real request. Add /test to the end of the webhook URL and point your store’s test webhook at it. While the node’s settings are open, the request appears under Captured Request with its body, query and headers, without starting the flow. Use it to find the paths you need, then save them as flow variables, for example request.body.orderId as orderId.

4. Send the message. Add a Send Template Message node with your approved template, and fill its variables from the flow variables: the order number, the amount, the tracking link. Use conditions to send different templates for different statuses.

5. Call back if you need to. An HTTP Request node can look up more data in your own system, or write the customer’s answer back, for example “confirmed” on a cash-on-delivery order. It continues on Output when the call succeeds and on On Fail when it doesn’t, so you can send a fallback or assign the conversation to a person.

When the customer replies, the conversation is in the same MonoChat inbox as the rest of your WhatsApp, Instagram and Messenger chats, where your team or an AI assistant can take over. To build flows, see workflow automation.

Two other routes, depending on who should do the work:

  • Your developers already call an API. The WhatsApp Template API app sends an approved template with one API call, and replies land in the inbox.
  • You run Shopify and want order data in the chat. Shopify chat automation syncs products and orders so the team and the AI assistant can answer order questions.

To start, create a free account at app.monochat.ai, connect your WhatsApp number and compare plans on the pricing page.

Sources

FAQ

Frequently asked questions

Can a webhook send a WhatsApp message on its own?

No. A webhook only tells another system that something happened, for example that an order was created. You need a receiver that reads the request, finds the customer and sends the message through the WhatsApp Business API. In MonoChat that receiver is a flow that starts from its own webhook URL.

Do I need a template to message a customer from a webhook?

Almost always. Store, CRM and booking events usually happen when the customer has not written to you in the last 24 hours, so the customer service window is closed and only an approved WhatsApp template can be sent. If the customer did write in the last 24 hours, a normal message is allowed.

Which Shopify or WooCommerce events are worth sending to WhatsApp?

Start with the events customers wait for: order confirmed, payment failed or pending, order shipped with tracking, and appointment booked or changed. Leave promotional messages for later and send them only to customers who agreed to receive marketing.

How do I stop strangers from triggering my WhatsApp messages?

Keep the webhook URL private and require a secret. The sending system then has to include the secret, or an HMAC-SHA256 signature of the request body made with it, and requests without it are rejected.

Are WhatsApp order notifications free?

No. Meta charges per delivered template message by category and country. Since 1 October 2026, utility templates sent inside an open customer service window are charged again, and each business phone number gets 1,000 free service messages a month.

First month of Growth on us

Run WhatsApp, Instagram and Messenger from one inbox

Start free with MonoChat: shared team inbox, AI assistants, templates and campaigns on official Meta APIs.

One code per business • 30 days to redeem • No card needed

$150 to get started.

Claim