# How to add Slack to Dynamics 365 Finance and Supply Chain

> Source: https://netray.co/integrations/dynamics-365-fscm-slack
> Publisher: Netray (netray.co), AI and integration engineering for ERP and manufacturing systems.
> Section: Integrations

## 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.

## System

Microsoft Dynamics 365 Finance and Supply Chain

## Capability

slack

## Intro

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.

## Use Cases

### Inbound shortage escalation

**Description:** 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

**Description:** 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

**Description:** Notify the production planner thread when a product receipt posts against a PO that feeds a constrained work order.

### Quality hold coordination

**Description:** 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

**Description:** /order SO-NUMBER returns lines, ship dates and holds so account managers do not need ERP access just to answer customers.

### Exception digest

**Description:** A morning post summarising vendor invoices on hold for price or quantity variance with owners and ages.

## System 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

### Create the Slack app

**Detail:** 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.

### Define the ERP service identity

**Detail:** Register an Entra ID app, authorise it in the environment, and assign a service user a role limited to the entities and services used.

### Map people

**Detail:** Keep a table linking Slack user IDs to ERP users or to a role (read-only observer, planner). Unmapped users get a polite refusal.

### Wire events

**Detail:** 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.

### Implement commands

**Detail:** 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.

### Implement interactive writes

**Detail:** 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.

### Operate

**Detail:** 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.

**Steps:**

- 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.

**Steps:**

- 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.

## 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

- 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.

## Options

### iPaaS or workflow tool with a generic HTTP step

**Fit:** Simple one-way alerts from business events.

**Effort:** Days, but limited for interactive writes.

### Custom Slack app with a small service

**Fit:** Slash commands, buttons and role-aware writes.

**Effort:** Roughly 3 to 6 weeks for a handful of commands.

### Partner build with Netray

**Fit:** Natural-language questions grounded in ERP data on a private model with approval gates.

**Effort:** Scoped after reviewing security roles and target workflows.

## 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.

## Faq

### Is there an official Slack connector for Dynamics 365 Finance and Supply Chain?

**Answer:** 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?

**Answer:** 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?

**Answer:** 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?

**Answer:** 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?

**Answer:** 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.

## Search terms

dynamics 365 slack integration, slack for dynamics 365 finance and operations, dynamics 365 supply chain slack bot, d365 fo slack notifications, slack slash command dynamics 365, send slack message from dynamics 365 business event, dynamics 365 slack approval, connect slack to dynamics 365 erp

---
Talk to an engineer: https://netray.co/contact?intent=erp_ai | Machine catalog: https://netray.co/agent/catalog.json
