Shopify
Shopify tells Engage about each order, fulfilment and checkout through webhooks - no app to install and no code. Your workflows then send the WhatsApp message for each.
1. Copy Shopify's signing secret
In your Shopify admin: Settings, Notifications, Webhooks. Under the list Shopify says Your webhooks will be signed with and a long code. Engage uses it to check that every delivery really came from your store.
Shopify shows the code only once a webhook exists. If there is none yet, create one for Order creation with any https address, copy the code, and change the address in step 3.
2. Connect in Engage
In the dashboard: Settings, Website, Shopify (owners). Paste the secret and press Connect Shopify. Engage gives you a private webhook URL. It is shown once, because Engage keeps only a hash of it; if you lose it, connect again for a new one, which also turns the old one off.
3. Add four webhooks in Shopify
Back in Settings, Notifications, Webhooks, create one webhook for each event, all with format JSON and your Engage URL:
| Field | Type | Notes |
|---|---|---|
Order creation | order.created | The order confirmation. |
Order fulfillment | order.shipped | With trackingUrl, trackingNumber and carrier when you add tracking to the fulfilment. |
Checkout creation | checkout.started | For cart reminders. Recorded once the checkout has a phone number. |
Checkout update | checkout.started | The number often arrives on an update. The same checkout is only ever recorded once. |
Place a test order. Settings, Website, Shopify shows when the last webhook arrived, and Activity, Events shows what it carried.
What the events carry
order.shipped
{
"type": "order.shipped",
"phone": "+2348030000001",
"name": "Ada Obi",
"data": {
"orderNumber": "1042",
"total": "25000.00",
"currency": "NGN",
"orderStatusUrl": "https://your-store.myshopify.com/…",
"trackingUrl": "https://…",
"trackingNumber": "GIG123",
"carrier": "GIG Logistics"
}
}The number is the order's phone, else the shipping, billing or customer phone, turned into the international form using the address's country. An order with no number anywhere is skipped - there is nobody to message. So ask for one: in Shopify, Settings, Checkout, make the shipping address phone number required.
Consent
Shopify has no WhatsApp consent box
Shopify's checkout asks about email and SMS marketing, not WhatsApp, and Engage does not treat either as WhatsApp consent. Order confirmations and shipping updates do not need it. Cart reminders and offers do, so they reach only shoppers who agreed some other way - by messaging you first, or through a form on your site that sends an optIn (see Connect your website).
Disconnecting
Settings, Website, Shopify, Disconnect. Engage refuses the webhooks from then on; delete them in Shopify too, or Shopify keeps retrying and eventually emails you about failures.
Next
Workflows →
Turn the events into automated customer journeys.
Importing your products
Everything above is one-way: Shopify posts orders here. Reading your products - names, prices, stock and links - goes the other way, and needs a token Shopify will only give to an app in your own admin.
In Shopify: Settings → Apps and sales channels → Develop apps → Create an app, give it the read_products scope, install it, and copy the Admin API access token it shows once. Paste that and your myshopify.com address under Settings → Website → Shopify.
What an import may and may not do
Products you typed into Engage by hand are never touched - they were written for the assistant to say, and an import deleting them because Shopify has never heard of them would be the import destroying your own words.
A product that disappears from your shop is hidden here rather than deleted, so the sale that mentions it still makes sense. And editing an imported product in Engage takes it over: the next import leaves it alone, because somebody who corrected a description meant it.
The catalog is re-read every hour, and Read them nowdoes it immediately. If a read fails - a token revoked, a scope missing - the reason stays on the page until one works, because a sync that has been broken for a week and says nothing is worse than one that never ran.