Odoo is the most popular open-source ERP in India — used for manufacturing, trading, services, and retail. WA.Expert connects Odoo events — sales orders, invoices, delivery orders, manufacturing orders — to WhatsApp via Odoo Automated Actions, custom Python modules, or Odoo's XML-RPC external API.
Odoo's open-source nature gives you multiple integration paths. Odoo 16 and 17 even have a native WhatsApp module — but it requires a Meta direct account. WA.Expert provides an alternative that's often simpler for Indian businesses. This guide covers all four methods so you can choose based on your Odoo version and technical skill.
| Integration approach | Complexity | Best for |
|---|---|---|
| Odoo Automated Actions (no code) | ⭐ Easy — Odoo admin knowledge | Set trigger on model event + Server Action calling WA.Expert API. |
| Custom Odoo Python Module | ⭐⭐⭐ Complex — Odoo developer | Override _create/_write methods to fire WhatsApp on document events. |
| Odoo XML-RPC / JSON-RPC (external) | ⭐⭐ Medium — external Python/Node.js | External script polls Odoo API for new records and triggers WhatsApp. |
| Odoo Native WhatsApp Module (v16/17) | ⭐ Easy — requires Meta Business account | Odoo 16/17 built-in WhatsApp module — configure with WA.Expert BSP credentials. |
In Odoo: Settings → Technical → Automation → Automated Actions. Enable developer mode (Settings → Activate Developer Mode) if Automated Actions is not visible.
Name: "WhatsApp on Sale Order Confirm". Model: Sales Order (sale.order). Trigger: Stage is set to "Sales Order". Action: Execute Python Code.
In the Python Code field, write the HTTP request to WA.Expert. Odoo's action code has access to the record via the variable "records". Use Python's requests library (import requests) or Odoo's built-in urllib.request.
Access: record.partner_id.mobile or record.partner_id.phone for phone, record.name for order number, record.amount_total for amount, record.partner_id.name for customer name.
Save and click "Run Manually" on a test Sale Order to verify. Check Python execution errors in Settings → Technical → Logging. Once verified, the action fires automatically on all matching records.
In Odoo Automated Actions, the requests library is not available by default in sandboxed code. Use Python's built-in urllib.request instead (as shown) for HTTP calls — this always works regardless of Odoo version or server configuration.
Odoo exposes an XML-RPC interface at /xmlrpc/2/common (authentication) and /xmlrpc/2/object (data). Use Python's xmlrpc.client (built-in) to authenticate and query models.
Call common.authenticate(db, username, password, {}) to get the user ID (uid). Use this uid + password for all subsequent object calls.
Use models.execute_kw(db, uid, password, model, "search_read", filters, fields) to query for records created since last run. Store the last processed write_date to avoid reprocessing.
From the record data, get partner_id and load the partner's mobile field. Call WA.Expert API with the phone and document details.
Automated Actions get you live in 30 minutes. Custom modules give you full control. WA.Expert handles the WhatsApp delivery.