ml-connector
IFS CloudSlack

IFS Cloud and Slack integration

IFS Cloud runs manufacturing, asset management, and finance for operations teams. Slack keeps teams coordinated across communication. Connecting the two puts operational events from your ERP directly into the channels where your teams work, without context switching. When a purchase order is approved or a supplier invoice arrives in IFS, your procurement team sees it immediately in Slack. Financial closes and GL postings become visible events instead of behind-the-scenes transactions.

How IFS Cloud works

IFS Cloud exposes suppliers, purchase orders, supplier invoices, GL accounts, GL vouchers, customer orders, payments, and accounting dimensions through OData v4 REST, accessed at a tenant-specific URL (https://<tenant>.ifs.cloud). Authentication uses OAuth 2.0 client credentials with approximately 60-minute token lifetime. IFS Cloud does not offer self-registerable webhooks, so ml-connector polls the OData API using modified timestamps and state fields to detect new and changed records. OData requires ETag headers for mutations and limits page sizes to 5000 elements. The tenant must provide company codes for financial entities.

How Slack works

Slack exposes users, conversations (channels and direct messages), messages, and team metadata through the REST Web API and Events API (https://slack.com/api/). Authentication uses OAuth 2.0 authorization code flow, resulting in non-expiring bot tokens passed via Authorization Bearer header. Slack can push workspace events to your HTTPS endpoint via the Events API, with each payload signed using HMAC-SHA256 with the X-Slack-Signature header. Webhook endpoints must verify the signature, handle 3-second timeout requirements, and return 2xx status. Slack retries failed webhooks up to 3 times with exponential backoff. Alternatively, apps can poll using the REST API without exposing an endpoint.

What moves between them

The primary flow routes IFS events into Slack. When supplier invoices, purchase orders, payment proposals, or GL vouchers are created or changed in IFS Cloud, ml-connector polls for those records on a configurable interval (every 5-15 minutes for standard operations), formats them with business context (vendor name, order total, GL account, approval status), and posts formatted messages into designated Slack channels. Team members can react to or thread on these notifications for coordination. Optional reverse flow: Slack users can trigger IFS workflows via slash commands (e.g., /approve-invoice <ID>) which ml-connector routes back to IFS as authenticated API calls.

How ml-connector handles it

ml-connector continuously reads IFS Cloud using OData filters on ModifiedDateTime to find new and updated records, respecting the 5000-element page limit and exponential backoff on HTTP 429 rate-limit responses. On each poll cycle, changed records are formatted with human-readable details (vendor name, amount, GL account name, approval workflow state) and posted to Slack using the conversations.post method. Each Slack post includes the record ID as metadata, allowing threaded replies to be traced back to the source transaction. ml-connector validates every inbound Slack webhook signature using HMAC-SHA256 constant-time comparison against the X-Slack-Signature header to prevent spoofed events. OAuth2 tokens are refreshed automatically before expiry on both sides. For mutations back to IFS (e.g., marking an invoice as approved), ml-connector first reads the current record to capture its ETag, then submits the PATCH or POST action with that ETag value to enforce optimistic concurrency. All events are logged with full audit context: who triggered it, when, what changed, success or error.

A real-world example

A manufacturing operations team uses IFS Cloud for supply chain and finance, and Slack for daily team coordination. Before the integration, procurement staff checked IFS manually each morning for new supplier invoices and matching POs, logged status changes in spreadsheets, and flagged approvals in email chains. With IFS and Slack connected, every new invoice and PO appears in the procurement channel with context (vendor, amount, GL account), and approvers can respond in-thread without logging into IFS. Month-end close becomes more transparent: finance staff see all GL postings from payment runs appear in the finance channel, with full drill-down detail, so discrepancies surface immediately instead of during manual reconciliation.

What you can do

  • Post supplier invoices, purchase orders, and payment proposals from IFS Cloud into Slack channels with full business context and approval status.
  • Deliver GL voucher postings and journal entries from IFS to finance teams in Slack, linked back to the IFS transaction for traceability.
  • Allow Slack users to trigger IFS workflows (approve invoices, acknowledge POs, mark payments) via slash commands, with changes synchronized back into IFS.
  • Validate all Slack webhook signatures using HMAC-SHA256 and enforce OData ETag concurrency on IFS mutations to prevent conflicts.
  • Poll IFS OData API with modified-timestamp filtering, respect rate limits and page sizes, and maintain a complete audit trail of every message posted.

Questions

How does the integration detect new IFS transactions without webhooks?
ml-connector polls the IFS Cloud OData API on a regular schedule (every 5-15 minutes by default) using filters on ModifiedDateTime to fetch only records that have changed since the last poll. This avoids the need for IFS Event Actions configuration. The poll respects IFS page-size limits (5000 elements) and automatically backs off when rate limits are hit.
Can Slack users interact with IFS from within Slack?
Yes. ml-connector supports Slack slash commands and interactive buttons that route back to IFS as authenticated API calls. For example, a procurement manager can type /approve-invoice <ID> in a thread, and ml-connector will submit an approval action to IFS using the correct OAuth2 credentials and ETag concurrency headers. Changes flow back into Slack as confirmation messages.
What happens if an IFS record changes while Slack is posting it?
IFS uses OData ETag headers for optimistic concurrency. ml-connector reads each record to capture its current ETag before posting to Slack, and if a mutation is needed later (e.g., approval via Slack), ml-connector re-reads the record, gets the fresh ETag, and uses that value in the PATCH to ensure no intermediate changes are silently overwritten. If the ETag is stale, IFS returns 412 Precondition Failed, and ml-connector surfaces the conflict rather than forcing an update.

Related integrations

Connect IFS Cloud and Slack

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

Get started