# How to add Slack to QAD Adaptive ERP

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

## Short answer

Create a Slack app that listens to QAD events, posts Block Kit messages to the right channels and returns slash commands and button clicks to QAD through QXtend or web services. Keep a small connector inside your network so QAD is never exposed to the internet.

## System

QAD Adaptive ERP

## Capability

slack

## Intro

Slack is common in the engineering, supply chain and software parts of QAD customers, particularly where a company has grown by acquisition and different plants chose different tools. Teams that live in Slack find QAD to be a separate world, and expediting still happens through direct messages like did the PO for that casting go out.

A useful Slack integration turns QAD events into conversations. A shortage on a work order becomes a thread in the line's channel where planner, buyer and supervisor can talk with the order data right there. A slash command gives a fast read of an item or order, scoped to what the user may see.

This page is about the mechanics for QAD specifically: where events come from, how Slack's Events API and interactivity map to QAD calls, and how to deal with a database that is often behind a firewall.

## Use Cases

### Shortage threads per work order

**Description:** When a component shortage is detected for a released work order, open a thread in the line channel with item, required quantity, on-hand, and open supply, then keep it updated.

### Slash command item and order lookup

**Description:** Commands such as /qad item 10-4421 or /qad po 4500123 return on-hand, open orders, status and dates, using a read-only connector.

### Interactive approvals

**Description:** Send requisition or PO approval requests with buttons and a modal for comments, then execute the decision in QAD.

### Engineering change broadcast

**Description:** Announce released ECOs and BOM changes to engineering, quality and purchasing channels with a link to the QAD record and an acknowledge reaction.

### Customer shipment feed

**Description:** Post shipper confirmations and exceptions for key customers to an account channel, so sales sees what logistics did without asking.

### Integration health channel

**Description:** Send failed QXtend documents, stuck interface records and nightly batch failures to an ops channel with enough context to retry.

## System Surface

- Read access to Progress OpenEdge tables via SQL-92 ODBC/JDBC for lookups, with a dedicated read-only database user and statement timeouts to protect production.
- QXtend inbound documents or QAD web services for executing approvals and updates, so standard QAD programs apply validation and write history.
- QXtend outbound or database-trigger events for push; if unavailable, poll status columns or transaction history (tr_hist) with a high-water mark.
- QAD error and interface logs, where your configuration stores failed inbound documents, for the integration health channel.
- Slack: Events API, slash commands, Block Kit, interactivity endpoints, Socket Mode for firewalled environments, and OAuth scopes limited to the channels you use.
- Release differences matter. QAD EE, Adaptive ERP releases and cloud tenants differ in which services are exposed, so confirm available endpoints before committing to a design.

## How It Works

### Define channel structure

**Detail:** Decide which channels receive which events: per plant, per line, per commodity team. Avoid one noisy global channel. Private channels for pricing and cost data.

### Create the Slack app

**Detail:** Request minimal scopes (chat:write, commands, and channel read only where needed). Enable interactivity and, for firewalled setups, Socket Mode so no inbound port is required.

### Deploy the connector

**Detail:** Run it inside your network. It holds the Slack tokens, a read-only DB login and a QXtend integration user. Each slash command or button maps to a named function.

### Map identities

**Detail:** Resolve the Slack user email to a QAD user so lookups and approvals run under that person's access. Refuse actions if no mapping exists.

### Implement events and de-duplication

**Detail:** Detect changes, build a stable key from document and status, and update the same Slack message or thread instead of posting a new message each poll.

### Add approval and write-back flows

**Detail:** Send Block Kit approvals, verify the Slack signature, check the request is still pending, then call QAD. Return the result into the same thread.

### Operate it

**Detail:** Monitor failures, rate limits and unmapped users. Review channel noise monthly and retire alerts nobody acts on.

## Example Flows

### Shortage thread for a released work order

**Trigger:** Planning detects a component shortage against a released work order.

**Steps:**

