Skip to main content

Help center · Account & billing

How to send Digital Empire alerts to Microsoft Teams

By Digital Empire Support · Published August 21, 2026 · Last updated August 21, 2026

Microsoft Teams is the enterprise messaging default for any shop that runs Microsoft 365 -- public sector, healthcare, regulated finance, and most Fortune 500 organizations. Every product in the Digital Empire portfolio -- PixelProof, EntryProof, TariffWatch -- can post alerts directly into a Teams channel via an incoming webhook. This guide walks the current Workflows-based path (recommended, works on every tenant as of 2026) and calls out the legacy Office 365 Connector path for older tenants.

The 4-step Workflows-based setup

Microsoft deprecated the classic Office 365 Connectors on August 15, 2024, in favor of Workflows built on Power Automate. Every new incoming webhook is created via the Workflows app that ships inside Teams itself. No admin approval, no app registration, no OAuth flow.

  1. In Microsoft Teams, open the channel you want alerts in. Click the + to add a tab (or the ... menu in the channel header) and pick Workflows. If Workflows is not visible, ask your Teams admin to enable the Power Automate integration for your tenant -- most tenants have it on by default.
  2. Search for the template "Post to a channel when a webhook request is received" and click Add workflow. Sign in with the account you want the webhook to post as. Confirm the target Team and Channel.
  3. Click Add workflow to finish. Teams displays the generated HTTPS URL -- copy it. This is the incoming webhook URL. It will look like https://prod-XX.westus.logic.azure.com/workflows/....../triggers/manual/paths/invoke?api-version=...&sig=....
  4. On the Digital Empire integrations page (/account/integrations/teams), paste the URL you copied, optionally add a label like #alerts-procurement, pick which product's alerts to route (default: all), and save. Click Send test alert to confirm the wire.

Screenshot placeholder -- Teams Workflows template picker with "Post to a channel when a webhook request is received" highlighted. Andy will upload the real screenshot after wire-up.

<img src="/help/screenshots/teams-workflows-webhook.png" alt="Microsoft Teams Workflows template picker showing 'Post to a channel when a webhook request is received' highlighted" />

Legacy Office 365 Connectors -- for older tenants

If your tenant is still on the deprecated Office 365 Connectors path (Teams shows an Incoming Webhook connector in the channel Connectors menu rather than requiring Workflows), the setup is even shorter:

  1. Right-click the channel -&gt; Connectors -&gt; find Incoming Webhook -&gt; Configure.
  2. Name the webhook (for example "Digital Empire Alerts"), optionally upload an avatar, click Create.
  3. Copy the URL displayed. It will look like https://outlook.office.com/webhook/....../IncomingWebhook/....
  4. Paste into /account/integrations/teams as above.

The Adaptive Card payload we POST works on both connector types -- verified against the Teams Adaptive Card reference on learn.microsoft.com. If your tenant only has the legacy connector and Microsoft eventually turns it off, migrate to a Workflows-based webhook and re-paste the new URL. Nothing else changes.

What we actually send to Teams

The alert dispatcher formats every triggered alert as an Adaptive Card 1.4 wrapped in the Teams-required attachments envelope. Severity maps to Adaptive Card container styles that Teams renders with accent colors -- critical and high in attention (red), medium in warning (amber), low in good (green). The card includes the alert title, message, an event fact set, and a single Open dashboard action button that deep-links back into the Digital Empire dashboard for that alert.

The body we POST looks like this:

