Whatsmeow Templates & Composer
Send templated WhatsApp messages from a record of any model — with placeholders, attachments, generated PDF reports, and no-code automation.
Write it once.
Send it from anywhere.
Whatsmeow Templates & Composer lets you send templated WhatsApp messages from a record of any model. A template is a saved message body — interpolated against the record with {{ object.name }} placeholders — that can carry static attachments or a freshly generated PDF report. Operators launch it from the chatter’s WhatsApp button, from a record’s Action menu, or automation fires it through a Send WhatsApp server action.
Unlike Meta’s Cloud API there is no template approval and no 24-hour session window, so a template here is simply a saved, field-interpolated message. Sending reuses the core connector’s queue untouched: the composer only creates outgoing messages, so every send inherits the same pacing, warm-up caps, retries, opt-out checks, and idempotency for free — this module adds no transport code of its own.
Send From Any Model
Point a template at any Odoo model and it becomes available on that model’s records — a sales order, an invoice, a contact. The recipient number is resolved automatically.
Placeholders, Attachments & PDF Reports
Write the body once with placeholders and it renders per record. Attach static files, or name a report and each recipient gets their own generated PDF.
Rides the Core Queue
The composer creates ordinary outgoing messages and hands them to the core connector’s paced queue, so pacing, daily caps, opt-out enforcement, and retries all apply automatically.
One template,
every way to send it.
Seven capabilities covering authoring, recipients, attachments, and automation.
Templates for Any Model
Create a template against any model, with an optional default sending number. It is automatically published in that model’s contextual Action menu, so operators can launch it from a record without touching the model’s views.
Field Interpolation
The body renders against each record with {{ object.name }}, {{ user.name }}, and {{ company.name }} placeholders. WhatsApp’s own formatting markers inside a rendered value are neutralised, so a customer name never accidentally italicises the message.
Attachments & Generated Reports
Attach static files that go with every send, and/or name a report that is rendered to a PDF per record and attached — each with a sensible filename derived from the record. A configuration check makes sure the report actually belongs to the template’s model.
Smart Recipient Resolution
Set an explicit recipient field path (e.g. partner_id.phone), or leave it blank to probe the record’s own phone fields and then its contact’s. Typos in a field path are caught while editing the template, not at send time.
Composer With Live Preview
The composer opens preloaded with the template, shows the rendered message and resolved number for a single record, and lets the operator edit before sending. In batch mode each record renders its own body, and records with no number are reported, never silently dropped.
“Send WhatsApp” Server Action
Wire a template into an automation with a Send WhatsApp server action — “on order confirmed, WhatsApp the customer” — with no code. It composes and queues for every record it runs on, by exactly the same rules as a hand-launched send.
Send to One or Many
Launch a template on a single record from its chatter, or select many records in a list and send to all of them at once. Every message goes on the paced queue, so a batch to fifty contacts is spaced out rather than fired in a burst.
Install the core connector first
This module extends the core connector, so the order matters.
Install Whatsmeow WhatsApp Connector
whatsmeow must be installed first — with its gateway deployed and at least one session paired.
Install this module
Once the core module is in place, install this one from the Apps list like any other add-on.
Build your first template
Templates are managed under WhatsApp → Configuration → Templates, visible to WhatsApp Administrators.
Create a template
Click New and choose the model under Applies to.
Write the body
Enter the message with {{ object.field }} placeholders; a live preview shows how it renders.
Set sender and recipient
Optionally pick a default Send From number and a Recipient Field path.
Attach files or a report
Add static Attachments, and/or pick a Report to generate a per-record PDF.
Wire an automation (optional)
Create a Send WhatsApp server action, choose the model and template, and trigger it however you like.
See it in action
Building a template, adding a report and attachments, and sending it from a record.
Build, send, automate
Four workflows from authoring a template to firing it automatically.
Build a Template
Create a reusable WhatsApp message for a model.
Send From a Record
Send a templated message to one contact.
Send in Bulk
Message many records at once.
Automate a Send
Fire a template automatically when something happens.
Full transparency
This module only composes and queues; the actual delivery, pacing, and safeguards all live in the core connector.
A big batch is spread out on purpose
A template send obeys every core safeguard: a contact who has opted out is skipped, a number known not to be on WhatsApp is not sent to, and a session’s daily cap still bounds how many of a large batch go out today. The rest stay queued for the following days — not delivered all at once.
Records with no number are reported, not dropped
Records with no resolvable WhatsApp number are skipped and reported (a notification and a server-log line), never silently dropped, so you always know a batch did not reach everyone.
Questions, answered
Quick answers to the most common questions.
Do I need to get templates approved like on the WhatsApp Cloud API?
No. There is no template approval and no 24-hour session window here. A template is just a saved, field-interpolated message you can send at any time.
Which models can I send from?
Any model. Point the template’s Applies to at the model you want, and it becomes available on that model’s records. The recipient number is resolved from the record or its contact automatically.
Can I attach an invoice or quotation PDF?
Yes. Name a Report on the template and each recipient gets their own generated PDF, with the same filename you would see in the Print menu. You can also add static attachments that go with every send.
How does a bulk send avoid getting my number banned?
The composer only creates outgoing messages and hands them to the core connector’s paced queue, so a batch is spaced out and bounded by that session’s warm-up and daily caps — it is not fired all at once.
Can automation send a template without any code?
Yes. Create a Send WhatsApp server action on the model, choose the template, and trigger it from an automation rule, a button, or a schedule.
Release history
A clean record of every release.
Initial release
Bytesraw
🛠️ Need help?
Got a question, found a bug, or need a custom enhancement? Our support team responds within 24 hours on business days.
help@bytesraw.com →💼 Custom development
Need this module tailored to your workflow, or a brand-new Odoo solution? Let’s talk about your project.
info@bytesraw.com →| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Community Apps Dependencies | Show |
| Lines of code | 2885 |
| Technical Name |
whatsmeow_template |
| License | LGPL-3 |
Please log in to comment on this module