---
title: n8n Monitoring & Alerts: Fehler automatisch an Microsoft Teams senden
author: Lars Decker
date: 2025-09-08
updated: 2025-09-08
description: Richte in n8n automatische Fehler-Benachrichtigungen in Microsoft Teams ein, inkl. Adaptive Cards, Graph API und robusten Fallbacks.
tags: n8n, Microsoft Teams, Monitoring, Alerts, DevOps, Graph API, Webhooks
canonical: https://lars-decker.eu/blog/n8n-monitoring-teams-alerts
---

# n8n Monitoring & Alerts: Fehler automatisch an Microsoft Teams senden


# n8n Monitoring & Alerts: Fehler automatisch an Microsoft Teams senden

In diesem Leitfaden zeige ich dir, wie du **n8n-Fehler** automatisch **in Microsoft Teams** versendest – sauber formatiert, mit Kontext zur fehlgeschlagenen Ausführung und robust gegen Rate Limits. Du lernst außerdem sinnvolle **Fallback-Optionen** (Graph-API, Teams Workflows) kennen und bekommst **Best Practices** für den Betrieb.

> **Hinweis:** Für Self-Hosting-Grundlagen siehe [Setup-Artikel](/blog/n8n-setup) und [Härtung/Backups](/blog/n8n-self-hosting-tipps)

---

## Warum das Ganze?

Wenn ein Flow in der Produktion fehlschlägt, zählt jede Minute. Ein zentraler **Fehler-Feed in Teams** stellt sicher, dass dein Team sofort reagieren kann: mit Link zur n8n-Ausführung, Stacktrace, letztem Node und klaren nächsten Schritten. n8n bringt dafür **Error Workflows** mit – ein dediziertes Alarm-System, das bei jedem Fehler automatisch startet.

---

## Überblick: Lösungsarchitektur

1. **n8n Error Workflow** mit **Error Trigger** als Startnode
2. Aufbereitung der Fehlerinformationen (Titel, Zusammenfassung, Deep-Link zur Ausführung)
3. Versand an Teams über eine der folgenden Optionen:
   - **Incoming Webhook** (einfach & schnell; Microsoft-Hinweise zu Connectors beachten)
   - **Microsoft Graph API** (voller Funktionsumfang, granularere Berechtigungen)
   - **Teams „Workflows" App** (No-Code-Option; „When a Teams webhook request is received")

---

## Voraussetzungen

- n8n-Instanz (Self-hosted oder Cloud) mit Zugriff auf Executions
- Microsoft Teams-Kanal für Alerts
- Für **Incoming Webhook**: Berechtigung zum Hinzufügen eines Kanalkonnektors (Tenant-Policy prüfen)
- Für **Graph API**: Azure App Registration, passende Permissions (z.B. `ChannelMessage.Send`), Token-Handling

---

## 1) Error-Workflow in n8n anlegen

1. **Neuen Workflow** erstellen und Startnode **Error Trigger** setzen
2. Produktions-Workflow öffnen → **Settings → Error workflow** auswählen
3. Speichern – der Error-Workflow startet nun automatisch bei jedem Fehler

> **Tipp:** Der Error Trigger liefert strukturierte Daten wie `execution.id`, `execution.url`, `lastNodeExecuted`, `error.message`, `error.stack`. Bei Trigger-Fehlern weicht die Struktur leicht ab (mehr Daten in `trigger{}` als in `execution{}`).

---

## 2) Teams-Empfänger wählen

| Option                  | Vorteile                                      | Nachteile                                                                                             | Geeignet für                 |
| ----------------------- | --------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ---------------------------- |
| **Incoming Webhook**    | Sehr einfach, schnell, Adaptive Cards möglich | Microsoft 365 Connectors werden schrittweise eingeschränkt/abgeschafft; Tenant-Policy kann blockieren | Schneller Start, PoC         |
| **Microsoft Graph API** | Voller Funktionsumfang, langfristig stabil    | Azure-App + Permissions, OAuth Token Handling                                                         | Enterprise, Compliance       |
| **Teams Workflows**     | No-Code, integrierte Vorlagen                 | Bindung an Benutzer/Owner, Einschränkungen                                                            | Low-Code-Teams, Fachbereiche |

