WhatsApp Coexistence API — the full guide
WhatsApp for Odoo Community on Meta's Cloud API. Keep the number you already use on the phone, answer from an inbox in Odoo, and send quotations, invoices and deliveries from any record. Works on Community 17, 18, 19 and 20 with nothing from Enterprise.
Odoo Community, on-premise. Odoo Online (SaaS) does not accept third-party modules. The instance must be reachable from the public internet over HTTPS, because Meta delivers inbound messages to a webhook on your own domain. Nothing from Enterprise is needed: no native WhatsApp app, no Enterprise subscription. It also runs on Enterprise, but it is built for Community.
A WABA API Connection does not need a Tech Provider: your own Meta developer app is enough, and nothing transits RC Studio.
Keep your number on the phone. Add Odoo on top.
The normal way into the WhatsApp Cloud API asks you to give up your number: once it is migrated, it stops working in the WhatsApp Business app on the phone. Coexistence is Meta's official answer, and this module brings it to Odoo Community. You scan a QR code, and from that moment the same number works in both places: your staff keep replying from the phone, and Odoo sees everything.

What you get
- Coexistence, or a WABA API Connection. Connect the number of your WhatsApp Business app by QR code, or a WABA API Connection with your own Meta app. Several numbers in one database, each with its own operators and companies.
- An inbox built for answering. Search, unread, mine and closed filters, a selector per number, live updates, delivery ticks, media, quoted replies, reactions, assignment, and the messages your team sends from the phone mirrored in the same thread.
- Documents from any record. A Send by WhatsApp action on contacts, quotations, invoices, deliveries, leads, tasks, events, appointments, purchase and POS orders. The template is filled from the record and the PDF report travels as the document header.
- Templates synced with Meta. Header, body, footer and buttons as Meta defines them. Each placeholder is mapped to a field of the record, a fixed value, a value asked when sending, or the portal link. A sample library for the apps you have installed.
- Automatic sends. A Send WhatsApp template server action you can fire from any automation rule.
- Roles, opt-out, retries. Operators see only the numbers they are assigned to. A customer who replies STOP is blacklisted. Failed sends are retried, and every message keeps its Meta status and error code. Nothing is ever purged.
A tour in five screens
Several numbers in one inbox, the icon that tells them apart, the per-number filter and a template sent from a quotation.





Requirements
| Requirement | Detail |
|---|---|
| Hosting | Odoo Community 17.0, 18.0, 19.0 or 20.0, on-premise. Not available on Odoo Online. |
| Public HTTPS URL | Meta delivers inbound messages to a webhook on your domain. |
| Meta connection | One of the two options below, not both. Each business number uses one; a database can mix them. |
| Option A · Coexistence | A Tech Provider app approved by Meta for WhatsApp Business App Onboarding: RC Studio's (licence key), yours, or a third party's. The number must be active in the WhatsApp Business app for at least 7 days, on a business account, Android 2.24.17+ or iOS 24.17+. No Meta developer app of your own is needed with the RC Studio service; it is needed if you are your own Tech Provider. |
| Option B · WABA API Connection | Your own Meta developer app with the WhatsApp product, a WhatsApp Business Account and a phone number registered on the Cloud API. No Tech Provider and no licence needed; the number stops working in the phone app. |
| Python dependencies | phonenumbers and requests. |
| Odoo dependencies | Only Discuss, Phone numbers validation and Automation Rules, all in Community. No other paid module is needed. |
| Voice notes (optional) | Nothing on the server for Chrome, Edge and Firefox: they record Opus and the inbox packages it as the OGG/Opus voice message WhatsApp plays as a voice note. Safari cannot record Opus, so operators on Safari need ffmpeg installed on the Odoo server; without it the microphone button explains that. Nothing else depends on ffmpeg. |
Two ways to be allowed to use Coexistence
WhatsApp Coexistence is onboarded through Meta's Embedded Signup, which only works through an app registered with Meta as a Tech Provider and approved for the WhatsApp Business App Onboarding feature. A plain Meta developer app cannot do it. There are two ways to satisfy that requirement:
With an RC Studio licence. You buy a licence key, paste it into Odoo and connect by scanning a QR code. Nothing to register with Meta, no app review, no domain whitelisting. The licence is billed separately from this module and is not included in its purchase.
With your own Tech Provider app, or a third party's. This module works with any of them. You enter the App ID, the App Secret and the Login Configuration ID that your provider gives you, and the connection runs through their Meta app instead of RC Studio's. Those credentials are issued by that provider, not by RC Studio. RC Studio cannot obtain them on your behalf and is not responsible if your provider does not hand them over, revokes them, charges extra for them, or has not been approved by Meta for the WhatsApp Business App Onboarding feature. Confirm with your provider that you will receive an App ID, an App Secret and a coexistence Login Configuration before you buy this module.
Install the module
- Make sure the Python packages
phonenumbersandrequestsare available to Odoo. Both are part of Odoo's ownrequirements.txt, so a standard install already has them; Odoo refuses to install the module if they are missing (an Odoo module cannot run pip for you). If needed, install them in the environment Odoo runs in and restart Odoo. - Unzip the module into your addons folder and restart the Odoo service.
- Settings → Apps → Update Apps List, search for "WhatsApp" and install WhatsApp Coexistence API.
- Give your users the WhatsApp / Operator or Manager access right.
Mode A · Coexistence with an RC Studio licence (recommended)
The whole setup is: paste the key, press Connect, scan the QR. Nothing to register with Meta, no app review and no domain to whitelist, because the Facebook dialog runs on RC Studio's own page.
The three screens you actually see, in licence mode



