Ditt CV-innehåll kan vara stabilt, men presentationen blir en tidstjuv. Du finjusterar mellanrum, brottas med mallar, exporterar fel filtyp och sedan ber någon om ”bara en version till” med en annan look.
Den här automatiseringen för CV-bilder i Telegram slår hårdast mot karriärcoacher och CV-skribenter eftersom du levererar under deadline. Rekryteringsteam känner också av det när kandidater fortsätter skicka röriga PDF:er som behöver fixas innan de kan delas.
Det här flödet tar ett Telegram-meddelande eller en fil och returnerar en polerad CV-bild, med Google Sheets som stilminne. Du får se hur det fungerar, vad du behöver och var de största tidsbesparingarna dyker upp.
Så fungerar automatiseringen
Hela n8n-workflowet, från trigger till slutresultat:
n8n Workflow Template: Telegram + Google Sheets: snygga cv-bilder
flowchart LR
subgraph sg0["User Sends Message to Bot 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/>Download Resume"]
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/telegram.svg' width='40' height='40' /></div><br/>Notify User"]
n2@{ icon: "mdi:robot", form: "rounded", label: "Structured Output2", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini3", pos: "b", h: 48 }
n4@{ icon: "mdi:robot", form: "rounded", label: "Resume Writer", pos: "b", h: 48 }
n5@{ icon: "mdi:robot", form: "rounded", label: "Structured Output1", pos: "b", h: 48 }
n6@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini2", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Clear sheet", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n9@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini1", pos: "b", h: 48 }
n10@{ icon: "mdi:robot", form: "rounded", label: "Structured Output", pos: "b", h: 48 }
n11@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini", pos: "b", h: 48 }
n12@{ icon: "mdi:robot", form: "rounded", label: "Validate user Input", 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/>User Sends Message to Bot"]
n14@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check For Input Type", pos: "b", h: 48 }
n15@{ icon: "mdi:cog", form: "rounded", label: "Run Resume Workflow", 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/code.svg' width='40' height='40' /></div><br/>Splitting BrowserAct Items"]
n17@{ icon: "mdi:robot", form: "rounded", label: "Chatting With User", pos: "b", h: 48 }
n18@{ icon: "mdi:cog", form: "rounded", label: "SVG To JPG", pos: "b", h: 48 }
n19@{ icon: "mdi:robot", form: "rounded", label: "Analyze Resume image", pos: "b", h: 48 }
n20@{ icon: "mdi:database", form: "rounded", label: "Save Data", pos: "b", h: 48 }
n21@{ icon: "mdi:robot", form: "rounded", label: "Resume Visualization", pos: "b", h: 48 }
n22@{ icon: "mdi:robot", form: "rounded", label: "Generate Resume", 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/telegram.svg' width='40' height='40' /></div><br/>Send Resume Back"]
n24@{ icon: "mdi:cog", form: "rounded", label: "Aggregate Google Sheet Data", pos: "b", h: 48 }
n25@{ icon: "mdi:database", form: "rounded", label: "Get Saved Resume", pos: "b", h: 48 }
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/>Answer the User"]
n20 --> n8
n18 --> n19
n7 --> n16
n11 -.-> n10
n11 -.-> n12
n4 --> n21
n9 -.-> n17
n6 -.-> n5
n6 -.-> n4
n3 -.-> n2
n3 -.-> n21
n0 --> n18
n22 --> n23
n8 --> n25
n8 --> n0
n25 --> n24
n10 -.-> n12
n17 --> n26
n5 -.-> n4
n2 -.-> n21
n15 --> n7
n12 --> n14
n19 --> n20
n14 --> n15
n14 --> n1
n14 --> n17
n21 --> n22
n13 --> n12
n16 --> n8
n24 --> n4
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 n13 trigger
class n2,n4,n5,n10,n12,n17,n19,n21,n22 ai
class n3,n6,n9,n11 aiModel
class n14 decision
class n7,n20,n25 database
class n0 api
class n16 code
classDef customIcon fill:none,stroke:none
class n0,n1,n13,n16,n23,n26 customIcon
Problemet: CV-formatering och revisioner äter upp din vecka
CV-arbete är märkligt repetitivt. Du samlar in detaljer från en chattråd, en PDF, ett Google Doc, kanske en skärmbild. Sedan gör du ”designbiten” igen: linjera avsnitt, välja mall, justera mellanrum, exportera, skicka och vänta. Det värsta är fram och tillbaka, för kunder ber inte om ”bättre”, de ber om ”mer professionellt”, ”mer modernt” eller ”gör så att det ser ut som det här exemplet”. Varje önskemål tvingar dig att bygga om layoutbeslut du redan tog förra gången.
Det summerar snabbt, särskilt när du hanterar flera personer samtidigt.
- Du slutar med att återskapa samma stilar för varje nytt CV eftersom det inte finns något återanvändbart ”designminne”.
- Att exportera och skicka filer blir ett eget miniprojekt, och fel format (eller en korrupt PDF) triggar en ny runda med ändringar.
- Referensdesigner kommer som bilder eller udda filer, vilket gör att du antingen ignorerar dem eller lägger tid på att reverse-engineera utseendet.
- Manuella flöden bjuder in små misstag, som gamla telefonnummer, saknade roller eller dubbla punktlistor efter copy/paste.
Lösningen: Telegram in, polerad CV-bild ut
Det här flödet gör Telegram till ytterdörren för CV-intag och leverans. En Telegram-bot tar emot antingen ren text (någon klistrar in sina CV-detaljer) eller en fil (PDF eller en bild som referens). Google Gemini klassificerar vad som kom in och hämtar sedan kontext och struktur så att detaljerna inte fastnar som en rörig klump. Om det finns en referensdesign standardiserar flödet den och låter Gemini Vision ”läsa” stilen, och fångar layouten som en återanvändbar mall. Google Sheets blir ditt enkla bibliotek för de mallarna, så nästa CV kan matcha en ”Corporate”- eller ”Creative”-stil med avsikt.
Därefter mappar en AI-agent kandidatens innehåll till vald layout, en annan AI-agent skriver prompten för bildgenerering, och Gemini renderar den slutliga CV-bilden. Flödet skickar tillbaka den i Telegram snabbt, så att request-and-deliver-loopen känns omedelbar i stället för att dra ut på tiden i dagar.
Det du får: automatisering vs. resultat
| Det här flödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du hanterar 5 CV:n i veckan. Manuellt är det vanligt att lägga cirka 45 minuter på formatering och sedan ytterligare 30 minuter på exporter, småjusteringar och ”gör så att det matchar det här exemplet”-ändringar, så du hamnar på ungefär 6 timmar per vecka. Med det här flödet är intaget ett Telegram-meddelande (några minuter), stilval och rendering sker automatiskt, och du gör mest en granskning och ber om en justering om det behövs. Realistiskt kan du kapa processen till runt 1 timme per vecka för touch-ups och slutkontroller.
Det du behöver
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- Telegram för att ta emot förfrågningar och leverera bilder
- Google Sheets för mallagring och strukturerad data
- Google Gemini API (hämta det via Google AI Studio / Google Cloud)
Kunskapsnivå: Medel. Du kopplar konton, mappar några fält och testar med riktiga Telegram-meddelanden och exempelfiler.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Ett Telegram-meddelande triggar körningen. Flödet startar när någon skickar CV-text, en PDF eller en fillänk till din bot. Om det inte faktiskt är en CV-förfrågan kan den svara normalt i stället för att slösa beräkning.
Indatan klassificeras och städas upp. AI-validering kontrollerar att meddelandet innehåller tillräckligt med CV-detaljer att jobba med. Om en fil skickas hämtar flödet den, läser binär-/PDF-innehållet och konverterar format vid behov så att efterföljande steg inte skapar fel.
Stil väljs (eller lärs in) via Google Sheets. Om det finns en referensdesign som bild konverterar flödet den (till exempel SVG till JPG), sedan granskar Gemini Vision den och sparar layout-egenskaperna i Google Sheets. Om det inte finns någon referens väljer agenten ”Resume Blueprint Writer” en sparad mall baserat på bransch och mappar kandidatens innehåll till den layouten.
Gemini renderar CV:t och Telegram levererar. En agent, ”Visualizer”, skriver en detaljerad prompt från blueprinten, Gemini genererar den slutliga CV-bilden och boten skickar resultatet tillbaka till samma Telegram-chatt.
Du kan enkelt ändra vart den färdiga bilden ska gå (Telegram vs. Google Drive) utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementation
Steg 1: Konfigurera Telegram-triggern
Det här arbetsflödet startar när en användare skickar ett Telegram-meddelande till er bot.
- Lägg till och öppna Telegram Message Trigger.
- Credential Required: Anslut era telegramApi-uppgifter.
- Låt Updates vara inställt på
message. - Spara noden så att n8n registrerar webhooken.
Steg 2: Validera och routa användarinput
Klassificera den inkommande texten och routa till antingen cv-bearbetning eller chattsvar.
- Öppna Validate Incoming Text och sätt Text till
{{ $json.message.text }}. - Säkerställ att Has Output Parser är aktiverat i Validate Incoming Text.
- Öppna Structured Parse Base och låt Auto Fix vara aktiverat med det angivna JSON-schemat.
- Bekräfta att Gemini Chat Model är ansluten som språkmodell för Validate Incoming Text och att uppgifter är tillagda i Gemini Chat Model, inte i parser-noden.
- Konfigurera regler i Route Input Type så att de matchar
Resume,ChatochNoDatamed{{ $json.output.Type }}.
Credential Required: Anslut era googlePalmApi-uppgifter till Gemini Chat Model.
Steg 3: Konfigurera parallella grenar och användarsvar
När input routas kör arbetsflödet antingen en gren för cv-generering eller skickar ett konversationellt svar.
- Notera den parallella exekveringen: Route Input Type skickar utdata till både Execute BrowserAct Flow och Alert Telegram User parallellt.
- Öppna Alert Telegram User och sätt Text till
Ok, I will do it please give me a moment.. - Sätt Chat ID i Alert Telegram User till
{{ $('Telegram Message Trigger').item.json.message.chat.id }}. - Öppna Compose User Reply och sätt Text till
Input type : {{ $json.output.Type }} | User Input : {{ $('Telegram Message Trigger').item.json.message.text }}. - Anslut Compose User Reply till Send Text Response för både utgångarna
ChatochNoData.
Credential Required: Anslut era telegramApi-uppgifter till Alert Telegram User och Send Text Response.
Credential Required: Anslut era googlePalmApi-uppgifter till Gemini Chat Model A, som driver Compose User Reply.
Steg 4: Kör BrowserAct och förbered mall-data
Generera mall-data för cv, rensa bladet och förbered batchbearbetning för designmallar.
- Öppna Execute BrowserAct Flow och sätt Type till
WORKFLOWoch Workflow ID till ert BrowserAct workflow-ID (ersätt[YOUR_ID]). - Credential Required: Anslut era browserActApi-uppgifter till Execute BrowserAct Flow.
- Öppna Wipe Sheet Rows och låt Operation vara inställt på
clear. - Sätt Document ID till
=parameter.SpreadSheetID ==.Or Select From List - Sätt Sheet Name till
parameter.SheetID ==.Or Select From List - Öppna Split BrowserAct Items och behåll den angivna JS Code för att dela upp JSON-strängar.
- Anslut Split BrowserAct Items till Batch Iterator för att starta batchhanteringen.
Credential Required: Anslut era googleSheetsOAuth2Api-uppgifter till Wipe Sheet Rows.
$input.first().json.output.string. Säkerställ att ert BrowserAct-flöde ger utdata på den sökvägen.Steg 5: Analysera cv-designer och fyll i Google Sheets
Hämta och analysera mall-cv:n och lagra de visuella beskrivningarna i Google Sheets.
- Öppna Fetch Resume File och sätt URL till
{{ $json.Resume }}. - Öppna Convert SVG to JPG och sätt Output Format till
jpg. - Öppna Inspect Resume Image och låt Resource vara
image, Input Type varabinaryoch Operation varaanalyze. - Öppna Append Sheet Data och mappa Resume Details till
{{ $json.content.parts[0].text }}. - Säkerställ att Append Sheet Data använder Operation
appendmed samma värden för Document ID och Sheet Name som Wipe Sheet Rows. - Bekräfta batchloopen: Append Sheet Data → Batch Iterator → Retrieve Sheet Rows → Aggregate Sheet Records.
Credential Required: Anslut era cloudConvertOAuth2Api-uppgifter till Convert SVG to JPG.
Credential Required: Anslut era googlePalmApi-uppgifter till Inspect Resume Image.
Credential Required: Anslut era googleSheetsOAuth2Api-uppgifter till Append Sheet Data och Retrieve Sheet Rows.
Steg 6: Generera cv-blueprint med AI
Använd Gemini för att välja den bästa designen och generera en strukturerad blueprint baserad på användardata.
- Öppna Aggregate Sheet Records och låt Aggregate vara inställt på
aggregateAllItemData. - Öppna Resume Blueprint Writer och sätt Text till
Template Examples : {{ $json.data[0]["Resume Details"] }}, User Resume : {{ $('Validate Incoming Text').first().json.output.Resume }}, Category : {{ $('Validate Incoming Text').first().json.output.Category }} you need to use user resume data for final ouput.. - Säkerställ att Resume Blueprint Writer har Has Output Parser aktiverat.
- Öppna Structured Parse A och låt Auto Fix vara aktiverat med blueprintens JSON-schema.
- Bekräfta att Gemini Chat Model B är ansluten som språkmodell för Resume Blueprint Writer och att uppgifter är tillagda i Gemini Chat Model B, inte i parser-noden.
Credential Required: Anslut era googlePalmApi-uppgifter till Gemini Chat Model B.
Steg 7: Skapa och rendera den slutliga cv-bilden
Gör om blueprinten till en bildprompt och rendera det slutliga cv:t.
- Öppna Create Image Prompt och sätt Text till
{{ $json.output.Resume }}. - Säkerställ att Create Image Prompt har Has Output Parser aktiverat och använder Structured Parse B med bildprompt-schemat.
- Bekräfta att Gemini Chat Model C är ansluten som språkmodell för Create Image Prompt.
- Öppna Render Resume Image och sätt Prompt till
{{ $json.output.Image_Prompt }}. - Säkerställ att Render Resume Image ger binärdata med standardvärdet för Binary Property Output på
data.
Credential Required: Anslut era googlePalmApi-uppgifter till Gemini Chat Model C och Render Resume Image.
Steg 8: Konfigurera leverans av utdata till Telegram
Skicka den renderade cv-bilden eller ett textsvar tillbaka till användaren.
- Öppna Send Resume Result och sätt Operation till
sendPhoto. - Sätt Binary Data till true så att bilden skickas från Render Resume Image.
- Sätt Chat ID till
{{ $('Telegram Message Trigger').first().json.message.chat.id }}. - Öppna Send Text Response och sätt Text till
{{ $json.output }}. - Sätt Chat ID i Send Text Response till
{{ $('Telegram Message Trigger').item.json.message.chat.id }}.
Credential Required: Anslut era telegramApi-uppgifter till Send Resume Result och Send Text Response.
Steg 9: Testa och aktivera
Validera flödet end-to-end och aktivera sedan arbetsflödet för produktionsanvändning.
- Klicka på Execute Workflow och skicka ett Telegram-meddelande med en cv-förfrågan.
- Bekräfta att Alert Telegram User svarar direkt medan Execute BrowserAct Flow körs parallellt.
- Verifiera att Send Resume Result levererar en bild när input-typen är
Resumeoch att Send Text Response levererar ett meddelande förChatellerNoData. - Kontrollera Google Sheet så att Append Sheet Data har lagt till rader och att Retrieve Sheet Rows kan läsa dem.
- När testet är godkänt, slå på arbetsflödet Active för att aktivera produktionsanvändning.
Vanliga fallgropar
- Inloggningsuppgifter för Google Sheets kan gå ut eller behöva specifika behörigheter. Om saker slutar fungera, kontrollera först credential-statusen i n8n och delningsinställningarna för kalkylarket.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- Leverans via Telegram-bot kan misslyckas om den genererade bilden är för stor eller om chatt-ID:t ändras. Om meddelanden slutar komma fram, bekräfta att boten fortfarande har åtkomst till chatten och granska felutdata från Telegram-noden.
Vanliga frågor
Cirka en timme om dina konton redan är skapade.
Nej. Du kommer främst att koppla inloggningsuppgifter och klistra in prompts/inställningar för AI-agenterna.
Ja. n8n har ett gratis alternativ för egen hosting och en gratis provperiod på n8n Cloud. Cloud-planer startar på 20 USD/månad för högre volym. Du behöver också räkna med kostnader för användning av Google Gemini API, som varierar beroende på modell och volym för bildgenerering.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärt och hanterar n8n bra. Egen hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det är en vanlig justering. Ersätt Telegram-steget ”Send Resume Result” med en uppladdning till Google Drive så att bilden lagras automatiskt, och skicka sedan eventuellt Drive-länken tillbaka i Telegram. Du kan också exportera till PDF/PNG genom att lägga till ett konverteringssteg efter rendering. Om du vill att stilbiblioteket ska delas mellan teammedlemmar, behåll Google Sheets som mallager och ändra bara slutdestinationen.
Oftast är det bot-token eller chattbehörigheter. Bekräfta att Telegram Bot Token i n8n är korrekt, och verifiera sedan att boten faktiskt är i chatten (eller att du meddelar den direkt) och inte har blivit blockerad. Om du nyligen skapade om boten kommer den gamla token fortfarande att ”se giltig ut” men fungerar inte. Kontrollera också felutdata från Telegram-noden i körningsloggen, eftersom den ofta visar ett tydligt meddelande som ”chat not found” eller ”forbidden”.
Om du hostar n8n själv finns ingen fast körningsgräns, så kapaciteten beror främst på din server och hur snabbt Gemini renderar bilder. På n8n Cloud är den praktiska gränsen din månatliga körningskvot i din plan, plus API-rate limits från Gemini och eventuell filkonverteringstjänst. För många mindre team är det realistiskt att hantera några dussin CV:n per dag så länge du köar batcher och inte försöker rendera allt samtidigt.
Ofta, ja, eftersom den här typen av flöde kräver branching, filhantering och AI-promptning i flera steg som blir klumpigt (och dyrt) i enklare automationsverktyg. n8n är också enklare att hosta själv, vilket spelar roll om du kör många CV-förfrågningar. Zapier eller Make kan fortfarande fungera om du bara vill ha en enkel ”Telegram in, bild ut”-pipeline med minimal logik. Om du är osäker, prata med en automationsexpert så tar vi fram den billigaste setupen som ändå känns pålitlig.
När det här väl är igång tar flödet hand om den repetitiva formateringsloopen och din ”CV-leverans” blir en enkel Telegram-konversation. Sätt upp det, spara dina stilar i Sheets och sluta bygga om samma layouter från grunden.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.