If your organization runs on Microsoft Teams, your downtime alerts belong there. Most enterprise teams spend their day in Teams channels -- it is where conversations happen, decisions get made, and incidents get triaged. Sending uptime alerts to email when your team lives in Teams means adding delay between detection and response.

CronAlert sends Microsoft Teams alerts through incoming webhooks, delivered as Adaptive Cards with color-coded status, monitor details, and everything your team needs to start investigating. The setup takes about five minutes. Here is how to wire it up.

Plan requirement: Microsoft Teams alerts are available on the Pro plan and above ($5/month). The free plan includes email, Slack, Discord, and webhook alerts.

How it works

The integration uses a Teams Workflow webhook: a Power Automate flow, created from the channel's own Workflows menu, that posts whatever it receives into the channel. You create the workflow, paste its URL into CronAlert, and you are done. When CronAlert detects that a monitor is down or has recovered, it sends a POST request to that URL with a formatted Adaptive Card. If you set this up before 2025 using the old Incoming Webhook connector, see the FAQ at the bottom: Microsoft retired those connectors, and the URL needs replacing.

No Teams app to install, no admin approval flow, no OAuth. A webhook URL is all you need. Power Automate has to be enabled for your organisation, which it is by default on Microsoft 365.

Step 1: Create a Workflow webhook in Teams

First, set up the webhook on the Teams side. You need to be a member of the channel where you want alerts; no admin rights are required unless your organisation has restricted Power Automate.

1

Open the channel's Workflows