Meta allows a single contact sync and a single history sync per onboarding. If they fail, the only way to repeat them is to disconnect the number and connect it again with a new QR code.
Mode B · Coexistence with your own Tech Provider app
This works with your own app or with any other provider's. In both cases the app must be approved by Meta for the WhatsApp Business App Onboarding feature, and the App ID, the App Secret and the Login Configuration ID are handed to you by that provider. RC Studio cannot obtain them and is not responsible if the provider does not deliver them.
- Choose Coexistence and Your own Meta Tech Provider app.
- Fill in App ID, App Secret and Login Configuration ID from your app.
- Add your Odoo domain to the Meta app, under App domains and Allowed domains for the JavaScript SDK. This step has no API and has to be done by hand for each domain.
- Press Connect via Coexistence and carry on with the QR.
In Mode B there is no RC Studio window: the Facebook dialog opens straight from your own Odoo page, on your own app.
Mode C · WABA API Connection
No Tech Provider needed. In your Meta developer app with the WhatsApp product, copy the App ID, App Secret, WhatsApp Business Account ID, Phone Number ID and a permanent Access Token (a System User token with the WhatsApp permissions) into the number, choose WABA API Connection (Cloud API) and press Test connection.

Webhook
Every number has its own Callback URL and Verify Token on the Webhook tab. In coexistence mode Odoo registers them with Meta as part of connecting the number. With a WABA API Connection, either press Subscribe webhook to let Odoo register them on the WhatsApp Business Account, or paste them by hand in the Meta app under WhatsApp → Configuration → Webhooks and subscribe to the messages and message_template_status_update fields. Deliveries are checked against Meta's signature (your App Secret) or, in licence mode, against the secret URL that only Meta and your Odoo know.
Templates
Press Sync templates on a connected number to import the templates approved on Meta, or Load sample templates to get drafts for the apps you have installed (quotation sent, order confirmed, invoice available, delivery on its way, event registration, appointment reminder, receipt, purchase order, lead and task follow-ups). Review a draft, map its placeholders on the Placeholders tab and press Submit to Meta; Odoo learns the outcome of the review through the webhook.

Roles
| Role | What they see and do |
|---|---|
| Operator | The inbox, the conversations of the numbers they are listed on (a number with no operators is open to every operator), the Send by WhatsApp action. Templates in read-only. |
| Manager | Numbers and their credentials, templates, the message log, settings and every conversation. |
The inbox
WhatsApp → Inbox. Conversations on the left, newest activity first, with a search box, the All / Unread / Mine / Closed filters and, when there is more than one number, a selector. The thread is on the right: reply with text, emoji and attachments, quote a message, and see the delivery ticks.
With nothing typed, the Send button becomes a microphone: press it to record a voice note; the customer receives it as a voice message, with the microphone icon and your profile picture, played straight from the bubble, not as a downloadable file. One thing no API sender can add is the waveform, which only the phone that records computes. Chrome, Edge and Firefox need nothing installed; on Safari the server must have ffmpeg. Voice notes the customer sends play in the thread.
New messages arrive live; the WhatsApp icon in the top bar shows how many conversations are waiting. Assign to me and Close keep the list clean; the contact and the documents the customer was written to from are one click away.

One conversation per customer and number
Whatever a customer writes and whatever you send them, from the inbox, from a quotation or from an automation, lands in the same thread of that business number. The contact is matched by phone number; if the customer writes to two of your numbers, those are two threads on purpose, told apart by the number's icon. In coexistence mode, the replies your team sends from the phone show up in the thread marked "from the phone".
Several numbers, one inbox
Give each business number an icon on its form. The icon shows as a badge on every conversation of that number, so a sales thread and a support thread with the same customer are told apart at a glance. The selector at the top of the list shows all numbers or just one, and operators only see the numbers they are listed on.