- Connector queries the work order, component, required and available quantities.
- A thread starts in the line channel and tags the planner and buyer.
- Buyer replies with the expected supplier date using a modal.
- The date is saved on the thread and, after confirmation, on the open PO line.

**Result:** The cause, owner and date for the shortage are in one place.

### Slash command for open PO lines

**Trigger:** A planner types /qad po 4500123 in any channel.

**Steps:**

- Slack sends the command to the connector with the user identity.
- Connector checks mapping and plant access, then runs the PO query.
- It replies privately with lines, quantities and due dates.

**Result:** A fast answer without a QAD session, visible only to the requester.

### Failed interface document

**Trigger:** A QXtend inbound document fails validation.

**Steps:**

- The connector reads the error message and source document reference.
- It posts to the integration channel with a Retry button.
- After the owner fixes master data, Retry resubmits the document.

**Result:** Interface failures are handled in minutes, not found at month end.

## On Prem

A Slack integration on an on-premises QAD can be done without any inbound path to your network. Use Socket Mode, where the connector opens an outbound WebSocket to Slack, and keep the database and QXtend endpoints on private addresses. Send only what the message needs: item number, quantity, status, date. If you add AI summarisation of threads or natural-language questions, host an open-weight model in your environment so work order, cost and customer data never go to a public model service.

## Security

- Use least-privilege Slack scopes and restrict the app to named channels. Review installed apps and tokens regularly.
- Verify the Slack signing secret on every request and reject stale timestamps.
- Enforce QAD authorisation per mapped user and block actions for users without a mapping.
- Keep cost, price and supplier terms out of public channels and out of search-indexed workspaces where guests exist.
- Log every command and approval with Slack user ID, QAD user and document, and retain according to your audit policy.

## Options

### Slack Workflow Builder plus webhook alerts

**Fit:** You only need simple one-way notifications from scheduled QAD queries.

**Effort:** Days to a week

### Custom Slack app and in-house connector

**Fit:** You have developers, want slash commands, approvals and threaded updates, and can own the code.

**Effort:** 3 to 6 weeks

### Partner build with Netray

**Fit:** You want these plus a private AI layer for natural-language questions and summaries, built to your QAD release.

**Effort:** Scoped after discovery

## Pitfalls

- Polling heavy tables such as tr_hist without a high-water mark, which slows production queries.
- Posting a new message per poll rather than updating a thread, which creates noise.
- Granting broad Slack scopes that can read private channels the app does not need.
- Assuming the Slack email always equals the QAD user, which fails for contractors and shared mailboxes.
- Not handling Slack's three-second response limit for commands, so lookups time out. Acknowledge first, then respond asynchronously.

## Faq

### Is there an official Slack app for QAD?

**Answer:** We are not aware of a standard one that covers every Adaptive ERP release, so check with QAD and your partners for your version. Most teams build a small Slack app with a connector that uses read-only SQL for lookups and QXtend or web services for writes.

### Can Slack work if QAD is hosted and we have no database access?

**Answer:** Yes, if your hosted environment exposes QAD web services or QXtend. You lose some ad hoc query ability, so design flows around the services available. Ask your hosting provider or QAD which endpoints and credentials are permitted before you start.

### How do approvals avoid being faked?

**Answer:** The connector verifies Slack's signature, maps the clicking user to a QAD user, checks that the request is pending and that the user is the right approver, and then executes in QAD. A copied message or a stale button cannot approve something else.

### Will this slow down our QAD system?

**Answer:** Not if built carefully. Use read-only accounts, indexed queries, statement timeouts and high-water marks for event polling. Avoid scanning transaction history during peak hours, and cache items that rarely change.

### Should we pick Slack or Teams?

**Answer:** Use the tool your people already work in. The QAD side of the integration is almost the same for both, so a well-built connector can serve either. Many companies end up with Teams for approvals and Slack for engineering or software groups.

## Search terms

qad slack integration, slack for qad adaptive erp, qad slack bot, qad slash command, qad erp slack notifications, slack approvals qad, qad qxtend slack, slack erp integration manufacturing, qad shortage alerts slack, qad work order slack channel

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