Handleidingen · n8n

Microsoft Teams automatiseren met n8n: app-only authenticatie instellen (2026)

Microsoft Teams koppelen aan n8n met app-only authenticatie. Veilige serviceverbinding zonder persoonlijke login.

🟡 Gevorderd — beetje technisch ⏱ 45 minuten
Tools: n8n 2.30+Microsoft AzureMicrosoft Teams
Goud-op-zwart illustratie: een eerste workflow van trigger via stap en AI naar resultaat

✅ Wat je leert in deze handleiding

  • ✓ App-only auth instellen in Azure AD
  • ✓ Microsoft Teams node configureren in n8n
  • ✓ Automatische Teams-berichten bij klant-alerts

Bas Vermeer is eigenaar van een 12-persoons IT-dienstverlener in Eindhoven. Zijn team monitort servers en netwerken voor tien klanten. Wanneer een kritieke alert binnenkomt, bijvoorbeeld een server die down gaat of een beveiligingsincident, wil hij dat zijn team meteen een bericht krijgt in het juiste Teams-kanaal. Automatisch, 24/7, zonder dat iemand handmatig hoeft in te grijpen.

Het probleem: de bestaande n8n-integratie met Microsoft Teams liep via zijn persoonlijke Microsoft-account. Elke keer als zijn OAuth-token verliep, crashten de workflows. Op vakantie of ziek? Dan werkte de alerting niet.

De oplossing: n8n 2.30 introduceerde app-only authenticatie voor Microsoft-nodes. In plaats van als individuele gebruiker inloggen, registreer je n8n als een applicatie in Azure Active Directory. De applicatie heeft eigen rechten en is niet gekoppeld aan een specifiek gebruikersaccount. Geen verlopende tokens meer, geen afhankelijkheid van wie er toevallig ingelogd is.

In deze handleiding laten we stap voor stap zien hoe je dit instelt. We werken toe naar een volledig werkende workflow die automatisch Teams-berichten stuurt bij klant-alerts. Tijdsinvestering: ongeveer 45 minuten.

Wat je nodig hebt voordat je begint

Zorg dat je het volgende bij de hand hebt:

Een n8n installatie versie 2.30 of hoger. Controleer je versie via Instellingen > Over in n8n, of via de CLI: n8n --version.

Toegang tot het Microsoft Azure Portal (portal.azure.com) met een account dat rechten heeft om app-registraties aan te maken. Dit is doorgaans de Microsoft 365 beheerder of de Azure-eigenaar van je organisatie.

Een Microsoft Teams-omgeving met een kanaal waar de berichten naartoe gestuurd worden. Je hebt de Team-ID en Kanaal-ID nodig, die we verderop ophalen.

Globale beheerrechten in je Microsoft 365-tenant, of toestemming van iemand die die rechten heeft. App-only API-toestemmingen in Azure vereisen admin consent.

Stap 1: App registreren in Azure Active Directory

