Du justerar ett Typebot-flöde, trycker på spara och inser senare att du skrev över den ”bra” versionen. Eller så raderar någon en bot från arbetsytan och du märker det först när supporten hör av sig. Det är precis därför automation för Typebot GitHub backup spelar roll.
Marketing ops-team känner det direkt när live-trattar går sönder. En grundare känner det när en migrering blir rörig. Och en byrå som kör flera kundbots? Ärligt talat är det en konstant låggradig oro att förlora arbete.
Det här n8n-flödet exporterar varje Typebot, versionshanterar den i GitHub och håller repo:t synkat. Du får se hur det fungerar, vad du behöver och var team oftast går på minor.
Så fungerar automationen
Hela n8n-flödet, från trigger till slutresultat:
n8n Workflow Template: Typebot till GitHub: versionshanterade backuper
flowchart LR
subgraph sg0["Execute Workflow Flow"]
direction LR
n1@{ icon: "mdi:play-circle", form: "rounded", label: "Execute Workflow Trigger", 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/>Get Typebot"]
n6@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields", 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/github.dark.svg' width='40' height='40' /></div><br/>Get file data"]
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/github.dark.svg' width='40' height='40' /></div><br/>Create new file"]
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/github.dark.svg' width='40' height='40' /></div><br/>Edit existing file"]
n14@{ icon: "mdi:swap-vertical", form: "rounded", label: "Return", pos: "b", h: 48 }
n15["<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/>Delete a file"]
n16@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", 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/code.svg' width='40' height='40' /></div><br/>isDeleted"]
n18["<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/>isDiffOrNew"]
n19@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Status", pos: "b", h: 48 }
n20@{ icon: "mdi:cog", form: "rounded", label: "File is different", pos: "b", h: 48 }
n21@{ icon: "mdi:cog", form: "rounded", label: "File is new", pos: "b", h: 48 }
n22@{ icon: "mdi:cog", form: "rounded", label: "File is same", pos: "b", h: 48 }
n23["<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"]
n24@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch", pos: "b", h: 48 }
n16 --> n15
n16 --> n14
n23 --> n18
n24 --> n4
n24 --> n17
n17 --> n16
n6 --> n23
n21 --> n12
n4 --> n11
n4 --> n6
n18 --> n19
n19 --> n21
n19 --> n20
n19 --> n22
n22 --> n14
n15 --> n14
n11 --> n23
n12 --> n14
n20 --> n13
n13 --> n14
n1 --> n24
end
subgraph sg1["On clicking 'execute' Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "On clicking 'execute'", 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/httprequest.dark.svg' width='40' height='40' /></div><br/>List Typebots"]
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "typebot", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Globals", pos: "b", h: 48 }
n8@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "github", 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/github.dark.svg' width='40' height='40' /></div><br/>List files"]
n25@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n26@{ icon: "mdi:cog", form: "rounded", label: "Execute Workflow", pos: "b", h: 48 }
n9 --> n25
n7 --> n2
n3 --> n25
n5 --> n3
n10 --> n9
n2 --> n10
n2 --> n5
n25 --> n26
n26 --> n25
n8 --> n7
n0 --> n7
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 n1,n0,n8 trigger
class n16,n19,n24 decision
class n4,n2 api
class n17,n18 code
classDef customIcon fill:none,stroke:none
class n4,n11,n12,n13,n15,n17,n18,n23,n2,n10 customIcon
Problemet: ändringar i Typebot är inte ”undo-vänliga”
Typebot gör det enkelt att snabbt leverera nya flöden. Det är den bra delen. Den jobbiga delen är vad som händer efter några veckor av ständiga ändringar, snabba experiment och ”små” fixar som görs på lanseringsdagen. Plötsligt vet du inte vilken version som körs, vad som ändrades förra tisdagen eller hur du återställer en bot som blev raderad. Även om du litar på teamet har du fortfarande mänskliga misstag, stressade uppdateringar och ibland ihopblandade credentials eller arbetsytor. Kostnaden är inte bara tid. Det är driftstopp, förlorade leads och obekväma samtal.
Friktionen växer. Här är var det brukar fallera.
- Du tar slumpmässiga manuella exporter ”för säkerhets skull”, och de är aldrig de senaste när du behöver dem.
- När ett flöde redigeras finns ingen tydlig versionshistorik som du kan granska som riktig källkodskontroll.
- En raderad bot kan försvinna i det tysta tills någon upptäcker en trasig länk eller en embed som saknas.
- Migreringsprojekt blir riskabla eftersom du inte säkert kan återskapa arbetsytans tillstånd från en känd snapshot.
Lösningen: exportera Typebots och håll GitHub synkat
Det här flödet säkerhetskopierar dina Typebot-flöden till GitHub automatiskt. Det börjar med att anropa Typebot-API:t för att exportera hela listan av typebots i din arbetsyta och hämtar sedan den detaljerade datan för varje bot. n8n loopar igenom botarna en och en, kontrollerar ditt GitHub-repo för att se om en fil redan finns för den boten och bestämmer sedan nästa steg. Om innehållet är nytt skapar det en fil. Om innehållet har ändrats uppdaterar det den befintliga filen. Om inget har ändrats lämnar det repo:t i fred (så att du slipper commit-brus). Det upptäcker också flöden som har raderats i Typebot och tar bort motsvarande filer från GitHub, vilket håller din backup prydlig och aktuell.
Flödet startar enligt schema (eller manuellt när du vill). Det exporterar, jämför och routar sedan varje bot genom ett beslut ”ny / ändrad / identisk”. Till sist skriver det rätt resultat till GitHub och loggar vad som hände.
Det du får: automation kontra resultat
| Det här flödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du hanterar 20 Typebot-flöden över ett par trattar. En ”säker” manuell backup innebär ofta att exportera varje flöde, namnge filer och ladda upp dem någonstans, kanske 5 minuter per flöde. Det blir runt 2 timmar varje gång du vill känna dig trygg inför en lansering. Med det här flödet låter du schemat köra, det loopar igenom alla bots automatiskt och GitHub får bara nya eller ändrade filer. I praktiken sjunker din tidsåtgång till en snabb koll på det senaste commit-meddelandet.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Self-hosting-alternativ om du föredrar det (Hostinger fungerar bra)
- Typebot-åtkomst till arbetsytan för att exportera flöden
- GitHub-repo för att lagra versionshanterade backuper
- Typebot API-token (hämta den i inställningarna för ditt Typebot-konto)
Kunskapsnivå: Medel. Du kopplar credentials och justerar ett par inställningar för repo/arbetsyta, men du bygger ingen app.
Vill du slippa sätta upp det själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Ett schema (eller manuell körning) startar backupen. Flödet kan köras på en tidsstyrd trigger för hands-off-backuper och stöder även manuella körningar när du behöver ”gör det nu”.
Typebot-exporter samlas in och normaliseras. n8n hämtar Typebot-listan, expanderar datan till individuella poster och hämtar den detaljerade flödesexporten för varje bot så att varje backupfil blir konsekvent.
GitHub kontrolleras innan något skrivs. Flödet hämtar repo-filer, läser innehåll när en matchande fil finns och jämför ”befintligt vs. aktuellt” så att bara verkliga ändringar skapar commits.
Filer skapas, uppdateras, hoppas över eller tas bort. Nya bots blir nya filer, redigerade bots uppdateras på plats, identiska bots ignoreras och raderade bots får sina repo-filer borttagna för att allt ska fortsätta ligga i linje.
Du kan enkelt ändra reglerna för repo-namngivning så att de matchar din mappstruktur och teamets konventioner. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera den manuella triggern
Konfigurera hur arbetsflödet startar, inklusive manuella körningar, schemalagda körningar och körningar från andra arbetsflöden.
- Öppna Manual Start Trigger för att aktivera testning vid behov från editorn.
- Öppna Timed Schedule Trigger och ställ in körtiden till
7under regeln för timschema. - Öppna Workflow Run Trigger och låt Input Source vara satt till
passthroughför indata till underarbetsflöden. - Säkerställ att alla tre triggers är kopplade till Global Settings eller Route by Origin enligt det som visas i canvasen.
Steg 2: Anslut Typebot API
Definiera konfigurationen för Typebot-workspace och hämta listan över bots för bearbetning.
- I Global Settings, ställ in typebot.url till
https://typebot.io. - I Global Settings, ersätt typebot.workspace.id med värdet för ert workspace-ID i stället för
[YOUR_ID]. - Öppna Retrieve Typebot List och bekräfta att URL är
={{ $json.typebot.url }}/api/v1/typebots. - I Retrieve Typebot List, ställ in query-parametern workspaceId till
={{ $json.typebot.workspace.id }}. - Öppna Fetch Typebot Detail och bekräfta att URL är
={{ $('Route by Origin').item.json.typebot.url }}/api/v1/typebots/{{ $json.id }}.
Behörighet krävs: Anslut era httpBearerAuth-inloggningsuppgifter i Retrieve Typebot List och Fetch Typebot Detail.
⚠️ Vanlig fallgrop: Om ni lämnar [YOUR_ID] i Global Settings kommer API-anropen mot Typebot att misslyckas.
Steg 3: Anslut GitHub för backup av repository
Konfigurera GitHub-noderna som används för att lista, läsa, skapa, redigera och ta bort filer i backup-repot.
- I Global Settings, ersätt repo.owner och repo.name med era GitHub-ägare- och repository-värden i stället för
[YOUR_ID]. - Öppna Retrieve Repo Files och bekräfta att Resource är
file, Operation ärlistoch Authentication äroAuth2. - Öppna Fetch File Content och ställ in File Path till
={{ $('Route by Origin').item.json.id }}.json. - Öppna Generate New File och ställ in File Path till
={{$('Route by Origin').first().json.id}}.jsonoch File Content till={{$('Evaluate Diff Or New').item.json["typebot_data_stringy"]}}. - Öppna Modify Existing File och ställ in Operation till
editmed samma File Content-uttryck som i Generate New File. - Öppna Remove Repo File och ställ in File Path till
={{$('Route by Origin').first().json.name}}.
Behörighet krävs: Anslut era githubOAuth2Api-inloggningsuppgifter i Retrieve Repo Files, Fetch File Content, Generate New File, Modify Existing File och Remove Repo File.
Steg 4: Sätt upp datamappning och parallell hämtning
Normalisera data från Typebot och GitHub och hantera parallella hämtningar av bot-poster och filinnehåll.
- I Map Typebot Settings, låt Include Other Fields vara aktiverad och bekräfta att origin är satt till
typebot. - I Map Repo Settings, låt Include Other Fields vara aktiverad och bekräfta att origin är satt till
github. - Öppna Expand Bot Records och ställ in Field To Split Out till
typebots. - Öppna Map Bot Payload och ställ in JSON Output till
={{ $json.typebot }}.
Retrieve Typebot List skickar output parallellt till både Retrieve Repo Files och Expand Bot Records.
Fetch Typebot Detail skickar output parallellt till både Fetch File Content och Map Bot Payload.
Steg 5: Konfigurera diff-logik, routning och borttagningar
Jämför Typebot-data med befintliga GitHub-filer, routa baserat på status och hantera borttagningar.
- Granska Evaluate Diff Or New för att säkerställa att den jämför avkodat GitHub-innehåll med Typebot-payloaden och sätter
github_statustillnew,differentellersame. - Öppna Route by Status och behåll de tre reglerna som kontrollerar
={{$json.github_status}}förnew,differentochsame. - Bekräfta att Flag New File, Flag Different File och Flag Identical File är kopplade till Generate New File, Modify Existing File respektive Finalize Result.
- I Detect Deleted Bot, behåll koden som sätter
isDeletednär en repo-fil inte har något matchande Typebot-ID. - I Conditional Deletion Check, säkerställ att den booleska villkorskontrollen är
={{ $json.isDeleted }}för att trigga Remove Repo File vid behov.
Tips: Om ni vill behålla överblivna backup-filer, inaktivera kopplingen från Conditional Deletion Check till Remove Repo File.
Steg 6: Konfigurera iteration och körning av underarbetsflöde
Loopa igenom Typebot-poster och skicka vid behov varje post vidare till ett underarbetsflöde.
- Öppna Iterate Records och låt Reset vara satt till
={{ $node["Iterate Records"].context["done"] }}för korrekt batchning. - Öppna Run Sub-Workflow (Configure Required) och välj ett målflöde i Workflow ID om ni vill utöka bearbetningen.
- Låt Mode vara satt till
eachså att varje post bearbetas individuellt.
⚠️ Vanlig fallgrop: Om Run Sub-Workflow (Configure Required) saknar Workflow ID kommer loopen fortfarande att köras, men inget underarbetsflöde kommer att exekveras.
Steg 7: Konfigurera slutförande av output
Säkerställ att alla vägar landar i en färdig output så att körningen avslutas korrekt.
- Öppna Finalize Result och låt Done vara satt till
trueför att markera slutförande. - Bekräfta att Generate New File, Modify Existing File, Remove Repo File och Flag Identical File alla är kopplade till Finalize Result.
Steg 8: Testa och aktivera ert arbetsflöde
Verifiera arbetsflödet end-to-end och aktivera schemalagda backuper.
- Klicka på Execute Workflow i Manual Start Trigger för att köra ett test.
- Verifiera att Typebot-data hämtas och att GitHub-filåtgärderna matchar
github_status-värdena som skapas av Evaluate Diff Or New. - Bekräfta förväntade utfall: nya bots skapar filer via Generate New File, ändrade bots uppdaterar via Modify Existing File och borttagna bots tar bort filer via Remove Repo File.
- När allt är verifierat, aktivera arbetsflödet så att Timed Schedule Trigger kör backuper automatiskt.
Vanliga fallgropar
- GitHub-credentials kan löpa ut eller behöva specifika behörigheter. Om det slutar fungera: kontrollera först token-scopes och testutdata för credentials i n8n.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om noder längre fram fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du att redigera utdata i all evighet.
Vanliga frågor
Cirka 30 minuter om din Typebot-token och ditt GitHub-repo är redo.
Nej. Du lägger främst till credentials, väljer ett repo och bekräftar hur filerna ska namnges.
Ja. n8n har ett gratis self-hosted-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 Typebot-hostingkostnader (om du har en betald plan) och normal GitHub-användning (oftast gratis för det här användningsfallet).
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och hanterar n8n bra. Self-hosting ger dig obegränsat antal körningar men kräver grundläggande serveradministration.
Ja, men du behöver först bestämma hur flödet ska namnge och placera filer. De flesta team justerar mappningen i repo-inställningarna så att varje bot skriver till en specifik katalog och behåller sedan beteendet för ”jämför och uppdatera” exakt likadant. Du kan också ändra vilken identifierare som används för matchning (till exempel bot-ID vs. credential-/workspace-ID) så att backuper inte krockar mellan miljöer.
Oftast är det en utgången token eller saknade scopes. Skapa en ny GitHub-token med repo-åtkomst, uppdatera credential i n8n och kör flödet igen. Om det fortfarande misslyckas: kontrollera att repo-ägare/namn i dina repo-inställningar matchar exakt, inklusive versaler/gemener. Rate limits kan också dyka upp när du backar upp många bots samtidigt, så att glesa ut körningar (eller minska frekvensen) hjälper.
Hundratals, i praktiken. På n8n Cloud är din gräns framför allt antal körningar per månad enligt din plan. Om du self-hostar finns ingen körningsgräns, så då handlar det om din server och tiden det tar att loopa igenom exporterna.
För det här flödet är n8n oftast en bättre match eftersom du gör mycket mer än att ”skicka A till B”. Du behöver loopar, filjämförelser, förgreningar (ny vs. ändrad vs. identisk) och en städrutin för raderade flöden. Zapier och Make kan lösa delar av det, men det blir pilligt och dyrt när du lägger på logiken. n8n ger dig också möjligheten att self-hosta, vilket är perfekt när backuper ska kunna köras så ofta du vill. Om du bara behöver en enkel ”exportera en gång i veckan och ladda upp” kan de verktygen absolut fungera. Prata med en automationsexpert om du vill ha det mest robusta upplägget för din miljö.
En backup du måste komma ihåg att köra är egentligen ingen backup. Sätt upp det här en gång, så håller sig dina Typebot-flöden versionshanterade, sökbara och återställningsbara i GitHub.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.