Peer reviews faller isär i de tråkiga momenten. Inlämningar kommer in sent, granskare glömmer, bedömningsmatriser driver iväg och du slutar med att jaga folk med mejl som “kollar bara läget”.
Den här Sheets Gmail automation träffar lärare först, helt ärligt. Men L&D-chefer som kör utbildningskullar och ops-personer som samlar intern feedback känner samma friktion. Resultatet är enkelt: granskningsförfrågningar skickas automatiskt, poäng hamnar i Google Sheets och påminnelser går ut utan att du behöver sitta och vaka över processen.
Nedan ser du hur flödet går från inlämning till matris till mejl till ett levande kalkylark, plus vad du behöver för att sätta upp det.
Så fungerar den här automationen
Hela n8n-flödet, från trigger till slutlig output:
n8n Workflow Template: Google sheets + Gmail: granskning spårad och skickad
flowchart LR
subgraph sg0["AI Evaluation - Tech Flow"]
direction LR
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 - Assignment Submiss.."]
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract Submission Data", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "Read Assignment File", pos: "b", h: 48 }
n5@{ icon: "mdi:robot", form: "rounded", label: "AI Evaluation - Technical Cr..", pos: "b", h: 48 }
n6@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Store Evaluation Results", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Peer Reviewers", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Create Evaluation Template", pos: "b", h: 48 }
n10@{ icon: "mdi:message-outline", form: "rounded", label: "Send Teams Notification", pos: "b", h: 48 }
n11["<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/discord.svg' width='40' height='40' /></div><br/>Send Discord Notification"]
n12@{ icon: "mdi:message-outline", form: "rounded", label: "Send Email with Template", pos: "b", h: 48 }
n13@{ icon: "mdi:database", form: "rounded", label: "Save to Google Sheets - Grad..", 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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook Response"]
n20@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Model", pos: "b", h: 48 }
n4 --> n5
n8 --> n9
n20 -.-> n5
n3 --> n4
n12 --> n19
n7 --> n8
n7 --> n13
n6 -.-> n5
n9 --> n10
n9 --> n11
n9 --> n12
n2 --> n3
n5 --> n7
end
subgraph sg1["Manual Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n14@{ icon: "mdi:database", form: "rounded", label: "Check Review Deadlines", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Approaching Deadlines", pos: "b", h: 48 }
n16@{ icon: "mdi:message-outline", form: "rounded", label: "Send Deadline Reminder - Teams", pos: "b", h: 48 }
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/discord.svg' width='40' height='40' /></div><br/>Send Deadline Reminder - Dis.."]
n18@{ icon: "mdi:message-outline", form: "rounded", label: "Send Deadline Reminder - Email", pos: "b", h: 48 }
n0 --> n14
n1 --> n14
n14 --> n15
n15 --> n16
n15 --> n17
n15 --> n18
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,n1 trigger
class n5,n6 ai
class n20 aiModel
class n15 decision
class n13,n14 database
class n2,n19 api
classDef customIcon fill:none,stroke:none
class n2,n11,n19,n17 customIcon
Problemet: peer reviews blir ett evigt uppföljningshjul
Att köra peer reviews låter enkelt tills du gör det i större skala. Inlämningar kommer in, du kopierar namn till ett ark, du tilldelar granskare, du klistrar in en bedömningsmatris i ett mejl och sedan väntar du. Och väntar. Under tiden frågar deltagare “fick du min granskning?” och intressenter vill ha en dashboard som alltid är uppdaterad. Det värsta är den mentala belastningen: hålla koll på vem som fortfarande är skyldig feedback, vilken version av matrisen som användes och om någon bedömer för hårt eller för snällt.
Det eskalerar snabbt. Här är var processen brukar fallera.
- Manuell tilldelning av granskare blir 30 minuter av kalkylarks-trixande varje cykel.
- Bedömningsmatriser redigeras i farten, så “konsekvent bedömning” blir en fin tanke i stället för verklighet.
- Att jaga sena granskningar tar mer tid än att läsa arbetet, och påminnelserna känns alltid lite obekväma.
- Poäng hamnar i mejltrådar eller slumpmässiga dokument, vilket gör att din dashboard alltid släpar efter.
Lösningen: tilldela, mejla, poängsätt och logga granskningar automatiskt
Det här flödet gör peer review till en enda, spårbar pipeline. Det startar när en inlämning kommer in via en webhook (ofta från ett formulär, en LMS eller en intern portal). Flödet mappar nyckelfälten, läser den inlämnade PDF:en och lämnar innehållet till en AI-granskningsagent för att skapa en strukturerad utvärdering och anteckningar i linje med bedömningsmatrisen. Därefter expanderar det granskarlistan, bygger en korrekt formaterad granskningsmall och skickar granskningsförfrågningar via Gmail. När granskare svarar räknar flödet ut poäng, lägger till resultaten i Google Sheets och håller en livevy av vad som är klart, vad som väntar och vad som närmar sig deadline. När det är dags genererar det även en rapport och mejlar ut den, samtidigt som det postar statusuppdateringar till era meddelandeverktyg.
Flödet börjar med en inkommande inlämning, sedan hjälper AI till att standardisera matrisen och utvärderingsanteckningarna. Gmail sköter utskicken och påminnelserna, Google Sheets blir er “single source of truth” och aviseringar håller teamet uppdaterat utan extra möten.
Det du får: automation vs. resultat
| Vad det här flödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut i praktiken
Säg att du kör en kull med 25 inlämningar och varje behöver 2 peer reviewers. Manuellt kan tilldelning av granskare (cirka 2 minuter per styck), att skicka 50 mejl (kanske 1 minut styck) och att logga resultat tillbaka i Google Sheets (ytterligare 1–2 minuter per granskning) lätt landa på runt 3 timmar, plus påminnelsejakt senare. Med det här flödet: du tar emot inlämningen en gång via webhook, Gmail-förfrågningar går ut automatiskt och poängen hamnar i arket när de kommer in. Du lägger mest tid på undantag, inte administration.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- Gmail-konto för att skicka granskningsförfrågningar och påminnelser
- Google Sheets för att lagra poäng och granskningsstatus
- OpenAI- eller OpenRouter-API-nyckel (skapa den i din leverantörs dashboard)
Nivå: Medel. Du kopplar konton, klistrar in en API-nyckel och justerar ett par prompts och kalkylarkskolumner.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En inlämning triggar körningen. En inkommande webhook tar emot uppgiftsdetaljerna, sedan mappar n8n inlämningsfälten till en konsekvent struktur så att du slipper hantera stökiga indata.
PDF:en läses och sammanfattas för bedömning. Flödet läser inlämnings-PDF:en, sedan producerar en AI-agent strukturerad, matrisvänlig output som är enklare att poängsätta och enklare att granska i efterhand.
Kontakt med granskare sker automatiskt. Flödet expanderar din granskarlista, bygger en mejlmall för granskning, postar en avisering i era teamkanaler om du vill, och skickar granskningsförfrågan via Gmail.
Poäng räknas ut och lagras. När granskningar kommer in registrerar flödet resultaten, lägger till en rad i Google Sheets och kontrollerar vilka granskningar som fortfarande väntar så att påminnelser kan skickas när deadlines närmar sig.
Du kan enkelt modifiera rubric-prompten så att den matchar din bedömningsstil, eller byta vart aviseringar ska skickas (Teams, Discord, Slack) utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera webhook-triggern
Konfigurera inkommande inlämningar och schemabaserade kontroller för påminnelser om deadlines.
- Öppna Incoming Submission Webhook och ställ in Path till
engineering-peer-eval, HTTP Method tillPOSToch Response Mode tillresponseNode. - Öppna Scheduled Automation Trigger och ställ in schemaregeln så att den körs var
24:e timme (fält:hoursmedhoursInterval=24). - Behåll Manual Start Trigger för ad hoc-testning och omkörningar.
Steg 2: Anslut Google Sheets
Konfigurera lagring och hämtning av betygsdata för väntande granskningar.
- Öppna Retrieve Pending Reviews och ställ in Document ID till
[YOUR_ID]och Sheet Name tillPeer Evaluations. - I Retrieve Pending Reviews ställer ni in filtret till att status är lika med
Pending Peer Review. - Öppna Append Grading Sheet och ställ in Operation till
append, Document ID till[YOUR_ID]och Sheet Name tillPeer Evaluations. - Bekräfta kolumnmappningar i Append Grading Sheet, till exempel ai_score till
{{ $('Record Evaluation Results').item.json.total_score }}och technical_accuracy till{{ $('Record Evaluation Results').item.json.ai_evaluation.technical_accuracy }}. - Autentisering krävs: Anslut era
googleSheets-inloggningsuppgifter för både Retrieve Pending Reviews och Append Grading Sheet (inloggningsuppgifter är inte konfigurerade ännu).
Steg 3: Konfigurera inlämningsintag och PDF-tolkning
Mappa inkommande webhook-fält och extrahera PDF-innehåll för AI-granskning.
- I Map Submission Fields mappar ni varje fält från webhook-body: student_id till
{{ $json.body.student_id }}, assignment_file till{{ $json.body.assignment_file }}, course_code till{{ $json.body.course_code }}, assignment_title till{{ $json.body.assignment_title }}, peer_reviewers till{{ $json.body.peer_reviewers }}och deadline till{{ $json.body.deadline }}. - I Read Submission PDF ställer ni in Binary Property Name till
{{ $json.assignment_file }}så att PDF:en kan tolkas från den uppladdade filen.
Steg 4: Konfigurera AI-teknisk granskning
Konfigurera AI-agenten för att utvärdera inlämningar och tolka strukturerad output.
- Öppna AI Technical Review och behåll prompttexten som den är definierad, inklusive den inbäddade innehållsreferensen
{{ $json.data }}. - Säkerställ att OpenRouter Chat Engine är ansluten som språkmodell för AI Technical Review.
- Autentisering krävs: Anslut era
openRouterApi-inloggningsuppgifter i OpenRouter Chat Engine (redan konfigurerat i workflowet). - Bekräfta att Parse Structured Output är kopplad som output-parser för AI Technical Review. Lägg till inloggningsuppgifter (om det krävs) i den överordnade noden AI Technical Review, inte i parserns undernod.
Steg 5: Konfigurera utdata för granskningsuppgifter
Skapa utvärderingsposten, dela upp granskare och skicka aviseringar om tilldelning.
- I Record Evaluation Results ställer ni in ai_evaluation till
{{ $json.output }}, evaluation_date till{{ $now.toISO() }}och total_score till{{ $json.output.total_score }}. - I Expand Reviewer List ställer ni in Field To Split Out till
peer_reviewers. - I Build Review Template ställer ni in reviewer_email till
{{ $json.peer_reviewers }}och behåller hela malltexten som definierad för evaluation_template. - Record Evaluation Results skickar utdata till både Expand Reviewer List och Append Grading Sheet parallellt.
- Build Review Template skickar utdata till Post Teams Alert, Send Discord Alert och Dispatch Review Email parallellt.
- Autentisering krävs: Anslut era
microsoftTeams-inloggningsuppgifter för Post Teams Alert (inte konfigurerat ännu). - Autentisering krävs: Anslut era
discord-inloggningsuppgifter för Send Discord Alert (inte konfigurerat ännu). - Autentisering krävs: Anslut era
emailSend-inloggningsuppgifter för Dispatch Review Email och ställ in From Email till[YOUR_EMAIL].
peer_reviewers är en array.Steg 6: Konfigurera routning för deadlinepåminnelser
Skicka påminnelser när deadlines är inom 48 timmar och inte har passerat.
- I Filter Near Deadlines behåller ni villkoren för att kontrollera deadline-närhet:
{{ new Date($json.deadline).getTime() - Date.now() }}är mindre än172800000och större än0. - Retrieve Pending Reviews skickar utdata till Filter Near Deadlines för att isolera poster som behöver påminnelser.
- Filter Near Deadlines skickar utdata till Teams Deadline Reminder, Discord Deadline Reminder och Email Deadline Reminder parallellt.
- Autentisering krävs: Anslut era
microsoftTeams-inloggningsuppgifter för Teams Deadline Reminder (inte konfigurerat ännu). - Autentisering krävs: Anslut era
discord-inloggningsuppgifter för Discord Deadline Reminder (inte konfigurerat ännu). - Autentisering krävs: Anslut era
emailSend-inloggningsuppgifter för Email Deadline Reminder och ställ in From Email till[YOUR_EMAIL].
Steg 7: Konfigurera webhook-svar
Returnera en strukturerad bekräftelse till inlämningssystemet efter att aviseringar har skickats.
- I Return Webhook Reply ställer ni in Respond With till
jsonoch behåller svarsmallen för body som definierad. - Verifiera att svarsbodyn refererar till värden som
{{ $('Record Evaluation Results').item.json.student_id }}och{{ $('Expand Reviewer List').all().length }}. - Säkerställ att Dispatch Review Email ansluter till Return Webhook Reply så att svaret returneras efter att aviseringar har skickats.
Steg 8: Testa och aktivera ert workflow
Validera varje flödesväg och slå på automatiseringen när ni är redo.
- Klicka på Execute Workflow på Manual Start Trigger för att testa vägen för deadlinepåminnelser och bekräfta att påminnelsemeddelandena skickas.
- Skicka en test-POST-förfrågan till Incoming Submission Webhook med exempelfält och en PDF för att verifiera att Read Submission PDF och AI Technical Review genererar strukturerad output.
- Bekräfta lyckade körningar genom att kontrollera att en ny rad har skapats i arket
Peer Evaluationsfrån Append Grading Sheet och att aviseringar kommer från Post Teams Alert, Send Discord Alert och Dispatch Review Email. - När ni är nöjda, aktivera workflowet med reglaget Active för att slå på Scheduled Automation Trigger för produktionsanvändning.
Vanliga fallgropar
- Behörigheter i Google Sheets kan vara luriga. Om rader inte läggs till, kontrollera det anslutna Google-kontot, ID:t för målarket och om fliknamnet i arket har ändrats.
- Om du använder Wait-logik eller förlitar dig på externa AI-svar varierar bearbetningstiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- AI-prompter som levereras “som de är” blir ofta intetsägande. Lägg till ditt matris-språk, poängankare och ett par exempelsvar tidigt, annars kommer du fortsätta skriva om utvärderingar för hand.
Vanliga frågor
Cirka 45 minuter om ditt Gmail, Sheets och din API-nyckel är redo.
Nej. Du kopplar mest konton och redigerar några fält i klarspråk. Den enda “tekniska” delen är att kopiera in en API-nyckel i n8n.
Ja. n8n har ett gratis alternativ för egen hosting och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volymer. Du behöver också räkna in kostnader för OpenAI/OpenRouter API (ofta några cent per inlämning, beroende på PDF-längd).
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 kör n8n bra. Egen hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det är en vanlig justering. Du kan lägga till ett fält “Runda” i noden Map Submission Fields och sedan justera raderna i Google Sheets så att rundstatus spåras separat. De flesta team anpassar också prompten AI Technical Review för att generera en något annorlunda matris per runda (först utkastfeedback, sedan striktare bedömning). Om du vill ha andra påminnelseregler, ändra logiken Filter Near Deadlines så att den använder förfallodatum per runda.
Oftast beror det på behörigheter eller att kalkylarket har ändrats. Återanslut Google-kontot i n8n, bekräfta att kalkylarket och fliknamnet fortfarande matchar, och säkerställ att kontot kan redigera (inte bara visa). Om det bara fallerar ibland kan du slå i kvotgränser eller försöka skriva för många rader samtidigt.
Några hundra inlämningar per månad är realistiskt på enklare uppsättningar; egen hosting skalar längre om servern är rätt dimensionerad.
Ofta ja, eftersom det här flödet inte bara är “skicka ett mejl och lägg till en rad”. Du läser PDF:er, genererar strukturerad matris-output med en AI-agent, har grenlogik för påminnelser och spårar status över tid i Google Sheets. n8n är byggt för den typen av flöden, och egen hosting undviker prissättning per uppgift när volymerna ökar. Zapier eller Make kan fortfarande passa för väldigt små kullar och enkel routning, men så fort du behöver rikare logik ökar kostnader och komplexitet. Om du vill ha en snabb rekommendation för din exakta setup, prata med en automationsexpert.
När det här väl rullar slutar peer reviews att vara ett veckovis kaos och blir ett stabilt system. Flödet sköter de repetitiva uppföljningarna, och du får en dashboard du faktiskt kan lita på.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.