Handboken är ”nästan klar” tills någon upptäcker ett fel, en intressent vill göra en justering och plötsligt har du tre versioner som flyter runt i e-post, Docs och på någons skrivbord.
Den här OpenAI GitHub-automationen slår hårdast mot Ops-ansvariga och kunskapsansvariga, helt ärligt. Men byråägare som underhåller kundplaybooks känner också av det. Du får ett korrekt formaterat utkast, ett tydligt godkännandesteg via e-post och sedan en GitHub-uppdatering som faktiskt speglar det som godkändes.
Nedan ser du hur arbetsflödet körs, vad det automatiserar och de praktiska delarna i konfigurationen så att du kan sluta jaga ”final_v7_really_final.md”.
Så här fungerar automatiseringen
Hela n8n-arbetsflödet, från trigger till slutresultat:
n8n Workflow Template: Från openai till github: godkända handböcker
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n1["<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 Trigger"]
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/postgres.svg' width='40' height='40' /></div><br/>Check DB Connection"]
n3["<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/openAi.dark.svg' width='40' height='40' /></div><br/>Meta-Orchestrator"]
n4@{ icon: "mdi:code-braces", form: "rounded", label: "Parse Orchestration Plan", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "More Agents to Run?", pos: "b", h: 48 }
n6@{ icon: "mdi:code-braces", form: "rounded", label: "Prepare Agent Input", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route Agents with Switch", pos: "b", h: 48 }
n8["<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/openAi.dark.svg' width='40' height='40' /></div><br/>Summarizer Agent"]
n9["<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/openAi.dark.svg' width='40' height='40' /></div><br/>Synthesizer Agent"]
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/openAi.dark.svg' width='40' height='40' /></div><br/>Peer Reviewer Agent"]
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/openAi.dark.svg' width='40' height='40' /></div><br/>Sensemaking Agent"]
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/openAi.dark.svg' width='40' height='40' /></div><br/>Prompt Engineer Agent"]
n13["<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/openAi.dark.svg' width='40' height='40' /></div><br/>Onboarding/Explainer Agent"]
n14@{ icon: "mdi:code-braces", form: "rounded", label: "Add Handbook Metadata", pos: "b", h: 48 }
n15@{ icon: "mdi:code-braces", form: "rounded", label: "Generate Content for Review", pos: "b", h: 48 }
n16@{ icon: "mdi:code-braces", form: "rounded", label: "Generate Review ID", pos: "b", h: 48 }
n17@{ icon: "mdi:message-outline", form: "rounded", label: "Send Review Request Email", pos: "b", h: 48 }
n18@{ icon: "mdi:cog", form: "rounded", label: "Wait for Human Approval", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Human Decision Split", pos: "b", h: 48 }
n20["<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/postgres.svg' width='40' height='40' /></div><br/>Save to handbook_entries"]
n21@{ icon: "mdi:code-braces", form: "rounded", label: "Prepare Approved Contributio..", pos: "b", h: 48 }
n22["<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/postgres.svg' width='40' height='40' /></div><br/>Save Agent Contribution (App.."]
n23@{ icon: "mdi:code-braces", form: "rounded", label: "Generate GitHub File Path", pos: "b", h: 48 }
n24@{ icon: "mdi:swap-horizontal", form: "rounded", label: "GitHub Enabled?", pos: "b", h: 48 }
n25["<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/github.dark.svg' width='40' height='40' /></div><br/>Commit to GitHub (Approved)"]
n26@{ icon: "mdi:code-braces", form: "rounded", label: "Log Human Rejection", pos: "b", h: 48 }
n27["<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/merge.svg' width='40' height='40' /></div><br/>Merge Archivist Paths"]
n28@{ icon: "mdi:code-braces", form: "rounded", label: "Evaluate Board Consensus", pos: "b", h: 48 }
n29@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Redraft Needed", pos: "b", h: 48 }
n30@{ icon: "mdi:code-braces", form: "rounded", label: "Handle Redraft", pos: "b", h: 48 }
n31@{ icon: "mdi:code-braces", form: "rounded", label: "Process Agent Output", pos: "b", h: 48 }
n32@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Slack Enabled?", pos: "b", h: 48 }
n33["<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/>Notify Slack"]
n34["<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/>Final Response"]
n33 --> n34
n30 --> n5
n32 --> n33
n32 --> n34
n24 --> n25
n24 --> n27
n1 --> n2
n8 --> n31
n3 --> n4
n11 --> n12
n9 --> n31
n16 --> n17
n2 --> n3
n26 --> n27
n5 --> n6
n5 --> n32
n10 --> n11
n6 --> n7
n29 --> n30
n29 --> n31
n19 --> n20
n19 --> n26
n31 --> n5
n14 --> n15
n27 --> n31
n12 --> n28
n18 --> n19
n28 --> n29
n4 --> n5
n7 --> n8
n20 --> n21
n23 --> n24
n17 --> n18
n13 --> n31
n25 --> n27
n15 --> n16
n21 --> n22
n22 --> n23
end
subgraph sg1["Flow 2"]
direction LR
n0@{ icon: "mdi:cog", form: "rounded", label: "Start", pos: "b", h: 48 }
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,n7,n19,n24,n29,n32 decision
class n2,n20,n22 database
class n1,n34 api
class n4,n6,n14,n15,n16,n21,n23,n26,n28,n30,n31 code
classDef customIcon fill:none,stroke:none
class n1,n2,n3,n8,n9,n10,n11,n12,n13,n20,n22,n25,n27,n33,n34 customIcon
Problemet: uppdateringar av handboken blir snabbt röriga
Handböcker och intern dokumentation är inte svåra för att skrivandet är svårt. De är svåra för att samordningen är svår. Någon skapar ett utkast på ett ställe, feedback kommer in någon annanstans och den ”godkända” versionen är oftast en känsla, inte en fil. Sedan ska du publicera, och då gissar du vilka ändringar som faktiskt blev godkända. Med tiden skapar det en tyst skatt: dubbelt arbete, inkonsekvent policyspråk och riskabla ”nästan korrekta” instruktioner som nyanställda följer utan att ifrågasätta.
Ingen av de här sakerna är problemet var för sig. Tillsammans är de det.
- Granskningar sker i spridda trådar, så beslut fångas inte där innehållet faktiskt bor.
- Folk fortsätter redigera efter ”godkännande”, vilket skapar diskussioner senare om vad man kom överens om.
- Publicering till GitHub blir ett manuellt måsten, och det skjuts ofta upp till ”sen” i flera veckor.
- Utan en versionshistorik blir revisioner och onboarding till gissningslek och minnestest.
Lösningen: OpenAI skriver utkast, människor godkänner, GitHub hålls uppdaterat
Det här arbetsflödet gör skapandet av handboken till en repeterbar pipeline med tydligt ägarskap inbyggt. Det startar när du skickar en JSON-förfrågan till en n8n-webhook (titel, text, taggar och om du kräver mänskligt godkännande). Därifrån fungerar OpenAI som ett litet ”redaktionsteam” som kan sammanfatta, syntetisera, granska och förbättra utkastet tills det klarar kvalitetskontrollerna. När det är redo mejlar arbetsflödet en granskare med en korrekt formaterad begäran om godkännande och väntar sedan. Om granskaren godkänner sparas innehållet i en databas för spårbarhet och committas till ett GitHub-repo för versionshantering. Om de avslår loggar arbetsflödet även det utfallet, så att du kan se vad som hände och varför.
Arbetsflödet börjar vid webhooken och validerar din databasanslutning. Därefter avgör en meta-orkestrerare vilka specialistagenter som ska köras (sammanfattning, syntes, peer review, sensemaking, promptförbättringar, onboardinghjälp). Till sist avgör en e-postbaserad godkännandegrind vad som sparas och pushas till GitHub.
Det här får du: automatisering kontra resultat
| Det här automatiserar arbetsflödet | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut i praktiken
Säg att du uppdaterar 5 avsnitt i handboken varje vecka. Manuell hantering kan innebära cirka 30 minuter för att skriva varje avsnitt, ytterligare 20 minuter för att jaga feedback och sedan 10 minuter för att kopiera in sluttexten i GitHub, alltså ungefär 5 timmar totalt. Med det här arbetsflödet skickar du in förfrågan på en minut eller två, låter AI-granskningsloopen köra och sedan lägger en granskare cirka 20 minuter på att godkänna (eller avslå med kommentarer). GitHub uppdateras automatiskt efter godkännande, så du får tillbaka runt 2 till 3 timmar de flesta veckor, plus betydligt färre ”Vilken version är rätt?”-meddelanden.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
- OpenAI för att generera, granska och förbättra utkast
- GitHub för att lagra godkända handboksversioner
- PostgreSQL-uppgifter (skapa i n8n som ”Postgres Pyragogy DB”)
Kunskapsnivå: Medel. Du kopplar upp inloggningar, ställer in några miljövariabler och klistrar in en test-JSON-payload i en webhook.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis konsultation i 15 minuter).
Så fungerar det
En webhook-förfrågan startar allt. Du skickar JSON till /webhook/pyragogy/process med en handbokstitel, källtext, taggar och en valfri flagga för ”kräv mänsklig granskning”.
Arbetsflödet planerar utkast- och granskningssekvensen. En koordinatoragent (OpenAI) avgör vilka specialistagenter som ska köras, och sedan routar n8n innehållet genom sammanfattning, syntes, peer review och sensemaking baserat på den planen.
Nya utkast skapas automatiskt när kvalitetskontroller misslyckas. Om granskningspanelen flaggar ett större problem loopar arbetsflödet tillbaka med specifik feedback så att synthesizer-agenten kan skriva om, istället för att du manuellt ska ”försöka igen”.
Godkännande hanteras via e-post, och publicering sker automatiskt. n8n skickar ett granskningsmejl, väntar på beslutet via en webhook-callback, lagrar resultatet i Postgres och committar den godkända Markdown-filen till GitHub om GitHub är aktiverat.
Du kan enkelt ändra godkännandelogiken för att stödja flera granskare eller olika regler för ”godkänn/avslå” utifrån dina behov. Se den fullständiga implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera webhook-triggern
Sätt upp den inkommande webhooken så att externa system kan starta multi-agent-handboksflödet.
- Lägg till och öppna Inbound Webhook Trigger.
- Ställ in HTTP Method på
POST. - Ställ in Path på
pyragogy/process. - Kopiera produktions-webhook-URL:en för användning av ert uppströms system.
body.input-payload eftersom Interpret Orchestration Plan och Assemble Agent Input är beroende av den.Steg 2: Anslut databastjänster
Konfigurera PostgreSQL-anslutning för validering och lagring av handboksinnehåll och agentbidrag.
- Öppna Validate DB Link och ställ in Operation på
executeQuery. - Ställ in Query på
SELECT 1; -- Verifica connessione DB. - Öppna Store Handbook Entry och bekräfta att Table är
handbook_entriesmed Columns inställda påtitle, content, version, created_by, tags, phase, rhythm. - Öppna Record Agent Contribution och bekräfta att Table är
agent_contributionsmed Columns inställda påentry_id, agent_name, contribution_type, details. - Autentiseringsuppgifter krävs: Anslut era Postgres-autentiseringsuppgifter för Validate DB Link, Store Handbook Entry och Record Agent Contribution.
Steg 3: Sätt upp AI-orkestreringen och agentloopen
Konfigurera orkestreringshubben och agentloopen för att dynamiskt routa uppgifter över flera AI-agenter.
- Öppna Coordinator AI Hub och ställ in Resource på
chatmed Model inställd pågpt-4o. - Autentiseringsuppgifter krävs: Anslut era OpenAI-autentiseringsuppgifter för Coordinator AI Hub.
- Öppna Interpret Orchestration Plan och behåll den tillhandahållna Function Code för att tolka agentsekvensen och initiera loopräknare.
- Öppna More Agents Pending? och säkerställ att den booleska villkorssatsen använder
{{$workflow.currentAgentIndex < $workflow.agentSequence.length}}. - Öppna Assemble Agent Input och behåll logiken som sätter
agentInputfrån tidigare utdata eller omarbetningsfeedback. - Öppna Agent Routing Switch och ställ in Mode på
jsonför agentspecifik routing. - Anslut OpenAI-autentiseringsuppgifter för alla agentnoder: Summary Agent, Synthesis Agent, Peer Review Agent, Sensemaking Analyst, Prompt Design Agent och Onboarding Guide Agent. Var och en använder Resource
chatoch Modelgpt-4o.
Steg 4: Konfigurera logik för granskning, omarbetning och godkännande
Sätt upp granskningsflödet som sammanställer utkastet, skickar godkännandelänkar och hanterar omarbetningscykler.
- Öppna Attach Handbook Metadata och behåll standardvärdena för title, tags, phase och rhythm.
- Öppna Compose Review Draft för att behålla genereringen av YAML front matter och
finalMarkdownContent. - Öppna Create Review Identifier och behåll
crypto.randomUUID()för unika ID:n. - Öppna Dispatch Review Email och ställ in To Email på
[YOUR_EMAIL]och From Email på[YOUR_EMAIL]. - I Dispatch Review Email uppdaterar ni godkännande-URL:erna till er n8n-bas-URL:
your_n8n_url/webhook/pyragogy/review-feedback?reviewId={{ $json.reviewId }}&status=approvedochyour_n8n_url/webhook/pyragogy/review-feedback?reviewId={{ $json.reviewId }}&status=rejected. - Autentiseringsuppgifter krävs: Anslut era SMTP/EmailSend-autentiseringsuppgifter för Dispatch Review Email.
- Öppna Await Human Approval för att pausa arbetsflödet och invänta webhook-svaret för godkännande.
- Öppna Human Decision Branch och säkerställ att villkoret använder
{{$json.query.status === 'approved'}}. - Öppna Evaluate Review Board och behåll logiken som sätter
redraftNeededochredraftFeedback. - Öppna Redraft Required? och bekräfta att den använder
{{$json.redraftNeeded && $workflow.redraftLoopCount < 2}}för att begränsa loopar. - Öppna Process Redraft Cycle för att säkerställa att feedback läggs till i
redraftInputinför nästa agentpass.
Steg 5: Konfigurera utdata-destinationer (databas, GitHub, Slack, webhook-svar)
Slutför det godkända innehållet genom att lagra det, valfritt committa till GitHub, notifiera Slack och returnera ett svar till den som begärde det.
- Öppna Store Handbook Entry för att spara godkänt innehåll i er databas.
- Öppna Prepare Approved Contribution för att säkerställa att bidragsmetadata är satt för Record Agent Contribution.
- Öppna Build GitHub File Path och behåll sökvägsformatet med slug och tidsstämpel.
- Öppna GitHub Active? och bekräfta att den kontrollerar
{{$env.GITHUB_ACCESS_TOKEN}}. - Öppna Commit Approved to GitHub och ställ in Owner på
{{$env.GITHUB_REPOSITORY_OWNER}}, Repository på{{$env.GITHUB_REPOSITORY_NAME}}och File Path på{{$json.githubFilePath}}. - Autentiseringsuppgifter krävs: Anslut era GitHub-autentiseringsuppgifter för Commit Approved to GitHub.
- Öppna Slack Notifications On? och säkerställ att den kontrollerar
{{$env.SLACK_WEBHOOK_URL}}. - Öppna Send Slack Update och verifiera att meddelandet använder
{{$json.body.input}},{{JSON.stringify($json.output)}}och{{$workflow.agentSequence.join(', ')}}. - Autentiseringsuppgifter krävs: Anslut era Slack-autentiseringsuppgifter för Send Slack Update.
- Öppna Return Final Response och bekräfta att Respond With är
jsonoch att Response Body är{{ { finalOutput: $json.output, contributions: $json.contributions, agentSequence: $workflow.agentSequence } }}.
Steg 6: Testa och aktivera ert arbetsflöde
Kör ett end-to-end-test för att verifiera agentorkestrering, godkännandeflöde, lagring och notifieringar.
- Klicka på Execute Workflow och skicka en test-POST-begäran till Inbound Webhook Trigger med en JSON-body som innehåller
body.input,body.titleochbody.tags. - Bekräfta att agentloopen körs och att Dispatch Review Email skickar godkännandemejlet.
- Klicka på godkännandelänken för att trigga Await Human Approval, och verifiera sedan att Store Handbook Entry och Record Agent Contribution skapar poster.
- Om GitHub är aktiverat, verifiera att Commit Approved to GitHub skapar eller uppdaterar filen på
{{$json.githubFilePath}}. - Kontrollera Slack för meddelandet från Send Slack Update och verifiera att Return Final Response returnerar JSON med
finalOutput,contributionsochagentSequence. - När allt är verifierat, slå på arbetsflödets Active-reglage för produktion.
Vanliga fallgropar
- GitHub-inloggningar kan löpa ut eller kräva specifika behörigheter. Om det skapar fel, kontrollera först scope för din personal access token och miljövariablerna för repo-ägare/namn.
- Om du använder Wait-noder eller extern bearbetning varierar tajmingen. Öka väntetiden om efterföljande noder misslyckas för att godkännande-webhooken kom in för sent.
- Standardprompter i OpenAI-agenterna är generiska. Lägg in din ton, formateringsregler och riktlinjer för ”det här ska du inte göra” tidigt, annars kommer du redigera utdata för alltid.
Vanliga frågor
Cirka 45 minuter om du redan har uppgifterna redo.
Ingen kodning krävs. Du kopplar mest konton, klistrar in miljövariabler och testar webhook-payloaden.
Ja. n8n har ett gratis alternativ för egen drift och en gratis provperiod på n8n Cloud. Molnplaner börjar på 20 USD/månad för högre volymer. Du behöver också räkna in kostnader för OpenAI API, vilket för handboksutkast i textformat vanligtvis är några dollar i månaden för små team.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen drift på en VPS. För egen drift är Hostinger VPS prisvärt och hanterar n8n bra. Egen drift ger obegränsade körningar men kräver grundläggande serverhantering.
Ja, men du behöver justera godkännandegrinden. Det enklaste är att ändra webhook-callbacken ”Await Human Approval” så att den accepterar svar från fler än en granskare, och sedan uppdatera logiken i ”Human Decision Branch” så att den kräver alla godkännanden (eller en majoritet). Vanliga anpassningar är att lägga till en godkännandelista från Google Sheets, routa baserat på taggar och skriva till olika GitHub-sökvägar för olika avdelningar.
Oftast beror det på en utgången token eller saknade repo-behörigheter. Skapa en ny GitHub access token, bekräfta att den kan skriva till målrepo:t och kontrollera sedan miljövariablerna för repo-ägare/namn igen, eftersom ett enda skrivfel stoppar commits. Om det bara misslyckas ibland kan du också slå i API-begränsningar när många objekt körs samtidigt.
Många, och den verkliga begränsningen är dina exekveringsgränser i n8n och din server. På n8n Cloud begränsas du av din månatliga exekveringspott (Starter räcker för små team, Pro hanterar tyngre användning). Om du kör egen drift finns ingen plattformsgräns för exekveringar, men du blir ändå begränsad av CPU och minne när flera AI-anrop sker parallellt. I praktiken kör de flesta team några handboksuppdateringar per dag utan att ens tänka på skala.
För just det här arbetsflödet har n8n några fördelar: det hanterar förgreningar och loopar snyggt (vilket du behöver för nya utkast och granskningsgrindar), det kan köras i egen drift för obegränsade körningar och det är enklare att hålla godkännandelogiken samlad på ett ställe istället för att sprida den över flera zaps. Zapier eller Make kan fortfarande fungera om du bara vill ha ”utkast → e-post → uppladdning”, men då tappar du sannolikt den iterativa granskningsloopen och databasloggningen om du inte bygger på med extra steg. Om din handbok ens är lite compliance-känslig spelar den explicita modellen ”vänta på godkännande” roll. Prata med en automationsexpert om du är osäker på vad som passar.
När det här väl är igång slutar handboksuppdateringar att vara ett samordningsprojekt. Du får ett utkast, ett godkännandespår och en GitHub-commit som matchar det som godkändes.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.