Every WhatsApp integration does the same thing: an event in your system (an order, an abandoned cart, an invoice, a new row) triggers an approved WhatsApp template sent through Meta's Cloud API. Shopify and Klaviyo now have native WhatsApp options, Odoo's module is Enterprise-only and uses your own account, and Zoho Books makes Zoho the provider for that number. The parts people skip are the ones that cost money later: who owns the number, the right category for each message, Arabic versions, and storing delivery status.
How every WhatsApp integration works
Whatever the software, the moving parts are the same five.
- A WhatsApp Business Account (WABA) that you own, inside your own Meta business portfolio, with a phone number on Meta's Cloud API.
- A trigger. Most software sends a webhook, an automatic message to another system, when something happens: an order is created, a checkout stalls, an invoice is issued.
- An approved template per event and per language. Anything you send first must be a template Meta approved, with blanks such as the customer's name or order number filled in from the trigger.
- Delivery status coming back. Meta reports sent, delivered, read or failed for every message. Somebody has to store it, or failures stay invisible.
- An inbox for replies. Customers answer order updates. A plug-in that only sends leaves those replies unanswered.
The question that decides the most is who the provider is for the number. Some integrations connect to your own account, so Meta bills you directly and you can run other tools on the same number. Others make the vendor your provider, so messages are bought through them and the number is tied to them. Meta has been able to bill businesses in AED since 1 April 2026, so dirham billing for message fees is now a setup choice, not a reason to pick one vendor.
Pick the category before you build
Meta sets the price of each message by category, and the category is decided by the content, not by what you call it.
| Message | Category | About per message (UAE, from 1 Oct 2026) |
|---|---|---|
| Order confirmation, shipped, out for delivery | Utility | AED 0.058 |
| Cash on delivery confirmation | Utility | AED 0.058 |
| Invoice, receipt, statement, quotation the customer asked for | Utility | AED 0.058 |
| Back in stock, for a customer who asked about that item | Utility if Meta accepts it, otherwise marketing | AED 0.058 or 0.212 |
| Abandoned cart, win-back, launch, offer | Marketing, opt-in needed | AED 0.212 |
| One-time passcode | Authentication | AED 0.058 |
| Free-text reply inside a 24-hour window | Service | Free for the first 1,000 a month per number, then AED 0.058 |
Two rules catch integrations out. From 1 October 2026, utility templates sent inside an open window are charged too, so an order flow that replies to a customer's question with a template pays for it. And since 9 April 2025, a template you submit as utility that Meta judges to be marketing is approved as marketing rather than rejected. The integration keeps working, and you pay about 3.7 times more per message without an error. Check the approved category of every template, and subscribe to the template_category_update webhook so you hear when Meta changes one.
Shopify
What Shopify gives you natively
- Shopify Messaging. Since 29 July 2026, Shopify Messaging can send WhatsApp marketing campaigns alongside email and SMS. Shopify has also added WhatsApp consent collection at checkout and on Shopify Forms, and a place to view and update WhatsApp consent next to email and SMS. You connect your own WhatsApp Business Account and send to customers who opted in. Check what Shopify charges per WhatsApp message against Meta's rate before you choose.
- WhatsApp by Meta. Meta's own app on the Shopify App Store, launched on 11 July 2025, sends order confirmations and shipping updates to shoppers who opt in, and its listing mentions abandoned cart messages. It is free to install, and Meta bills the messages separately.
Neither gives you a shared WhatsApp inbox with the order next to the chat. When a customer answers "can you deliver after 6 pm?", someone needs to see it.
What to send, and which Shopify event triggers it
| Message | Shopify webhook | Category |
|---|---|---|
| Order confirmation | orders/create | Utility |
| Cash on delivery check, Confirm and Cancel buttons | orders/create where payment is cash on delivery | Utility |
| Shipped, with tracking link | fulfillments/create | Utility |
| Out for delivery, delivered, failed attempt | fulfillment_events/create | Utility |
| Abandoned checkout | checkouts/create or checkouts/update with no order after a delay | Marketing |
| Back in stock | products/update or an inventory change | Marketing, unless the customer asked about that item |
| Win-back | A schedule: no order in a set number of days | Marketing |
Setup steps
- Create the WABA in your own Meta business portfolio and connect the number to the Cloud API.
- Add a WhatsApp consent option at checkout, on forms or on the account page, and store it on the customer record. What you can change at checkout depends on your Shopify plan.
- Write each template in Arabic and English, and pick the language from the customer's language or country.
- Subscribe to the webhooks above and map each one to one template.
- Write answers back to the order. A cash on delivery reply of Confirm or Cancel should update the order so the team ships only confirmed ones.
- Send replies to a shared inbox with the order beside the chat.
The UAE details
- Cash on delivery. Every refused parcel costs courier fees both ways. A Confirm or Cancel message seconds after checkout catches wrong addresses and changed minds. Silent orders get one more nudge or a call.
- Location pins. UAE addresses are often a building name and a landmark. Ask for a location pin in reply to the shipping message.
- Abandoned checkout rules. It is marketing, so you need opt-in, you pay the marketing rate, and Meta's per-person marketing cap can drop it silently (error 131049). Send one reminder, two at most, with the cart link and a real reason to finish.
- US customers. Meta does not support WhatsApp marketing messages to US phone numbers, so a US segment needs email or SMS.
A plug-in is fine for a small store that sends order updates only and has time to write templates. A managed setup earns its cost when you have cash on delivery volume, Arabic-speaking customers, real reply traffic, or Klaviyo and other tools in the mix.
Klaviyo
If your store runs email in Klaviyo, you already have the hard part: clean segments, store events and flows that know where each customer is. Klaviyo now offers WhatsApp directly, with marketing, utility and two-way service messages, WhatsApp forms and keyword triggers. It needs a verified WhatsApp Business Account.
Two routes
Klaviyo's own WhatsApp
One dashboard, WhatsApp steps inside the same flows as email, one set of reports. Check that your account and region are supported and what Klaviyo charges per message. Meta's rules on opt-in, templates and quality still apply in full.
A separate WhatsApp platform fed by Klaviyo
Klaviyo keeps profiles, segments and email. Its events and segments drive sends on a WhatsApp platform on Meta's Cloud API, which handles templates, sending and replies. Better when you need a shared inbox, Arabic templates written for you, or Meta's fees at cost.
Setup steps, in the order that avoids rework
- Add a WhatsApp consent property to Klaviyo profiles, separate from email and SMS consent.
- Collect consent with specific wording, such as an unticked box at checkout saying "get order updates and offers on WhatsApp". Store how and when each person agreed. A customer who messages you first, or taps a Click-to-WhatsApp ad, has also started the chat.
- Get the WhatsApp side ready: business verification with Meta, a phone number and a WABA. A new portfolio starts at 250 people a day, which grows to 2,000 after verification and then higher on its own.
- Submit templates in Arabic and English for each flow, with the right category.
- Map triggers: a started checkout with no order fires the cart reminder, a placed or fulfilled order fires the utility updates, no order in 60 to 90 days fires the win-back.
- Start with your cleanest segments, watch quality, and suppress anyone who replies STOP from every future send at once.
Build order updates first, because customers welcome them and they make the WhatsApp thread a trusted place. Then the abandoned cart, the highest-intent message a store sends. Then win-back and back-in-stock.
"Klaviyo isn't converting any more"
When flows still fire, copy is fine and revenue per send keeps sliding, the usual cause is that fewer people see the email. Mailbox providers such as Gmail, Outlook and Apple decide where mail lands from your sender reputation, how people engage and your volume. Lower engagement pushes more mail into Promotions or spam, which lowers engagement again. Sending more to a disengaged list makes it worse.
The fix is not a Klaviyo alternative. Keep email for newsletters, editorial, receipts and slow reactivation. Move the three moments where being seen now decides the sale to WhatsApp: the abandoned cart, order and shipping updates, and launches or back-in-stock alerts. Keep the email version of the cart flow running as a backstop. To prove it, hold back a random slice of opted-in customers who get email only, and compare revenue per customer after a month. Without that holdout, you cannot tell WhatsApp's effect from the season.
Odoo
Odoo ships its own WhatsApp app rather than relying on partners, and it connects to your own WhatsApp Business Account. Two things to know before you plan around it: it is Enterprise-only, and it covers less than the ERP does.
Enterprise only, your own account
Odoo's documentation says WhatsApp is an Enterprise-only application that does not work in Community edition. On Community you need a third-party module or a separate WhatsApp tool that talks to Odoo. Because Odoo connects to your own WABA, you pay Meta directly with no reseller markup, the number stays yours if you change ERP, and other tools can use the same account. You also own the Meta app behind it, so token rotation, webhook health and app review are your job.
Setup steps
- A Meta business account and a Meta developer account.
- A Meta app of type Business, with WhatsApp added as a product.
- Copy the Phone Number ID, Access Token, App ID, Account ID and the App Secret into Odoo.
- Test the connection in Odoo, which then gives you the callback URL and webhook verify token for Meta.
- Subscribe the webhook to five fields:
account_update,message_template_quality_update,message_template_status_update,messagesandtemplate_category_update. - Register the business phone number with Meta.
Subscribe to all five. The two people skip, quality updates and category updates, are the two that warn you before something expensive happens: a template losing quality, or Meta moving a utility template to marketing.
What it covers
| Job | Odoo's WhatsApp app |
|---|---|
| Send a quotation from Sales | Yes |
| Send a Point of Sale receipt or invoice | Yes |
| Send an event ticket | Yes |
| Receive and answer replies in Discuss | Yes |
| Segmented marketing broadcasts | Not what it is built for |
| Chatbot or lead qualification | No |
| Routing and assignment rules, campaign analytics | No |
Templates are created in Odoo with placeholders and still need Meta's approval. Odoo opens a Discuss chat if the customer answers within 15 days of a template. That is Odoo's own thread rule, not Meta's 24-hour window, which still decides when free text is allowed. Meta's test number reaches at most five recipients, enough to test the plumbing, not to pilot with customers. Two UAE notes: Arabic templates are separate submissions, so plan the bilingual set from the start, and store UAE numbers in full international format (+971...), or sends fail against records that look fine on screen.
Zoho Books
Zoho Books can send its finance documents on WhatsApp natively: invoices, quotes, retainer invoices, sales orders, sales receipts, payment receipts, credit notes and customer statements to customers, and vendor statements to vendors. They are all utility messages, because they follow a transaction that already happened.
The real decision. Zoho's help pages say that once you set up this integration, Zoho becomes your Business Service Provider for that number. The number must be yours and not linked to another provider or existing WhatsApp account, you need a verified Facebook Business Manager account, and you buy credits from Zoho to send. A wider WhatsApp programme on the same number, such as broadcasts, a chatbot or a shared inbox, is then limited to what Zoho supports.
The clean way round it is a second number. Finance documents go out on the Zoho-connected number, and sales, support and marketing run on your main number through your own setup. Two numbers is slightly untidy and much cheaper than moving a number later.
| Zoho Books integration | Meta Cloud API | |
|---|---|---|
| Call-to-action buttons per template | Up to 2 | More, depending on button type |
| Images | JPG, JPEG, PNG up to 5 MB | JPEG, PNG up to 5 MB |
| Up to 10 MB | Documents up to 100 MB | |
| Template approval | Can take up to 24 hours | Same Meta review |
The 10 MB PDF limit is the one that bites. A long statement with logos and a scanned signature page can go over it, so compress the PDF when it is generated or send a link to a hosted copy. Build the templates you will need before you need them: issued, due tomorrow, overdue, payment received, statement. Until the customer replies, you can only send templates, so "just send a quick note about the overdue balance" has to exist as one already.
Zoho's integration is the right choice when your finance team lives in Zoho Books, you have no WhatsApp programme yet, and volume is modest. It is the wrong one when you already run WhatsApp on that number, when customers expect invoices in the same thread as sales and support, or when you want to control the per-message price. Then drive Zoho Books from your own WhatsApp setup: trigger on Zoho Books webhooks, fetch the invoice PDF through its API, and send it from the number you already run. Keep in mind that the PDF still has to be a compliant UAE tax invoice. WhatsApp only delivers it.
Google Sheets
A spreadsheet is the most common integration nobody calls an integration: a guest list, a lead list from an event, a list of customers to remind. It works in two directions.
- Sheet to WhatsApp. Each row becomes one template message, with columns filling the blanks: name, date, order number, link.
- WhatsApp to Sheet. Replies, button taps and delivery status are written back as rows or columns: who said yes, who failed, who opted out.
How to wire it
- Use Google Apps Script, or an automation tool such as Zapier or Make, to call Meta's Cloud API with an approved template for each row.
- Keep the access token in the script's protected properties or the automation tool's secret store, never in a cell. Anyone who can open the sheet could copy it.
- Receive Meta's webhooks on a small server or the automation tool, then write the status and replies into the sheet against the message ID.
- Send in batches and record which rows were sent, so a run that stops halfway can resume without sending twice.
The traps
- Number format. Sheets treats a typed number as a number: it drops the leading zero from 050 and can strip the plus sign. Format the column as text and store numbers in full international format, such as 971501234567. In our imports this is the most common reason a "full" list sends to half the rows.
- Consent column. Add a column that says how and when each person agreed, and filter on it before sending marketing. A spreadsheet of numbers is not an opt-in list.
- Duplicates. Remove duplicate numbers before sending, or the same person gets the message twice and you pay twice.
- Quotas. Apps Script allows 20,000 outside requests a day on a consumer Google account and 100,000 on Google Workspace, and one run can last at most 6 minutes. Large lists need batches across runs.
- Sending speed and limits. Meta allows up to 80 messages a second per number by default, and your daily messaging limit still applies. A sheet of 3,000 names on a 2,000 limit will not all send today.
- Status, not "sent". Write delivered, read and failed with the error code back to the sheet. Otherwise the sheet says everyone was reached.
Pitfalls that apply to every integration
- The number belongs in your portfolio. If a vendor owns the WABA, leaving the vendor can mean losing the number and its quality history.
- One provider per number. Turning on an integration that makes the vendor your provider, like Zoho Books, can conflict with the setup you already run. Check before you click connect.
- Arabic templates are separate. Each language is its own submission and approval. Plan both from day one.
- Empty fields break templates. A missing first name or order number makes the send fail. Give every variable a fallback.
- Test numbers are not pilots. Meta's test numbers reach a handful of recipients only.
- Media limits. Images up to 5 MB, video and audio 16 MB, documents 100 MB on Meta's side, and some integrations set lower limits.
- The 2027 change. Meta says the Cloud API stops supporting marketing messages on 13 October 2027, in favour of its Marketing Messages API. Ask each vendor that sends marketing for you how they will move.
What we'd do for you, and what we don't promise
We connect WhatsApp to Shopify, Klaviyo, Odoo, Zoho Books, Google Sheets and other tools on Meta's official API, on your own number and your own WhatsApp Business Account. We pick the category for every message, write the Arabic and English templates, set up the shared inbox and store delivery status so failures show. Meta's message fees pass through with no markup. Pricing is on our WhatsApp page, and the pricing calculator shows Meta's fees for your volumes.
What we don't promise: features a platform does not have. If Odoo Community has no WhatsApp app, or Zoho's provider rule blocks what you want on one number, we tell you and suggest the workaround, usually a second number or a separate WhatsApp tool. We also can't control what Shopify, Klaviyo or Zoho charge or change, so we check their current terms with you before we build.