---

## Variante A: Incoming Webhook (einfach & schnell)

> **Warnung:** Microsoft **reduziert/ersetzt** klassische Connectors schrittweise. Prüfe, ob **Incoming Webhook** in deinem Tenant noch verfügbar ist.

### A1 – Webhook in Teams einrichten

- Im gewünschten Kanal: App hinzufügen → **Incoming Webhook** → Namen/Icon wählen → **Webhook-URL kopieren**
- Die URL sicher im n8n **Credentials Store** ablegen

### A2 – n8n Nodes verbinden

- **Error Trigger** → optional **Function** (Felder mappen/kürzen) → **HTTP Request** (POST) zur Webhook-URL
- Header: `Content-Type: application/json`

#### Beispiel: Adaptive Card (kompakt)

```json
{
  "type": "message",
  "attachments": [
    {
      "contentType": "application/vnd.microsoft.card.adaptive",
      "content": {
        "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
        "type": "AdaptiveCard",
        "version": "1.4",
        "body": [
          {
            "type": "TextBlock",
            "size": "Large",
            "weight": "Bolder",
            "text": "n8n Fehler-Alarm"
          },
          {
            "type": "TextBlock",
            "wrap": true,
            "text": "${$json.execution.error.message}"
          },
          {
            "type": "TextBlock",
            "isSubtle": true,
            "wrap": true,
            "text": "Workflow: ${$json.workflow.name} • Node: ${$json.execution.lastNodeExecuted}"
          },
          {
            "type": "TextBlock",
            "wrap": true,
            "text": "Stacktrace (gekürzt): ${$json.execution.error.stack?.slice(0,500) + '…'}"
          },
          {
            "type": "ActionSet",
            "actions": [
              {
                "type": "Action.OpenUrl",
                "title": "Execution öffnen",
                "url": "${$json.execution.url}"
              }
            ]
          }
        ]
      }
    }
  ]
}
```

**Test via cURL:**

```bash
curl -H 'Content-Type: application/json' \
  -d '{"text":"Hello from n8n"}' \
  https://outlook.office.com/webhook/...   # deine Teams-Webhook-URL
```

> **Rate Limits:** Bei 429-Antworten **Exponential Backoff** verwenden. Webhooks haben dokumentierte Grenzwerte.

---

## Variante B: Microsoft Graph API (zukunftssicher)

Wenn Connectors blockiert sind oder du mehr Kontrolle benötigst, versende Nachrichten per Graph API:

1. **Azure App Registration** erstellen, passende **Permissions** vergeben (z.B. `ChannelMessage.Send`/`Group.ReadWrite.All`), Admin Consent einholen
2. In n8n: **HTTP Request** mit OAuth2-Credential zum Graph-Endpoint, z.B. `POST /teams/{team-id}/channels/{channel-id}/messages`

**Beispiel-Body (vereinfacht):**

```json
{
  "body": {
    "contentType": "html",
    "content": "<b>n8n Fehler:</b> {{$json.execution.error.message}}<br/>Workflow: {{$json.workflow.name}}<br/><a href='{{$json.execution.url}}'>Execution öffnen</a>"
  }
}
```

> **Hinweis:** Teams hat **HTML-Einschränkungen** – nicht alle Tags/Styles sind erlaubt.

---

## Konfiguration & Sicherheit

- **Secrets/URLs** im **Credentials Store** speichern, niemals im Node hardcoden
- **Least Privilege**: Für Graph API nur benötigte Permissions vergeben
- **PII/Logs**: Stacktraces können sensible Daten enthalten → filtern/kürzen
- **Rate Limits**: Webhook & Graph API drosseln → Backoff/Retry einplanen
- **Tenant-Policy**: Prüfen, ob Connectors erlaubt oder eingeschränkt sind

---

## Best Practices & häufige Fehlerquellen

