Handleidingen · n8n

Slack automatiseren met n8n: notificaties, bots en teamworkflows

Koppel Slack aan n8n voor automatische meldingen, dagelijkse rapporten en een AI-bot met Claude. Stap-voor-stap handleiding met Block Kit, Events API en drie complete workflows.

🟡 Gevorderd — beetje technisch ⏱ 3-4 uur
Tools: n8nSlackClaude API (optioneel voor workflow 3)Google Sheets (optioneel)
Slack-interface open op een laptop met automatiseringsnotificaties

Wat je leert in deze handleiding

  • Een Slack app aanmaken met de juiste OAuth-scopes
  • Slack credentials instellen in n8n
  • Automatische Slack-meldingen sturen bij formulierinzendingen
  • Dagelijkse rapporten vanuit Google Sheets naar Slack sturen
  • Een interne AI-bot bouwen met de Slack Events API en Claude
  • Slack Block Kit gebruiken voor interactieve berichten met knoppen
  • Veelgemaakte Slack-API fouten oplossen

Slack is het communicatiecentrum van veel teams. Maar handmatig berichten aanmaken, collega's taggen en statussen bijhouden kost tijd die je liever besteedt aan werk dat er echt toe doet. Met n8n koppel je Slack aan de rest van je toolstack en laat je notificaties, rapporten en zelfs een AI-bot volledig automatisch draaien. In deze handleiding bouw je drie praktische Slack-workflows van nul tot werkend.

Wat je nodig hebt

Een Slack-workspace waar je beheerdersrechten hebt (of toestemming om apps te installeren), n8n (cloud of zelf-gehost), en optioneel een Claude API-sleutel voor de AI-bot in workflow 3.