Sending a document
On a contact, a quotation, an invoice, a delivery, a lead, a task, an event registration, an appointment, a purchase order or a receipt, open the Action menu and choose Send by WhatsApp; the same shortcut sits next to every phone field. Pick the number and the template, fill in any value the template asks for, check the preview and send. The template's PDF report goes along as the document, and a note is left in the record's chatter with a link to the conversation. From a list view, select several records and the same action sends to all of them.

Automatic sends
In Settings → Technical → Automation Rules, add an action of type Send WhatsApp template and pick the template. Every record that meets the rule gets its message, filled from the record, with no one clicking.
The 24-hour window and opt-out
Twenty-four hours after the customer's last message, WhatsApp only allows approved templates. The composer says so and offers Send a template, which reopens the conversation. If a customer replies STOP, UNSUBSCRIBE or BAJA (the list is yours to change in Settings), the number goes on the blacklist and nothing is sent to it again until it is removed.
States and retries
WhatsApp → Message Log keeps every message with its state: queued, sent, delivered, read or failed, with Meta's error code when there is one. Temporary failures are retried by a cron every five minutes; final ones can be sent again from the list. Messages are never purged: the log and the conversations are your history.

Frequently asked questions
Do I need to be a Meta Tech Provider? Only for coexistence. Meta's Embedded Signup for the WhatsApp Business app works through a Tech Provider app approved for WhatsApp Business App Onboarding. Either use RC Studio's app with a licence key, register as a Tech Provider yourself, or use another provider that hands you the App ID, the App Secret and the Login Configuration. A WABA API Connection needs none of this: your own Meta developer app is enough.
Does it work on Odoo Online (SaaS) or on Odoo.sh? Odoo Online does not accept third-party modules, so no. This module is meant for Odoo Community on-premise. It depends only on Community modules, so it also installs on an Odoo.sh project; Odoo.sh support is however not part of what we test.
Does the phone keep working after connecting? Yes, that is what coexistence means. The number stays active in the WhatsApp Business app; Odoo receives everything through the Cloud API and can send too. Messages sent from the phone are mirrored into Odoo.
Where do the conversations live? Is Discuss involved? In the module's own conversation and message models, shown in its own inbox. Discuss is not used for WhatsApp threads.
Does my data go through RC Studio? No. In all three modes, messages travel directly between Meta and your Odoo. With an RC Studio licence, our service takes part only when a number is onboarded: it exchanges Meta's authorisation for the access token, hands it to your Odoo and registers your Odoo's address with Meta as the delivery destination. From then on Meta delivers every message straight to your instance, and sending goes from your Odoo to Meta with your own token. RC Studio neither receives nor stores message content; it only keeps an encrypted copy of the token and the number's connection data until you disconnect it.
What does Meta charge for messages? Meta bills per delivered message. Template messages are charged at a rate that depends on the category (marketing, utility, authentication) and the customer's country. From 1 October 2026 Meta also charges the free-form replies you send inside the 24-hour window (the ones your team types in the inbox), at the same rate as utility and authentication messages in that country; until then they are free. Receiving messages stays free. The exact rates are on Meta's pricing page. RC Studio does not charge per message.
Can I send a PDF? A location? An audio note? From the inbox, inside the 24-hour window: text, images, videos, audio, documents and quoted replies. From a record: a template whose document header is the PDF report of the record, or a fixed file. Locations, stickers, reactions and contact cards are received and shown; outbound locations are only possible as a template header.
Several numbers, several companies? Yes. Each business number has its own operators and allowed companies, its own templates and its own conversations. Operators only see the numbers they are listed on.
Which Odoo versions are supported, and what languages does the interface speak? Odoo Community 17.0, 18.0, 19.0 and 20.0; each version is purchased separately on the Odoo store. The interface ships in English, Spanish, Portuguese, Italian, French, German and Arabic.
Is support included? Yes, for anyone who buys the module. Bugs are fixed at no cost; new features and the Meta-side setup are quoted separately.
Support
Support is included for anyone who buys the module. Installation, the Meta-side configuration and the RC Studio Tech Provider licence can be contracted separately. Use the support page of this module on Odoo Apps for anything related to your purchase: it reaches us directly and keeps the thread attached to your licence.
Data transit: messages and media travel directly between your Odoo instance and Meta's Cloud API, whichever connection mode you use. With an RC Studio licence, RC Studio's Tech Provider service takes part only when the number is onboarded: it issues the Meta access token and registers your Odoo's address as the delivery destination. RC Studio neither receives nor stores message content. Privacy policy.
WhatsApp is a trademark of Meta Platforms, Inc. RC Studio is not affiliated with, endorsed by or sponsored by Meta. This module is published under the Odoo Proprietary License v1.0 (OPL-1).
Connect your number without taking it off the phone
Your team keeps replying from the same app, and every conversation lands in Odoo.
Pricing