Att göra UGC-liknande promos låter kul tills du är inne på veckans femte “snabba” video. Du jagar produktbilder, skriver om hooks, genererar captions, laddar upp överallt och försöker sedan minnas vad som faktiskt publicerades.
Det här drabbar e-handelsmarknadsförare först, om vi ska vara ärliga. Men innehållsskapare och små byråteam känner samma friktion. Med den här Telegram UGC-automationen skickar du en produktbild och får en färdig vertikal video plus publiceringsklara captions, publicerat över kanaler med en tydlig statusuppdatering.
Nedan ser du exakt vad workflowet gör, vad du behöver för att köra det och hur mycket tid du realistiskt kan få tillbaka när det väl är på plats.
Så fungerar den här automationen
Hela n8n-workflowet, från trigger till slutresultat:
n8n Workflow Template: Telegram + OpenAI: UGC-videor via Blotato
flowchart LR
subgraph sg0["Telegram 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/telegram.svg' width='40' height='40' /></div><br/>Telegram Trigger"]
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Workflow Configuration", 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/code.svg' width='40' height='40' /></div><br/>Parse Script Response"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Submit to Sora 2 API"]
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/code.svg' width='40' height='40' /></div><br/>Extract Video Job ID"]
n5@{ icon: "mdi:cog", form: "rounded", label: "Wait 15 Seconds", 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/httprequest.dark.svg' width='40' height='40' /></div><br/>Check Video Status"]
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 Status Response"]
n8@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check If Complete", pos: "b", h: 48 }
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Download Video File"]
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/telegram.svg' width='40' height='40' /></div><br/>Send Video to Telegram"]
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/telegram.svg' width='40' height='40' /></div><br/>Send Error Message"]
n12@{ icon: "mdi:robot", form: "rounded", label: "Analyze Product Image (Visio..", pos: "b", h: 48 }
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/telegram.svg' width='40' height='40' /></div><br/>Get Photo File from Telegram"]
n14@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract Photo and text", pos: "b", h: 48 }
n15@{ icon: "mdi:robot", form: "rounded", label: "Generate UGC Script (OpenAI)", pos: "b", h: 48 }
n16["<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/>Build Public Image URL"]
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/merge.svg' width='40' height='40' /></div><br/>Merge"]
n18@{ icon: "mdi:cog", form: "rounded", label: "Upload Video to BLOTATO", pos: "b", h: 48 }
n19@{ icon: "mdi:cog", form: "rounded", label: "Youtube", pos: "b", h: 48 }
n20@{ icon: "mdi:cog", form: "rounded", label: "Tiktok", pos: "b", h: 48 }
n21@{ icon: "mdi:cog", form: "rounded", label: "Linkedin", pos: "b", h: 48 }
n22@{ icon: "mdi:cog", form: "rounded", label: "Facebook", pos: "b", h: 48 }
n23@{ icon: "mdi:cog", form: "rounded", label: "Instagram", pos: "b", h: 48 }
n24@{ icon: "mdi:cog", form: "rounded", label: "Twitter (X)", 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/merge.svg' width='40' height='40' /></div><br/>Merge1"]
n26["<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/telegram.svg' width='40' height='40' /></div><br/>Send a text message"]
n27@{ icon: "mdi:robot", form: "rounded", label: "Generate Caption with GPT-4", pos: "b", h: 48 }
n17 --> n3
n25 --> n26
n20 --> n25
n19 --> n25
n22 --> n25
n21 --> n25
n23 --> n25
n24 --> n25
n5 --> n6
n0 --> n1
n8 --> n9
n8 --> n5
n8 --> n11
n6 --> n7
n9 --> n10
n4 --> n5
n3 --> n4
n2 --> n17
n7 --> n8
n16 --> n17
n14 --> n13
n10 --> n27
n1 --> n14
n18 --> n20
n18 --> n21
n18 --> n22
n18 --> n23
n18 --> n24
n18 --> n19
n27 --> n18
n15 --> n2
n13 --> n12
n13 --> n16
n12 --> n15
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 trigger
class n12,n15,n27 ai
class n8 decision
class n3,n6,n9,n16 api
class n2,n4,n7 code
classDef customIcon fill:none,stroke:none
class n0,n2,n3,n4,n6,n7,n9,n10,n11,n13,n16,n17,n25,n26 customIcon
Problemet: UGC-videoproduktion blir en veckovis flaskhals
Om du producerar korta promos från produktbilder är “video”-delen inte det enda jobbet. Det är alla utspridda steg runt omkring. Du hämtar en bild från en chatt eller en drive, försöker beskriva produkten konsekvent, skriver ett UGC-liknande manus och gör sedan om det för att det inte matchar din målgrupp. Efter det behöver du fortfarande captions för varje plattform, uppladdningar och ett sätt att bekräfta att det faktiskt publicerades. En missad uppladdning eller fel bildformat och du har bränt en timme helt i onödan.
Friktionen byggs på. Här är var det faller isär i verkligheten.
- Att skapa ett användbart UGC-manus från grunden kan ta runt 30 minuter per produkt, och det behöver oftast redigeras ändå.
- Att generera en vertikal video från en statisk bild innebär ofta att du byter verktyg, kopierar prompts och laddar upp assets flera gånger.
- Att publicera på TikTok, Reels, Shorts och “resten” blir en kedja av inloggningar, uppladdningar och små formateringsfixar.
- Du får inget samlat, pålitligt “publicerat utan problem”-meddelande, så du fortsätter dubbelkolla kanalerna.
Lösningen: gör en Telegram-produktbild till en publicerad UGC-video
Det här workflowet startar där ditt arbete redan händer: Telegram. Du skickar en produktbild (valfritt med lite kontext i bildtexten) och n8n tar över. OpenAI Vision analyserar bilden för att förstå vad produkten är, vad som sticker ut och vilken typ av köpare den passar. Sedan genererar GPT ett kort, naturligt UGC-manus som låter som en riktig creator, inte som en broschyr. Workflowet skickar in din bild plus manus-prompten till Sora 2 (via Fal API), kontrollerar jobbstatus var 15:e sekund tills det är klart och hämtar den färdiga videofilen.
När videon är klar levererar workflowet den tillbaka till Telegram så att du snabbt kan granska. Sedan skapar det plattformsvänliga captions och använder Blotato för att publicera på dina anslutna sociala kanaler. Till sist får du en publiceringsnotis som sammanställer resultatet, så att du slipper gissa vad som lyckades och vad som misslyckades.
Det här får du: automation vs. resultat
| Det här automatiserar workflowet | Resultat du får |
|---|---|
|
|
Exempel: så kan det se ut
Säg att du publicerar en ny produktpromo per dag till 7 kanaler (TikTok, Instagram, YouTube, Facebook, LinkedIn, X plus en till). Om manuell uppladdning och caption-formatering tar kanske 10 minuter per kanal blir det runt 70 minuter per dag, innan du ens skriver manus eller genererar videon. Med det här workflowet lägger du cirka 2 minuter på att skicka bilden i Telegram och väntar sedan medan Sora 2 renderar och Blotato publicerar. Realistiskt får de flesta team tillbaka ungefär en timme per dag, och de slutar tappa tid på “publicerades det här?”-kontroller.
Det du behöver
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger funkar bra)
- Telegram för att snabbt skicka in produktbilder.
- OpenAI för bildanalys, manus och captions.
- Fal.ai API-nyckel (hämta den i din Fal.ai-dashboard)
Kunskapsnivå: Mellan. Du kopplar konton, lägger in API-nycklar och testkör några gånger för att bekräfta bildlänkar och publiceringsbehörigheter.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Ett Telegram-foto triggar allt. När du skickar en produktbild till din Telegram-bot (eller vald chatt) fångar workflowet filen och eventuell bildtext du lade till.
Bilden analyseras och blir ett manus. OpenAI Vision granskar fotot och matar in insikterna i en UGC-manusprompt, så att manuset lyfter verkliga produktdetaljer istället för generiska påståenden.
Sora 2 genererar den vertikala videon. n8n skickar den publika bild-URL:en och prompten till Sora 2 via Fal API, sparar jobb-ID och kontrollerar sedan status var 15:e sekund tills den är färdig.
Blotato publicerar och Telegram bekräftar. Den färdiga videon hämtas, skickas tillbaka till Telegram för insyn och laddas sedan upp till Blotato för publicering i flera kanaler. En samlad publiceringsnotis skickas tillbaka så att du ser vad som publicerades.
Du kan enkelt justera manustonen och listan med publiceringsdestinationer efter dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera Telegram-triggern
Det här arbetsflödet startar när en användare skickar ett meddelande med en produktbild i Telegram.
- Lägg till och öppna Telegram Entry Trigger.
- Säkerställ att Updates inkluderar
message. - Inloggningsuppgifter krävs: Anslut era telegramApi-inloggningsuppgifter.
Steg 2: Anslut Telegram-indata och arbetsflödesinställningar
Fånga inkommande bild och bildtext, och ställ sedan in API- och videoparametrar som används i hela arbetsflödet.
- I Workflow Settings, ställ in maxPollingAttempts till
20. - I Workflow Settings, ställ in falApiKey till
[CONFIGURE_YOUR_API_KEY]. - I Workflow Settings, bekräfta att Model är
sora-2, att aspect_ratio är9:16och att duration är12. - I Extract Photo & Caption, behåll photoUrl inställt på
{{$json.message.photo ? $json.message.photo[$json.message.photo.length - 1].file_id : ''}}. - I Extract Photo & Caption, behåll promotionText inställt på
{{$json.message.caption || $json.message.text}}. - I Fetch Telegram Photo, ställ in File ID till
{{$json.photoUrl}}och Resource tillfile. - Inloggningsuppgifter krävs: Anslut era telegramApi-inloggningsuppgifter för Fetch Telegram Photo.
Steg 3: Sätt upp AI-analys och manusgenerering
Arbetsflödet analyserar produktbilden och skriver ett JSON-baserat UGC-manus.
- Öppna Analyze Product Image och ställ in Resource till
image, Input Type tillbase64och Operation tillanalyze. - Ställ in Text i Analyze Product Image till
Analyze this product image and extract: 1) Product name and category, 2) Key features and benefits, 3) Target audience, 4) Visual elements (colors, style, packaging). Promotion objective: {{ $('Extract Photo & Caption').item.json.promotionText }}. - Inloggningsuppgifter krävs: Anslut era openAiApi-inloggningsuppgifter för Analyze Product Image.
- I Generate UGC Script, aktivera JSON Output och behåll systemmeddelandet som definierar JSON-formatet.
- Säkerställ att användarmeddelandet i Generate UGC Script använder
{{ 'Product Analysis: ' + $json.content + '\n\nPromotion Objective: ' + $('Extract Photo & Caption').first().json.promotionText + '\n\nCreate a compelling 12-second UGC video script.' }}. - Inloggningsuppgifter krävs: Anslut era openAiApi-inloggningsuppgifter för Generate UGC Script.
- I Parse Script Output, behåll den befintliga JavaScript Code för att extrahera
script,framesochhashtags.
Steg 4: Generera videon via Sora och polla tills den är klar
Dessa noder skickar in bilden och manuset till Sora API, pollar tills det är klart och hämtar den färdiga videon.
- I Create Public Image Link, ställ in URL till
https://tmpfiles.org/api/v1/uploadoch Content Type tillmultipart-form-data. - I Create Public Image Link, lägg till ett formulärfält med namnet
filemappat till binärdatadata. - Behåll Combine Inputs ansluten till både Parse Script Output och Create Public Image Link.
- I Submit to Sora API, ställ in URL till
https://queue.fal.run/fal-ai/sora-2/image-to-videooch Method tillPOST. - Ställ in JSON Body i Submit to Sora API till
{ "prompt": "{{ JSON.stringify($('Parse Script Output').first().json.script.replaceAll(/\\n/g, '')).slice(1, -1) }}", "resolution": "auto", "aspect_ratio": "9:16", "duration": {{ $('Workflow Settings').item.json.duration }}, "image_url": "{{ $json.data.url.replace(/^http:\/\/tmpfiles\.org\/(\d+)\/(.*)$/i, 'https://tmpfiles.org/dl/$1/$2') }}" }. - I Submit to Sora API, ställ in Authorization-headern till
{{ 'Key ' + $('Workflow Settings').first().json.falApiKey }}. - I Capture Video Job ID, behåll JavaScript-koden som sparar
requestId,chatIdochpollingAttempt. - I Delay 15s, behåll Amount inställt på
1för att pausa innan polling. - I Query Video Status, ställ in URL till
https://queue.fal.run/fal-ai/sora-2/requests/{{ $json.requestId }}/statusoch lägg till Authorization-headern{{ 'Key ' + $('Workflow Settings').first().json.falApiKey }}. - I Interpret Status Reply, behåll JavaScript-koden som ökar
pollingAttemptoch fångarvideoUrl. - I Completion Gate, behåll OR-villkoren för
COMPLETED,succeededochpollingAttempt≥{{ $('Workflow Settings').first().json.maxPollingAttempts }}. - I Retrieve Video File, ställ in URL till
https://queue.fal.run/fal-ai/sora-2/requests/{{ $json.requestId }}och ställ in Authorization-headern till{{ 'Key ' + $('Workflow Settings').first().json.falApiKey }}.
[CONFIGURE_YOUR_API_KEY] kommer Submit to Sora API och Query Video Status att misslyckas med auktoriseringsfel.Steg 5: Leverera videon till Telegram och generera bildtexter
När videon är klar skickar arbetsflödet den till Telegram och genererar en social bildtext för publicering.
- I Deliver Video to Telegram, ställ in Operation till
sendVideooch File till{{$json.video.url}}. - Ställ in Chat ID i Deliver Video to Telegram till
{{$('Telegram Entry Trigger').first().json.message.chat.id}}. - Inloggningsuppgifter krävs: Anslut era telegramApi-inloggningsuppgifter för Deliver Video to Telegram.
- Öppna Compose Social Caption och behåll prompten som refererar till
{{$('Telegram Entry Trigger').first().json.message.caption}}och de tre första hashtaggarna. - Inloggningsuppgifter krävs: Anslut era openAiApi-inloggningsuppgifter för Compose Social Caption.
Steg 6: Ladda upp och publicera till sociala plattformar
Videon laddas upp en gång och publiceras sedan till flera plattformar parallellt via Blotato.
- I Upload Media to Blotato, ställ in mediaUrl till
{{$('Retrieve Video File').item.json.video.url}}och Resource tillmedia. - Inloggningsuppgifter krävs: Anslut era blotatoApi-inloggningsuppgifter för Upload Media to Blotato.
- Upload Media to Blotato skickar utdata till Publish to TikTok, Publish to LinkedIn, Publish to Facebook, Publish to Instagram, Publish to X och Publish to YouTube parallellt.
- För alla sex publiceringsnoderna, ställ in postContentText till
{{$('Compose Social Caption').item.json.message.content}}och postContentMediaUrls till{{$json.url}}. - I Publish to YouTube, behåll postCreateYoutubeOptionTitle inställt på
{{$('Generate UGC Script').first().json.message.content.hashtags[0]}}och postCreateYoutubeOptionPrivacyStatus tillprivate. - Ställ in accountId och eventuella plattformsspecifika fält (t.ex. facebookPageId) till era Blotato-konto-ID:n.
- Inloggningsuppgifter krävs: Anslut era blotatoApi-inloggningsuppgifter för alla Blotato-publiceringsnoder (totalt 6 noder).
- I Combine Publish Results, behåll Mode inställt på
chooseBranchoch Number of Inputs inställt på6. - I Send Publish Notice, ställ in Text till
Publishedoch Chat ID till{{$('Telegram Entry Trigger').first().json.message.chat.id}}. - Inloggningsuppgifter krävs: Anslut era telegramApi-inloggningsuppgifter för Send Publish Notice.
Steg 7: Lägg till felhantering
När polling timear ut eller misslyckas meddelar arbetsflödet användaren i Telegram.
- I Completion Gate, säkerställ att false-grenen är ansluten till både Delay 15s och Notify Error via Telegram enligt konfigurationen.
- I Notify Error via Telegram, behåll Text inställt på
Video generation timed out or failed. Please try again with a different product image or description.. - Ställ in Chat ID i Notify Error via Telegram till
{{$('Telegram Entry Trigger').item.json.message.chat.id}}. - Inloggningsuppgifter krävs: Anslut era telegramApi-inloggningsuppgifter för Notify Error via Telegram.
Steg 8: Testa och aktivera ert arbetsflöde
Kör ett fullständigt test för att bekräfta att videgenerering, leverans till Telegram och social publicering fungerar från början till slut.
- Klicka på Execute Workflow och skicka ett Telegram-meddelande med en produktbild och bildtext för att trigga Telegram Entry Trigger.
- Bekräfta att Deliver Video to Telegram skickar en video och att Send Publish Notice postar
Publishedi samma chatt. - Verifiera att Blotato publicerar till era anslutna konton från Publish to TikTok, Publish to LinkedIn, Publish to Facebook, Publish to Instagram, Publish to X och Publish to YouTube.
- När ni är nöjda, växla arbetsflödet till Active så att det körs för varje nytt Telegram-meddelande.
Vanliga fallgropar
- Telegram-credentials kan löpa ut eller så kan botten tappa åtkomst till en chatt. Om det skapar fel, kontrollera först botbehörigheter i Telegram och credentials för n8n:s Telegram-node.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om noder längre ner i flödet misslyckas på tomma svar.
- Fal.ai- eller Blotato-API-nycklar kan vara giltiga men ha för snäva behörigheter. Om publicering misslyckas, granska behörigheterna i din Blotato-anslutning och bekräfta att din Fal Authorization-header är satt till “Key YOUR_FAL_KEY”.
Vanliga frågor
Cirka 45 minuter om du redan har dina API-nycklar och Blotato kopplat.
Nej. Du klistrar mest in API-nycklar, kopplar Telegram och testar med en exempelbild. Den enda “tekniska” delen är att bekräfta att bildens URL är publik så att Sora 2 kan läsa den.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på $20/månad för högre volym. Du behöver också räkna med OpenAI API-användning samt Fal.ai-kostnader för videogenerering, som varierar med hur många videor du renderar.
Två alternativ: n8n Cloud (hanterat, enklast setup) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärt och hanterar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det bör du. Uppdatera prompten i OpenAI-noderna “Generate UGC Script” och “Compose Social Caption” med din tonalitet (lyxig, lekfull, utbildande) och din “säg inte”-lista. Inaktivera sedan Blotato-publiceringsnoderna du inte behöver (till exempel behåll TikTok och Instagram, stäng av X och LinkedIn). Många team justerar också Sora 2-requesten för att låsa 9:16 och välja en konsekvent längd, som 8 sekunder.
Oftast beror det på att botten inte längre har åtkomst till chatten, eller att sparade credentials i n8n är inaktuella. Koppla om Telegram-noden, skicka en testbild igen och bekräfta att workflowet lyssnar på samma chat-ID som du postar i. Om steget “Fetch Telegram Photo” misslyckas kan det också vara ett filåtkomstproblem från Telegrams sida, så kör igen med ett nytt bildmeddelande.
Många, så länge dina API-gränser och n8n:s körningsgränser hänger med.
För videogenerering i flera steg är n8n oftast det smidigare valet eftersom du kan loopa statuskontroller, slå ihop resultat och hantera grenar utan att betala extra för varje liten väg. Zapier och Make kan fungera, men långkörande jobb (som “polla var 15:e sekund tills det är klart”) blir snabbt krångliga. n8n ger dig också möjligheten att self-hosta, vilket spelar roll när du kör dagligt innehåll i skala. Om du vill: håll första versionen enkel—Telegram in, video ut, ingen publicering. Bygg sedan på. Prata med en automationsexpert om du vill ha hjälp att välja den mest strukturerade setupen.
När det här väl rullar slutar du “göra en video” och börjar mata ett system. Workflowet tar hand om de repetitiva delarna och du får tillbaka tiden till erbjudanden, kreativ riktning och att testa vad som faktiskt säljer.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.