How to add Microsoft Teams to Ignition (SCADA/MES)
Short answer
The simplest path is an alarm pipeline Script step that posts an Adaptive Card to a Teams channel through a Workflows webhook. For two-way approvals, a Teams bot registered in Entra ID calls back into a relay that talks to the Ignition Gateway.
Ignition shops often have plant IT on Microsoft 365 and operations on Ignition, with the two barely connected. Alarms go to email, work orders live elsewhere, and the maintenance channel in Teams has nothing from the floor unless someone pastes it. Teams is where managers, quality and planning already talk, so it is the natural place for plant events to surface.
There is an important distinction here between notification and workflow. Posting a card to a channel is an afternoon of work. Letting someone approve a batch release, a changeover or a downtime classification from Teams and have that land in Ignition with the right identity is a real integration with authentication, audit and failure handling.
Because Ignition Gateways usually sit behind the plant firewall, the useful question is which direction connections are allowed to go. Outbound posting works with minimal firewall change. Inbound card actions need either a relay in a DMZ or a polling pattern, and that shapes the whole design.
What teams use it for
Channel alerts per area
Packaging, machining and utilities alarms post to separate Teams channels as cards with priority, source path, time active and a link to the Perspective page.
Batch or lot release approval
A quality engineer approves a lot disposition from a Teams card, and the decision is written to the MES quality table with their Entra identity.
Changeover checklist sign-off
Operators and leads confirm changeover steps in Teams, with each confirmation stored against the work order and line.
Daily production digest
A scheduled Gateway script posts yesterday's output, scrap, top downtime causes and open alarms to the plant leadership channel.
Maintenance request intake
Someone describes a fault in a Teams message to a bot, which creates a maintenance request record and links the asset's recent alarms.
Inductive Automation Ignition (MES/SCADA) integration surface
- Alarm notification pipelines with a Script step for outbound posts; exact HTTP helper functions differ between 7.9, 8.1 and 8.3.
- system.net.httpClient or java HTTP classes in Gateway scope for calling a Workflows webhook or a relay URL.
- Perspective session URLs and page configs, which let a card deep-link to the exact asset or alarm page.
- Named Queries and Transaction Groups (SQL Bridge) for writing approval outcomes and reading production summaries from the MES schema.
- Ignition's own identity providers and user sources, including OpenID Connect or SAML with Entra ID for Perspective, which helps align Teams identity with Ignition roles.
How it works
- 1
Choose notification only or two-way
For one-way, use a Teams Workflows webhook per channel. For approvals, register a bot or Teams app in Entra ID and plan a relay that can receive its callbacks.
- 2
Define card templates
Build Adaptive Card JSON for alarm, approval and digest cases. Keep fields short and put the Perspective deep link in an action button.
- 3
Wire the pipeline Script step
Call a project library function that picks the channel by alarm area, fills the card and posts it. Return and log the HTTP status.
- 4
Stand up the callback relay
Host a small service in a DMZ that validates Teams tokens and forwards approved actions to the Gateway through a Web Dev endpoint or a SQL queue table the Gateway polls.
- 5
Map identity
Resolve the Entra user to an Ignition user or role before accepting an action. Reject actions from users without the right role.
- 6
Write results back and update the card
Persist the decision via a Named Query, then update the original card to show who approved and when.
Example flows
Lot disposition approval
Trigger: An inspection station writes a failed measurement to the quality table.
- A Gateway tag or DB trigger starts a script that builds an approval card.
- The card posts to the quality channel with lot, station, value and limits.
- The quality engineer chooses Release, Rework or Scrap and adds a note.
- The relay validates the user and the Gateway writes the disposition through a Named Query.
Result: A lot disposition with a named approver and timestamp is stored in the MES schema.
Morning production digest
Trigger: A Gateway scheduled script runs at 06:30.
- It queries the historian and MES tables for the previous shift.
- It formats a card with output, scrap and top three downtime reasons.
- It posts to the leadership channel with a link to the Perspective dashboard.
Result: Leaders see the numbers where they already read, without opening a client.
Keeping data on-prem
Teams is a cloud service, so the only thing that crosses the boundary is the card content and the callback. Keep the Gateway outbound-only where possible: it posts cards, and a DMZ relay holds the bot endpoint and passes approved actions inward via a queue table or a tightly scoped Web Dev call. Avoid sending recipe values, part numbers under export control or customer names in cards; send identifiers and a deep link that only works on the corporate network or VPN. If you want natural-language Q&A in Teams over plant data, run the model and retrieval layer on-site and expose only the final answer text to the bot.
Security checklist
- Validate the Teams or Bot Framework token on every callback and check tenant ID.
- Map Entra users to Ignition roles and enforce per-action permissions, not channel membership.
- Never expose the Gateway web port to the internet to receive callbacks; use a relay or polling.
- Do not allow cards to trigger writes to control tags; restrict actions to MES records.
- Log card ID, user, action and result to a SQL audit table.
Ways to get it done
Workflows webhook with Script step for one-way alerts
Effort: One to three days.
Teams that want visibility in channels with no approvals.
In-house Teams bot with relay and Web Dev or SQL queue back to Ignition
Effort: Three to six weeks with security review.
Sites with Azure skills and a clear approval process to digitise.
Partner-delivered bot with optional on-prem assistant behind it
Effort: Scoped per site; Netray works alongside your Ignition integrator.
Plants that want approvals plus a question-answering bot over MES and historian data.
Pitfalls
- !Old Office 365 connector webhooks have been retired or deprecated in favour of Workflows, so check the current Microsoft guidance before copying older tutorials.
- !Adaptive Card feature support differs between Teams clients, so test on desktop and mobile.
- !A card that posts per alarm will flood a channel during an upset. Aggregate and rate-limit in the pipeline.
- !Approvals made in Teams without Ignition-side re-validation can approve stale lots; check the record state before writing.
Frequently asked questions
Can Ignition send messages to Teams natively?
Not through a dedicated built-in profile. The usual pattern is a Script step in an alarm notification pipeline that posts JSON to a Teams Workflows webhook or a relay. It is a few lines of Gateway scripting plus a card template.
How do approvals from Teams get back into Ignition?
A bot or card action calls a relay you host. The relay validates the user, then either calls a Web Dev endpoint on the Gateway or writes to a SQL queue table that a Gateway script reads. The Gateway then updates MES records.
Does this need the Perspective module?
Not for posting cards. Perspective is useful as the deep-link target so a person can open the asset view from a card, but alerts and approvals work purely through scripting, SQL and the relay.
Can we do this with Teams but keep data on-prem?
Card text and callbacks go through Microsoft's cloud, so minimise content to identifiers and short text. Heavy data and any AI summarisation can stay on-site, with only the final short message posted to Teams.
Which Ignition version is needed?
Any version that supports Gateway scripting and HTTP calls can post cards, but helper functions differ between 7.9 and 8.x. Check your version's system.net documentation before writing the library code.
Want Microsoft Teams working on your Inductive Automation Ignition (MES/SCADA)?
A free 30 minute assessment: we map the integration path for your version and setup, and where it should run.
Get a free assessment