---
title: "Odoo WhatsApp notifications: which messages to automate, and how customer replies get back into Odoo"
description: "Which Odoo events deserve a WhatsApp message, templates Meta approves as utility, and buttons whose reply updates the record. Plus why wa.me links do not scale."
lang: en
canonical: https://www.kerneltics.com/en/blog/odoo-whatsapp-notifications
source: https://www.kerneltics.com/en/blog/odoo-whatsapp-notifications
alternate_ar: https://www.kerneltics.com/blog/odoo-whatsapp-notifications
type: article
published: 2026-10-01T06:09:39.393Z
updated: 2026-10-01T06:09:39.406Z
author: "kerneltics"
tags: ["أودو", "Odoo", "واتساب API", "إشعارات واتساب", "ربط الأنظمة", "الفواتير"]
---

# Odoo WhatsApp notifications: which messages to automate, and how customer replies get back into Odoo

> Which Odoo events deserve a WhatsApp message, templates Meta approves as utility, and buttons whose reply updates the record. Plus why wa.me links do not scale.

In most companies we visit, an invoice reaches the customer like this: the accountant posts it in Odoo, downloads the PDF, finds the customer on their own phone's WhatsApp, attaches the file and types a note. Two weeks later they remember the invoice is still open. Or they do not, and the reminder never goes.

As the business grows, that quietly becomes somebody's full time job, messages go out late or not at all, and replies land on a phone nobody else can see.

