Din Telegram-inkorg rör sig snabbt. Sedan dyker det upp ett röstmeddelande. Sedan en skärmdump. Sedan en PDF. Plötsligt växlar du kontext, skriver om samma förklaringar och skickar ändå svar som känns lite ”off” jämfört med ditt varumärke.
Den här konfigurationen för Telegram OpenAI replies slår hårdast mot supportansvariga, men marknadschefer som svarar på DM och grundare som hanterar kundfrågor känner av det också. Målet är enkelt: färre följdfrågor, snabbare svar och svar som håller sig konsekventa även när meddelandeformatet varierar.
Du sätter upp en Telegram-bot som kan förstå text, röst, bilder och dokument, och sedan svara i korrekt formaterad text (eller ljud när det är rimligt). Och du lär dig vad du ska justera så att den låter som du, inte som en generisk chatbot.
Så här fungerar automatiseringen
Här är hela arbetsflödet du kommer att sätta upp:
n8n Workflow Template: Telegram + OpenAI: smartare svar på varje msg
flowchart LR
subgraph sg0["Receive Message 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/>Receive Message"]
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch", 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/telegram.svg' width='40' height='40' /></div><br/>Get Audio File"]
n3@{ icon: "mdi:memory", form: "rounded", label: "Window Buffer Memory", pos: "b", h: 48 }
n4@{ icon: "mdi:robot", form: "rounded", label: "Analyze Image", pos: "b", h: 48 }
n5["<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/>Fix File Extension"]
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/telegram.svg' width='40' height='40' /></div><br/>Text Response"]
n7@{ icon: "mdi:robot", form: "rounded", label: "Generate Audio", 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/telegram.svg' width='40' height='40' /></div><br/>Audio Response"]
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/telegram.svg' width='40' height='40' /></div><br/>Download Image"]
n10@{ icon: "mdi:robot", form: "rounded", label: "Transcribe", 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/telegram.svg' width='40' height='40' /></div><br/>Download Document"]
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format-text-output", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format-voice-output", pos: "b", h: 48 }
n14@{ icon: "mdi:memory", form: "rounded", label: "Simple Vector Store", pos: "b", h: 48 }
n15@{ icon: "mdi:vector-polygon", form: "rounded", label: "Embeddings OpenAI1", pos: "b", h: 48 }
n16@{ icon: "mdi:robot", form: "rounded", label: "Default Data Loader", pos: "b", h: 48 }
n17@{ icon: "mdi:robot", form: "rounded", label: "Token Splitter", pos: "b", h: 48 }
n18@{ icon: "mdi:memory", form: "rounded", label: "Simple Vector Store1", pos: "b", h: 48 }
n19@{ icon: "mdi:wrench", form: "rounded", label: "Image Generator", pos: "b", h: 48 }
n20@{ icon: "mdi:wrench", form: "rounded", label: "Basic Google Search", pos: "b", h: 48 }
n21@{ icon: "mdi:wrench", form: "rounded", label: "Webpage Scraper", pos: "b", h: 48 }
n22@{ icon: "mdi:wrench", form: "rounded", label: "Calculator", pos: "b", h: 48 }
n23@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n24@{ icon: "mdi:wrench", form: "rounded", label: "Think", 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/code.svg' width='40' height='40' /></div><br/>Split MSG"]
n26@{ icon: "mdi:robot", form: "rounded", label: "J.A.R.V.I.S.", pos: "b", h: 48 }
n27["<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/>Convert Doc"]
n28@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format-doc-output", pos: "b", h: 48 }
n29@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format-image-output", pos: "b", h: 48 }
n30@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If Audio Response", pos: "b", h: 48 }
n31@{ icon: "mdi:vector-polygon", form: "rounded", label: "Embeddings OpenAI", pos: "b", h: 48 }
n32@{ icon: "mdi:swap-vertical", form: "rounded", label: "API Setup", pos: "b", h: 48 }
n24 -.-> n26
n1 --> n9
n1 --> n2
n1 --> n12
n1 --> n11
n32 --> n1
n25 --> n6
n22 -.-> n26
n10 --> n13
n27 --> n14
n26 --> n30
n4 --> n29
n9 --> n5
n7 --> n8
n2 --> n10
n17 -.-> n16
n19 -.-> n26
n0 --> n32
n21 -.-> n26
n11 --> n27
n31 -.-> n18
n28 --> n26
n30 --> n25
n30 --> n7
n23 -.-> n26
n15 -.-> n14
n5 --> n4
n12 --> n26
n20 -.-> n26
n16 -.-> n14
n29 --> n6
n13 --> n26
n14 --> n28
n18 -.-> n26
n3 -.-> n26
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 n4,n7,n10,n16,n17,n26 ai
class n23 aiModel
class n19,n20,n21,n22,n24 ai
class n3,n14,n18 ai
class n15,n31 ai
class n1,n30 decision
class n5,n25,n27 code
classDef customIcon fill:none,stroke:none
class n0,n2,n5,n6,n8,n9,n11,n25,n27 customIcon
Varför det här spelar roll: multimodala meddelanden slår sönder supportflödet
De flesta team kan hantera ren text snabbt. Strulet börjar när kunder skickar ”hjälp” som ett röstmeddelande, en suddig skärmdump eller en PDF-faktura med en rad markerad. Du laddar ner filer, transkriberar ljud för hand, ställer följdfrågor och förklarar samma policy igen eftersom originalmeddelandet inte passade din vanliga process. Det är inte bara långsamt. Det kostar mentalt. Och när du har bråttom blir svaren inkonsekventa, vilket skapar mer fram och tillbaka och mer misstro.
Det blir snabbt mycket. Så här faller det isär i verkligheten.
- Röstmeddelanden tvingar någon att stanna upp och lyssna, sedan sammanfatta och sedan svara.
- Bilder och skärmdumpar döljer den viktiga detaljen, så du frågar ”Kan du förtydliga?” även när svaret finns där.
- PDF:er och dokument blir dödvikt eftersom ingen vill läsa dem på mobilen.
- Utan minne mellan meddelanden upprepar kunderna sig och ditt team upprepar sig tillbaka.
Vad du bygger: en Telegram-assistent som förstår alla format
Det här arbetsflödet gör en Telegram-bot till en multimodal assistent som svarar som en kompetent kollega. Ett nytt Telegram-meddelande triggar automatiseringen, och sedan routar flödet det utifrån vad som kom in: text, röst, en bild eller ett dokument. Röstmeddelanden laddas ner och transkriberas med OpenAI, bilder analyseras med en vision-modell och dokument laddas in i ett temporärt vektorlager så att assistenten kan söka i och hänvisa till dem. Allt skickas sedan till en central AI-agent (”J.A.R.V.I.S.”-agenten i flödet) med konversationsminne och valfria verktyg som webbsök, webbskrapning, bildgenerering och en miniräknare. Till sist skickar flödet ett svar tillbaka till Telegram som text, eller genererar ett ljudsvar när originalmeddelandet var ljud.
Flödet är rakt på sak när det väl rullar. Telegram tar emot ett meddelande, arbetsflödet normaliserar det till läsbar text (även om det började som röst, bild eller PDF), och AI-agenten tar fram ett kontextmedvetet svar. Sista grenen avgör hur det levereras: text uppdelad i Telegram-vänliga delar, eller ett röstmeddelande genererat av OpenAI.
Vad du bygger
| Vad som automatiseras | Vad du uppnår |
|---|---|
|
|
Förväntade resultat
Säg att du hanterar cirka 20 Telegram-ärenden per dag, och att runt 8 av dem innehåller ett röstmeddelande, en skärmdump eller en PDF. Manuellt är det lätt att bränna 5 minuter per ”icke-text”-meddelande på att ladda ner, lyssna, läsa och sammanfatta, vilket blir cirka 40 minuter per dag. Med det här arbetsflödet skummar du AI:ns svarsförslag och skickar det, medan transkribering och dokumentsökning sker i bakgrunden. Realistiskt får du tillbaka ungefär 30 minuter per dag, plus färre långa trådar.
Innan du börjar
- n8n-instans (testa n8n Cloud gratis)
- Självhosting om du föredrar det (Hostinger fungerar bra)
- Telegram-bot för att ta emot meddelanden och skicka svar
- OpenAI för transkribering, vision och chattsvar
- SerpAPI-nyckel (hämta den i din SerpAPI-dashboard)
- Jina AI-nyckel (hämta den från ditt Jina.ai-konto)
Svårighetsgrad: Mellannivå. Du är bekväm med att koppla upp credentials, redigera prompts och testa några meddelandetyper i Telegram.
Vill du att någon bygger detta åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).
Steg för steg
Ett Telegram-meddelande triggar allt. Din bot tar emot ett nytt meddelande i en specifik chatt (användare eller grupp), och n8n plockar upp det direkt så att du kan reagera i nära realtid.
Arbetsflödet identifierar vad som kom in. Ett routningssteg kontrollerar meddelandetypen och grenar tydligt: text går rakt igenom, medan röst, bilder och dokument först laddas ner från Telegram.
Innehållet konverteras till något assistenten kan använda. Röstmeddelanden transkriberas med OpenAI. Bilder granskas med en modell som klarar vision. Dokument normaliseras, delas upp i chunkar, embedas och lagras i ett temporärt vektorlager så att agenten kan referera dem när den svarar.
AI-agenten skriver svaret och levererar det i rätt format. Agenten använder en OpenAI-chattmodell plus korttidsminne och valfria verktyg (sök, skrapning, miniräknare, bildgenerering). Om användaren skickade ljud kan flödet generera ett ljudsvar; annars skickar det text och delar upp långa svar i flera Telegram-meddelanden.
Du kan enkelt ändra assistentens ton och verktyg efter dina behov. Se den fullständiga implementeringsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera Telegram-triggern
Börja med att konfigurera den inkommande Telegram-webhooken så att arbetsflödet kan ta emot text-, röst-, bild- och dokumentmeddelanden.
- Lägg till noden Telegram Incoming Trigger och behåll Updates inställt på
message. - Inloggningsuppgifter krävs: Anslut era Telegram API-inloggningsuppgifter i Telegram Incoming Trigger så att n8n kan ta emot webhook-händelser.
- Verifiera att noden visar en webhook-URL och att er Telegram-bot är aktiv.
Steg 2: Lägg till API-konfiguration och routning av meddelanden
Initiera konfigurationsvärden och routa inkommande meddelandetyper till rätt bearbetningsgren.
- I API Configuration, behåll Include Other Fields aktiverat och ställ in JINA_API till er token om ni tänker använda webbplatsskrapning.
- Anslut Telegram Incoming Trigger → API Configuration → Route by Message Type.
- I Route by Message Type, bekräfta att reglerna kontrollerar bilder, röst, text och dokument med uttryck som
{{ $json.message.photo }},{{ $json.message.voice.file_id }},{{ $json.message.text }}och{{ $json.message.document.file_id }}. - Anslut de fyra utgångarna till Retrieve Image File, Fetch Voice File, Prepare Text Payload respektive Retrieve Document File.
Steg 3: Konfigurera meddelandeintag och förbered payload
Förbered varje meddelandetyp så att assistenten får en konsekvent indatastruktur.
- För bilder: ställ in Retrieve Image File File ID till
{{ $json.message.photo[2].file_id }}, och anslut sedan till Adjust Image Extension och Inspect Image Content. - I Adjust Image Extension, behåll JavaScript-koden som sätter
inputItem.binary.data.mimeTypebaserat på filändelsen. - I Inspect Image Content, ställ in Text till
{{ $('Telegram Incoming Trigger').item.json.message.caption || "Describe this image" }}och behåll Resource somimage. - I Prepare Image Payload, mappa output till
{{ $json.content }}och ställ in type tillimage. - För röst: konfigurera Fetch Voice File File ID som
{{ $json.message.voice.file_id }}, anslut till Transcribe Audio, och därefter Prepare Voice Payload med chat_input som{{ $json.text }}och type somvoice. - För text: i Prepare Text Payload, ställ in chat_input till
{{ $json.message.text }}och type tilltext.
Steg 4: Bearbeta dokument till den temporära vektorlagringen
Dokumentuppladdningar normaliseras, chunkas, bäddas in och lagras för att kunna hämtas av assistenten.
- I Retrieve Document File, behåll File ID inställt på
{{ $json.message.document.file_id }}och anslut till Normalize Document Mime. - I Normalize Document Mime, behåll JavaScript-raden som sätter
inputItem.binary.data.mimeTypetill{{ $('Telegram Incoming Trigger').first().json.message.document.mime_type }}. - Anslut Normalize Document Mime → InMemory Vector Store med Mode
insert, Memory Keyvector_store_keyoch Clear Store aktiverat. - Säkerställ att Default Document Loader använder Data Type
binaryoch är ansluten till Token Chunk Splitter. - Efter infogning, skicka kontextmeddelandet i Prepare Document Payload med chat_input inställt till den formaterade strängen som innehåller
{{ $json.metadata.blobType }}och{{ $('Telegram Incoming Trigger').item.json.message.caption }}.
Steg 5: Konfigurera AI-assistenten och verktygen
Koppla ihop språkmodellen, minnet, embeddings och verktygen som assistenten använder för resonemang och multimodala svar.
- I Core Assistant Agent, ställ in Text till
{{ $json.chat_input }}och behåll Prompt Type somdefinemed det angivna systemmeddelandet. - Anslut OpenAI Chat Modeler som språkmodell för Core Assistant Agent. Inloggningsuppgifter krävs: Anslut era OpenAI API-inloggningsuppgifter i OpenAI Chat Modeler.
- Koppla Session Buffer Memory till agenten och behåll Session Key som
{{ $('Telegram Incoming Trigger').item.json.message.chat.id }}med Context Window Length10. - Anslut verktygen AI Image Generator, Web Search Tool, Website Scrape Tool, Math Calculator Tool, Reasoning Scratchpad och Temporary Vector Tool till Core Assistant Agent.
- Säkerställ att embeddings finns tillgängliga: OpenAI Embeddings A för InMemory Vector Store och OpenAI Embeddings B för Temporary Vector Tool. Inloggningsuppgifter krävs: Anslut era OpenAI API-inloggningsuppgifter i varje embeddings-nod.
Steg 6: Konfigurera svarslogik och utdata
Routa assistentens svar till text eller ljud och skicka tillbaka dem till Telegram.
- I Branch Audio Reply, behåll villkoret som kontrollerar
{{ $('Telegram Incoming Trigger').item.json.message.voice.file_id }}så att arbetsflödet vet om det ska svara med ljud eller text. - För textsvar: behåll JavaScript-koden i Split Long Messages som den är och anslut den till Send Text Reply med Text inställt på
{{ JSON.stringify($json.output) }}. - För ljudsvar: behåll Create Audio Reply konfigurerad med Model
gpt-4o-mini-tts, Voiceechooch Input{{ $json.output }}, och anslut sedan till Send Audio Reply med OperationsendAudio. - Inloggningsuppgifter krävs: Anslut era Telegram API-inloggningsuppgifter till alla Telegram-noder: Fetch Voice File, Retrieve Image File, Retrieve Document File, Send Text Reply och Send Audio Reply.
maxLength på 3600 tecken för att hålla sig inom Telegrams gränser.Steg 7: Testa och aktivera ert arbetsflöde
Verifiera att alla grenar fungerar för varje meddelandetyp innan ni går över till produktionsläge.
- Klicka på Execute Workflow och skicka ett text-, bild-, röst- och dokumentmeddelande till er Telegram-bot.
- Bekräfta att textsvar returneras via Send Text Reply och att röstinmatningar genererar ett ljudmeddelande via Send Audio Reply.
- Kontrollera att dokumentuppladdningar fyller vektorlagringen och att assistenten refererar till uppladdat innehåll.
- När testerna är godkända, slå om arbetsflödet till Active för användning i produktion.
Felsökningstips
- Telegram-credentials kan fallera om bot-token ändras eller om chatId är fel. Om inget triggar, börja med att kontrollera bot-token och inställningarna för auktoriserad chatt i Telegram trigger-noden.
- Om du indirekt använder wait-liknande beteende (nedladdningar, transkribering, embedding eller webbverktyg) varierar processtiderna. Om noder längre fram får tomma filer eller saknad text, öka timeouts på HTTP-requests eller gör om hämta-/transkribera-steget med retry.
- Standardprompterna i AI-agenten är generiska. Lägg in din varumärkeston, eskaleringsregler och tydliga riktlinjer för ”när ska jag säga att jag inte vet” tidigt, annars kommer du att redigera utdata för alltid.
Snabba svar
Cirka 45 minuter om du redan har dina API-nycklar redo.
Nej. Du kopplar mest ihop konton och redigerar några prompts och villkor.
Ja. n8n har ett gratis alternativ för självhosting 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 med OpenAI API-kostnader, som för typiska chatt- och transkriberingsvolymer oftast landar på några dollar i månaden om du inte bearbetar mycket ljud.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller självhosting på en VPS. För självhosting är Hostinger VPS prisvärd och hanterar n8n bra. Självhosting ger dig obegränsat antal körningar men kräver grundläggande serveradministration.
Ja, och det bör du. Uppdatera systemprompten i noden ”Core Assistant Agent” så att den matchar din varumärkeston, dina regler och eskaleringsvägar. Du kan också byta OpenAI-modell i noden ”OpenAI Chat Modeler”, justera villkoret ”Branch Audio Reply” så att den alltid svarar i text och stänga av webbverktyg om du vill begränsa svaren till din interna kunskap och uppladdade dokument.
Oftast är det bot-token eller chattbehörighet. Kontrollera Telegram-credentials i n8n igen och bekräfta sedan att trigger-noden lyssnar på rätt chatId (särskilt om du gick från en testchatt till en grupp). Om filnedladdningar misslyckas kan Telegram ibland returnera en filsökväg som går ut, så kör om meddelandet och säkerställ att noderna ”Fetch Voice File” eller ”Retrieve Document File” använder färsk meddelandedata.
På n8n Cloud Starter kan du typiskt hantera några tusen körningar per månad, vilket räcker för många små supportteam. Om du självhostar finns inget tak för körningar, men dina serverresurser blir begränsningen. I praktiken går textmeddelanden snabbt, medan rösttranskribering och dokument-embedding kan göra flödet långsammare, så högvolym-support med mycket ljud kan kräva en större VPS.
Ofta ja, men det beror på hur ”smart” du vill att assistenten ska vara. Det här flödet använder grenlogik, minne, filhantering och en verktygslåda för agenten (sök, skrapning, embeddings) som blir krånglig eller dyr med Zapier-liknande task-prissättning. n8n ger dig också möjligheten att självhosta för obegränsat antal körningar, vilket spelar roll när Telegram-volymen sticker iväg. Om ditt use case bara är ”skicka meddelande till OpenAI, posta svar” kan Zapier eller Make vara enklare. Om du är osäker, prata med en automationsexpert så mappar vi det mot din belastning.
När detta är live slutar Telegram kännas som en hög av avbrott och blir hanterbart igen. Arbetsflödet tar hand om det repetitiva tolkningsarbetet, så att du kan fokusera på själva beslutet och den mänskliga touchen.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.