Navigate to the Teams channel where you want downtime alerts to appear. A dedicated channel like Monitoring or Production Alerts works well. Click the three-dot menu next to the channel name and select Workflows. (If you don't see it, open the Workflows app from the Teams left sidebar instead and create the flow from there.)

2

Pick the webhook template

Choose Post to a channel when a webhook request is received. Give the flow a name -- something like "CronAlert" so you know what is posting to the channel -- and click Next. Confirm the team and channel it should post to, then click Add workflow.

3

Copy the webhook URL

Teams shows the workflow's URL once it is created. It looks like one of these, depending on your tenant:

https://prod-12.westus.logic.azure.com:443/workflows/xxxx/triggers/manual/paths/invoke?...
https://xxxx.environment.api.powerplatform.com/powerautomate/automations/direct/workflows/xxxx/triggers/manual/paths/invoke?...

Copy it and click Done. Treat this URL like a secret -- anyone with it can post messages to your channel. One more thing worth knowing: the workflow runs under the account of the person who created it. If that person leaves the organisation, the flow is disabled and alerts stop, so create it from a shared or long-lived account where you can.

Step 2: Add the webhook URL to CronAlert

Now connect that webhook to your CronAlert account.

1

Open Alert Channels

Log in to CronAlert and navigate to Alert Channels in the sidebar. Click Add Alert Channel.

2

Select Microsoft Teams and paste the URL

Choose Microsoft Teams as the channel type. Give it a descriptive name -- something like "Production Teams" or "Ops Channel" so you can tell your alert channels apart later. Paste the webhook URL you copied from Teams.

3

Save and test

Click Save. Use the Send Test button to fire a test Adaptive Card to your Teams channel. If it arrives, you are all set. If not, double-check that the webhook URL is correct and that the workflow shows as On in the channel's Workflows list.

Step 3: Decide which monitors it covers

Alert channels in CronAlert are team-wide: every enabled channel receives every alert for the monitors in that team, so there is no per-monitor assignment step. If only some monitors should post to this Teams channel (production but not staging, say), keep those monitors in a separate CronAlert team with its own channels. Combining channels works the same way -- Teams for the ops channel plus email or PagerDuty for the on-call engineer all fire together.

From now on, when CronAlert detects downtime on any monitor in the team, your Teams channel will light up with an Adaptive Card.

What the alerts look like

CronAlert does not send plain text to Teams. It sends Adaptive Cards -- the native rich content format for Teams -- with structured fields and color-coded themes. Here is the structure for each alert type.

DOWN alerts

When a monitor detects a failure, the Teams message includes:

  • Color theme -- a red accent indicating the alert is a failure
  • Title -- "DOWN: Monitor Name" in bold
  • URL -- the full URL that was checked
  • Status code -- the HTTP status code returned (e.g., 502, 503, 0 for connection timeouts)
  • Error message -- a human-readable description of what went wrong
  • Failing regions -- if you are on a plan with multi-region checks, the alert lists which regions detected the failure
  • Timestamp -- when the check was performed

The Adaptive Card payload looks like this under the hood:

{
  "type": "message",
  "attachments": [{
    "contentType": "application/vnd.microsoft.card.adaptive",
    "content": {
      "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
      "type": "AdaptiveCard",
      "version": "1.4",
      "msteams": { "width": "Full" },
      "body": [
        {
          "type": "TextBlock",
          "size": "Large",
          "weight": "Bolder",
          "color": "Attention",
          "text": "DOWN: Production API"
        },
        {
          "type": "FactSet",
          "facts": [
            { "title": "URL", "value": "https://api.example.com/health" },
            { "title": "Status", "value": "502" },
            { "title": "Error", "value": "Bad Gateway" },
            { "title": "Regions", "value": "us-east, eu-west" }
          ]
        }
      ]
    }
  }]
}

RECOVERED alerts

When the monitor detects that the site is back up, you get a recovery card. The title swaps to "RECOVERED" with a green accent, and instead of error details, it shows the total downtime duration:

  • Color theme -- green accent indicating recovery
  • Title -- "RECOVERED: Monitor Name"
  • URL -- the URL that recovered
  • Downtime -- how long the outage lasted (e.g., "4m 32s" or "1h 15m")
  • Timestamp -- when recovery was detected

The red/green distinction makes it easy to scan a busy Teams channel and immediately tell whether something is still broken or has been resolved.

Tips for getting the most out of Teams alerts

Use separate channels for different environments

Create one webhook in a Production Alerts channel and another in a Staging Alerts channel. In CronAlert, add both as separate alert channels, then assign your production monitors to the production channel and staging monitors to the staging channel. This keeps noise out of the channels that matter most.

Combine with other alert channels

Teams alerts do not have to be your only notification method. Enable several alert channels on the team -- for example, Teams for the broader ops group, email for the on-call engineer, and the native PagerDuty channel for paging. Channels are team-wide, and CronAlert sends every incident to all of them simultaneously. See our guides on Slack alerts and Discord alerts for setting up additional channels.

Configure channel notifications

In Teams, you can set notification preferences per channel. For your alerts channel, consider setting it to All activity so every alert triggers a desktop and mobile notification, even if other channels are set to a quieter mode. Right-click the channel, select Channel notifications, and set it to show all new posts.

Pair with maintenance windows to reduce noise

If you have a scheduled deploy or maintenance window, use CronAlert's maintenance windows (available on Pro and above) to pause alerting during that period. This prevents your team from getting paged for expected downtime and keeps the signal-to-noise ratio high. For more on setting up monitors effectively, see our uptime monitoring setup guide.

Frequently asked questions

Are Microsoft Teams alerts available on the free plan?

No. Microsoft Teams alerts require a Pro plan or above, starting at $5/month ($4/month billed annually). The free plan includes email, Slack, Discord, and webhook alerts. Upgrading to Pro also unlocks Telegram, PagerDuty, 1-minute check intervals, and 100 monitors.

Can I send alerts to multiple Teams channels?

Yes. Create a separate incoming webhook in each Teams channel you want alerts in, then add each one as its own alert channel in CronAlert. Alert channels are team-wide, so every incident posts to all of them; to send production to a Production Alerts channel and staging to a Staging Alerts channel, keep the two sets of monitors in separate CronAlert teams, each with its own workflow webhook.

What information is included in a downtime alert?

DOWN alerts include the monitor name, the checked URL, the HTTP status code, an error message, and the failing regions if you are using multi-region checks. RECOVERED alerts include the monitor name, URL, and total downtime duration. Both use Adaptive Cards with color-coded themes so you can tell the status at a glance.

Do I need to install a CronAlert app from the Teams app store?

No. CronAlert posts to a Teams Workflow webhook that you create yourself from the channel's Workflows menu, using Microsoft's built-in "Post to a channel when a webhook request is received" template. There is no third-party app to approve through your Teams admin and nothing with access to your Teams data beyond the ability to post into that one channel. Your organisation does need Power Automate enabled, which it is by default on Microsoft 365.

My Teams alerts stopped arriving. What changed?

Microsoft retired the Office 365 "Incoming Webhook" connector, so webhook URLs containing webhook.office.com no longer deliver messages. Create a new Workflow in the channel as in Step 1, copy its URL, and replace the URL on your CronAlert Teams alert channel. Click Send Test to confirm the new URL works; if a delivery to an old connector URL fails, CronAlert's notification log now says so and points you here. Also check that the person who created the workflow is still with the organisation, since a departed owner disables the flow.

Wrapping up

Getting downtime alerts into Microsoft Teams puts critical information where your organization is already communicating. Create a Workflow webhook in Teams, paste it into CronAlert, and the next time something goes down, your team will know about it in seconds -- with a clean Adaptive Card containing all the context they need to start investigating.

If you do not have a CronAlert account yet, sign up for free and upgrade to Pro to unlock Teams alerts -- 100 monitors, 1-minute checks, and Adaptive Card notifications starting at $5/month. Using Mattermost or Rocket.Chat instead? Their Slack-compatible webhooks work with the Slack channel type, no transformer needed. Using Google Chat or another tool? The webhook channel plus a small transformer reaches it. Already monitoring with another tool? Our setup guide walks through the whole process.