Waarom een interne bot het verschil maakt
Slack is een zegen voor samenwerking, maar ook een vloek voor productiviteit. Het constante getik van vragen die al honderd keer zijn beantwoord: "Wat is het wachtwoord van X?", "Hoe werkt onze onboarding?", "Wie is de contactpersoon bij leverancier Y?" Een interne bot beantwoordt dit soort vragen direct, 24/7, zonder iemand te onderbreken.
We bouwen voor fictief bureau "Groeistroom" een Slack-bot die teamvragen beantwoordt op basis van hun Notion kennisbank. De aanpak werkt ook met andere kennisbanken.
Stap 1: Slack App aanmaken
Ga naar api.slack.com/apps en klik "Create New App". Kies "From scratch". Naam: "Groeistroom Bot". Selecteer je Slack workspace.
Activeer de volgende features:
• Slash Commands: voor /vraag, /kennisbank en andere commando's
• Event Subscriptions: om @ mentions op te vangen
• Bot Token Scopes: chat:write, commands, im:read, im:write
Ga naar "OAuth & Permissions" en installeer de app in je workspace. Kopieer het "Bot User OAuth Token" (begint met xoxb-).
Stap 2: Slash Command instellen
In je Slack App configuratie, ga naar "Slash Commands" > "Create New Command":
Command: /vraag
Request URL: [jouw n8n webhook URL] (volgt in stap 3)
Short Description: Stel een vraag aan de kennisbank
Usage Hint: [jouw vraag]
Sla op. Slack stuurt nu bij elk /vraag commando een POST-verzoek naar n8n.
Stap 3: n8n webhook ontvangen
Maak een nieuwe n8n workflow aan:
Node 1: Webhook (POST) — ontvang Slack slash command
Slack stuurt een form-urlencoded POST met velden: token, team_id, channel_id, user_id, command, text (de vraag), response_url.
Voeg meteen een "Respond to Webhook" node toe die 200 OK teruggeeft (Slack vereist dit binnen 3 seconden). Stuur een bevestiging:
{ "response_type": "ephemeral", "text": "Een moment... ik zoek het op." }
De eigenlijke verwerking doe je asynchroon via de response_url.
Stap 4: Notion kennisbank ophalen
Na de directe response, start de kennisbank-query. HTTP Request naar Notion:
URL: https://api.notion.com/v1/databases/{{ NOTION_DB_ID }}/query
Method: POST
Headers: Authorization: Bearer {{ notion_token }}, Notion-Version: 2022-06-28
Body: { "filter": { "property": "Status", "select": { "equals": "Actueel" } }, "page_size": 30 }
In een Code node: converteer de Notion response naar een leesbare tekst-string voor Claude.
Stap 5: Claude aanroepen
HTTP Request naar Claude:
URL: https://api.anthropic.com/v1/messages
Prompt:
"Je bent de interne kennisassistent van Groeistroom. Beantwoord de vraag van een teamlid op basis van de kennisbank. Regels: 1) Antwoord alleen op basis van de kennisbank, 2) Als het antwoord er niet in staat, zeg dat eerlijk, 3) Houd het beknopt en to-the-point, 4) Gebruik Slack-formatting (bold: *tekst*, bullets: •), 5) Sluit af met de naam van het kennisitem waaruit je het antwoord haalt.\n\nKennisbank:\n{{ kennisbank_content }}\n\nVraag van {{ user_naam }}:\n{{ slash_command_text }}"
Stap 6: Antwoord posten in Slack
Gebruik de response_url uit het Slack-verzoek om het Claude-antwoord te posten. HTTP Request:
URL: {{ $json.response_url }}
Method: POST
Body:
{ "response_type": "in_channel", "text": "{{ claude_antwoord }}", "replace_original": false }
Gebruik response_type "in_channel" als het antwoord voor het hele team nuttig is, of "ephemeral" als het alleen voor de vragensteller is (bijv. wachtwoorden).
Stap 7: Meerdere commando's toevoegen
Breid de bot uit met extra slash commands:
/kennisbank-toevoegen [onderwerp] [inhoud]: voeg direct een nieuw item toe aan Notion. Claude structureert het voordat het wordt opgeslagen.
/wie-is [naam/rol]: zoek contactpersonen in de Notion directory.
/status [project]: haal de laatste status op van een project (koppel aan ClickUp of Asana API).
Elk commando heeft een eigen webhook URL in n8n of je verwerkt alle commando's via één webhook met een IF/Switch node op het "command" veld.
Stap 8: @ mentions afvangen
Naast slash commands kun je de bot laten reageren op @ mentions. In je Slack App, activeer "Event Subscriptions":
Subscribe to Bot Events: app_mention
Request URL: een nieuwe n8n webhook URL voor @ mention events.
Nu reageert de bot als iemand "@Groeistroom Bot wat is het kantooradres?" typt. De flow is identiek aan het slash command, maar de input komt uit event.text in plaats van het command text-veld.
Stap 9: Acties toevoegen (taken aanmaken)
Uitbreiding: laat de bot taken aanmaken in je PM-tool. Commando: /taak [beschrijving]
n8n workflow:
1. Ontvang /taak commando
2. Claude parseert de taakomschrijving en voegt metadata toe (prioriteit, geschatte tijd)
3. HTTP Request naar ClickUp/Asana API: create task
4. Slack response: "Taak aangemaakt: [naam]. Toewijzen aan: {{ user }}? Reageer met een naam of @iemand."
5. Optioneel: luister op een follow-up bericht voor toewijzing
Stap 10: Testen en deployen
1. Ga in Slack naar het testkanaal
2. Typ /vraag Wat is ons retourbeleid?
3. Controleer of de bevestiging direct verschijnt
4. Controleer of het Claude-antwoord binnen 10 seconden verschijnt
5. Test met een vraag die NIET in de kennisbank staat
6. Test /vraag in een DM (directe berichten) met de bot
7. Deel de bot met het team via #algemeen
Troubleshooting
Slack geeft "dispatch_failed" terug: de n8n webhook reageerde niet binnen 3 seconden. Zorg dat je altijd meteen een 200 OK teruggeeft, ook al is de verwerking nog bezig. Stuur het definitieve antwoord asynchroon via response_url.
Bot reageert niet op @ mentions: controleer of Event Subscriptions actief zijn en of de Request URL correct is. Slack stuurt een verification challenge bij het instellen: n8n moet hierop reageren met { "challenge": "{{ challenge }}" }.
Claude antwoord te lang voor Slack: Slack heeft een maximale message lengte van 3.000 tekens. Voeg aan de Claude prompt toe: "Maximaal 400 woorden in je antwoord."
Notion data niet actueel: voeg een refresh knop toe via een slash command /kennisbank-refresh dat de Notion-cache in Airtable of n8n bijwerkt.
Resultaat
Na implementatie hebben teamleden direct toegang tot alle interne kennis via Slack. Geen onderbrekingen meer voor routinevragen. De bot wordt slimmer naarmate je kennisbank groeit. En nieuwe medewerkers zijn sneller productief omdat ze antwoorden kunnen vinden zonder collega's te storen.