This post is about handing that job to the system: Odoo sends the message the moment something happens, the customer answers with a tap, and the answer updates the record in Odoo. It all sits on a number running on the WhatsApp Business API, so if you do not have one yet, start with [WhatsApp Business API setup from zero until it runs inside Odoo](https://www.kerneltics.com/en/blog/whatsapp-api-setup-and-odoo-integration).

## Why wa.me links and personal phones stop working

The first thing everyone tries is a button in Odoo that opens a `wa.me` link with the invoice number filled in. Cheap and quick, and its limits show within a month:

- **A person has to press send every time.** The message leaves when someone remembers, not when the invoice is posted. Overdue reminders are the first casualty.
- **It goes out from an employee's number.** When they leave, the customer conversations leave with them.
- **Odoo has no record of what was sent.** When a customer says "I never got it", there is nothing to point to.
- **Replies land on a phone, not in the system.** "I've transferred the money" stays in one person's chat.

Tools that drive WhatsApp Web to send in bulk break WhatsApp's terms and tend to get the number banned, history and all. The only sanctioned way to send automatically is the API.

## Which Odoo events deserve a message

Our rule of thumb: **send the message the customer would be annoyed not to get.** Usually that means:

- **Order confirmed:** order number and total.
- **Invoice posted:** with the PDF attached.
- **Payment reminder:** a few days before the due date, on the day, and after it if still unpaid. A reminder, never a threat.
- **Payment received:** so the customer stops wondering whether it arrived.
- **Order status:** when it leaves the warehouse, and when it is delivered.

Do not forget **internal notifications**, such as "Purchase order above your limit is waiting for approval". Approvals are where work piles up.

What does not deserve a message: drafts, every minor shipping event, and "thank you for your business" with an offer tucked at the end. That last one turns a utility message into a marketing one.

## Templates that get approved, and stay utility

Any message you start, rather than a reply, has to be a **template approved by Meta**, and nearly every Odoo notification is that kind.

Meta files a template as **utility** when it is non-promotional and specific to the customer's order, account or transaction; payment reminders and order updates are among its own examples. Mix in promotion, say a discount code under an order confirmation, and the whole template becomes **marketing**. Meta also re-reviews approved templates, can move a utility one to marketing after a day's notice, and gives you 60 days to request a review. See [Meta's template categorization guide](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/template-categorization).

An invoice template we would write:

> Hello {{1}}, your invoice {{2}} for {{3}} has been issued and is due on {{4}}. You will find it attached to this message.

Each variable maps to an Odoo field: customer name, invoice number, amount, due date. The small things matter:

- **Format the amount as the invoice shows it**, with currency and the same decimals, not a raw database number.
- **Keep Arabic and English versions** of every template and pick by the language set on the customer in Odoo.
- **Never start or end a template with a variable**, and give every variable some text around it. This is a common reason for rejection.
- **Send the real Odoo invoice**, the one carrying the e-invoicing QR code, not a redesigned copy. Why that matters is in [ZATCA e-invoicing on Odoo](https://www.kerneltics.com/en/blog/zatca-einvoicing-odoo).

## Buttons whose replies come back into Odoo

A template can carry **quick reply buttons**, each label up to 25 characters per [Meta's template components docs](https://developers.facebook.com/docs/whatsapp/business-management-api/message-templates/components). At send time, each button gets a hidden payload you choose, such as the order reference and the action. When the customer taps, Meta passes that payload to your system, and the integration finds the record and acts.

A few we build:

- **Quotation:** "Approve quote" turns it into a sales order; "Talk to someone" opens a chat with the salesperson.
- **Delivery slot:** "That works" or "Change the time".
- **For a manager:** "New transfer receipt, approve it?" Yes registers the payment; No sends it back to the accountant with a note.

### Where this usually breaks

- **Taps on an old message.** The customer approves a quote that has since expired or changed. Check the record's state now, not as it was when the message went out, and say so: "This quote was updated, we have sent you the new one."
- **The same tap arriving twice.** Meta can deliver a webhook more than once, and patchy mobile data does the rest. The action must run exactly once.
- **Who tapped?** Confirm the number belongs to the customer or approver on the record.
- **Silence after the tap.** Always confirm: "Quote 1042 approved." Otherwise people tap again, or call.

Log every tap in the document's chatter: who, when, and what happened.

## What it looks like inside Odoo when it works

- **Every invoice and order shows** what was sent, when, and its status: sent, delivered, read (if the customer has read receipts on) or failed.
- **Failures have their own list.** A number without a country code, or one not on WhatsApp, gets fixed by someone or falls back to email. Nothing fails silently.
- **Replies go to a shared inbox** linked to the customer, not to the accountant's phone.
- **Customers can opt out.** "Stop sending me these" is stored on the contact, and the automation respects it.

## Mistakes we keep seeing

**Reminding a customer who already paid.** In most Odoo setups, a registered payment not yet matched to the bank statement leaves the invoice "In payment", not "Paid". A reminder rule that targets everything not "Paid" chases the customer who transferred yesterday. Exclude "In payment", and reconcile the bank daily, not at month end.

**Messaging the company instead of the person.** The mobile on file is the switchboard or the owner's. Decide who receives invoices (the invoice address contact) before switching anything on.

**Messages at 3am.** Date based reminders run from a scheduled job in Odoo and go out whenever it runs, unless you constrain them. Set a sending window inside working hours.

**Numbers stored ten different ways.** `05…`, `+966 5…`, `9665…`, with and without spaces. Normalise every number with its country code before launch. It is the most skipped step and the biggest source of failed messages.

## Odoo Enterprise or Community?

Odoo Enterprise ships a WhatsApp app that sends templates from documents, and its automation rules include a "Send WhatsApp" action. If all you need is an invoice or order confirmation sent as a template, start there. Per [Odoo's documentation](https://www.odoo.com/documentation/18.0/applications/productivity/whatsapp.html), it is Enterprise only.

If you are on Community, need a button tap to change something by your own rules (approve, register a payment, hand over to a salesperson), or want replies in the same inbox as your other channels, that is the job of a [custom Odoo add-on](https://www.kerneltics.com/en/blog/odoo-custom-addons-development) or an integration with a WhatsApp platform.

## Quick questions

### Does every notification cost money?

Meta charges for template messages, and the price depends on the template category and the recipient's country, and changes from time to time. Do not budget from an article; take the numbers from [Meta's pricing page](https://developers.facebook.com/documentation/business-messaging/whatsapp/pricing).

### A customer replied to the invoice with a question. Who answers?

The reply opens a conversation in the shared inbox, for a person or a bot. A bot can read from Odoo and send customers their invoices on request; see [connecting AI to WhatsApp](https://www.kerneltics.com/en/blog/whatsapp-ai-agent-for-business).

### Where should I start?

With three messages: the invoice, the payment reminder, and the order leaving the warehouse. Run them on your team's own numbers for a week, watch what fails, then open them to customers. Buttons come after.

## How we do it

We clean up customer numbers and invoice contacts in Odoo, pick with you the events worth a message, and write the templates in Arabic and English and get them approved. Then we build the integration and the buttons that report back to Odoo, and watch failed messages closely for the first weeks.

Sending runs on our own platform, [K-Message](https://k-message.kerneltics.com), built on the official WhatsApp Cloud API. Kerneltics is a Meta-approved Tech Provider, so you connect your number yourself and your team answers from one shared inbox.

Details are on the [WhatsApp API page](https://www.kerneltics.com/en/solutions/whatsapp-api) and the [Odoo page](https://www.kerneltics.com/en/solutions/odoo-zatca), or [book a consultation](https://www.kerneltics.com/en/book) and we will pick your first three messages together.
