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
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:
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.
{
"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 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:
{
"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:
// 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:
{
"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 configureren
Voeg een Schedule Trigger toe en stel de cron-expressie in:
# 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:
// 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:
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:
: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:
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.
// 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 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 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):
{
"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
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
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.