HR-dataförfrågningar låter enkla tills du sitter och gräver i medarbetarregister, svarar på ”snabba frågor” och inser att det inte finns någon tillförlitlig logg över vem som har öppnat vad. Då blir det fram och tillbaka i meddelanden, skärmdumpar som du inte borde dela och den där obehagliga känslan av att ett enda misstag kan exponera något känsligt.
Det här drabbar HR-chefer först, om vi ska vara ärliga. Men operationsansvariga som dras in i godkännanden känner också av det, och lönekonsulter i byråupplägg hanterar det hela tiden. Med PayCaptain granskningsloggar i Google Sheets får du ett felfritt spår över uppslag och uppdateringar av medarbetare utan att göra alla till systemadministratörer.
Nedan ser du vad arbetsflödet gör, varför det är säkrare än ad hoc-åtkomst och hur du kan anpassa det till era egna medarbetarattribut och policys.
Så här fungerar automatiseringen
Hela n8n-flödet, från trigger till slutresultat:
n8n Workflow Template: PayCaptain + Google Sheets: säkrare auditloggar
flowchart LR
subgraph sg0["When Executed by Another Workflow Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When Executed by Another Wor..", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Operation", pos: "b", h: 48 }
n5["<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/>Get Employees"]
n7@{ icon: "mdi:database", form: "rounded", label: "Log Call", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Matches", pos: "b", h: 48 }
n9@{ icon: "mdi:cog", form: "rounded", label: "Aggregate Search Results", pos: "b", h: 48 }
n10["<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/>Get Employees1"]
n11@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Matching ID", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "Strip Sensitive Fields1", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Strip Sensitive Fields", pos: "b", h: 48 }
n14["<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/>Update Employee1"]
n15@{ icon: "mdi:swap-vertical", form: "rounded", label: "Valid Fields Only", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Has Valid Request?", pos: "b", h: 48 }
n17@{ icon: "mdi:swap-vertical", form: "rounded", label: "Get Error Response", pos: "b", h: 48 }
n18@{ icon: "mdi:swap-vertical", form: "rounded", label: "Get Success Response", pos: "b", h: 48 }
n19@{ icon: "mdi:cog", form: "rounded", label: "Aggregate Get Response", pos: "b", h: 48 }
n7 --> n1
n1 --> n5
n1 --> n10
n1 --> n15
n5 --> n8
n8 --> n13
n10 --> n11
n14 --> n18
n15 --> n16
n11 --> n12
n16 --> n14
n16 --> n17
n13 --> n9
n12 --> n19
n0 --> n7
end
subgraph sg1["Paycaptain MCP Server Flow"]
direction LR
n2@{ icon: "mdi:play-circle", form: "rounded", label: "Paycaptain MCP Server", pos: "b", h: 48 }
n3@{ icon: "mdi:wrench", form: "rounded", label: "Update Employee", pos: "b", h: 48 }
n4@{ icon: "mdi:wrench", form: "rounded", label: "Get Employee", pos: "b", h: 48 }
n6@{ icon: "mdi:wrench", form: "rounded", label: "Search Employees", pos: "b", h: 48 }
n4 -.-> n2
n3 -.-> n2
n6 -.-> n2
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 n0,n2 trigger
class n3,n4,n6 ai
class n1,n8,n11,n16 decision
class n7 database
class n5,n10,n14 api
classDef customIcon fill:none,stroke:none
class n5,n10,n14 customIcon
Problemet: HR-förfrågningar skapar risk utan en granskningslogg
Medarbetardata är en sådan sak som alla behöver, men som bara ett fåtal personer bör hantera. Någon frågar: ”När började Sarah?” En annan behöver arbetsdagar för Jack. Sedan säger en chef: ”Uppdatera Tracys NI-nummer, tack”, och plötsligt gör du manuella uppslag, kopierar fält till meddelanden och genomför ändringar utan någon insyn utanför din inkorg. Har du otur delar du dessutom för mycket (adresser, bankuppgifter, identifierare) eftersom förfrågan aldrig specificerade vad som var ”säkert”.
Små förfrågningar är inte problemet. Det är upprepningen. Och avsaknaden av en tydlig, sökbar historik gör det värre för varje vecka.
- Folk frågar efter samma medarbetarinfo igen eftersom det inte finns något gemensamt spår att hänvisa till senare.
- Manuell copy-paste ökar risken att du råkar inkludera känsliga fält som aldrig behövdes.
- Uppdateringar sker via DM:s och e-posttrådar, så du kan inte enkelt bevisa vem som begärde en ändring och när den gjordes.
- Även ”skrivskyddad” åtkomst blir ett säkerhetsproblem när för många konton kan bläddra i hela medarbetarprofiler.
Lösningen: en MCP-gateway som maskerar data och loggar varje åtgärd
Det här n8n-arbetsflödet gör PayCaptain-uppslag och uppdateringar av medarbetare till kontrollerade ”verktyg” som du kan exponera via en MCP-server (till exempel till Claude Desktop). I stället för att ge någon bred åtkomst till PayCaptain låter du dem ställa en fråga via MCP-klienten. Arbetsflödet skickar förfrågan till rätt operation (sök medarbetare, hämta via ID eller uppdatera medarbetare), anropar PayCaptain-API:et och tar sedan bort känsliga fält innan något returneras. När förfrågan är en uppdatering skyddar det också mot att ändra fält du vill hålla skrivskyddade, vilket är avgörande för lönenära data.
Varje operation skrivs till Google Sheets som en granskningspost, så du kan svara på ”vem slog upp det här?” och ”vad ändrades?” utan att leta i chattloggar. Det tillkommer lite extra latenstid, men för känslig åtkomst är den kompromissen oftast värd det.
Arbetsflödet startar när din MCP-klient triggar servern. n8n avgör vilket verktyg som används, kör rätt PayCaptain-API-anrop, maskerar fält och returnerar ett strukturerat svar. Till sist loggar det åtgärden i Google Sheets för senare granskning.
Vad du får: automatisering vs. resultat
| Vad det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här kan det se ut
Säg att teamet hanterar 20 medarbetarfrågor i veckan och att varje fråga tar cirka 10 minuter att slå upp, rimlighetskontrollera och svara på på ett säkert sätt. Det blir ungefär 3 timmar smått-men-stressig administration. Med det här arbetsflödet frågar beställaren via MCP-klienten, n8n hämtar och maskerar data och svaret kommer tillbaka på ungefär en minut plus loggning. Du granskar fortfarande känsliga uppdateringar, men rutinuppslagen slutar äta upp eftermiddagarna.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Självhostningsalternativ om du föredrar det (Hostinger fungerar bra)
- PayCaptain för att söka och uppdatera medarbetarregister
- Google Sheets för att logga åtgärder för granskning
- PayCaptain developer key (hämta den i dina PayCaptain-utvecklarinställningar)
Kunskapsnivå: Medel. Du kopplar in behörigheter, verifierar tillåtna fält och testar API-anrop på ett säkert sätt.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En MCP-klient triggar servern. Arbetsflödet startar när din MCP-klient (som Claude Desktop) anropar din n8n MCP Server Gateway med en begäran om att söka, hämta eller uppdatera en medarbetare.
Förfrågan routas till rätt verktyg. En Switch-nod skickar förfrågan längs rätt väg, vilket gör beteendet förutsägbart och gör det enklare att tillämpa olika regler för uppslag jämfört med uppdateringar.
PayCaptain-data hämtas och saneras. n8n använder HTTP-anrop för att hämta medarbetarlistor eller en specifik medarbetarpost, och sedan tar stegen för att ”maskera fält” bort attribut du inte vill returnera till beställaren.
Uppdateringar valideras innan något ändras. Arbetsflödet mappar tillåtna fält, kontrollerar payloaden och postar först därefter uppdateringen till PayCaptain. Om något inte är tillåtet förbereder det ett tydligt felmeddelande i stället för att delvis uppdatera posten.
Allt loggas i Google Sheets. Varje operation skriver en granskningspost innan ett svar returneras, så du har alltid ett spår även om någon raderar en chatttråd.
Du kan enkelt ändra vilka fält som returneras till beställare och vilka fält som är redigerbara utifrån era behov. Se hela implementationsguiden nedan för alternativ för anpassning.
Steg-för-steg-implementeringsguide
Steg 1: Konfigurera triggern för anrop av subworkflow
Konfigurera ingångspunkten för subworkflow så att externa workflows kan skicka in operation, query, employeeId och values till den här automatiseringen.
- Lägg till Subworkflow Invocation Trigger som triggernod.
- Öppna Workflow Inputs och definiera inputs: operation, query, employeeId och values (typ
object). - Koppla Subworkflow Invocation Trigger till Record Audit Entry för att matcha körflödet.
Tips: Säkerställ att det anropande workflowet skickar operation som någon av searchEmployees, getEmployeeById eller updateEmployee för att matcha switch-reglerna i Route by Operation.
Steg 2: Anslut Google Sheets och PayCaptain API
Konfigurera auditloggning till Google Sheets och anslut PayCaptain API-endpoints för att hämta och uppdatera anställda.
- Öppna Record Audit Entry och ställ in Operation till
append. - I Record Audit Entry, mappa kolumner till uttryck: query →
{{ $json.query }}, values →{{ $json.values.toJsonString() }}, operation →{{ $json.operation }}, timestamp →{{ $now.toISO() }}, employeeId →{{ $json.employeeId }}. - Autentiseringsuppgifter krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Record Audit Entry.
- Öppna Retrieve Employee List och ställ in URL till
https://api.paycaptain.com/employees. - I Retrieve Employee List, ställ in Send Query till
true, lägg till query-parametrar: company →paycaptain, page →{{ $json.page ?? 1 }}, samt pagineringsparametern page →{{ $request.qs.page + 1 }}. - Autentiseringsuppgifter krävs: Anslut era httpHeaderAuth-uppgifter i Retrieve Employee List.
- Upprepa samma PayCaptain-inställningar för Retrieve Employee List 2 och anslut httpHeaderAuth-uppgifter där också.
- Öppna Post Employee Update och ställ in URL till
https://api.paycaptain.com/employee, Method tillPOSToch JSON Body till{{ { hrEmployeeId: $('Subworkflow Invocation Trigger').item.json.employeeId, .. } }}. - Autentiseringsuppgifter krävs: Anslut era httpHeaderAuth-uppgifter i Post Employee Update.
⚠️ Vanlig fallgrop: Om PayCaptain API kräver specifika headers eller tokens, säkerställ att era httpHeaderAuth-uppgifter inkluderar dem, annars kommer anropen att misslyckas.
Steg 3: Sätt upp routing och hantering för sök/hämta
Routa operationer till rätt flöde och filtrera/sök i anställdata innan redigerade resultat returneras.
- Öppna Route by Operation och bekräfta att de tre reglerna kontrollerar
{{ $('Subworkflow Invocation Trigger').first().json.operation }}motsearchEmployees,getEmployeeByIdochupdateEmployee. - I Filter Search Matches, behåll det vänstra uttrycket som konkatenerar fält till en sträng i gemener och det högra uttrycket
{{ $('Subworkflow Invocation Trigger').first().json.query.toLowerCase() }}för att matcha sökinput. - I Redact Fields For Search, behåll tilldelningarna som endast släpper igenom säkra fält (företag, id:n, namn, kontakt- och jobbinformation).
- I Aggregate Search Output, ställ in Aggregate till
aggregateAllItemDataoch Destination Field Name tillresponse. - I Filter Matching Identifier, verifiera att jämförelsen
{{ $json.hrEmployeeId }}är lika med{{ $('Subworkflow Invocation Trigger').first().json.employeeId }}. - I Redact Fields For ID, behåll samma tilldelningar för säkra fält som används i Redact Fields For Search.
- I Aggregate Get Output, ställ in Aggregate till
aggregateAllItemDataoch Destination Field Name tillresponse.
Steg 4: Konfigurera validering av uppdateringar och hantering av svar
Tillåt endast godkända fält att uppdateras, validera payloaden och returnera svar för lyckat eller fel.
- I Map Allowed Fields, ställ in values till uttrycket som filtrerar tillåtna nycklar från inkommande values:
{{ ([ "firstname","middlename","lastname","mailingStreet","mailingCity","mailingStateProvince","mailingPostalCode","mailingCountry","email","phone","niNumber","location","department","team","jobGrade","jobTitle", ].reduce((acc, key) => ({ ...acc, [key]: $('Subworkflow Invocation Trigger').item.json.values[key] ?? undefined }), {})) }}. - I Validate Update Payload, behåll villkoret
{{ $json.values }}med operatornnotEmptyför att förhindra tomma uppdateringar. - Koppla true-utgången från Validate Update Payload till Post Employee Update, och false-utgången till Prepare Error Reply.
- I Prepare Error Reply, ställ in response till
=Request included fields which cannot be updated. Editable fields are: {{ [ "firstname","middlename","lastname","mailingStreet","mailingCity","mailingStateProvince","mailingPostalCode","mailingCountry","email","phone","niNumber","location","department","team","jobGrade","jobTitle",].join(', ')}}. - I Prepare Success Reply, ställ in response till
ok.
Tips: Workflowet använder flera set-noder (maskning och mappning). Håll deras tilldelningar synkade så att endast godkända fält någonsin lämnar workflowet.
Steg 5: Sätt upp MCP-verktyg och gateway
Exponera workflowet som MCP-verktyg för åtkomst av AI-agenter, inklusive sök, hämta-via-id och uppdateringsoperationer.
- Öppna MCP Server Gateway och verifiera att Path är satt till
5f6728df-d3e8-48bb-9a38-0f2e54c7962c. - I Search Employee Tool, bekräfta att Name är
searchEmployeesoch att input query använder{{ /*n8n-auto-generated-fromAI-override*/ $fromAI('query', ``, 'string') }}. - I Fetch Employee Tool, bekräfta att Name är
getEmployeeByIdoch att employeeId använder{{ /*n8n-auto-generated-fromAI-override*/ $fromAI('employeeId', ``, 'string') }}. - I Modify Employee Tool, bekräfta att Name är
updateEmployeeoch att inputs använder{{ /*n8n-auto-generated-fromAI-override*/ $fromAI('values', ``, 'string') }}och{{ /*n8n-auto-generated-fromAI-override*/ $fromAI('employeeId', ``, 'string') }}. - Säkerställ att varje verktyg är kopplat till MCP Server Gateway via anslutningen ai_tool.
⚠️ Vanlig fallgrop: Om er MCP-server kräver autentisering, lägg till autentiseringsuppgifter på MCP Server Gateway, inte på verktygsnoderna (Search Employee Tool, Fetch Employee Tool, Modify Employee Tool).
Steg 6: Testa och aktivera ert workflow
Verifiera varje operationsflöde och aktivera sedan workflowet för användning i produktion.
- Klicka på Execute Workflow och trigga Subworkflow Invocation Trigger manuellt med exempelinput för
searchEmployees,getEmployeeByIdochupdateEmployee. - Bekräfta att auditraden läggs till i Record Audit Entry och att rätt väg triggas från Route by Operation.
- För sök-/hämta-operationer, verifiera att Aggregate Search Output eller Aggregate Get Output returnerar en
response-array med endast maskade fält. - För uppdateringar, säkerställ att Validate Update Payload passerar icke-tomma values, att Post Employee Update returnerar lyckat och att Prepare Success Reply skickar ut
ok. - När ni är nöjda, växla workflowet till Active för att aktivera användning av MCP-verktyg i produktion.
Vanliga fallgropar
- PayCaptain-autentisering kan löpa ut eller sakna rätt åtkomstomfattning. Om det slutar fungera, kontrollera först behörigheterna för din developer key i PayCaptain och uppdatera sedan autentiseringen i n8n.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder misslyckas på grund av tomma svar.
- Loggning till Google Sheets kan vara långsammare än du tror, särskilt i hårt belastade kalkylark. Om du ser intermittenta fel, verifiera att målarket/fliken fortfarande finns och överväg att logga till en dedikerad ”Audit”-fil.
Vanliga frågor
Cirka en timme om din PayCaptain-nyckel och ditt Google Sheet är redo.
Nej. Du konfigurerar främst autentisering, tillåtna fält och några routingregler i n8n.
Ja. n8n har ett gratis självhostat alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också räkna in åtkomst till PayCaptain API (ingår i din PayCaptain-plan och developer key).
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller självhostning på en VPS. För självhostning är Hostinger VPS prisvärd och hanterar n8n bra. Självhostning ger dig obegränsade körningar men kräver grundläggande serveradministration.
Ja, och det bör du. Du redigerar de två maskeringsstegen (”Redact Fields For Search” och ”Redact Fields For ID”) för att styra vad som kommer tillbaka till beställaren, och justerar sedan ”Map Allowed Fields” och ”Validate Update Payload” för att säkerställa vad som får ändras. Vanliga justeringar är att dölja identifierare, bara returnera roll-/teamdetaljer vid uppslag och markera lönekänsliga fält som skrivskyddade. Om er policy ändras uppdaterar du arbetsflödet en gång och regeln gäller överallt.
Oftast beror det på en ogiltig eller utgången developer key i HTTP Request-autentiseringen. Det kan också bero på saknade behörigheter på ditt PayCaptain-konto eller att API-endpoint/bas-URL skiljer sig mellan sandbox och produktion. Om sökningen fungerar men uppdateringar misslyckas, kontrollera först mappningen av tillåtna fält och valideringsregeln.
Väldigt många. På n8n Cloud beror det på din månatliga körningskvot, medan självhostning främst beror på din server och hur snabbt Google Sheets kan skriva. I praktiken kör team vanligtvis detta för tiotals till hundratals förfrågningar per dag utan problem, så länge kalkylarket inte är överbelastat.
Ofta, ja, eftersom du behöver striktare kontroll än ett enkelt ”trigger → åtgärd”-recept. Det här arbetsflödet bygger på routing, validering och maskering på fältnivå, vilket är enklare att genomdriva i n8n utan krångliga kringlösningar. Du kan också självhosta för obegränsade körningar och hålla allt inom din miljö, vilket är viktigt för HR-data. Zapier eller Make kan fungera för enkel loggning, men de är inte designade kring ”godkända verktyg” exponerade via en MCP-gateway. Om du är osäker, prata med en automationsexpert och beskriv era åtkomstregler.
Du får svar som folk kan lita på, ändringar du kan förklara och en logg du kan ta fram på några sekunder. Sätt upp det en gång och låt sedan arbetsflödet göra det noggranna jobbet.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.