Overzicht: drie workflows die je vandaag kunt bouwen

  • Workflow 1: automatische Slack-melding bij nieuw websiteformulier (Tally of Typeform naar Slack)
  • Workflow 2: dagelijks verkooprapport om 08:00 in een Slack-kanaal (Google Sheets naar Slack)
  • Workflow 3: interne Slack-bot die vragen beantwoordt met Claude (Slack Events naar n8n naar Claude)
  • Stap 1: Een Slack app aanmaken

    Voordat n8n berichten kan sturen of ontvangen, heb je een Slack app nodig. Volg deze stappen om een app aan te maken en de juiste rechten in te stellen.

    1a. Naar de Slack API-console

    Ga naar api.slack.com/apps en klik op Create New App. Kies de optie 'From scratch', geef de app een naam (bijv. 'n8n Automatisering') en selecteer je workspace. Klik op Create App.

    1b. Bot Token Scopes instellen

    Ga in de linker navigatie naar OAuth & Permissions. Scroll naar Bot Token Scopes en voeg de volgende scopes toe, afhankelijk van wat je wilt doen:

  • chat:write -- berichten sturen in kanalen waar de bot lid van is
  • channels:read -- lijst van publieke kanalen ophalen
  • channels:join -- de bot automatisch laten joinen in kanalen
  • users:read -- gebruikersinfo ophalen voor gepersonaliseerde berichten
  • app_mentions:read -- reageren wanneer iemand de bot @-vermeldt (voor workflow 3)
  • im:read en im:write -- directe berichten ontvangen en sturen (voor workflow 3)
  • 1c. App installeren en Bot Token kopiëren

    Scroll terug naar boven op de OAuth & Permissions-pagina en klik op 'Install to Workspace'. Geef toestemming. Kopieer daarna het Bot User OAuth Token dat begint met xoxb-. Dit token gebruik je straks in n8n.

    Bot User Token vs. Webhook URL

    Slack biedt twee manieren om berichten te sturen: via Incoming Webhooks (simpel, alleen sturen) of via de Slack API met een Bot Token (volwaardig, ook ontvangen). n8n gebruikt het Bot Token voor de meeste integraties. Kies voor het Token als je ook berichten wilt ontvangen of reageren.

    Stap 2: Slack credentials instellen in n8n

    Open n8n en ga naar Settings > Credentials > New Credential. Zoek op 'Slack' en kies Slack API. Plak het Bot User OAuth Token (xoxb-...) in het veld Access Token. Sla de credential op als 'Slack Bot'.

    Test de koppeling door in n8n een nieuwe workflow te maken met een Manual Trigger en een Slack node (actie: Send Message). Stel het doelkanaal in op #algemeen of een testkanaal en stuur een testbericht. Als het bericht aankomt, werkt de koppeling correct.

    Test payload voor Slack Send Message node
    {
      "channel": "#testkanaal",
      "text": "Hallo vanuit n8n! De Slack-koppeling werkt.",
      "username": "n8n Automatisering"
    }

    Bot toevoegen aan een kanaal

    Zorg ervoor dat je de bot uitnodigt voor het kanaal voordat je berichten stuurt. Typ in Slack /invite @n8n-automatisering in het gewenste kanaal. Zonder uitnodiging geeft n8n een 'not_in_channel' foutmelding.

    Workflow 1: Meldingen bij nieuwe websiteaanvragen

    Stel je voor: een potentiele klant vult het contactformulier in op je website. Binnen tien seconden verschijnt er een nette melding in je #leads Slack-kanaal met naam, e-mailadres en het bericht van de klant. Je salesteam kan direct reageren.

    Nodes in deze workflow

  • Webhook Trigger (n8n): ontvangt het formulier-event van Tally of Typeform
  • Set node: extraheer naam, e-mail en bericht uit de payload
  • Slack node (Send Message): stuur een geformateerde melding naar #leads
  • Webhook instellen in Tally

    Ga in Tally naar je formulierinstellingen en kies Integrations > Webhooks. Plak de n8n webhook-URL in het URL-veld. Activeer de workflow in n8n. Dien nu een testformulier in om de payload te inspecteren in n8n.

    Een Tally-payload ziet er als volgt uit:

    Tally webhook payload voorbeeld
    {
      "eventId": "abc123",
      "eventType": "FORM_RESPONSE",
      "formId": "wKxYz1",
      "formName": "Contactformulier",
      "createdAt": "2026-07-27T08:14:23.000Z",
      "data": {
        "fields": [
          { "label": "Naam", "value": "Sanne Bakker" },
          { "label": "E-mailadres", "value": "sanne@voorbeeld.nl" },
          { "label": "Bericht", "value": "Ik ben geinteresseerd in een demo." }
        ]
      }
    }

    Set node configuratie

    Gebruik een Set node (of Expression in de Slack node zelf) om de velden uit de Tally-payload te extraheren:

    n8n expressies voor Tally-velden
    // Naam uit Tally payload halen (index 0 = eerste veld)
    naam: {{ $json.data.fields[0].value }}
    
    // E-mailadres (index 1)
    email: {{ $json.data.fields[1].value }}
    
    // Bericht (index 2)
    bericht: {{ $json.data.fields[2].value }}
    
    // Tijdstip van aanvraag
    tijdstip: {{ $json.createdAt }}

    Slack-bericht met Block Kit

    Gebruik Slack Block Kit voor een visueel aantrekkelijker bericht dan platte tekst. In de Slack node, kies als berichttype 'Blocks' en plak de volgende JSON:

    Slack Block Kit bericht voor nieuwe lead
    {
      "blocks": [
        {
          "type": "header",
          "text": {
            "type": "plain_text",
            "text": "Nieuwe lead via contactformulier"
          }
        },
        {
          "type": "section",
          "fields": [
            {
              "type": "mrkdwn",
              "text": "*Naam:*\n{{ $json.naam }}"
            },
            {
              "type": "mrkdwn",
              "text": "*E-mail:*\n{{ $json.email }}"
            }
          ]
        },
        {
          "type": "section",
          "text": {
            "type": "mrkdwn",
            "text": "*Bericht:*\n{{ $json.bericht }}"
          }
        },
        {
          "type": "context",
          "elements": [
            {
              "type": "mrkdwn",
              "text": "Ontvangen om {{ $json.tijdstip }}"
            }
          ]
        }
      ]
    }

    Workflow 2: Dagelijks verkooprapport in Slack

    Een dagelijkse samenvatting van de omzet, het aantal bestellingen en de best verkochte producten in een vast Slack-kanaal. Geen dashboard hoeven openen, geen rapport hoeven genereren: de cijfers staan elke ochtend om 08:00 klaar.

    Nodes in deze workflow

  • Schedule Trigger: elke werkdag om 08:00
  • Google Sheets node: lees de verkoopdata van gisteren uit een sheet
  • Code node: bereken totalen en maak een samenvatting
  • Slack node: stuur het rapport naar #verkoop
  • Schedule Trigger configureren

    Voeg een Schedule Trigger toe en stel de cron-expressie in:

    Cron expressie voor dagelijks rapport
    # Elke werkdag (maandag t/m vrijdag) om 08:00 Amsterdam-tijd
    0 8 * * 1-5
    
    # Of in n8n-interface:
    # Mode: Cron Expression
    # Expression: 0 8 * * 1-5
    # Timezone: Europe/Amsterdam

    Google Sheets node configureren

    Gebruik de Google Sheets node (actie: Get Many Rows) om alle rijen op te halen waar de datum in kolom A gelijk is aan gisteren. Gebruik een filter:

    Google Sheets datum-filter in n8n
    // Filter op datum van gisteren
    Column: A (datum)
    Condition: equals
    Value: {{ $today.minus({ days: 1 }).toISODate() }}

    Code node: totalen berekenen

    Een eenvoudige Code node (JavaScript) die de opgehaalde rijen samenvat:

    Code node: verkooptotalen berekenen
    const rijen = $input.all().map(item => item.json);
    
    const totaalOmzet = rijen.reduce((som, r) => som + parseFloat(r.bedrag || 0), 0);
    const aantalBestellingen = rijen.length;
    
    // Top 3 producten
    const telPerProduct = {};
    for (const r of rijen) {
      const product = r.product || 'Onbekend';
      telPerProduct[product] = (telPerProduct[product] || 0) + 1;
    }
    const topProducten = Object.entries(telPerProduct)
      .sort((a, b) => b[1] - a[1])
      .slice(0, 3)
      .map(([naam, aantal]) => `${naam} (${aantal}x)`)
      .join(', ');
    
    const gisteren = new Date();
    gisteren.setDate(gisteren.getDate() - 1);
    const datumLabel = gisteren.toLocaleDateString('nl-NL', { weekday: 'long', day: 'numeric', month: 'long' });
    
    return [{
      json: {
        datumLabel,
        totaalOmzetFormatted: `€ ${totaalOmzet.toFixed(2).replace('.', ',')}`,
        aantalBestellingen,
        topProducten,
      }
    }];

    Slack-bericht met dagcijfers

    Stuur het rapport naar het #verkoop kanaal met een overzichtelijk bericht:

    Slack dagrapport berichttemplate
    :bar_chart: *Dagrapport {{ $json.datumLabel }}*
    
    :euro: Omzet: *{{ $json.totaalOmzetFormatted }}*
    :package: Bestellingen: *{{ $json.aantalBestellingen }}*
    :trophy: Top producten: {{ $json.topProducten }}
    
    _Automatisch gegenereerd door n8n_

    Workflow 3: Interne Slack-bot met Claude AI

    De meest geavanceerde workflow: een Slack-bot die reageert op vragen van collega's in een specifiek kanaal. De bot leest het bericht, stuurt het naar Claude en post het antwoord terug in Slack. Ideaal voor een interne FAQ-bot, een productbeschrijving-generator of een klantenservice-assistent.

    Hoe het werkt: Slack Events API

    Slack stuurt een HTTP POST-verzoek naar n8n zodra er een bericht wordt geplaatst in een gekoppeld kanaal. n8n verwerkt het bericht, stuurt het naar Claude en post het antwoord terug via de Slack API. Dit heet de Slack Events API.

    Events instellen in de Slack app

    Ga in je Slack app naar Event Subscriptions en zet de schakelaar op aan. Plak de n8n webhook-URL in het veld Request URL. Slack stuurt eerst een verificatieverzoek met een challenge-parameter. n8n moet dit automatisch beantwoorden.

    Voeg onder Subscribe to Bot Events de volgende events toe:

  • app_mention: de bot wordt @-vermeld in een kanaal
  • message.im: de bot ontvangt een direct bericht
  • n8n: Slack Events webhook afhandelen

    Maak een n8n-workflow met een Webhook Trigger. Voeg direct een IF node toe die controleert of de payload een challenge-veld bevat (Slack verification). Als ja, stuur direct de challenge terug als response. Als nee, ga door met de normale flow.

    Slack URL verificatie afhandelen in n8n
    // IF node: Slack URL verificatie
    // Condition: $json.challenge is not empty
    
    // Als TRUE: Respond to Webhook node
    {
      "challenge": "{{ $json.challenge }}"
    }
    
    // Als FALSE: ga door naar de Claude-node

    Claude API-aanroep via HTTP Request node

    Voeg een HTTP Request node toe voor de Claude API. De basis-payload:

    HTTP Request node voor Claude API
    // HTTP Request node configuratie
    Method: POST
    URL: https://api.anthropic.com/v1/messages
    Headers:
      x-api-key: JOUW_CLAUDE_API_KEY
      anthropic-version: 2023-06-01
      Content-Type: application/json
    
    Body (JSON):
    {
      "model": "claude-sonnet-4-6",
      "max_tokens": 1024,
      "system": "Je bent een interne assistent voor [Bedrijfsnaam]. Beantwoord vragen kort en bondig in het Nederlands. Je hebt toegang tot informatie over onze producten, processen en beleid.",
      "messages": [
        {
          "role": "user",
          "content": "{{ $json.event.text }}"
        }
      ]
    }

    Slack-antwoord terugsturen

    Na de Claude-node voeg je een Slack node toe (actie: Send Message). Stel het kanaal in op de channel-waarde uit de Slack Events payload ({{ $json.event.channel }}) en de berichttekst op het Claude-antwoord ({{ $json.content[0].text }}). Voeg optioneel een thread_ts toe om te antwoorden in dezelfde thread als het originele bericht.

    Slack antwoord in thread posten
    // Slack Send Message node
    Channel: {{ $('Webhook Trigger').item.json.event.channel }}
    Thread TS: {{ $('Webhook Trigger').item.json.event.ts }}
    Text: {{ $json.content[0].text }}

    Bot-antwoorden op jezelf voorkomen

    Voeg een IF node toe die controleert of het bericht afkomstig is van een bot ($json.event.bot_id is not empty). Als ja, stop de workflow. Zo voorkom je een oneindige lus waarbij de bot zijn eigen berichten oppakt en zichzelf antwoordt.

    Slack Block Kit: visueel rijkere berichten

    Block Kit is het Slack-framework voor gestructureerde, interactieve berichten. Met Block Kit kun je secties, knoppen, dropdown-menu's en afbeeldingen toevoegen aan je Slack-berichten. Dit is nuttig voor approval-workflows, enquetes en statusupdates.

    Voorbeeld: approval-bericht met knoppen

    Gebruik de volgende Block Kit-structuur voor een bericht met Goedkeuren- en Afwijzen-knoppen (voor bijv. een publicatie-goedkeuringsflow):

    Block Kit approval bericht
    {
      "blocks": [
        {
          "type": "section",
          "text": {
            "type": "mrkdwn",
            "text": ":pencil: *Nieuw contentvoorstel ter beoordeling*\n*Titel:* {{ $json.titel }}\n*Auteur:* {{ $json.auteur }}"
          }
        },
        {
          "type": "actions",
          "elements": [
            {
              "type": "button",
              "text": { "type": "plain_text", "text": "Goedkeuren" },
              "style": "primary",
              "value": "approve_{{ $json.id }}",
              "action_id": "approve"
            },
            {
              "type": "button",
              "text": { "type": "plain_text", "text": "Afwijzen" },
              "style": "danger",
              "value": "reject_{{ $json.id }}",
              "action_id": "reject"
            }
          ]
        }
      ]
    }

    Knoppen in Block Kit sturen een interactive payload naar een door jou opgegeven URL zodra iemand erop klikt. Die URL kan wederom een n8n-webhook zijn. Zo bouw je een volledige approval-workflow in Slack.

    Veelgemaakte fouten en oplossingen

    Fout: not_in_channel

    De bot is geen lid van het kanaal waarnaar je probeert te sturen. Voeg de bot toe via /invite @jouw-bot-naam in het betreffende Slack-kanaal. Publieke kanalen kun je ook programmatisch joinen via de conversations.join API-methode.

    Fout: invalid_auth

    Het Bot Token (xoxb-...) is ongeldig of verlopen. Controleer in n8n onder Settings > Credentials of het token correct is ingevoerd. Genereer indien nodig een nieuw token via api.slack.com/apps > jouw app > OAuth & Permissions > Reinstall App.

    Fout: missing_scope

    De bot mist een benodigde permission scope. Ga naar api.slack.com/apps, voeg de ontbrekende scope toe onder OAuth & Permissions > Bot Token Scopes en installeer de app opnieuw in de workspace.

    Fout: Slack events komen niet aan in n8n

    Controleer drie dingen: (1) is de n8n-workflow actief (toggle aan)? (2) Is de webhook-URL in Slack Event Subscriptions correct geplakt? (3) Is de Slack URL-verificatie succesvol verlopen? Kijk in Slack App > Event Subscriptions of er een groen vinkje staat bij Request URL Verified.

    Fout: rate limiting (ratelimited)

    Slack staat maximaal 1 bericht per seconde toe per kanaal via de API. Als je veel berichten snel achter elkaar stuurt, bouw dan een wachttijd in met de Wait node in n8n (1 tot 2 seconden tussen berichten) of verspreid de output over meerdere kanalen.

    Kosten en schaalbaarheid

  • Slack Free: maximaal 90 dagen berichtgeschiedenis, 10 app-integraties
  • Slack Pro: 7,25 euro per gebruiker per maand, onbeperkte geschiedenis en integraties
  • n8n Cloud Starter: 20 euro per maand, 2.500 workflow-uitvoeringen
  • Claude API (claude-sonnet-4-6): circa 3 dollar per miljoen input-tokens
  • Voor een team van 10 mensen dat de AI-bot gemiddeld 50 keer per dag gebruikt (1.500 berichten per maand), kost de Claude API minder dan 5 euro per maand. De volledige stack staat op 25 tot 30 euro per maand, inclusief n8n Cloud.

    Uitbreidingen en ideen

  • On-call alert bot: laat n8n een Slack DM sturen naar de verantwoordelijke medewerker zodra een server-monitoring tool (bijv. Uptime Robot) een storing detecteert
  • CRM-update in Slack: stuur een melding naar #deals zodra een deal in HubSpot naar de volgende fase gaat
  • Dagelijkse stand-up reminder: laat n8n elke ochtend een thread aanmaken in #standups met de vraag wat iedereen vandaag doet
  • Klantreviews monitoren: stuur nieuwe Google Reviews of Trustpilot-beoordelingen direct naar een intern Slack-kanaal via een RSS-feed trigger in n8n
  • Interactieve enquetes: gebruik Block Kit met radio buttons om snelle polls te houden in Slack en sla de resultaten op in Google Sheets via n8n
  • Wil je weten hoe je Slack koppelt aan je CRM? Lees de handleiding 'HubSpot koppelen aan n8n: leads, deals en contacten automatiseren' voor een complete workflow van websiteformulier tot HubSpot deal en Slack-melding.

    Gerelateerd

    Nieuwsbrief

    Meer handleidingen en tips?

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

    Gratis aanmelden →