How to add Slack to Dynamics 365 Finance and Supply Chain
Short answer
Build a small Slack app that receives Dynamics 365 business events or polled changes, posts structured alerts, and exposes slash commands and buttons. Every command is translated into a read-only OData call or a narrow custom service call, run with a restricted Entra ID service identity.
Not every Dynamics 365 shop is a Teams shop. Engineering, procurement or a subsidiary may run Slack, and supply chain teams that coordinate across time zones often prefer its channels and threads. They still need ERP facts: is the part received, which orders are blocked, who owns the exception.
Slack has no first-party Finance and Supply Chain connector from Microsoft, and general-purpose automation tools usually reach the system only through the Dataverse-oriented connectors. Doing it well means using the finance and operations endpoints directly and treating Slack as an untrusted front door.
Below is the integration surface, a build sequence and two worked flows, with the identity and throttling problems that tend to bite on this particular ERP.
What teams use it for
Inbound shortage escalation
Post material shortages from master planning or production order picking lists to a #shortages channel with item, warehouse, required date and the planner on record.
Slash command for stock
A command like /onhand ITEM WH returns on-hand and available physical from the inventory on-hand entity, scoped to the legal entity the user selects.
Goods receipt visibility
Notify the production planner thread when a product receipt posts against a PO that feeds a constrained work order.
Quality hold coordination
A failed quality order or a batch status change opens a thread with owners tagged, including a link to the batch and a button to request disposition from the quality manager.
Sales order status for account managers
/order SO-NUMBER returns lines, ship dates and holds so account managers do not need ERP access just to answer customers.
Exception digest
A morning post summarising vendor invoices on hold for price or quantity variance with owners and ages.
Microsoft Dynamics 365 Finance and Supply Chain integration surface
- Business events delivered to an HTTPS endpoint, Azure Service Bus or Event Grid are the cleanest trigger. Which events exist (and which you must add as custom events) varies by version and module.
- OData v4 data entities exposed at the /data path for reads (inventory on-hand, sales and purchase headers and lines, released products), with cross-company queries when the call specifies cross-company=true and the identity has access.
- Custom services in the /api/services path for operations such as placing a hold or recording a disposition; prefer these to writing to entities that carry heavy validation side effects.
- Entra ID app registration with client credentials, authorised in the environment, mapped to a service user. Slack users are not ERP users, so a mapping table is needed for personal permissions.
- Throttling and request limits on the finance and operations endpoints; slash commands should answer within Slack's three-second acknowledgement window and complete work asynchronously.
- For on-premises Local Business Data, your own listener and AD FS based auth replace the cloud eventing options.
How it works
- 1
Create the Slack app
Define bot scopes (chat:write, commands, and only the channel scopes you need), enable interactivity, and set the request URL to your service. Use Socket Mode when you cannot expose a public endpoint.
- 2
Define the ERP service identity
Register an Entra ID app, authorise it in the environment, and assign a service user a role limited to the entities and services used.
- 3
Map people
Keep a table linking Slack user IDs to ERP users or to a role (read-only observer, planner). Unmapped users get a polite refusal.
- 4
Wire events
Subscribe a few high-value business events and format them as Block Kit messages with a deep link into the client by company and form.
- 5
Implement commands
Acknowledge in under three seconds, query the entity with narrow filters and a row cap, and post the result as an ephemeral message so data is not left in public channels.
- 6
Implement interactive writes
Buttons carry a signed payload; the service re-reads current state, checks the user's role and calls a custom service. Disable the button after use.
- 7
Operate
Rate-limit commands per user, cache read-heavy answers briefly, and alert on failed ERP calls or token expiry.
Example flows
Stock check in a thread
Trigger: A planner types /onhand AB-1042 MAIN in a channel.
- Slack sends the command; the service acknowledges immediately.
- It authenticates to the ERP with the service identity and queries on-hand inventory for the item and warehouse.
- It applies the user's mapped legal entity and role.
- An ephemeral message shows physical, available, reserved and the next scheduled receipt.
Result: A planner gets a number in seconds with no ERP login, and nothing is posted publicly.
Quality hold disposition
Trigger: A quality order fails inspection on a lot that is allocated to a customer order.
- Business event posts to the service with the quality order and lot.
- The service posts a thread to the quality channel with Accept, Rework and Scrap buttons for the quality manager only.
- On a press, the service verifies the user and the order state.
- A custom service records the disposition and the thread is updated with who decided and when.
Result: The disposition is recorded in the ERP and visible to planning, with the decision trail in Slack.
Keeping data on-prem
A Slack workspace is hosted by Slack, so keep the middleware inside your network and make outbound calls only. Use Socket Mode to avoid exposing an inbound endpoint, and limit messages to identifiers, statuses and dates when contract data should not leave the site. If you add natural-language questions, run the intent and answer-generation model on your own hardware and make the ERP queries through the read-only service identity, so only the final short answer is posted to Slack.
Security checklist
- Validate Slack request signatures and timestamps on every call.
- Use ephemeral replies for any value that is commercially sensitive.
- Enforce authorisation in the service, not by channel membership.
- Store the Entra ID secret or certificate in a vault and rotate it on a schedule.
- Log every command with Slack user, ERP identity, filter values and row count returned.
Ways to get it done
iPaaS or workflow tool with a generic HTTP step
Effort: Days, but limited for interactive writes.
Simple one-way alerts from business events.
Custom Slack app with a small service
Effort: Roughly 3 to 6 weeks for a handful of commands.
Slash commands, buttons and role-aware writes.
Partner build with Netray
Effort: Scoped after reviewing security roles and target workflows.
Natural-language questions grounded in ERP data on a private model with approval gates.
Pitfalls
- !Slack answers must be acknowledged quickly; slow ERP queries need an async response.
- !A single shared service user lets any channel member read everything that identity can; add per-user role checks.
- !Cross-company queries return a lot of data; always filter by legal entity.
- !Blocks and message size limits truncate long line lists, so summarise and link.
- !Using entity writes that bypass the form logic can skip validations; prefer a purpose-built service.
Frequently asked questions
Is there an official Slack connector for Dynamics 365 Finance and Supply Chain?
Microsoft does not publish a dedicated one that I can confirm. Third-party and marketplace options may exist, so check current listings. The reliable path is a custom app calling OData and custom services.
Can Slack users approve ERP workflow items?
Yes, if the middleware maps the Slack user to the assigned approver and calls the workflow completion path. Without that mapping, restrict Slack to notifications and links.
How do I stop sensitive data appearing in public channels?
Return details as ephemeral messages or DMs, post only identifiers publicly, and gate each command by the caller's role in your mapping table.
What about the three-second Slack timeout?
Acknowledge immediately, then post the result using the response URL or an update. Cache stable lookups such as item descriptions to keep common commands fast.
Can I do this without exposing an endpoint?
Yes. Slack Socket Mode lets your service connect outbound, which suits locked-down networks. ERP-side events then arrive by polling or a queue inside your network.
Want Slack working on your Microsoft Dynamics 365 Finance and Supply Chain?
A free 30 minute assessment: we map the integration path for your version and setup, and where it should run.
Get a free assessment