> ## Documentation Index
> Fetch the complete documentation index at: https://arize-ax.mintlify.site/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Microsoft Teams

> Surface Arize monitor alerts in Microsoft Teams, so issues get noticed without anyone watching a dashboard.

Send Arize monitor alerts to a Microsoft Teams channel using the webhook integration and a Microsoft Teams Workflow that renders each alert as an Adaptive Card.

<Note>
  **Before you begin:** You need permission to create a Workflow in your Teams channel (Power Automate enabled for your account), and a role in Arize that can manage **Alert Integrations** and **Monitors**.
</Note>

## Integration Setup

Build the Teams Workflow, format the alert card in Power Automate, then register the webhook in Arize.

### Integration Setup: Create Teams Workflow

Create a Teams Workflow that posts to your channel when it receives a webhook request — this generates the webhook URL you'll register in Arize.

<Steps>
  <Step title="Open Workflows in your channel">
    <Frame>
      <img src="https://storage.googleapis.com/arize-assets/doc-images/teams-alerts/teams-01-create-workflow.png" alt="The Workflows option in a Teams channel's More options menu" />
    </Frame>
  </Step>

  <Step title="Select the webhook template">
    Select **Send webhook alerts to a channel**.

    <Frame>
      <img src="https://storage.googleapis.com/arize-assets/doc-images/teams-alerts/teams-02-select-template.png" alt="Selecting the Send webhook alerts to a channel template" />
    </Frame>
  </Step>

  <Step title="Choose the channel">
    Choose the channel that should receive the alert.

    <Frame>
      <img src="https://storage.googleapis.com/arize-assets/doc-images/teams-alerts/teams-03-select-channel.png" alt="Choosing the Teams channel for the alert" />
    </Frame>
  </Step>

  <Step title="Copy the webhook URL">
    Copy the **webhook URL** — you'll need it when you create the webhook integration in Arize. Treat it like a password: anyone with the URL can post to the channel.

    <Frame>
      <img src="https://storage.googleapis.com/arize-assets/doc-images/teams-alerts/teams-04-copy-webhook-url.png" alt="Copying the generated webhook URL" />
    </Frame>
  </Step>
</Steps>

### Integration Setup: Modify Workflow in Power Automate

The Teams Workflow expects an Adaptive Card, but Arize sends raw JSON. Edit the Workflow in Power Automate to build a custom alert card from the fields in Arize's webhook payload.

