ml-connector
OdooSlack

Odoo and Slack integration

Odoo manages your accounting, purchasing, inventory, and HR. Slack keeps your team connected. Connecting the two surfaces critical business events in real time without teams leaving Slack or accounting staff breaking their workflows. New purchase orders, submitted invoices, completed payments, and employee onboarding milestones flow into designated team channels as structured messages that link back to the records in Odoo. Slack users can react and respond, and ml-connector logs those interactions back into Odoo's audit trail.

How Odoo works

Odoo exposes accounting moves, purchase orders, supplier payments, employee records, and product catalogs through XML-RPC and JSON-2 REST APIs, available on Odoo Online, Odoo.sh PaaS, and self-hosted editions. Authentication uses an API key paired with a username on Odoo 14 and later, passed in the header for JSON-2 calls or included in the XML-RPC request. Odoo requires Custom pricing to enable external API access, and access is governed by the integration user's Odoo role and record rules. Webhooks exist via Automated Actions but are not production-grade; polling with write_date filters is the recommended pattern for reliable integrations.

How Slack works

Slack exposes workspace users, conversations, messages, and files through the Slack Web API using OAuth2 Bearer tokens that do not expire. Requests go to https://slack.com/api/{method}, and responses are always JSON. Slack also provides the Events API for push delivery of workspace activity to your HTTPS endpoint with HMAC-SHA256 signature verification. Rate limits apply per method; chat.postMessage is limited to one per second per channel. Socket Mode is available for apps unable to expose a public endpoint, and Enterprise Grid adds the SCIM API and Audit Logs API.

What moves between them

The main flow is Odoo into Slack. Purchase orders, invoices, and payments created or updated in Odoo are polled on a configurable schedule and posted as formatted messages to dedicated Slack channels. Employee records flow the same direction, so team members see onboarding and termination notices as they happen. Slack user reactions, thread replies, and mentions are logged back into Odoo for audit and compliance. Reference data such as departments and product codes are aligned in both systems so channel routing and message detail stay accurate.

How ml-connector handles it

ml-connector stores both the Odoo API key and Slack OAuth2 token encrypted and polls Odoo using write_date filters on a schedule you define, defaulting to hourly for operational data and daily for reference. It formats each Odoo record as a Slack message with title, key fields, and a deep link back to the original record in Odoo, then posts to the matching channel using the Slack Web API. For purchase orders, it extracts vendor, amount, and due date; for invoices, vendor, amount, and payment terms; for employees, name, department, and start date. Because Slack rate-limits postMessage to one per second per channel and Odoo's API key does not expire, ml-connector batches Odoo records when the polling window contains more than one per second, and it validates each Odoo user's access rights before posting their record. Thread replies and reactions are collected separately and logged back to Odoo via a read-only integration user record. Webhook delivery from Odoo is unreliable, so polling is the default; if your Odoo instance has Enterprise + Studio with Automated Actions enabled, ml-connector can also consume those webhooks with HMAC validation.

A real-world example

A mid-sized services firm uses Odoo Online for accounting and procurement, and Slack for team communication. The finance team and procurement team work in separate channels. Previously, purchase requisitions submitted in Odoo were emailed as PDF attachments, teams missed urgent approvals, and invoices from suppliers were lost in email threads. With Odoo and Slack connected, each new purchase order appears in the procurement channel within minutes, tagged by vendor and amount, with a link to the full record in Odoo. Finance sees incoming invoices in their channel and can discuss payment timing without re-forwarding documents. Team members react in Slack, and those signals feed back into Odoo for compliance audits. Approval cycles and payment turnaround both improved.

What you can do

  • Post Odoo purchase orders, invoices, and payments to designated Slack channels on a polling schedule with deep links back to Odoo.
  • Format and attach Odoo product and vendor reference data in message context so Slack users understand scope without opening Odoo.
  • Authenticate Odoo via API key or Bearer token and Slack via non-expiring OAuth2 credentials, managing both encrypted at rest.
  • Poll Odoo using write_date filters and timestamps so integration starts on demand without replaying historical records.
  • Log Slack reactions, mentions, and thread replies back into Odoo audit records for compliance and team accountability.

Questions

Which Odoo editions support this integration?
Odoo Online, Odoo.sh, and self-hosted editions all expose the XML-RPC and JSON-2 APIs. External API access requires the Custom pricing plan on Odoo Online; self-hosted and Odoo.sh have no license restriction. All editions require an API key paired with a username on Odoo 14 and later, and access is governed by the integration user's Odoo role and record rules.
How does ml-connector handle the difference between Odoo webhooks and Slack webhooks?
Odoo webhooks via Automated Actions are not production-grade, so ml-connector uses polling with write_date filters instead. Slack, by contrast, supports reliable webhook delivery via the Events API with HMAC-SHA256 signature verification. If you use Slack's Events API, ml-connector validates every signature in constant time and retries failed deliveries up to 3 times with exponential backoff.
What happens if the Slack channel is full or the bot token is revoked?
If a channel reaches storage limits, ml-connector queues the message and retries on your next polling cycle. If the Slack OAuth2 token is revoked via auth.revoke or workspace admin action, ml-connector logs the failure and surfaces it in the audit trail so you can re-authenticate without losing data.

Related integrations

Connect Odoo and Slack

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started