Log in op het Azure Portal (https://portal.azure.com) en navigeer naar 'Azure Active Directory'. Klik in het linkermenu op 'App-registraties' en vervolgens op 'Nieuwe registratie'.

Vul de volgende gegevens in:

Naam: n8n-teams-automatie
Accounttypen: Alleen accounts in deze organisatiemap
             (Single tenant - kies dit voor interne bedrijfsgebruik)
Omleidings-URI: laat leeg (niet nodig voor app-only auth)

Klik op 'Registreren'

Na de registratie zie je het overzicht van je nieuwe app. Noteer de volgende waarden, die je later nodig hebt in n8n:

Application (client) ID:  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Directory (tenant) ID:    xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Beide zijn te vinden op de 'Overzicht'-pagina van je app-registratie.

Stap 2: Client secret aanmaken

App-only authenticatie werkt met een client ID en een client secret, vergelijkbaar met een gebruikersnaam en wachtwoord voor de applicatie. Navigeer in je app-registratie naar 'Certificaten en geheimen' en klik op 'Nieuw clientgeheim'.

Beschrijving: n8n-productie-secret
Verloopt:     24 maanden (of kies de langste beschikbare optie)

Klik op 'Toevoegen'.

BELANGRIJK: Kopieer de 'Waarde' van het secret direct na aanmaken. Deze is slechts eenmalig zichtbaar. Sla het op in een wachtwoordmanager of beveiligde omgeving. De 'Geheime ID' heb je niet nodig, alleen de 'Waarde'.

Client secret waarde: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Sla dit DIRECT op. Na het verlaten van deze pagina is de waarde verborgen.

Stap 3: API-machtigingen instellen voor Microsoft Teams

Nu moeten we de applicatie de juiste rechten geven om met Microsoft Teams te communiceren. Navigeer naar 'API-machtigingen' in je app-registratie en klik op 'Een machtiging toevoegen'.

Kies 'Microsoft Graph', vervolgens 'Toepassingsmachtigingen' (niet Gedelegeerde machtigingen). Dit is cruciaal: bij app-only auth gebruik je altijd Application permissions, niet Delegated permissions.

Voeg de volgende machtigingen toe:

Vereiste API-machtigingen (Application permissions):

ChannelMessage.Send       - Berichten sturen naar kanalen
Chat.ReadWrite.All        - Lezen en schrijven van chats (optioneel)
TeamMember.Read.All       - Teamleden opvragen (voor dynamische routing)
Group.Read.All            - Teams-groepen opvragen
Team.ReadBasic.All        - Basis team-info opvragen

Minimaal vereist voor berichten sturen: ChannelMessage.Send

Na het toevoegen van de machtigingen moet een beheerder 'Toestemming verlenen voor [organisatie]' klikken. Dit is de admin consent stap. Zonder admin consent werken app-only machtigingen niet.

Na admin consent ziet het machtigingenoverzicht er zo uit:

Machtiging              Type          Status
ChannelMessage.Send     Toepassing    Verleend voor [Organisatie] v
Group.Read.All          Toepassing    Verleend voor [Organisatie] v
Team.ReadBasic.All      Toepassing    Verleend voor [Organisatie] v

Stap 4: Teams-kanaal instellen voor app-toegang

Standaard kunnen applicaties geen berichten sturen naar Teams-kanalen, ook niet met de juiste API-rechten. Je moet expliciet instellen welke Teams-kanalen toegankelijk zijn voor de app via Resource Specific Consent (RSC) of via de Microsoft Graph Explorer.

De eenvoudigste methode: voeg de applicatie toe als lid van het team. Ga naar Microsoft Teams, navigeer naar het team waarnaar je berichten wilt sturen, klik op de drie puntjes naast de teamnaam en kies 'Leden beheren'. Klik op 'Leden toevoegen' en zoek op de naam van je app-registratie (in ons geval: n8n-teams-automatie).

Je hebt ook de Team-ID en Kanaal-ID nodig voor de n8n configuratie. Haal deze op via Microsoft Graph API:

# Haal alle teams op in je organisatie:
GET https://graph.microsoft.com/v1.0/groups?$filter=resourceProvisioningOptions/Any(x:x eq 'Team')

# Haal kanalen op voor een specifiek team:
GET https://graph.microsoft.com/v1.0/teams/{team-id}/channels

# Test via Graph Explorer: https://developer.microsoft.com/en-us/graph/graph-explorer
# Of via Azure Cloud Shell (PowerShell):
Get-MgGroup -Filter "resourceProvisioningOptions/Any(x:x eq 'Team')" | Select DisplayName, Id

Stap 5: Microsoft credentials aanmaken in n8n

Nu ga je naar n8n. Navigeer naar Instellingen > Credentials > Nieuwe credential toevoegen. Zoek op 'Microsoft' en selecteer 'Microsoft Teams OAuth2 API'.

In n8n 2.30 zie je een nieuw veld: 'Authentication Method'. Selecteer hier 'App-only (Client Credentials)' in plaats van het standaard 'OAuth2 (Delegated)'.

Vul de waarden in die je eerder hebt genoteerd: Tenant ID, Client ID (Application ID) en Client Secret. Klik op 'Opslaan en testen'. Als alles goed is ingesteld, verschijnt een groen vinkje met 'Verbinding geslaagd'.

Foutmelding bij het testen? Controleer of admin consent gegeven is (Stap 3) en of de juiste permissions zijn ingesteld. De meest voorkomende fout is 'Unauthorized' wat duidt op ontbrekende admin consent.

Stap 6: De n8n workflow bouwen

Nu bouwen we de daadwerkelijke workflow voor Bas zijn use case: automatisch een Teams-bericht sturen bij een kritieke klant-alert. De workflow bestaat uit drie onderdelen: trigger, verwerking en Teams-actie.

Maak een nieuw workflow aan in n8n en voeg de volgende nodes toe:

// Workflow structuur (n8n JSON export):
{
  "name": "Klant-alert naar Teams",
  "nodes": [
    {
      "type": "n8n-nodes-base.webhook",
      "name": "Alert Webhook",
      "position": [250, 300],
      "parameters": {
        "httpMethod": "POST",
        "path": "klant-alert",
        "responseMode": "onReceived"
      }
    },
    {
      "type": "n8n-nodes-base.set",
      "name": "Bericht formatteren",
      "position": [450, 300]
    },
    {
      "type": "n8n-nodes-base.microsoftTeams",
      "name": "Teams Bericht Sturen",
      "position": [650, 300]
    }
  ]
}

Stap 7: Microsoft Teams node configureren

Voeg de Microsoft Teams node toe aan je workflow. Selecteer bij 'Credential' de credential die je in stap 5 hebt aangemaakt. Configureer de node als volgt:

{
  "resource": "channelMessage",
  "operation": "create",
  "teamId": "{{ $json.team_id }}",
  "channelId": "{{ $json.channel_id }}",
  "messageType": "html",
  "message": "<h3>Kritieke alert: {{ $('Alert Webhook').item.json.klant_naam }}</h3><p><strong>Type:</strong> {{ $('Alert Webhook').item.json.alert_type }}</p><p><strong>Omschrijving:</strong> {{ $('Alert Webhook').item.json.omschrijving }}</p><p><strong>Prioriteit:</strong> {{ $('Alert Webhook').item.json.prioriteit }}</p><p><strong>Tijdstip:</strong> {{ new Date().toLocaleString('nl-NL') }}</p>"
}

Vul de Team-ID en Kanaal-ID hardcoded in, of haal ze dynamisch op uit de inkomende webhook-data. Voor Bas zijn setup heeft elk kanaal een vaste bestemming per klant, dus we gebruiken een mapping:

// In de 'Bericht formatteren' Set-node:
// Map klant naar het juiste Teams-kanaal

const klantKanaalMapping = {
  "Klant A BV": {
    teamId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    channelId: "19:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@thread.tacv2"
  },
  "Klant B Groep": {
    teamId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    channelId: "19:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy@thread.tacv2"
  }
};

const klant = $input.item.json.klant_naam;
const kanaal = klantKanaalMapping[klant] || klantKanaalMapping["default"];

return {
  team_id: kanaal.teamId,
  channel_id: kanaal.channelId,
  ...($input.item.json)
};

Stap 8: Testen en activeren

Test de workflow met een echt Teams-bericht. Activeer eerst de workflow in n8n (klik op de schakelaar rechtsboven). Stuur daarna een test-payload naar de webhook URL:

# Test de webhook met curl:
curl -X POST https://jouw-n8n-domein.nl/webhook/klant-alert \
  -H 'Content-Type: application/json' \
  -d '{
    "klant_naam": "Klant A BV",
    "alert_type": "Server down",
    "omschrijving": "Webserver prod-01 reageert niet meer op ping.",
    "prioriteit": "KRITIEK",
    "server_naam": "prod-01",
    "ip_adres": "192.168.1.100"
  }'

