How to add Slack to Odoo
Short answer
Connect Odoo to Slack by sending event alerts from automated actions to an incoming webhook, then add a Slack app with slash commands and interactive buttons that call Odoo's external API for lookups and approvals. Start with alerts, then add actions once user mapping is solid.
Odoo teams that standardise on Slack, often software-leaning manufacturers or newer plants, still get critical events by Odoo email. Stockouts, late orders and approval requests sit in an inbox while the real conversation happens in channels.
A good Slack integration is small and opinionated. A handful of channels per function, threaded alerts per record, and a slash command to look up an order cover most of the value. Writing back to Odoo from Slack is where care is needed.
The Slack side is well documented and stable. The Odoo side depends on edition and version, so decide early whether you will use Studio automations, a custom module or an external poller.
What teams use it for
Order lookup slash command
A slash command such as /order SO0123 returns state, delivery date and open balance from sale.order, so support does not open Odoo for quick questions.
Stockout alerts to purchasing
Post to a purchasing channel when product availability falls below reordering rules, with open demand and incoming purchase.order lines.
Quality hold notices
When a quality.check fails (Quality app, Enterprise) or a lot is blocked, alert the quality and production channels with the lot reference.
Approval buttons
Interactive messages for purchase or expense approvals with Approve and Reject buttons that call back to Odoo.
Shipment confirmations
Announce validated stock.picking deliveries to a sales channel so account managers can tell customers without checking Odoo.
Helpdesk escalation
Push high priority helpdesk.ticket records to a support channel with SLA time left (Helpdesk is an Enterprise app).
Odoo integration surface
- Automated actions (base.automation) on create, write or time conditions, with Python server actions or webhook actions on recent versions to call Slack.
- ir.cron scheduled actions for digests such as end-of-day open orders.
- External API: XML-RPC /xmlrpc/2/object, JSON-RPC /jsonrpc, and a newer JSON-2 style endpoint on recent versions; API keys per user.
- search_read and read_group on sale.order, purchase.order, stock.picking and mrp.production for slash command answers.
- mail.thread message_post for logging Slack-originated decisions on the record.
How it works
- 1
Design channels and ownership
One channel per function (purchasing, production, quality, sales ops). Decide which events are alerts and which are digests to avoid noise.
- 2
Start with incoming webhooks
Create a Slack app, enable incoming webhooks per channel, and post JSON blocks from an Odoo automated action or the cron job.
- 3
Add the app backend
Host a small service that receives slash commands and interactive payloads, verifies Slack's signing secret, and talks to Odoo over the external API.
- 4
Map Slack users to Odoo users
Match by email. Refuse actions from unmapped users and run each action with that user's rights where possible.
- 5
Implement read commands first
Slash commands should only read. Return a clear message when a record is not found or access is denied.
- 6
Add write actions with checks
For approvals, re-read the record state, call the model's approval method, and update the Slack message with the result.
Example flows
Reorder alert to approval
Trigger: A scheduled action finds components under minimum stock.
- It builds a Slack message listing the part, shortfall and open supplier lines.
- Buyer clicks Create RFQ in the message.
- The app creates a draft purchase.order through the API.
- The message updates with a link to the draft.
Result: A draft RFQ exists in Odoo for the buyer to review, not a sent order.
Order status slash command
Trigger: A salesperson types /order followed by a reference.
- The app verifies the Slack signature and maps the user.
- It searches sale.order by name with the user's rights.
- It returns state, promised date and invoiced amount in a private reply.
Result: A quick answer without leaving Slack and without exposing it to the channel.
Keeping data on-prem
Slack is a cloud service and cannot be self-hosted, so the question is what you let leave your network. Odoo can stay on-prem; the integration service sits in your DMZ or private cloud, calls Odoo internally, and makes outbound calls to Slack. Slash command and interaction requests reach your service through a reverse proxy, so you need a reachable HTTPS endpoint, or Socket Mode where Slack opens the connection outbound from your side. Keep message content to references and status, and avoid posting costs, customer names or controlled technical data if policy forbids it. In air-gapped sites, use Odoo's own Discuss and email, or a self-hosted chat tool that offers similar webhook patterns.
Security checklist
- Verify the Slack signing secret and timestamp on each request to block replay.
- Use per-user mapping and least-privilege Odoo API users; avoid one superuser behind all commands.
- Reply to slash commands ephemerally when data is sensitive.
- Store bot tokens and Odoo API keys in a secrets manager and rotate them.
- Log each command and action with Slack user, Odoo user and record.
Ways to get it done
Webhook alerts from Odoo automated actions
Effort: One to three days.
One-way notifications and digests.
In-house Slack app and API service
Effort: Two to three weeks including review and hardening.
Commands and approvals with proper identity.
Partner build with Netray
Effort: Several weeks depending on hosting and scope.
When you also want natural-language questions answered by an agent grounded in Odoo data.
Pitfalls
- !Slack requires a response to slash commands within about three seconds; acknowledge fast and post results asynchronously.
- !Alert fatigue from per-record messages that should be digests.
- !Treating channel membership as authorisation instead of checking Odoo rights.
- !Hard-coding record ids in message buttons that go stale.
Frequently asked questions
Is there a native Slack app for Odoo?
Odoo does not ship an official Slack connector as part of its core apps as far as I know, and availability of third-party modules varies by version. Most teams use webhooks from automated actions plus a small Slack app that calls Odoo's external API.
Can I approve purchase orders from Slack?
Yes. An interactive message sends the click to your backend, which re-reads the purchase.order and calls the approval method for the mapped Odoo user. Do not trust amounts or states in the button payload, and keep approval limits enforced in Odoo itself.
Does this work with Odoo.sh or Odoo Online?
Odoo.sh gives you custom modules and server actions. Odoo Online restricts custom code, so you rely on Studio automations, webhooks where available and the external API from an outside service. Check which Odoo API access your plan allows.
How do we keep Slack from becoming a data leak?
Limit message content to references, statuses and links behind Odoo login, set retention policies in Slack, and restrict channels. Avoid posting customer pricing or controlled technical data, since Slack stores message history on its servers.
Can an AI answer questions in Slack from Odoo data?
Yes, with an agent that translates questions into read-only Odoo API queries and shows the query used. For sensitive data the model can be a private open-weight model, so only the final answer, not raw records, reaches Slack.
Want Slack working on your Odoo?
A free 30 minute assessment: we map the integration path for your version and setup, and where it should run.
Get a free assessment