- **Einen Error-Workflow für mehrere Flows** verwenden; Metadaten per Expressions dynamisch generieren
- **Trigger-Fehler abfangen**: Payload-Struktur unterscheidet sich (Trigger vs. Node)
- **Deduplication**: Wiederholte Retries nicht mehrfach posten (Hash/Key verwenden)
- **Alert-Hygiene**: Noise vermeiden (nur „hard fails", Schwellwerte definieren)
- **Deep-Links**: `execution.url` mitsenden → Ein Klick zur Root Cause

---

## Praxisbeispiel: Minimaler n8n Error-Flow

**Nodes:**

1. **Error Trigger**
2. **Set/Function** – Felder mappen:
   - `title`: `n8n Fehler – {{$json.workflow.name}}`
   - `summary`: `{{$json.execution.error.message}}`
   - `executionUrl`: `{{$json.execution.url}}`
3. **HTTP Request** – POST an Teams (Webhook oder Graph)

**HTTP Request (Webhook) – Body (Expression aktiviert):**

```json
{{
{
  "type": "message",
  "attachments": [
    {
      "contentType": "application/vnd.microsoft.card.adaptive",
      "content": {
        "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
        "type": "AdaptiveCard",
        "version": "1.4",
        "body": [
          { "type": "TextBlock", "size": "Large", "weight": "Bolder", "text": $json.title },
          { "type": "TextBlock", "wrap": true, "text": $json.summary },
          { "type": "ActionSet", "actions": [
            { "type": "Action.OpenUrl", "title": "Execution öffnen", "url": $json.executionUrl }
          ]}
        ]
      }
    }
  ]
}
}}
```

---

## Alternativen & Fallbacks

- **Teams Workflows (Power Automate in Teams)**: No-Code „When a Teams webhook request is received" – n8n sendet per HTTP → gut für Fachbereiche
- **E-Mail/Slack**: n8n-Nodes out-of-the-box verfügbar; sinnvoll als Fallback, falls Teams im Tenant eingeschränkt ist
- **Observability**: Bei vielen Flows zusätzlich Log-Streaming/Monitoring in n8n aktivieren

---

## Häufig gestellte Fragen (FAQ)

**Wie bekomme ich den Link zur fehlgeschlagenen Ausführung?**  
Über `execution.url` in der Error-Payload. Voraussetzung: Executions werden gespeichert.

**Warum werden meine Adaptive Cards beim Incoming Webhook nicht angezeigt?**  
Struktur prüfen (`type: message`, `attachments[]`, `contentType` = AdaptiveCard). Ältere MessageCard-Formate sind teilweise inkompatibel.

**Unser Tenant blockiert Connectors – was nun?**  
Auf **Microsoft Graph API** umsteigen (App Registration + Permissions) oder **Teams Workflows** verwenden.

**Ich bekomme 429/Throttling-Fehler – was tun?**  
Bei 429-Antworten Backoff/Retry implementieren (z.B. exponentiell mit Jitter).

**Löst der Error Trigger auch bei manuellem Testen aus?**  
Nein, er reagiert nur auf automatische Workflow-Fehler, nicht bei manuellen Ausführungen.

---

## Fazit

Mit einem **zentralen Error-Workflow** in n8n und automatischem Versand nach **Microsoft Teams** hast du einen schnellen, zuverlässigen Incident-Kanal. Für den Start ist der **Incoming Webhook** am einfachsten – plane jedoch **Graph API oder Teams Workflows** als nachhaltige Lösung ein.

**Nächste Schritte:**

1. Error-Workflow anlegen und auf Produktions-Workflows anwenden
2. Teams-Empfangsweg wählen (Webhook → Graph/Workflows langfristig planen)
3. Rate-Limit-sichere Retries/Backoff implementieren
4. Alerts regelmäßig auf Verständlichkeit und Umsetzbarkeit prüfen

---

## Quellen

- [n8n Docs – Error handling](https://docs.n8n.io/flow-logic/error-handling/)
- [n8n Docs – Error Trigger node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.errortrigger/)
- [Microsoft Learn – Create an Incoming Webhook](https://learn.microsoft.com/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook)
- [Microsoft Graph – Send chat message](https://learn.microsoft.com/graph/api/chatmessage-post)