Na het versturen controleer je het Teams-kanaal. Binnen enkele seconden zou het bericht zichtbaar moeten zijn. In n8n kun je de uitvoering volgen via Uitvoeringen in het linkermenu.

Controleer in n8n of alle nodes groen (succesvol) zijn. Klik op elke node om de input en output te zien. Bij de Teams node zie je de API-response van Microsoft Graph:

// Succesvolle Teams API response:
{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#teams('...')/channels('...')/messages/$entity",
  "id": "1753428000000",
  "messageType": "message",
  "createdDateTime": "2026-07-25T08:00:00.000Z",
  "from": {
    "application": {
      "displayName": "n8n-teams-automatie",
      "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
  },
  "body": {
    "contentType": "html",
    "content": "<h3>Kritieke alert: Klant A BV</h3>..."
  }
}

Troubleshooting: de 4 meest voorkomende problemen

Probleem 1: 'Insufficient privileges to complete the operation'

Oorzaak: Admin consent is niet gegeven voor de API-machtigingen, of de verkeerde machtigingssoort is gebruikt (Delegated in plaats van Application).

Oplossing: Ga terug naar Azure Portal > App-registraties > [jouw app] > API-machtigingen. Controleer of alle machtigingen van het type 'Toepassing' zijn (niet 'Gedelegeerd'). Klik op 'Toestemming verlenen voor [organisatie]' als beheerder. Wacht 5-10 minuten en probeer opnieuw.

Probleem 2: 'Channel not found' of 403 Forbidden bij versturen

Oorzaak: De applicatie is niet toegevoegd als lid van het team, of de Team-ID/Kanaal-ID klopt niet.

Oplossing: Ga naar Microsoft Teams > [team] > Leden beheren > voeg de app toe als lid. Haal de juiste IDs op via Graph Explorer: GET /v1.0/me/joinedTeams en GET /v1.0/teams/{teamId}/channels. Kopieer de ID velden exact, inclusief het 19: prefix voor kanaal-IDs.

Probleem 3: Credential test lukt maar workflow mislukt

Oorzaak: De credential test controleert alleen de authenticatie, niet de daadwerkelijke Teams-machtigingen. Je kunt succesvol authenticeren maar toch geen berichten sturen als ChannelMessage.Send ontbreekt.

Oplossing: Controleer specifiek de ChannelMessage.Send machtiging in Azure. Let op: soms moet je admin consent opnieuw geven na het toevoegen van een nieuwe machtiging. Ga naar API-machtigingen en vernieuw de consent.

Probleem 4: Client secret verlopen of ongeldig

Oorzaak: Client secrets verlopen. Als je een secret hebt aangemaakt met een korte vervaldatum, of als je de verkeerde waarde hebt gekopieerd (de 'Geheime ID' in plaats van de 'Waarde'), werkt de authenticatie niet.

Oplossing: Maak een nieuw client secret aan in Azure Portal > [app] > Certificaten en geheimen. Kopieer de 'Waarde' (niet de 'Geheime ID'). Update de credential in n8n met de nieuwe waarde. Stel een agenda-herinnering in 2 maanden voor het verlopen van het secret.

# Controleer wanneer je secret verloopt via Azure CLI:
az ad app credential list --id {application-id} \
  --query '[].{EndDate:endDateTime, KeyId:keyId}' \
  --output table

# Output:
# EndDate                     KeyId
# --------------------------  ------------------------------------
# 2028-07-25T00:00:00+00:00  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Uitbreidingen: 5 ideeen om verder te gaan

1. Weekrapporten per klant automatiseren

Combineer de Teams-node met een HTTP-node die data ophaalt uit je monitoring-systeem (Zabbix, Nagios, Grafana). Stuur elke maandagochtend een overzicht per klant-kanaal met: aantal alerts afgelopen week, uptime percentages, en geplande onderhoudsmomenten.

2. Adaptive Cards voor rijkere berichten

Teams ondersteunt Adaptive Cards: rijke, interactieve berichtformaten met knoppen, tabellen en kleuren. In de n8n Teams-node kun je het berichttype instellen op 'Adaptive Card'. Dit maakt je alerts veel leesbaarder: rode koptekst voor kritiek, oranje voor waarschuwing, groen voor informatief.

3. Meerdere Microsoft 365-diensten met dezelfde credential

De app-only credential die je hebt aangemaakt werkt ook voor andere Microsoft 365-nodes in n8n: OneDrive, Outlook, Excel 365 en To Do. Voeg de bijbehorende machtigingen toe in Azure en gebruik dezelfde applicatie voor meerdere automatiseringen. Zo heb je centrale controle over alle n8n-Microsoft integraties.

4. Escalatie-workflow met time-based logic

Bouw een escalatielogica: als een alert niet binnen 15 minuten is opgepakt (via een status-API of handmatige bevestiging), stuur dan een tweede bericht naar een hoger-prioriteit kanaal. Gebruik n8n's Wait-node en een status-controle via HTTP Request voor dit soort tijdgebaseerde escalaties.

5. Integratie met ticketsysteem

Verleng de workflow: na het sturen van het Teams-bericht, maak ook automatisch een ticket aan in je PSA-systeem (Autotask, ConnectWise, HaloPSA). Link het ticketnummer terug in het Teams-bericht voor traceerbaarheid. Zo heb je binnen seconden een bericht in Teams en een ticket in je systeem, volledig automatisch.

Nuttige documentatie en verdere bronnen

Voor meer details over de Microsoft Graph API voor Teams: https://learn.microsoft.com/en-us/graph/api/channel-post-messages. De documentatie over app-only authentication voor Microsoft Graph: https://learn.microsoft.com/en-us/graph/auth-v2-service. N8n officiele documentatie voor de Microsoft Teams node: https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.microsoftteams. Azure App Registration stap-voor-stap gids van Microsoft: https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app.

Samenvatting

App-only authenticatie in n8n 2.30 lost een van de grootste frustraties op bij Microsoft 365-integraties: de afhankelijkheid van een persoonlijk gebruikersaccount. Met de stappen in deze handleiding heb je:

Een Azure AD app-registratie aangemaakt met de juiste API-machtigingen en admin consent. Een client secret aangemaakt en veilig opgeslagen. De app-only credential geconfigureerd in n8n 2.30. Een werkende workflow gebouwd die automatisch Teams-berichten stuurt bij klant-alerts.

Bas Vermeer heeft na het volgen van deze handleiding zijn IT-dienstverlener volledig losgemaakt van zijn persoonlijk Microsoft-account. Zijn alerting werkt nu 24/7, ook als hij op vakantie is. Zijn team krijgt direct een bericht in het juiste klant-kanaal, met alle relevante informatie om direct actie te ondernemen.

Vragen of problemen bij het instellen? Laat het weten in de comments of neem contact op via workflows.nl.

Gerelateerd

Nieuwsbrief

Meer handleidingen en tips?

Elke week de beste agentic AI inzichten en nieuwe handleidingen in je inbox.

Gratis aanmelden →