CV-granskning i Slack börjar enkelt. Sedan blir det en rörig tråd, saknad kontext och en “var landade vi i den här kandidaten?”-diskussion två dagar senare.
Rekryterare känner av det först, men HR-ansvariga och rekryterande chefer fastnar i det också. Den här automatiseringen för Slack-baserad CV-granskning ger dig konsekventa sammanfattningar, en repeterbar utvärdering och en strukturerad logg i Google Sheets som du faktiskt kan söka i.
Du får se hur arbetsflödet hämtar en CV-PDF från Slack, utvärderar den mot rätt arbetsbeskrivning, svarar i tråden och loggar beslutsspåret automatiskt.
Så fungerar automatiseringen
Se hur detta löser problemet:
n8n Workflow Template: Slack + Google Sheets för enhetlig CV-granskning
flowchart LR
subgraph sg0["json parser Flow"]
direction LR
n0@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Is user message?", pos: "b", h: 48 }
n1@{ icon: "mdi:cog", form: "rounded", label: "No Operation, do nothing", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook"]
n3@{ icon: "mdi:cog", form: "rounded", label: "Extract from File", pos: "b", h: 48 }
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Download Candidate Profile F.."]
n5@{ icon: "mdi:robot", form: "rounded", label: "json parser", pos: "b", h: 48 }
n6@{ icon: "mdi:brain", form: "rounded", label: "gpt4-1 model", pos: "b", h: 48 }
n7@{ icon: "mdi:cog", form: "rounded", label: "Download file", pos: "b", h: 48 }
n8@{ icon: "mdi:cog", form: "rounded", label: "Extract Job Description", pos: "b", h: 48 }
n9@{ icon: "mdi:robot", form: "rounded", label: "HR Expert Agent", pos: "b", h: 48 }
n10@{ icon: "mdi:robot", form: "rounded", label: "Profile Analyzer Agent", pos: "b", h: 48 }
n11@{ icon: "mdi:database", form: "rounded", label: "Update evaluation sheet", pos: "b", h: 48 }
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Map Columns"]
n13@{ icon: "mdi:brain", form: "rounded", label: "gpt-4-1 model 2", pos: "b", h: 48 }
n14@{ icon: "mdi:robot", form: "rounded", label: "json parser 2", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Send result in the mentioned.."]
n17["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Inform user that profile is .."]
n18@{ icon: "mdi:database", form: "rounded", label: "Query available positions", pos: "b", h: 48 }
n19["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Get information about a user"]
n15 --> n4
n15 --> n17
n2 --> n0
n12 --> n11
n12 --> n19
n5 -.-> n10
n6 -.-> n10
n7 --> n8
n14 -.-> n9
n9 --> n12
n13 -.-> n9
n0 --> n15
n0 --> n1
n3 --> n10
n10 --> n7
n8 --> n9
n18 -.-> n10
n19 --> n16
n4 --> n3
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n5,n9,n10,n14 ai
class n6,n13 aiModel
class n0,n15 decision
class n11,n18 database
class n2,n4 api
class n12 code
classDef customIcon fill:none,stroke:none
class n2,n4,n12,n16,n17,n19 customIcon
Utmaningen: CV-granskning som blir Slack-kaos
Om CV:n kommer in via Slack sker utvärderingen oftast på samma sätt: någon släpper in en PDF, några personer skummar den, och feedbacken blir en hög halvfärdiga tankar i olika svar. Sedan kommer den verkliga smärtan. Du försöker jämföra kandidater en vecka senare, men ingen använde samma kriterier, den ursprungliga arbetsbeskrivningen finns inte i tråden och slutbeslutet är begravt under kommentarer som “ser bra ut” och “inte säker”. Multiplicera det med några öppna roller så försvinner det i tysthet timmar varje vecka.
Det handlar inte om ett stort haveri. Det är små friktioner, om och om igen. Här är var det faller isär.
- Folk utvärderar samma CV olika eftersom de inte tittar på samma krav för rollen.
- PDF:er laddas ner och läses om, vilket gör “snabb granskning” till en återkommande tidsfälla.
- Slack-trådar är ingen rekryteringsdatabas, så du tappar spåret när du senare behöver motivera beslut.
- Någon slutar med att copy-pasta en sammanfattning till ett kalkylark ändå, oftast vid sämsta möjliga tillfälle.
Lösningen: AI-utvärdering i Slack, loggad till Google Sheets
Det här arbetsflödet gör Slack till en strukturerad ingång för CV-granskning, utan att tvinga teamet att ändra var de jobbar. En kollega nämner er HR-bot, bifogar en PDF med kandidatprofil och skriver rollen på vanlig svenska (“Vänligen utvärdera för AI Engineer”). n8n laddar ner PDF:en, extraherar CV-texten och skickar den till en AI-agent som plockar ut de viktiga detaljerna (namn, e-post, kandidatens sammanfattning och sökt position). Därefter slår den upp rätt arbetsbeskrivning i Google Sheets, hämtar den JD-filen och låter en andra AI-agent utvärdera matchningen mot rollkraven. Slutligen postar den en tydlig sammanfattning tillbaka i samma Slack-tråd och lägger till utvärderingen i ett Google Sheet så att du får ett sökbart underlag.
Arbetsflödet startar med en Slack-mention plus en PDF-bilaga. I mitten kombinerar det två indata (CV + matchande arbetsbeskrivning) så att utvärderingen blir konsekvent. Det avslutas med två utdata: en sammanfattning i Slack-tråden och en rad i ditt loggark för utvärderingar.
Vad som förändras: före vs. efter
| Det här tar bort | Effekten du märker |
|---|---|
|
|
Effekt i verkligheten
Säg att du granskar 10 CV:n i veckan i Slack. Manuellt är det vanligt att lägga cirka 20 minuter per CV på att ladda ner PDF:en, kolla JD:n, skriva en sammanfattning och uppdatera ett uppföljningsark (det blir runt 3 timmar totalt, och det avbryter ofta annat arbete). Med det här arbetsflödet lägger du kanske 2 minuter på att posta meddelandet och bifoga filen, och väntar sedan på att boten ska svara och logga resultatet. Du får tillbaka de där 2–3 timmarna, och kvaliteten blir dessutom mer konsekvent.
Krav
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- Slack för att ta emot CV:n och posta sammanfattningar
- Google Sheets för att mappa roller och logga utvärderingar
- OpenAI API-nyckel (hämta den i din OpenAI-dashboard)
Kompetensnivå: Medel. Du kopplar Slack- och Google-autentisering, och justerar sedan några prompts och kolumner i arket.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Arbetsflödet steg för steg
En Slack-mention med en PDF startar allt. Någon nämner boten (app_mention) och bifogar kandidatprofilen. Om det inte finns någon fil svarar boten och ber om PDF:en och arbetsflödet stoppar.
CV:t laddas ner och görs om till text. n8n hämtar Slack-filen via HTTP Request och extraherar sedan text från PDF:en så att AI:n faktiskt kan jobba med den. Det är här mycket av den “manuella lästiden” försvinner, helt ärligt.
AI plockar ut grunderna och identifierar rollen. Den första AI-agenten läser CV:t plus meddelandetexten för att hitta kandidatens namn, e-post, en kort sammanfattning och sökt position. En strukturerad output-parser gör svaret förutsägbart, så att resten av arbetsflödet inte faller isär.
Arbetsbeskrivningen hämtas, sedan sker matchningsutvärderingen. n8n slår upp positionstiteln i Google Sheets för att hitta URL:en till matchande JD-fil, laddar ner den (från Google Drive), tolkar den och skickar båda dokumenten till en AI-agent i “HR-expert”-stil för en matchningssammanfattning och viktiga insikter.
Resultaten går till Slack och Google Sheets. Arbetsflödet mappar utvärderingen till strukturerade fält, lägger till en ny rad i ditt loggark för utvärderingar, hämtar Slack-användarinformation och postar sedan det sammanfattade beslutet tillbaka i originaltråden.
Du kan enkelt ändra utvärderingsformatet så att det inkluderar ett scorecard eller en rekommendation som godkänns/underkänns utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementation
Steg 1: Konfigurera webhook-triggern
Sätt upp ingången för inkommande Slack-event och validera den inkommande payloaden innan bearbetningen fortsätter.
- Lägg till och konfigurera Incoming Slack Hook med Path satt till
slack-gilfoyle, HTTP Method satt tillPOSToch Response Mode satt tilllastNode. - I Validate User Event ställer ni in villkoret att kontrollera Exists för
{{ $json.body.event.type }}så att endast giltiga Slack-event går vidare. - I Check File Attachment ställer ni in villkoret att kontrollera Exists för
{{ $json.body.event.files[0].id }}för att säkerställa att en cv-fil är bifogad. - Koppla den falska grenen från Validate User Event till Skip Processing för att säkert stoppa bearbetning av ogiltiga event.
- Koppla den falska grenen från Check File Attachment till Notify Missing Attachment för att meddela användare när ingen fil har inkluderats.
Steg 2: Anslut Slack och filhämtning
Konfigurera Slack-meddelanden och ladda ned cv-filer säkert från Slack.
- I Notify Missing Attachment behåller ni Text som det angivna meddelandet och ställer in Channel till
{{ $('Incoming Slack Hook').item.json.body.event.channel }}. - Behörighet krävs: Anslut era slackApi-uppgifter i Notify Missing Attachment.
- I Fetch Slack Resume File ställer ni in URL till
{{ $json.body.event.files[0].url_private_download }}och behåller Authentication satt tillpredefinedCredentialTypemed Credential Type satt tillslackOAuth2Api. - Behörighet krävs: Anslut era slackOAuth2Api-uppgifter i Fetch Slack Resume File.
- I Parse Resume PDF ställer ni in Operation till
pdfoch Binary Property Name till=data.
Steg 3: Sätt upp AI-extraktion för kandidatprofil
Använd en AI-agent för att tolka cv:t, identifiera den sökta tjänsten och slå upp matchande jobbbeskrivning i Sheets.
- I Candidate Profile Agent behåller ni Text som angivet och säkerställer att den refererar till
{{ $json["text"] }}och{{ $('Incoming Slack Hook').item.json.body.event.text }}. - Säkerställ att Mini GPT Model är ansluten som språkmodell för Candidate Profile Agent med modellen satt till
gpt-4.1-mini. Behörighet krävs: Anslut era openAiApi-uppgifter i Mini GPT Model. - Säkerställ att Structured Output Parser är ansluten till Candidate Profile Agent med det angivna JSON-schemat. Uppgifter ska läggas till i Mini GPT Model (parent), inte i Structured Output Parser.
- I Lookup Position Sheet ställer ni in Document ID till
[YOUR_ID]och Sheet Name tillgid=0. Behörighet krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Lookup Position Sheet.
Steg 4: Utvärdera mot jobbbeskrivningen
Ladda ned jobbbeskrivningen från Google Drive, tolka den och låt AI utvärdera kandidaten.
- I Retrieve JD File ställer ni in Operation till
downloadoch File ID till{{ $json.output.JobDescription }}. Behörighet krävs: Anslut era googleDriveOAuth2Api-uppgifter. - I Parse Job Description ställer ni in Operation till
pdfför att extrahera texten från jobbbeskrivningen. - I Hiring Review Agent behåller ni Text som angivet, med referenser till
{{ $('Candidate Profile Agent').item.json.output.AppliedPosition }},{{ $('Parse Job Description').item.json.text }}och{{ $('Candidate Profile Agent').item.json.output.Profile.toJsonString() }}. - Säkerställ att Second GPT Model är ansluten som språkmodell för Hiring Review Agent med modellen satt till
gpt-4.1-mini. Behörighet krävs: Anslut era openAiApi-uppgifter i Second GPT Model. - Säkerställ att Evaluation Output Parser är ansluten till Hiring Review Agent med det angivna JSON-schemat. Uppgifter ska läggas till i Second GPT Model (parent), inte i Evaluation Output Parser.
Steg 5: Konfigurera loggning av utdata och Slack-notiser
Mappa utvärderingsfält, logga resultat i Sheets och posta en Slack-sammanfattning till rekryteraren.
- I Map Evaluation Fields behåller ni den angivna JavaScript Code för att normalisera utdatafält och generera
submitted_datemed$now.toFormat("yyyyLLdd-HHmmss"). - Map Evaluation Fields skickar utdata parallellt till både Append Evaluation Log och Fetch Slack User Info.
- I Append Evaluation Log behåller ni Operation satt till
append, Document ID till[YOUR_ID]och Sheet Name tillSheet1. Behörighet krävs: Anslut era googleSheetsOAuth2Api-uppgifter. - I Fetch Slack User Info ställer ni in User till
{{ $('Incoming Slack Hook').item.json.body.event.files[0].user }}och behåller Authentication satt tilloAuth2. Behörighet krävs: Anslut era slackOAuth2Api-uppgifter. - I Post Slack Summary behåller ni det angivna Text-meddelandet och ställer in Channel till
{{ $('Incoming Slack Hook').item.json.body.event.channel }}. Behörighet krävs: Anslut era slackApi-uppgifter.
Steg 6: Testa och aktivera ert workflow
Verifiera workflowet från början till slut med ett riktigt Slack-meddelande som innehåller en cv-fil och aktivera det sedan för produktion.
- Använd Slack för att skicka ett meddelande med en bifogad cv-fil till kanalen som övervakas av Incoming Slack Hook.
- Kör workflowet manuellt och bekräfta att Fetch Slack Resume File laddar ned filen och att Parse Resume PDF returnerar text.
- Verifiera att Candidate Profile Agent och Hiring Review Agent returnerar strukturerad utdata via sina parsers.
- Bekräfta att Append Evaluation Log lägger till en rad i Google Sheets och att Post Slack Summary postar sammanfattningsmeddelandet.
- När allt fungerar växlar ni workflowet till Active för kontinuerlig bearbetning.
Se upp för
- Slack-bottokens kan roteras eller tappa scopes efter appförändringar. Om filer inte går att ladda ner, kontrollera behörigheter i Slack-appen och autentisera om Slack-uppgifterna i n8n.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du redigera utdata för alltid.
Vanliga frågor
Cirka en timme om Slack, Sheets och din OpenAI-nyckel är redo.
Ja. Ingen kodning krävs, men någon bör vara bekväm med att koppla Slack-/Google-konton och redigera några prompts.
Ja. n8n har ett gratis alternativ för egen hosting och en gratis provperiod på n8n Cloud. Cloud-planer startar på 20 USD/månad för högre volym. Du behöver också räkna in användning av OpenAI API (för många team handlar det om några dollar i månaden vid normal granskningsvolym).
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärd och hanterar n8n bra. Egen hosting ger dig obegränsade körningar men kräver grundläggande serveradministration.
Det kan du. De flesta team börjar med att redigera de två AI-agenterna (Profile Analyzer Agent och Hiring Review Agent) så att utdata matchar deras rekryteringsrubrik. Vanliga justeringar är att lägga till en enkel poäng (1–5) för måste-ha-kompetenser, göra Slack-meddelandet kortare och utöka kolumnerna i Google Sheets-loggen så att du kan filtrera på roll, senioritet eller ett beslut som godkänns/avvakta/avslås.
Oftast handlar det om en utgången token eller att det saknas Slack-scopes för att läsa filer och posta meddelanden. Kontrollera Slack-appens behörigheter igen och uppdatera sedan Slack-uppgifterna i n8n. Om boten kan posta meddelanden men inte kan ladda ner PDF:er är det nästan alltid ett scope-problem för filåtkomst.
På en typisk n8n Cloud-plan hanterar den normal veckovis rekryteringsvolym utan problem, och vid egen hosting skalar det med din server. I praktiken begränsas du av hur många Slack-händelser och AI-anrop du kör samtidigt, så om du granskar i bulk hjälper det att köa eller sprida ut förfrågningarna.
Ofta, ja. Det här arbetsflödet har flera grenar (hantering av saknad bilaga, jobbsökning, tvåstegs AI-analys, strukturerad parsing, loggning och ett Slack-svar i tråden), och n8n är helt enkelt mer bekvämt med den typen av logik. Du får också möjligheten att köra egen hosting, vilket spelar roll när granskningsvolymen ökar och prissättning per uppgift börjar kännas. Zapier och Make kan fortfarande fungera om du vill ha ett enklare flöde, men du kommer sannolikt behöva plåstra ihop workarounds för filhantering och flerstegs AI-utvärdering. Om du vill ha en snabb rekommendation för just din process, prata med en automationsexpert.
Det här är vad “process” betyder i rekrytering: samma indata, samma standard, varje gång. Låt arbetsflödet hantera det repetitiva granskningsspåret så att teamet kan fokusera på intervjuerna som faktiskt spelar roll.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.