Du publicerar en banner, ett formulär eller en e-postmall … och sedan börjar den åldras i samma sekund som den går live. En månad senare ligger den fortfarande kvar och marknadsför tyst förra säsongens erbjudande, länkar till en avvecklad sida eller visar fel datum.
Den här GitHub Gmail-automationen slår först mot marknadschefer eftersom de äger kampanjerna. Men byråägare som underhåller kundmallar känner också av det, och det gör även operatörer som bara vill ha färre ”kan du uppdatera det här överallt?”-förfrågningar.
Det här arbetsflödet gör dina ”frysta” tillgångar till stabila länkar som alltid visar den senaste bilden och skickar besökare till rätt sida. Du får se hur det fungerar, vad du behöver och var de verkliga tidsvinsterna finns.
Så här fungerar automationen
Hela n8n-flödet, från trigger till slutresultat:
n8n Workflow Template: GitHub + Gmail: håll länkar och banners aktuella
flowchart LR
subgraph sg0["Manual Start Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Start Trigger", 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/github.dark.svg' width='40' height='40' /></div><br/>Retrieve Repo File"]
n9@{ icon: "mdi:message-outline", form: "rounded", label: "Dispatch Email Notice", pos: "b", h: 48 }
n8 --> n9
n0 --> n8
end
subgraph sg1["Hourly Schedule Flow"]
direction LR
n4@{ icon: "mdi:play-circle", form: "rounded", label: "Hourly Schedule Trigger", pos: "b", h: 48 }
n5@{ icon: "mdi:cog", form: "rounded", label: "Generate Dynamic Image", pos: "b", h: 48 }
n6["<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/>Update Repository File"]
n5 --> n6
n4 --> n5
end
subgraph sg2["Daily Schedule 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/httprequest.dark.svg' width='40' height='40' /></div><br/>Modify Redirect Target"]
n3@{ icon: "mdi:play-circle", form: "rounded", label: "Daily Schedule Trigger", pos: "b", h: 48 }
n3 --> n2
end
subgraph sg3["Flow 4"]
direction LR
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/>Utility: Create Repo File"]
end
subgraph sg4["Utility: Form with Live Image Flow"]
direction LR
n7["<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/form.svg' width='40' height='40' /></div><br/>Utility: Form with Live Image"]
end
subgraph sg5["Flow 6"]
direction LR
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/>Utility: Fetch Download Link"]
end
subgraph sg6["Flow 7"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Utility: Generate Redirect A.."]
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,n4,n3,n7 trigger
class n2,n1 api
classDef customIcon fill:none,stroke:none
class n8,n6,n2,n10,n7,n11,n1 customIcon
Problemet: evergreen-tillgångar som tyst blir inaktuella
Evergreen-tillgångar låter bra tills du inser att de bara är evergreen om någon håller dem uppdaterade. I verkligheten bäddas banners in på fem ställen, e-postsignaturer kopieras till dussintals inkorgar och ”engångsformulär” lever vidare i flera år. Sedan kör du en ny kampanj, ändrar en landningssida eller uppdaterar ditt varumärke, och plötsligt fastnar du i att jaga gamla inbäddningar över sajter, e-post och mallar. Missar du ett ställe är det just det stället folk klickar på. Ärligt talat är det inte jobbet som gör mest ont. Det är känslan av att du aldrig kommer hitta varenda instans.
Friktionen växer snabbt. Här brukar det fallera.
- Du uppdaterar samma bannerbild i flera verktyg, och det är lätt att råka publicera versioner som inte matchar.
- Gamla länkar fortsätter cirkulera, vilket gör att trafiken landar på inaktuella erbjudanden eller döda sidor.
- Team slutar använda ”evergreen”-placeringar eftersom de är rädda för att behöva städa upp i efterhand.
- Ingen får en notifiering när en inaktuell tillgång fortfarande används, så problemen kan ligga kvar i månader.
Lösningen: centraliserade omdirigeringar + bilder som uppdateras automatiskt
Det här arbetsflödet ger dig en enda kontrollpanel för tillgångar som är utspridda överallt. Enligt schema genererar n8n en ny bild (tänk ”aktuellt kampanjbanner” eller ”månadens erbjudande”), pushar in den bilden i en fil i ett GitHub-repo och behåller samma stabila fillänk så att dina inbäddningar inte behöver ändras. Parallellt uppdaterar det också ett omdirigeringsmål via en HTTP-förfrågan, vilket gör att en kortlänk alltid kan peka på den senaste landningssidan utan att du behöver byta URL:er i gamla mejl. När något ändras eller behöver granskas kan Gmail skicka dig en enkel notis baserat på vad arbetsflödet hämtar från GitHub. Du sätter de stabila länkarna en gång och uppdaterar centralt framöver.
Arbetsflödet kan triggas manuellt när du vill ha en omedelbar uppdatering, och det kan köras varje timme för bilder och dagligen för omdirigeringsmål. Innehållet förblir ”evergreen” eftersom URL:en är stabil, medan det den levererar hålls aktuellt.
Det du får: automation vs. resultat
| Det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du har 12 evergreen-placeringar: en webbplatsbanner, en footer-kampanj i två e-postmallar, tre gamla nyhetsbrev som fortfarande vidarebefordras och ett par formulär som folk fortsätter hitta. Att uppdatera detta manuellt tar ofta runt 10 minuter per placering när du väl hittar källan, så du förlorar cirka 2 timmar varje gång erbjudandet ändras. Med det här arbetsflödet uppdaterar du ett omdirigeringsmål och låter den timvisa bilduppdateringen rulla. Ditt ”arbete” blir en snabb avstämning plus en Gmail-notis när det är uppdaterat, och resten sker i bakgrunden.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- GitHub för att lagra den ”live”-bildfilen.
- Gmail för att skicka notiser när tillgångar uppdateras.
- API-nyckel till shorten.rest (hämta den i din shorten.rest-dashboard)
Kunskapsnivå: Medel. Du kopplar konton, klistrar in en API-nyckel och justerar filsökvägar och scheman.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Schemalagd uppdatering (varje timme eller dagligen). En schematrigger körs varje timme för att uppdatera bilden, och en annan körs dagligen för att uppdatera omdirigeringsmålet så att det alltid pekar på den senaste sidan.
Bildgenerering och formatering. n8n skapar en ny bannerbild med steget Edit Image och sätter sedan de fält som behövs (som filnamn och sökvägar) så att nästa steg blir konsekventa.
GitHub blir din ”stabila inbäddning”. Arbetsflödet uppdaterar en enda fil i ditt repo. Det är tricket. Din webbplats, dina formulär och dina mallar kan bädda in samma fil-URL för alltid.
Insyn via Gmail. När arbetsflödet hämtar den aktuella repofilen (manuellt eller vid en kontroll) kan det mejla dig en uppdatering så att du vet att bytet skedde och vad som ligger live just nu.
Du kan enkelt byta ut shorten.rest mot ett annat omdirigeringsverktyg utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera den manuella triggern
Konfigurera den manuella triggern som används för att testa att skicka den senaste dynamiska bildlänken via e-post.
- Lägg till noden Manual Start Trigger som startpunkt för manuella tester.
- Anslut Manual Start Trigger till Retrieve Repo File för att följa körflödet: Manual Start Trigger → Retrieve Repo File → Dispatch Email Notice.
Steg 2: Konfigurera schematriggrarna
Konfigurera de schemalagda triggrarna som uppdaterar omdirigeringen och genererar bilder automatiskt.
- Öppna Daily Schedule Trigger och ställ in regeln så att den triggar vid minut
8med den befintliga intervallkonfigurationen. - Anslut Daily Schedule Trigger till Modify Redirect Target för att följa körflödet: Daily Schedule Trigger → Modify Redirect Target.
- Öppna Hourly Schedule Trigger och ställ in regeln så att den triggar varje timme vid minut
1med den befintliga intervallkonfigurationen. - Anslut Hourly Schedule Trigger till Generate Dynamic Image för att följa körflödet: Hourly Schedule Trigger → Generate Dynamic Image → Update Repository File.
Steg 3: Anslut GitHub för fillagring
Konfigurera GitHub-noderna som skapar, hämtar och uppdaterar den dynamiska bildfilen.
- I Update Repository File, ställ in File Path till
=n8n-examples/dynamic-images/{{ $binary.data.fileName }}.{{ $binary.data.fileExtension }}och aktivera Binary Data. - Ställ in Commit Message till
=dynamic_img_updatei Update Repository File. - I Retrieve Repo File, ställ in File Path till
=n8n-examples/dynamic-images/dynamic_img.pngoch behåll Operation somget. - I Utility: Create Repo File, ställ in File Path till
=n8n-examples/dynamic-images/dynamic_img.pngoch Commit Message tillinitial creation. - I Utility: Fetch Download Link, ställ in File Path till
=n8n-examples/dynamic-images/dynamic_img.pngmed Operation inställd påget. - Credential Required: Anslut era githubOAuth2Api-credentials i Update Repository File, Retrieve Repo File, Utility: Create Repo File och Utility: Fetch Download Link.
[YOUR_ID] ersätts med ert GitHub-användarnamn och repository i alla GitHub-noder innan ni testar.Steg 4: Sätt upp bildgenerering och omdirigeringslogik
Konfigurera den dynamiska bildskapningen och uppdateringarna av omdirigeringsaliaset.
- I Generate Dynamic Image, behåll Operation inställd på
multiStepoch bekräfta att första steget skapar en640×480-bild. - Verifiera att textoperationerna i Generate Dynamic Image använder uttryck som
={{ $now.setLocale('en').toLocaleString(DateTime.DATE_MED) }}och={{ $now.toFormat('HH:mm') }}för att rendera datum och tid. - I Modify Redirect Target, ställ in URL till
https://api.shorten.rest/aliases, Method tillPUT, och behåll JSON-body-uttrycket={"destinations":[{"url":"https://en.wikipedia.org/wiki/{{ $now.format('DDD').split(',')[0].replaceAll(' ','_') }}"}]}. - I Utility: Generate Redirect Alias, ställ in URL till
https://api.shorten.rest/aliases, Method tillPOST, och behåll samma JSON-body-uttryck för destinations. - I både Modify Redirect Target och Utility: Generate Redirect Alias, ställ in query parameters domainName till
short.fyioch aliasName tilltoday-in-history. - Credential Required: Anslut era httpHeaderAuth-credentials i Modify Redirect Target och Utility: Generate Redirect Alias.
Steg 5: Konfigurera e-post och formulärutdata
Slutför utdataåtgärderna som skickar den dynamiska bilden via e-post och visar den i ett formulär.
- I Dispatch Email Notice, ställ in Send To till
[YOUR_EMAIL], Subject tillTest Image, och Message till=.Dynamic image
- Credential Required: Anslut era gmailOAuth2-credentials i Dispatch Email Notice.
- I Utility: Form with Live Image, verifiera att Form Title är
Test Formoch att Form Description ärThis form contains a dynamic image. - Bekräfta att HTML-fältet i Utility: Form with Live Image använder bild-URL:en
https://raw.githubusercontent.com/[YOUR_ID]/[YOUR_ID]/main/n8n-examples/dynamic-images/dynamic_img.pngför att visa livebilden.
Steg 6: Testa och aktivera ert workflow
Kör ett manuellt test, verifiera utdata och aktivera sedan workflowet för schemalagd drift.
- Klicka Execute Workflow på Manual Start Trigger och bekräfta att Retrieve Repo File skickar data till Dispatch Email Notice.
- Kontrollera er inkorg efter e-postmeddelandet med ämnet
Test Imageoch verifiera att den inbäddade bilden laddas från GitHubs nedladdnings-URL. - Kör Hourly Schedule Trigger manuellt för att säkerställa att Generate Dynamic Image skapar en ny bild och att Update Repository File committar den till GitHub.
- Aktivera workflowet genom att ändra status till Active så att de dagliga och timvisa schemana körs automatiskt.
Vanliga fallgropar
- GitHub-autentisering kan löpa ut eller kräva specifika behörigheter. Om något slutar fungera, kontrollera först dina GitHub-credentials i n8n och repots åtkomstnivå.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om noder längre fram misslyckas på grund av tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din tonalitet tidigt, annars kommer du redigera utdata i all evighet.
Vanliga frågor
Cirka 30 minuter om dina konton är redo.
Nej. Du kopplar främst ihop konton, sätter några variabler och väljer dina scheman.
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 volymer. Du behöver också räkna med shorten.rest-användning beroende på hur ofta du uppdaterar omdirigeringar.
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änsade körningar men kräver grundläggande serverhantering.
Ja, och det är hela poängen. Du kan byta ut shorten.rest mot en annan omdirigeringstjänst genom att ändra HTTP Request-noderna som skapar aliaset och uppdaterar omdirigeringsmålet. På bildsidan justerar du steget Edit Image så att det matchar din varumärkeslayout (dimensioner, överlagrad text, logoplacering) och behåller sedan samma GitHub-filsökväg så att inbäddningar inte behöver ändras. Vanliga justeringar är att köra schemat veckovis istället för varje timme, skapa separata ”live”-filer per kampanj och skicka Gmail-notiser bara när en förändring upptäcks.
Oftast beror det på en utgången token eller att credential saknar behörighet att skriva till målrepon. Återanslut GitHub-credential i n8n, bekräfta att repo och branch är korrekta och säkerställ att arbetsflödet uppdaterar en befintlig filsökväg (eller att create-file-noden körs först vid behov).
Många, så länge du håller det organiserat.
Ofta, ja, eftersom den här typen av upplägg gynnas av schemalagda jobb, förgrening (bilduppdateringar vs. omdirigeringsuppdateringar) och filhantering i GitHub. n8n är också enklare att köra self-hosted när du vill ha många körningar utan att betala per uppgift. Zapier och Make kan fortfarande fungera om du vill ha ett väldigt enkelt flöde för ”uppdatera en länk, skicka ett mejl”, men så fort du lägger till flera tillgångar och scheman blir det rörigt och dyrt. Prata med en automationsexpert om du vill ha det renaste alternativet för just din setup.
Sätt upp detta en gång och dina gamla inbäddningar slutar vara en risk. Arbetsflödet hanterar de repetitiva uppdateringarna så att dina kampanjer förblir korrekta utan ständig städning.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.