
Marketing Automation Suite: SMS & WhatsApp
Marketing automation over SMS and WhatsApp: journey steps sent through your own Twilio or Meta account, delivery status back, STOP honoured.
Available for Odoo 16.0, Odoo 17.0, Odoo 18.0, Odoo 19.0. Technical name bambooforge_ma_messaging.
Marketing Automation Suite: SMS & WhatsApp
An add-on for BambooForge Marketing Automation (17.0). Two journey step types that send SMS and WhatsApp through Twilio or Meta's WhatsApp Cloud API with your own account, plus a Sandbox to rehearse on; a message log with delivery status coming back; STOP honoured.
Gateways
Marketing Automation ▸ Gateways. One record per sender:
Sandbox - writes every send to the log with a fake reference; nothing leaves the server. Use it to rehearse a journey.
Twilio - Account SID, auth token, and From: a Twilio number in E.164, a Messaging Service SID (MG…), or your approved WhatsApp number. Channel SMS or WhatsApp (a Twilio account doing both is two gateway records).
Meta WhatsApp Cloud API - Phone number ID and a permanent access token. WhatsApp only.
Send test posts one message to the Test number and writes it to the log: the way to prove a gateway before it meets a journey.
Callbacks
Each gateway shows two URLs (with a secret token in the path):
Status callback - Twilio: attached to every message automatically. Meta: statuses arrive on the webhook below.
Inbound / webhook - Twilio: paste as the number's "A message comes in" webhook. Meta: paste as the app's webhook URL; it answers Meta's verification GET with the Webhook verify token shown on the record; subscribe to messages.
Steps
Two new step types on a journey:
Send SMS (gateway) - gateway + Message (inline placeholders: Hi {{ object.name }}).
Send WhatsApp - gateway + either Message (a session message, only deliverable inside the 24-hour customer window) or a WhatsApp template name + language + Template variables (comma-separated inline expressions in {{1}}, {{2}} order). A template is the only way to start a conversation on WhatsApp; Meta approves them in your Business Manager, Twilio maps them to Content SIDs - name them as your provider expects.
What happens on a participant: the number is taken from mobile then phone (19.0 dropped res.partner.mobile, so there it is simply phone); no number → skipped with a note; a blacklisted number → the participant exits the journey (STOP is regulatory); otherwise the message is rendered and sent, the send is logged, a trace is written, the journey advances. The sending window holds these steps like e-mails. Run Test writes "would send SMS via …" and sends nothing.
The log
Marketing Automation ▸ Messages: gateway, number, journey, step, body, state (queued → sent → delivered → read, or failed with the provider's error), reference, last status time. Statuses never go backwards (a late "sent" after "delivered" is ignored). Tests sent with the button are flagged and hidden by default.
Retention
The message log is swept by Odoo's daily vacuum: rows older than bambooforge_ma_messaging.log_retention_days (a system parameter, 365 by default) are deleted. Set it to 0 to keep everything - some regulators ask for that, and then it is a decision rather than an oversight.
STOP
An inbound STOP (also STOPALL, UNSUBSCRIBE, CANCEL, END, QUIT) on either platform adds the number to Odoo's phone blacklist (phone_validation installed) and is logged; the next gateway step for that number exits the participant.
Honest about proof
Twilio and Meta were implemented against their published REST contracts and are exercised by this module's tests against recorded stubs. The screenshots and the video run on the Sandbox gateway. Live delivery is proven on your account with Send test; no third-party credentials were used to build this module, and none are shipped.
Technical notes
Uses Marketing Automation 1.10.0's hooks: _messaging_step_types (sending window), _run_step_<type> dispatch, _dry_run_label.
Python dependency: requests.
Community only. The external services are the ones you already pay for.
Screens