<Steps>
  <Step title="Open Power Automate">
    Go to [make.powerautomate.com](https://make.powerautomate.com/) and sign in with the same credentials you use for Teams.
  </Step>

  <Step title="Open My flows">
    Select **My flows**.

    <Frame>
      <img src="https://storage.googleapis.com/arize-assets/doc-images/teams-alerts/teams-05-my-flows.png" alt="My flows in the Power Automate navigation" width="200" />
    </Frame>
  </Step>

  <Step title="Select your workflow">
    Select your webhook workflow.

    <Frame>
      <img src="https://storage.googleapis.com/arize-assets/doc-images/teams-alerts/teams-06-select-flow.png" alt="Selecting the webhook workflow in My flows" />
    </Frame>
  </Step>

  <Step title="Edit the flow">
    Select **Edit**.

    <Frame>
      <img src="https://storage.googleapis.com/arize-assets/doc-images/teams-alerts/teams-07-edit-flow.png" alt="The Edit button on the flow detail page" />
    </Frame>
  </Step>

  <Step title="Open the Post card action">
    Expand the actions, then open **Post card in a chat or channel**.

    <Frame>
      <img src="https://storage.googleapis.com/arize-assets/doc-images/teams-alerts/teams-08-post-card-action.png" alt="The Post card in a chat or channel action in the flow designer" />
    </Frame>
  </Step>

  <Step title="Replace the Adaptive Card">
    In the **Adaptive Card** field, remove the existing string object and paste the JSON below:

    ```json theme={null}
    {
      "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
      "type": "AdaptiveCard",
      "version": "1.4",
      "body": [
        { "type": "TextBlock", "size": "Large", "weight": "Bolder", "color": "Attention", "text": "🔴 Arize Monitor @{triggerBody()?['status']}" },
        { "type": "TextBlock", "weight": "Bolder", "spacing": "None", "wrap": true, "text": "@{triggerBody()?['monitor_name']}" },
        { "type": "FactSet", "facts": [
          { "title": "Model / Project", "value": "@{triggerBody()?['model_name']}" },
          { "title": "Status", "value": "@{triggerBody()?['status']} (was @{triggerBody()?['previous_status']})" },
          { "title": "Metric", "value": "@{triggerBody()?['metric_description']}" },
          { "title": "Value", "value": "@{triggerBody()?['calculated_value']} (threshold @{triggerBody()?['operator']} @{triggerBody()?['threshold']})" },
          { "title": "Time (UTC)", "value": "@{triggerBody()?['timestamp']}" }
        ]}
      ],
      "actions": [
        { "type": "Action.OpenUrl", "title": "Open monitor in Arize", "url": "@{triggerBody()?['monitor_url']}" }
      ]
    }
    ```
  </Step>

  <Step title="Save the flow">
    Select **Save**.

    <Frame>
      <img src="https://storage.googleapis.com/arize-assets/doc-images/teams-alerts/teams-09-save-flow.png" alt="Saving the flow after pasting the Adaptive Card JSON" />
    </Frame>
  </Step>
</Steps>

### Integration Setup: Register Webhook in Arize

Register the Teams webhook URL in Arize as a webhook integration so it's available as an alert destination for your monitors.

<Steps>
  <Step title="Open the Webhook integration">
    Go to **Settings → Alert Integrations → Webhook Integration**.

    <Frame>
      <img src="https://storage.googleapis.com/arize-assets/doc-images/teams-alerts/teams-10-arize-webhook-integration.png" alt="The Webhook Integration card in Arize Alert Integrations" />
    </Frame>
  </Step>

  <Step title="Register the webhook">
    Select **Add New**, name the integration (for example, `Teams Channel`), and paste the webhook URL from the Teams Workflow. Leave **Authorization Token** and **Custom Headers** empty, then select **Register New Webhook**.

    <Frame>
      <img src="https://storage.googleapis.com/arize-assets/doc-images/teams-alerts/teams-11-register-webhook.png" alt="Registering the Teams webhook integration in Arize" />
    </Frame>
  </Step>
</Steps>

## Send Alerts

Assign the Teams webhook to your alerts at either level:

* **Project level** -- from a project's **Config** tab, select the Teams webhook so every monitor in the project notifies Teams.
* **Per monitor** -- set it on an individual monitor, as below.

<Steps>
  <Step title="Create a custom monitor">
    In your project, go to **Monitors → New Monitor → Create Custom Monitor**.
  </Step>

  <Step title="Send notifications to the Teams webhook">
    Configure the monitor, then set **Send Notifications to** your **Teams Channel** webhook and the alert event to **Triggered**. Select **Create**. To also be notified when a monitor recovers, subscribe the webhook to the **Cleared** (and optionally **No data**) events.

    <Frame>
      <img src="https://storage.googleapis.com/arize-assets/doc-images/teams-alerts/teams-12-monitor-notification.png" alt="Setting the monitor to notify the Teams Channel webhook on the Triggered event" />
    </Frame>
  </Step>

  <Step title="Confirm the alert in Teams">
    Within a few minutes, the alert triggers (if its conditions are met) and posts to the Teams channel.

    <Frame>
      <img src="https://storage.googleapis.com/arize-assets/doc-images/teams-alerts/teams-13-teams-alert-example.png" alt="An Arize monitor alert rendered in the Teams channel" />
    </Frame>
  </Step>
</Steps>

<Note>
  Alerts fire on a state change (Healthy → Triggered), not on every evaluation — a monitor won't re-alert while it stays triggered. To test again, let it clear and re-trigger.
</Note>

## Troubleshooting

If no message appears in the channel:

* Confirm the workflow is turned **On** in Power Automate (or the Teams **Workflows** app).
* Confirm the **Adaptive Card** field contains valid JSON.
* Confirm the monitor actually transitioned to **Triggered** — alerts fire on a state change, not on every evaluation.
* Open the flow's **run history** at [make.powerautomate.com](https://make.powerautomate.com/) → your flow. A failed run shows the exact error (for example, an invalid Adaptive Card).

### Troubleshooting: Webhook Payload Reference

When a monitor changes state, Arize sends this JSON (`Content-Type: application/json`). The card maps its fields from these exact names — useful if you want to customize the alert card in Teams or debug a blank value:

```json theme={null}
{
  "event": "monitor.triggered",
  "event_uuid": "f6f4ca33-5b4d-4a79-b5ee-fd9bc1f2b094",
  "space_id": "<SPACE_ID>",
  "account_organization_id": "<ORG_ID>",
  "space_name": "Your Space",
  "account_organization_name": "Your Org",
  "timestamp": "2026-06-17T23:27:25.146494727Z",
  "monitor_id": 664739,
  "monitor_name": "Teams Webhook Trigger Test",
  "model_name": "your-project",
  "status": "Triggered",
  "previous_status": "Healthy",
  "monitor_url": "https://app.arize.com/organizations/.../spaces/.../monitors/...",
  "threshold": 1,
  "operator": ">",
  "metric_description": "Count for attributes.llm.token_count.total",
  "calculated_value": 30,
  "calculated_at": "2026-06-17T23:00:00Z"
}
```

<Info>
  Having trouble? Email [support@arize.com](mailto:support@arize.com) or reach us in #arize-support on Slack.
</Info>