{ "type": "message", "attachments": [{ "contentType": "application/vnd.microsoft.card.adaptive", "contentUrl": null, "content": { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.4", "msteams": { "width": "Full" }, "body": [{ "type": "Container", "style": "attention", "items": [{ "type": "TextBlock", "size": "Large", "weight": "Bolder", "wrap": true, "text": "Pixel break on your-store.myshopify.com" }] }, { "type": "TextBlock", "wrap": true, "text": "The Meta Pixel is no longer firing PageView on your product pages." }, { "type": "FactSet", "facts": [{ "title": "Severity", "value": "critical" }, { "title": "Event", "value": "pixel_missing" }] }], "actions": [{ "type": "Action.OpenUrl", "title": "Open dashboard", "url": "https://digital-empire-app.vercel.app/meta-monitor" }] } }], "summary": "Pixel break on your-store.myshopify.com", "text": "Pixel break on your-store.myshopify.com" }

The outer summary and text fields are a plain-text fallback for notification previews on older Teams clients -- the Adaptive Card is what renders inside the channel itself.

Severity filter, test-alert button, rate limits

On the integrations page you pick a product scope (all products or just one) when connecting each Teams channel. On the per-product ops-alert integrations page (PixelProof, EntryProof, TariffWatch) you can additionally set a severity floor -- alerts below that severity are silently skipped. The four-tier ladder is: critical, high, medium, low. Every product uses the same tiers.

The Send test alert button on the integrations page fires a synthetic Adaptive Card through the dispatcher so you can confirm the wire before a real event triggers. If it lands in the target Teams channel with the "Test alert" title, the wire is working end to end.

We cap dispatched alerts to 10 per hour per webhook to stay well under Teams's own limits. Microsoft documents the Teams incoming-webhook rate limits at learn.microsoft.com -- as of 2026, roughly 4 requests per second per webhook and 60 messages per minute per Teams channel. Our 10/hour cap sits comfortably under both. Overflow alerts are dropped, counted in the skipped_rate_limit metric on the per-product integrations page, and surfaced to Andy in /andy/integrations/teams so misconfigured hooks get flagged. As of Aug 2026 -- verify current at the Microsoft learn.microsoft.com link above if you rely on burst behavior.

Security -- a Teams webhook URL is a bearer secret

The Teams incoming-webhook URL is a bearer secret. Anyone who has the URL can post any message into the target channel, impersonating whichever account created the workflow. The URL includes a query-string signature (?sig=...) but that signature is fixed for the life of the webhook -- it is not a rotating credential. Treat the URL like a database password: never paste it into a public repo, a client-side JavaScript bundle, a support screenshot, or an email thread you did not initiate.

If a URL leaks, delete the workflow in Teams and generate a new one. Microsoft invalidates the old URL immediately.

The bearer-secret model is documented explicitly in the Teams webhook security notes on learn.microsoft.com -- Teams does not verify the sender's identity beyond URL possession, so URL confidentiality is the entire security boundary. We treat every outbound POST as customer-controlled and route it through the SSRF-hardened dispatcher (DNS-rebinding pin, private-IP block, port allowlist) so a copy-pasted-wrong URL cannot be weaponized to reach the internal network.

Troubleshooting

  • HTTP 202 Accepted with an empty channel: the Workflows path returns 202 the moment the message is queued for delivery, before Teams renders it. If the Adaptive Card never shows up, the Power Automate run history inside the workflow (Teams -&gt; Workflows -&gt; your workflow -&gt; Run history) will show what happened. Common cause: the workflow owner lost access to the target channel, so Teams silently dropped the message.
  • HTTP 400 Bad Request with "invalid payload": your tenant is on a very old connector version that does not accept the attachments envelope. Generate a new Workflows-based webhook (Section 1 above) and re-paste -- the Workflows path accepts the modern envelope on every tenant.
  • HTTP 429 Too Many Requests: defined in RFC 6585 at rfc-editor.org. Our dispatcher does not retry -- Teams pushes back when the per-webhook or per-channel burst limit is exceeded. Reduce the number of hooks routing into the same channel or raise the severity floor to cut volume.
  • Card renders as plain text: an older Teams client on the recipient's side has fallen back to the text field. The Adaptive Card is present in the payload; the client just isn't rendering it. Web and desktop Teams clients on any version from 2022 onward render Adaptive Cards natively. If a specific user consistently sees plain text, they need a client update.

Reference

Related articles

FAQ

Do I need Power Automate premium to use this? No. The "Post to a channel when a webhook request is received" template runs on the free Power Automate tier that ships with any Microsoft 365 Business plan. Personal Teams accounts also get a limited Power Automate tier that runs the same template.

My old MessageCard/Connector URL still works -- do I need to migrate? If it works, our dispatcher continues to post the Adaptive Card envelope to it and it will render. But Microsoft has retired Office 365 Connectors on August 15, 2024; some tenants have extension periods but the direction is clear. Provision a Workflows-based webhook now and re-paste while it is quiet.

Can I filter which alerts land in Teams vs Slack? Yes -- add both as separate webhook rows on the same product's integrations page and set different severity floors or event filters on each. The dispatcher fires all matching webhooks in parallel. The /account/integrations/teams page adds an additional product-scope filter (all products vs one) that layers on top of the per-product severity filter.

Why do I see two identical alerts in Teams? Almost always a duplicate Workflows flow. Check the workflow list inside Teams (channel -&gt; Workflows -&gt; Manage) -- if two flows share the same trigger URL prefix, delete one.

Still stuck? Email support@enforceintel.com.

Was this helpful?

Still stuck?

Email support@enforceintel.com.

EnforceIntel builds compliance tools for regulated verticals — consumer products and metals.

Also from EnforceIntel

All pricing
PixelProof — Meta Pixel monitoring for ShopifyEntryProof — CPSC eFiling readiness checkerTariffWatch — Section 232 exposure checkerPriceProof — Shopify reference-pricing observation

Popular free tools & roundups

Free Meta Pixel DebuggerFree HTS Code Lookup (§232)Free CPSC Penalty CalculatorBest Shopify pixel monitors 2026Best CPSC eFiling tools 2026Best Section 232 tools 2026Help centerAll free toolsAll productsReferral programRoadmapChangelogStatusTrust & SecurityAPI docsYour account
Cookie settings