Microsoft Dynamics 365 Business Central and Slack integration
Microsoft Dynamics 365 Business Central runs your finance and operations. Slack is where your team talks and acts. Connecting the two turns finance events into Slack messages and lets a Slack click finish the work in the ERP. When a purchase invoice or sales invoice is created, changed, or sent for approval in Business Central, ml-connector posts a clear Block Kit message into the right Slack channel, and an Approve or Post button in Slack triggers the Business Central posting action without anyone opening the ERP. ml-connector handles the very different APIs on each side and keeps the two in step on the cadence you set.
What moves between them
The main flow runs from Microsoft Dynamics 365 Business Central into Slack. As purchase invoices, sales invoices, and other finance records are created or changed, ml-connector reads the record after each change signal and posts a Block Kit notification into the matching Slack channel with the vendor or customer, amount, due date, and status. Interactive Approve or Post actions flow the other direction: a Slack button click or event is verified and turned into the Business Central Microsoft.NAV.post bound action that moves a draft invoice to Open. Employee records align the two sides so an approval message can mention the right Slack user. Purchase orders, which have no webhook in Business Central, are polled on a schedule. Slack holds no financial state, so ml-connector never treats it as a system of record.
How ml-connector handles it
ml-connector stores both credential sets encrypted: the Business Central client ID and secret used for the Entra ID client-credentials token, and the Slack bot token. It registers a Business Central subscription per company and answers the mandatory validation handshake by echoing the validationToken, then renews each subscription before the three-day expiry so notifications never lapse. Because a Business Central notification is only a change signal, the connector fetches the named resource over OData before building the Slack message. Outbound posts use chat.postMessage with Block Kit blocks and a plain text fallback, and the connector respects Slack's one-message-per-second-per-channel limit and backs off on a 429 Retry-After. Inbound Slack events and button clicks are verified with the signing secret over the raw body, deduplicated by event_id, and acknowledged within three seconds before the work is queued. Business Central employee emails are resolved to Slack users with lookupByEmail so approval pings land on the right person. Purchase orders, which have no webhook, are polled with a lastModifiedDateTime filter. Throttled calls on either side are retried with exponential backoff, and every record carries a full audit trail and can be replayed if a downstream call fails.
A real-world example
A 150-person specialty distributor runs Microsoft Dynamics 365 Business Central for purchasing, receiving, and accounts payable, and the whole company lives in Slack. Before the integration, every supplier invoice over a threshold sat in Business Central waiting for a manager to log in and approve it, so approvals slipped past due dates and the AP clerk chased people by hand. With Business Central and Slack connected, each invoice that needs sign-off posts into the team's approvals channel with the vendor, amount, and due date, and the manager taps Approve right in Slack. That click posts the invoice in Business Central through the posting action, the channel updates to show it is handled, and late approvals stop being the reason a payment misses its date.
What you can do
- Post new and changed Business Central purchase and sales invoices into the right Slack channel as Block Kit messages.
- Let a Slack Approve or Post button trigger the Business Central posting action that moves a draft invoice to Open.
- Match Business Central employee emails to Slack users with lookupByEmail so approval pings reach the right person.
- Bridge Business Central Entra ID client-credentials login and the Slack bot token, with signed Slack event verification.
- Renew Business Central subscriptions before their three-day expiry and poll webhook-less purchase orders on a schedule.
Questions
- Which direction does data move between Microsoft Dynamics 365 Business Central and Slack?
- The main flow is Business Central into Slack, where invoices and approvals are posted as messages. Interactive actions flow back: a Slack Approve or Post click triggers the Business Central posting action that moves a draft invoice to Open. Slack holds no financial records, so it is never used as a system of record.
- Why can Slack only notify and act, not store finance data?
- Slack is a communication platform and has no native vendor, invoice, purchase order, or GL account objects. ml-connector uses it as the notification and approval layer: Business Central finance records are posted as Block Kit messages, and Slack button clicks are turned into Business Central posting actions. The financial state always stays in Business Central.
- How does the integration handle Business Central webhooks and Slack event verification?
- Business Central subscriptions expire every three days and notifications carry only a change signal, so ml-connector renews each subscription before expiry and fetches the record over OData before posting. Incoming Slack events are verified with the signing secret over the raw body, deduplicated by event_id, and acknowledged within three seconds. Purchase orders, which have no Business Central webhook, are polled on a schedule.
Related integrations
More Microsoft Dynamics 365 Business Central integrations
Other systems that connect to Slack
Connect Microsoft Dynamics 365 Business Central and Slack
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started