Microsoft Teams Integration
Assert posts alerts to a Teams channel through an incoming webhook, as an Adaptive Card with buttons to view the details and acknowledge the alert.
The card names the assertion that failed, the expected value, the value your API returned, the regions that agreed, and the time. A failure re-runs across regions before the card is posted. A single bad check never reaches the channel. Assert posts one alert per incident and closes the incident when the assertion passes again.
Routing is per monitor, so each service can report into its own channel. Teams is on every paid plan.
Setup Guide
Step 1: Create Incoming Webhook in Teams
- Open Microsoft Teams
- Go to the channel where you want alerts
- Click ... (More options) → Connectors
- Find Incoming Webhook and click Configure
- Name the webhook "Assert Alerts"
- (Optional) Upload a custom icon
- Click Create and copy the webhook URL
Step 2: Add Teams Channel in Assert
- Go to Alerts → Channels in your Assert dashboard
- Click Add Channel → Microsoft Teams
- Paste your webhook URL
- Name the channel, for example "Teams - API Alerts"
- Click Save
Step 3: Test the Integration
Click Send Test. Assert posts a test card to your Teams channel.
Step 4: Assign to Monitors
Open each monitor. Add the Teams channel under Alert Channels.
Alert Format
The card looks like this:
┌─────────────────────────────────────┐
│ 🔴 Monitor Failed │
│ Production API │
├─────────────────────────────────────┤
│ Status Code 500 │
│ Response Time 2,340ms │
│ Region US East │
│ Time Dec 11, 2:34 PM UTC │
├─────────────────────────────────────┤
│ Assertion Failed: │
│ $.status expected "success", │
│ got "error" │
├─────────────────────────────────────┤
│ [View Details] [Acknowledge] │
└─────────────────────────────────────┘
Configuration Options
| Option | Description |
|---|---|
| Webhook URL | Your Teams incoming webhook URL |
| Include Response Time | Show request duration in alerts |
| Include Region | Show which region detected the issue |
| Include Error Details | Show assertion failure messages |
Best Practices
Create separate channels for different alert types:
📊 Monitoring
├── API Alerts
├── Critical Incidents
└── Vendor Status
Then set how loudly each one rings:
- Right-click the channel → Channel notifications
- Set "All activity" for critical channels
- Set "Mentions only" for lower-priority channels
To keep a monitoring channel visible, right-click it and select Pin. Mentions of specific people or groups need extra configuration in your webhook handler.
Multiple Teams/Channels
Assert can post to more than one Teams channel:
- Create a webhook in each channel
- Add each webhook as a separate channel in Assert
- Assign monitors to the channels you want
Example routing:
| Monitor Type | Teams Channel |
|---|---|
| Production APIs | #critical-alerts |
| Staging APIs | #dev-alerts |
| Third-party | #vendor-status |
Troubleshooting
Not receiving alerts?
- Check the webhook URL
- Check that the webhook connector is still configured
- Check that the channel still exists
Cards not rendering?
- Microsoft Teams limits how complex a card can be
- Update your Teams client
- If the desktop client fails, try the Teams web client
Webhook URL expired?
- Teams webhooks can expire after 90 days of inactivity
- Regenerate the webhook. Paste the new URL into Assert.
Rate limiting?
- Teams allows a webhook 4 requests per second
- Reduce the check frequency for monitors that share a channel
Security
Treat webhook URLs like passwords:
- Do not commit them to source control
- Keep them in environment variables
- Rotate a URL if it leaks
Check the connectors in your Teams channels from time to time:
- Go to channel settings → Connectors
- Review the active webhooks
- Remove the integrations you no longer use
Alternative: Teams Workflows
For more control, use Power Automate with Assert webhooks:
- Create an Assert webhook integration
- Set up a Power Automate flow triggered by HTTP request
- Post to Teams using the Teams connector
- Add custom logic, approvals, or multi-channel routing
Next Steps
- Set up Slack for additional team coverage
- Configure PagerDuty for on-call escalation
- Explore alerting features