Bannerförfrågningar har en tendens att spåra ur till en rörig tråd: otydliga instruktioner, saknade storlekar, “kan vi testa en version till”, och någon som manuellt laddar ner, döper om och laddar upp filer igen. När det “slutgiltiga” väl godkänns har tillfället ofta redan passerat.
Det här är exakt vad marknadschefer känner under kampanjtoppar, men byråansvariga och interna designkoordinatorer fastnar i det också. Med LINE-bannerautomation blir ett enda chattmeddelande till en annonsbild som är klar för granskning och kommer tillbaka i samma konversation.
Du får se hur flödet förvandlar grova idéer till polerade banners, hostar dem på AWS S3 så att de laddar stabilt och håller godkännanden i rörelse utan extra verktyg.
Så fungerar den här automationen
Se hur detta löser problemet:
n8n Workflow Template: LINE + AWS S3: bannerförfrågningar blir färdiga annonser
flowchart LR
subgraph sg0["Optimize Prompt (Mar Flow"]
direction LR
n0["<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/>Check Job Status"]
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/>LINE Webhook1"]
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/code.svg' width='40' height='40' /></div><br/>Extract Data1"]
n3@{ icon: "mdi:robot", form: "rounded", label: "Optimize Prompt (Marketing)1", 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/>Submit to Nano Banana Pro1"]
n5@{ icon: "mdi:cog", form: "rounded", label: "Wait1", pos: "b", h: 48 }
n6@{ icon: "mdi:cog", form: "rounded", label: "Wait for Generation1", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Parse Result1"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Download Image1"]
n9@{ icon: "mdi:cog", form: "rounded", label: "Upload to S", 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/>HTTP Request2"]
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/code.svg' width='40' height='40' /></div><br/>Code1"]
n11 --> n4
n5 --> n0
n9 --> n10
n2 --> n3
n1 --> n2
n7 --> n8
n8 --> n9
n0 --> n6
n6 --> n7
n4 --> n5
n3 --> n11
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 n3 ai
class n0,n1,n4,n8,n10 api
class n2,n7,n11 code
classDef customIcon fill:none,stroke:none
class n0,n1,n2,n4,n7,n8,n10,n11 customIcon
Utmaningen: att göra “snabba banneridéer” till leveransklara assets
De flesta bannerförfrågningar börjar enkelt. “Kaffemärke, morgonkänsla.” “Lägg till japansk catch-copy.” “Få det att kännas premium.” Sedan dyker det dolda jobbet upp: översätta idén till en bildprompt, få texten att renderas korrekt, vänta på att bildgenereringen blir klar, spara filen, ladda upp den någonstans där LINE kan visa den och till sist svara med något teamet faktiskt kan granska. När du gör detta flera gånger om dagen är det inte minuterna som gör ont. Det är avbrotten, kontextbytena och loopen “kan du skicka länken igen?” som aldrig tar slut.
Det eskalerar snabbt. Här är var det oftast faller isär i riktiga team.
- Någon måste tolka korta, vaga meddelanden till en detaljerad kreativ riktning, och det är där inkonsekvenser smyger sig in.
- Text i AI-genererade bilder blir ofta förvrängd, vilket tvingar fram manuella korrigeringar eller fulla omrenderingar.
- Asynkron bildgenerering innebär väntan och statuskontroller, och folk glömmer att komma tillbaka vid rätt tidpunkt.
- Filer delas i fel format eller via länkar som inte visas bra i LINE, så godkännanden stannar upp.
Lösningen: generera, hosta och leverera LINE-klara banners automatiskt
Det här flödet gör ett LINE-meddelande till en färdig bannerbild som du kan granska direkt. När en användare skickar ett koncept via LINE tar n8n emot meddelandet, plockar ut de viktiga delarna och skickar det till Google Gemini för att “fylla i luckorna” med marknadsanpassade detaljer som komposition, ljussättning och placering av catch-copy (inklusive vägledning för japansk text). Därefter skickar flödet den förfinade prompten till Nano Banana Pro via Kie.ai API, som är valt här specifikt eftersom dess textrendering är stark. Eftersom generering i hög kvalitet tar tid väntar flödet och pollar tills bildjobbet är klart, laddar ner den slutliga filen, laddar upp den till en publik AWS S3-bucket och svarar tillbaka i LINE med bannern så att den visas snyggt i chatten.
Flödet startar med en LINE webhook-trigger. Gemini gör om “grov idé” till “användbar kreativ brief”, sedan genererar bildmodellen bannern asynkront medan n8n följer upp status. Till sist hostar AWS S3 asseten och LINE API levererar den direkt tillbaka till den som beställde.
Vad som förändras: före vs. efter
| Det här tar bort | Effekten du märker |
|---|---|
|
|
Effekt i verkligheten
Säg att teamet behöver 10 bannervarianter för en helgkampanj. Manuellt ser ett “snabbt” flöde ofta ut som 10 minuter för att skriva om varje förfrågan till en prompt, ytterligare 10 minuter för att hantera generering och omrenderingar, plus cirka 5 minuter för att ladda upp och dela korrekt. Det är ungefär 25 minuter per banner, eller cirka 4 timmar totalt. Med det här flödet kan du skicka 10 LINE-meddelanden (runt 10 minuter), sedan vänta på bearbetningen och granska resultaten när de kommer tillbaka i chatten. Du kan fortfarande iterera, men du gör inte mellanjobbet mellan iterationerna.
Krav
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- LINE Official Account för att ta emot och svara på meddelanden.
- AWS S3 för att hosta publika bannerbilder.
- Kie.ai API-nyckel (hämta den i din Kie.ai-dashboard) för att köra Nano Banana Pro.
- Google Gemini API-nyckel (hämta den från Google AI Studio / Google Cloud) för promptförfining.
Kunskapsnivå: Medel. Du kopplar in credentials, sätter upp en LINE webhook-URL och verifierar rättigheter för din S3-bucket.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Flödet steg för steg
Ett LINE-meddelande triggar flödet. En webhook tar emot inkommande payload från ditt LINE Official Account, sedan parsar flödet ut texten (och eventuell användbar metadata) så att den kan användas konsekvent.
Förfrågan uppgraderas till en riktig kreativ brief. Google Gemini skriver om det korta konceptet till en detaljerad marknadsprompt, inklusive kompositionsguidning och var den japanska catch-copy:n ska ligga så att den slutliga bannern blir lättläst.
Bildgenereringen körs asynkront. n8n skickar in ett jobb till Nano Banana Pro via Kie.ai API, pausar kort och pollar sedan jobbstatus tills den slutliga bildoutputen är klar. Den här delen är kritisk eftersom rendering i hög kvalitet inte är omedelbar.
Den färdiga bannern hostas och levereras tillbaka i chatten. Flödet laddar ner bilden, laddar upp den till en publik AWS S3-bucket så att den kan visas stabilt, och svarar via LINE API med bannern.
Du kan enkelt justera promptreglerna så att de matchar din tonalitet, eller ändra S3-namngivning och mappstruktur så att det passar hur du organiserar kampanjer. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementation
Steg 1: Konfigurera webhook-triggern
Sätt upp den inkommande LINE-webhooken som startar arbetsflödet och säkerställer att payloads tolkas korrekt.
- Lägg till en Webhook-nod med namnet Incoming LINE Trigger.
- Ställ in HTTP Method på
POSToch Path påbanner-v7158-2025. - Koppla Incoming LINE Trigger till Parse LINE Payload.
- I Parse LINE Payload, behåll den medföljande JavaScript-koden för att extrahera replyToken, userId, message och timestamp.
Steg 2: Anslut LINE och KIE API-tjänster
Förbered anropen till externa tjänster som skapar och pollar bildgenereringsjobbet.
- I Send Image Task, ställ in URL på
https://api.kie.ai/api/v1/jobs/createTaskoch Method påPOST. - Ställ in JSON Body i Send Image Task till
{ "model": "nano-banana-pro", "input": { "prompt": "{{ $json.prompt }}", "aspect_ratio": "1:1", "resolution": "2K", "output_format": "png" } }. - I Retrieve Job State, ställ in URL på
https://api.kie.ai/api/v1/jobs/recordInfooch aktivera Send Query och Send Headers. - Konfigurera query-parametrar i Retrieve Job State: taskId =
{{ $json.data.taskId }}och recordId ={{ $json.data.recordId }}. - Behåll väntetiden i Pause Briefly inställd på Amount
10och Await Image Output inställd på Unitsecondsoch Amount10.
Steg 3: Sätt upp Refine Marketing Prompt
Använd Gemini för att skriva om det inkommande LINE-meddelandet till en detaljerad engelsk bildprompt.
- Lägg till Refine Marketing Prompt och ställ in modellen på
models/gemini-2.0-flash-lite. - Säkerställ att systemprompten är inkluderad exakt som den visas i nodkonfigurationen för att tvinga igenom formatregler.
- Ställ in användarinnehållets meddelande i Refine Marketing Prompt till
{{ $json.message }}. - Aktivera JSON Output genom att sätta den till
true. - Koppla Refine Marketing Prompt till Extract Prompt Text.
Inloggningsuppgifter krävs: Anslut era googlePalmApi-inloggningsuppgifter i Refine Marketing Prompt.
Steg 4: Konfigurera bildjobbets bearbetning och resultathantering
Konvertera AI-utdata till en användbar prompt, skicka den till bildgeneratorn och tolka resultaten.
- Behåll JavaScript-koden i Extract Prompt Text för att parsa och rensa Gemini-svaret till prompt.
- Koppla Extract Prompt Text till Send Image Task, sedan till Pause Briefly och därefter till Retrieve Job State.
- Koppla Retrieve Job State till Await Image Output, och sedan till Interpret Result Data.
- I Interpret Result Data, behåll logiken som parsar resultJson och matar ut imageUrl när state är
success. - Koppla Interpret Result Data till Fetch Image File och ställ in URL på
{{ $json.imageUrl }}.
status: processing. Om ni ser ofullständiga resultat, överväg att lägga till villkorlig looping.Steg 5: Konfigurera lagring av utdata och LINE-svar
Ladda upp den genererade bilden till S3 och svara LINE-användaren med den färdiga bannerbilden.
- I Store in S3 Bucket, ställ in Operation på
uploadoch Bucket Name på[YOUR_ID]. - Ställ in File Name till
{{ 'banner-' + Date.now() + '.png' }}så att varje uppladdning blir unik. - Koppla Fetch Image File till Store in S3 Bucket, och sedan till Reply via LINE API.
- I Reply via LINE API, ställ in URL på
https://api.line.me/v2/bot/message/replyoch Method påPOST. - Ställ in JSON Body till
{ "replyToken": "{{ $('Incoming LINE Trigger').item.json.body.events[0].replyToken }}", "messages": [ { "type": "image", "originalContentUrl": "{{ $('Store in S3 Bucket').item.json.Location }}", "previewImageUrl": "{{ $('Store in S3 Bucket').item.json.Location }}" } ] }. - Uppdatera headern Authorization i Reply via LINE API till
Bearer [CONFIGURE_YOUR_TOKEN].
Inloggningsuppgifter krävs: Anslut era aws-inloggningsuppgifter i Store in S3 Bucket.
Steg 6: Testa och aktivera ert arbetsflöde
Verifiera end-to-end-exekvering från LINE-inmatning till bildsvar, och aktivera sedan arbetsflödet.
- Klicka på Execute Workflow och skicka ett testmeddelande till er LINE-webhook-endpoint.
- Bekräfta att Parse LINE Payload matar ut förväntad replyToken och message.
- Kontrollera att Refine Marketing Prompt returnerar en ren engelsk prompt och att Send Image Task skapar ett jobb utan problem.
- Säkerställ att Interpret Result Data matar ut en giltig imageUrl och att Store in S3 Bucket returnerar en Location-URL.
- Verifiera att LINE-chatten tar emot bilden från Reply via LINE API.
- Slå på arbetsflödet till Active för användning i produktion.
Saker att se upp med
- Credentials och kanalinställningar för LINE Messaging API är petiga. Om svar slutar fungera: kontrollera först webhooken i LINE Developers-konsolen och channel access token.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- AWS S3-behörigheter kan blockera dig utan att det märks. Om bilden laddas upp men inte visas i LINE: kontrollera public-read-access (och bucket policy) så att filens URL går att nå.
Vanliga frågor
Cirka en timme om du redan har LINE och S3 uppsatt.
Ja, men någon behöver hantera den initiala LINE-webhooken och S3-behörigheterna en gång. Efter det är det mest att koppla konton och redigera prompttext.
Ja. n8n har ett gratis alternativ för self-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 användning av Gemini API och kostnader för Kie.ai-bildgenerering, som beror på hur många banners du genererar.
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 klarar n8n bra. Self-hosting ger dig obegränsat antal körningar men kräver grundläggande serverhantering.
Börja med steget “Refine Marketing Prompt”, eftersom det är där din varumärkestonalitet sitter. Du kan finjustera instruktionerna för att styra typsnitt, spacing-regler eller en konsekvent catch-copy-stil, och sedan justera steget “Store in S3 Bucket” för att spara i kampanjspecifika mappar. Om du senare föredrar en annan bildgenerator kan du byta ut Kie.ai HTTP request-noderna och behålla samma asynkrona pollingmönster.
Oftast handlar det om credentials eller behörigheter. Bekräfta att AWS-nyckeln i n8n kan skriva till den aktuella bucketen, kontrollera sedan bucket policy och inställningar för public access så att det uppladdade objektet kan läsas av LINE. Säkerställ också att flödet laddar upp rätt binärfil från steget “Fetch Image File”, inte ett tomt svar från ett job-status-anrop.
Den skalar bra för de flesta små team som den är.
För det här användningsfallet är n8n oftare en bättre match, eftersom det svåra är den asynkrona pollingen och den villkorslogik som krävs runt “är bildjobbet klart än?”. Zapier och Make kan göra det, men du landar vanligtvis i fler rörliga delar och högre task-kostnader när du genererar många varianter. n8n ger också möjlighet att self-hosta, vilket är hjälpsamt när volymerna sticker iväg vid lanseringar. Om du bara behöver ett enkelt flöde “meddelande in, notis ut” kan Zapier eller Make gå snabbare att starta med. Prata med en automationsexpert om du vill ha hjälp att välja det renaste upplägget för din stack.
När detta väl är igång slutar bannerförfrågningar att vara ett samordningsproblem och blir en enkel input–output-loop. Flödet tar hand om de repeterbara delarna så att du kan lägga fokus på de kreativa beslut som faktiskt spelar roll.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.