Din Telegram-bot funkar … tills den inte gör det. Svaren börjar upprepa sig. Kontexten försvinner. Någon ställer “samma” fråga på tre olika sätt, och du betalar för tre olika AI-anrop.
Det här problemet med en Telegram Postgres-bot slår först mot supportansvariga, eftersom de ser de frustrerade följdfrågorna. Marknadsteam som hanterar community-DM:s och grundare som svarar på pre-sales-frågor känner av det också. Du vill ha svar som håller sig konsekventa, även efter en lång tråd, utan att bränna din AI-budget.
Det här arbetsflödet gör Telegram till en assistent med minne: det lagrar chattkontext i Postgres, sammanfattar långa trådar, skickar enkla frågor till billigare modeller och hanterar röstmeddelanden utan att förvandla inkorgen till kaos. Du får se vad det gör, vad du behöver och var team oftast kör fast.
Så fungerar den här automatiseringen
Se hur den här löser problemet:
n8n Workflow Template: Telegram + Postgres: en bot som minns och kostar mindre
flowchart LR
subgraph sg0["Telegram Flow"]
direction LR
n0@{ icon: "mdi:brain", form: "rounded", label: "Model Selector", pos: "b", h: 48 }
n1@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n2@{ icon: "mdi:brain", form: "rounded", label: "Gemini 2.5 Flash Lite", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "Gemini 2.5 Flash", pos: "b", h: 48 }
n4@{ icon: "mdi:brain", form: "rounded", label: "Gemini 2.5 Pro", 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/postgres.svg' width='40' height='40' /></div><br/>Get Chat Memory"]
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/code.svg' width='40' height='40' /></div><br/>MarkdownV2"]
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/telegram.svg' width='40' height='40' /></div><br/>Send a text message"]
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/code.svg' width='40' height='40' /></div><br/>Fix mime"]
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/>Typing…"]
n10@{ icon: "mdi:swap-vertical", form: "rounded", label: "get_message (Audio/Video mes..", pos: "b", h: 48 }
n11@{ icon: "mdi:robot", form: "rounded", label: "Analyze voice message", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "get_message (text)", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Input Message Router1", pos: "b", h: 48 }
n14["<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 Voice Message"]
n15["<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"]
n16@{ icon: "mdi:swap-vertical", form: "rounded", label: "Normalize input", pos: "b", h: 48 }
n17@{ icon: "mdi:cog", form: "rounded", label: "Aggregate", pos: "b", h: 48 }
n18@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini 2.5 Flash Lite", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "get_error_message", pos: "b", h: 48 }
n20@{ icon: "mdi:robot", form: "rounded", label: "Agent", 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/postgres.svg' width='40' height='40' /></div><br/>Update Chat Memory (User and.."]
n24@{ icon: "mdi:robot", form: "rounded", label: "Summarize & Categorize", pos: "b", h: 48 }
n20 --> n6
n20 --> n23
n8 --> n11
n17 --> n24
n6 --> n7
n4 -.-> n0
n0 -.-> n20
n5 --> n17
n16 --> n5
n3 -.-> n0
n15 --> n13
n15 --> n9
n19 --> n16
n12 --> n16
n11 --> n10
n2 -.-> n0
n13 --> n12
n13 --> n14
n13 --> n19
n14 --> n8
n24 --> n20
n1 -.-> n24
n18 -.-> n24
n10 --> n16
end
subgraph sg1["When clicking ‘Execute workflow’ Flow"]
direction LR
n21@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Execute workf..", pos: "b", h: 48 }
n22["<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/postgres.svg' width='40' height='40' /></div><br/>Create Chat Memory Table"]
n21 --> n22
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 n15,n21 trigger
class n1,n11,n20,n24 ai
class n0,n2,n3,n4,n18 aiModel
class n13 decision
class n5,n23,n22 database
class n6,n8 code
classDef customIcon fill:none,stroke:none
class n5,n6,n7,n8,n9,n14,n15,n23,n22 customIcon
Utmaningen: Telegram-botar som glömmer (och blir dyra)
De flesta Telegram-“AI-botar” beter sig som guldfiskar. De svarar på det senaste meddelandet, kanske kastar ett öga på lite nylig historik, och gissar sedan. Så fort en konversation blir lång blir kontext antingen för dyr att skicka (många tokens) eller för riskabel att hoppa över (fel svar, inkonsekvent policy, upprepade förtydligande frågor). Lägg till röstmeddelanden så blir det ännu värre. Du får långsamma svar, högre modellförbrukning än du planerat och en supportupplevelse som känns märkligt spretig.
Det blir dyrt snabbt, särskilt när samma användare kommer tillbaka varje dag och din bot “träffar dem” som om det vore första gången.
- Folk upprepar sig eftersom boten inte kan bära med sig kontext genom en tråd, vilket drar ut på samtalen.
- Du betalar för big-model-anrop på enkla frågor, eftersom inget klassificerar förfrågningar innan ett svar genereras.
- Lång chatthistorik gör promptar onödigt stora, så svaren blir långsammare och ibland skapar fel vid formatering när de skickas tillbaka till Telegram.
- Röstmeddelanden blir manuellt jobb när transkribering inte är inbyggd i samma arbetsflöde som svarar och kommer ihåg.
Lösningen: en minnessmart Telegram-assistent med Postgres + modellrouting
Det här arbetsflödet startar så fort ett meddelande når din Telegram-bot och avgör sedan vilken typ av meddelande det är (text, röst eller något den inte kan hantera på ett felfritt sätt). För text normaliserar det inkommande data, hämtar relevant chatthistorik från Postgres och kombinerar användar- och assistentmeddelanden till ett enda “konversationspaket” så att AI:n ser en sammanhängande tråd. När tråden blir lång sammanfattar den konversationen med en lättviktig modell, vilket håller kontexten användbar utan att trycka in varje tidigare meddelande i prompten. Därefter klassificerar den förfrågan och routar den till rätt Gemini-modell: billig och snabb för snabb Q&A, mer kapabel för komplexa resonemang. Till sist formaterar den utdata säkert för Telegram MarkdownV2, svarar i chatten och lägger till den nya utväxlingen i Postgres så att boten faktiskt kommer ihåg nästa gång.
Flödet börjar med Telegram, sedan tillför Postgres minne, och Gemini hanterar både sammanfattning och svar. Röstmeddelanden laddas ned, korrigeras för MIME-egenheter, transkriberas till text och körs genom samma minnes- och routinglogik. Resultatet är en konsekvent assistentupplevelse, inte två separata spår som glider isär över tid.
Vad som förändras: före vs. efter
| Det här elimineras | Effekten du ser |
|---|---|
|
|
Effekt i verkligheten
Säg att din bot hanterar cirka 40 konversationer per dag och att varje konversation i snitt har 6 fram-och-tillbaka-meddelanden. Utan minne hoppar en människa ofta in för att dubbelkolla kontext för “Vilket abonnemang har jag?” eller “Vad lovade du tidigare?”, kanske 2 minuter per konversation, vilket blir cirka 80 minuter per dag. Med det här arbetsflödet hämtas chatthistorik automatiskt, sammanfattas när den blir lång och routas till en billigare modell för enkla frågor. Den mänskliga insatsen sjunker nära noll, och botens svarstid förbättras med ungefär en tredjedels sekund per svar, vilket känns rappare i chatten.
Krav
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- Telegram Bot API för att ta emot och skicka meddelanden.
- PostgreSQL för att lagra chattminne i en tabell.
- Google Gemini API-nyckel (hämta den från Google AI Studio) för routing, sammanfattning och transkribering.
Kunskapsnivå: Medel. Du kopplar in inloggningsuppgifter och kör en engångs-SQL för att skapa en tabell, men du bygger ingen app.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Flödet i arbetsflödet
Ett Telegram-meddelande triggar körningen. Arbetsflödet lyssnar på inkommande meddelanden och visar direkt en “skriver”-åtgärd, så att boten känns responsiv medan bearbetning sker i bakgrunden.
Inkommande innehåll normaliseras och klassificeras. En switch skiljer text från röst, och sedan rensas data till en konsekvent struktur så att senare steg inte skapar fel vid saknade fält.
Minnet hämtas, komprimeras och används smart. Postgres returnerar chatthistorik, meddelanden kombineras och långa konversationer sammanfattas med en lättviktig Gemini-modell så att den slutliga prompten förblir kort och relevant.
Assistenten svarar med rätt modell och skickar sedan ett säkert svar. En modellväljare routar enkla frågor till billigare alternativ och komplexa frågor till starkare resonemang. Svaret formateras för Telegram MarkdownV2 och skickas tillbaka, och sedan lagras utväxlingen i Postgres till nästa gång.
Du kan enkelt ändra reglerna för modellrouting så att de matchar din budget, eller byta sammanfattningsprompten för att styra din tonalitet. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-implementeringsguide
Steg 1: konfigurera Telegram-triggern
Konfigurera Telegram-ingången så att inkommande meddelanden startar arbetsflödet och skrivindikatorer skickas parallellt.
- Lägg till och öppna Telegram Incoming Trigger och ställ sedan in Updates till
message. - Credential Required: Anslut era
telegramApi-uppgifter i Telegram Incoming Trigger. - Anslut Telegram Incoming Trigger till både Input Type Switch och Send Typing Action för att matcha den parallella körningen: Telegram Incoming Trigger skickar output till både Input Type Switch och Send Typing Action parallellt.
- Öppna Send Typing Action och ställ in Operation till
sendChatActionoch Chat ID till{{ $json.message.chat.id }}. - Credential Required: Anslut era
telegramApi-uppgifter i Send Typing Action.
Steg 2: anslut Telegram-inmatningsroutning och mediehantering
Routa text jämfört med röstmeddelanden, ladda ned röstfiler, korrigera MIME-typer och förbered en konsekvent input för efterföljande bearbetning.
- Konfigurera Input Type Switch med två regler: Text finns på
{{ $('Telegram Incoming Trigger').item.json.message.text }}, och Voice Message finns på{{ $('Telegram Incoming Trigger').item.json.message.voice }}. - Från Text-outputen ställer ni in Extract Text Message så att den skapar message som
{{ $('Telegram Incoming Trigger').item.json.message.text }}och chat_id som{{ $('Telegram Incoming Trigger').item.json.message.chat.id }}. - Från Voice Message-outputen konfigurerar ni Download Voice File med File ID satt till
{{ $('Telegram Incoming Trigger').item.json.message.voice.file_id }}. - Credential Required: Anslut era
telegramApi-uppgifter i Download Voice File. - Anslut Download Voice File → Correct MIME Types → Transcribe Voice Input för att normalisera binärdata före transkribering.
- Ställ in Transcribe Voice Input till Resource
audio, Input Typebinary, Operationanalyze, och Text tillWhat's in this audio message from telegram user?. - Credential Required: Anslut era
googlePalmApi-uppgifter i Transcribe Voice Input. - Ställ in Extract Audio Message så att den mappar message som
=Voice message description:{{ $json.candidates?.[0]?.content?.parts?.[0]?.text || $json.content?.parts?.[0]?.text }}och chat_id som{{ $('Telegram Incoming Trigger').item.json.message.chat.id }}. - För innehåll som inte stöds behåller ni Prepare Error Message med message satt till
It was not possible to process the file.File type not supported.och chat_id till{{ $('Telegram Incoming Trigger').item.json.message.chat.id }}. - Normalisera både text- och ljudvägarna med Normalize Incoming Data med message
{{ $json.message }}och chat_id{{ $json.chat_id }}.
Steg 3: konfigurera lagring av chattminne (Postgres)
Skapa minnestabellen och ladda in senaste konversationshistoriken för kontextmedvetna svar.
- Använd Manual Run Trigger för det engångsflöde som sätter upp databasen.
- Öppna Create Memory Table och ställ in Operation till
executeQuerymed SQL:en i Query exakt som den är angiven i noden. - Credential Required: Anslut era
postgres-uppgifter i Create Memory Table. - Konfigurera Fetch Chat History med Operation
selectoch Limit25, och välj tabellenpublic.chat_memory. - Credential Required: Anslut era
postgres-uppgifter i Fetch Chat History. - Anslut Normalize Incoming Data → Fetch Chat History → Combine Messages för att aggregera historisk kontext.
Steg 4: ställ in summering, klassificering och modellroutning
Summera chatthistorik, klassificera svårighetsgrad och routa till rätt Gemini-modell.
- I Combine Messages aggregerar ni message för att skapa en meddelandelista som används för summering.
- Konfigurera Summarize and Classify med Text satt till
=Chat Memory: {{ $('Combine Messages').item.json.message.join('\n') }} User Request: {{ $('Normalize Incoming Data').item.json.message }}och Prompt Type satt tilldefine. - Anslut Structured Output Decoder som output-parser för Summarize and Classify, med JSON-schemat som redan finns i noden.
- Koppla Gemini Flash Lite Summarizer som språkmodell för Summarize and Classify.
- Credential Required: Anslut era
googlePalmApi-uppgifter i Gemini Flash Lite Summarizer. - Ställ in Model Choice Router för att routa baserat på
{{ $json.output.difficulty }}med tre inputs. - Koppla Gemini Flash Lite Model, Gemini Flash Model och Gemini Pro Model till Model Choice Router som de tre språkmodell-inputarna.
- Credential Required: Anslut era
googlePalmApi-uppgifter i Gemini Flash Lite Model, Gemini Flash Model och Gemini Pro Model.
Steg 5: konfigurera svarsgenerering och minnesuppdateringar
Generera assistentens svar och lagra det, samtidigt som ni skickar formaterad output tillbaka till Telegram.
- Ställ in Response Agent med Text till
=Context: {{ $json.output.context }} User request: {{ $('Normalize Incoming Data').item.json.message }}. - Anslut Summarize and Classify → Response Agent.
- Följ det parallella flödet: Response Agent skickar output till både Markdown V2 Formatter och Append Chat Memory parallellt.
- I Markdown V2 Formatter behåller ni den medföljande JavaScript-koden för MarkdownV2-sanitization och chunking.
- Konfigurera Dispatch Telegram Reply med Text satt till
{{ $json.message }}och Chat ID satt till{{ $('Telegram Incoming Trigger').item.json.message.chat.id }}. - Credential Required: Anslut era
telegramApi-uppgifter i Dispatch Telegram Reply. - I Append Chat Memory säkerställer ni att mappningen skapar message som
=User: {{ $('Normalize Incoming Data').item.json.message }} Agent: {{ $json.output }}och session_id som{{ $('Normalize Incoming Data').item.json.chat_id }}. - Credential Required: Anslut era
postgres-uppgifter i Append Chat Memory.
MarkdownV2 och att alla svar passerar genom Markdown V2 Formatter.Steg 6: testa och aktivera ert arbetsflöde
Kör igenom manuella och skarpa tester för att bekräfta meddelanderoutning, AI-svar och minneslagring.
- Klicka på Execute Workflow på Manual Run Trigger för att skapa tabellen via Create Memory Table.
- Skicka ett textmeddelande till er Telegram-bot och bekräfta att Telegram Incoming Trigger triggas, att Send Typing Action körs och att svaret levereras av Dispatch Telegram Reply.
- Skicka ett röstmeddelande och verifiera flödet: Download Voice File → Correct MIME Types → Transcribe Voice Input → Extract Audio Message → Normalize Incoming Data.
- Kontrollera att Append Chat Memory sparar en ny rad i
public.chat_memoryför varje tur i konversationen. - När testerna lyckas, slå på arbetsflödet till Active så att Telegram Incoming Trigger körs i produktion.
Se upp med
- Telegram-inloggningsuppgifter kan löpa ut eller kräva specifika behörigheter. Om saker slutar fungera, kontrollera din bot-token i BotFather och bekräfta sedan först Telegram Trigger-credentials i n8n.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om noder längre ned misslyckas på tomma svar.
- Standardpromptar i AI-noder är generiska. Lägg in din tonalitet tidigt, annars kommer du att redigera utdata för alltid.
Vanliga frågor
Cirka en timme om din Telegram-bot och Postgres-databas är redo.
Ja, men någon behöver vara bekväm med att klistra in SQL en gång och testa inloggningsuppgifter. Efter det är löpande ändringar mest promptar och routingregler.
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 in Gemini API-användning, som beror på hur ofta du träffar den större resonemangsmodellen.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärd och hanterar n8n bra. Egen hosting ger obegränsat antal körningar men kräver grundläggande serveradministration.
Du kan justera routingen i “Model Choice Router” så att fler (eller färre) meddelanden går till premium-modellen, och sedan finjustera “Summarize and Classify” för att sammanfatta i din ton och plocka ut de signaler du bryr dig om. Många team ändrar också reglerna i “Markdown V2 Formatter” för att matcha sin egen stil och lägga till skyddsräcken för länkar, priser eller policyspråk. Om du inte behöver röst kan du stänga av spåret “Download Voice File” och “Transcribe Voice Input” för att förenkla arbetsflödet.
Oftast är det en felaktig bot-token eller fel credential vald i Telegram Trigger. Skapa en ny token i BotFather, uppdatera den i n8n och testa igen. Om svar skickas men nedladdningar misslyckas, kontrollera filbehörigheter och att grenen för röstmeddelanden tar emot korrekt file_id.
På n8n Cloud Starter fungerar den vanligtvis bra för en bot för ett mindre team; volymen beror främst på dina exekveringsgränser och modellkostnader. Om du kör egen hosting finns ingen exekveringsbegränsning från n8n, men storleken på din VPS och Postgres-prestanda blir flaskhalsen. I praktiken hanterar de flesta botar av den här typen utan problem tiotals till några hundra meddelanden per dag på en enkel VPS om promptar hålls strama med sammanfattning.
Ofta, ja. Det här arbetsflödet bygger på grenlogik (text vs röst vs fel), minneslagring och modellrouting, vilket blir klumpigt och dyrt i många “enkla” automationsverktyg. n8n ger dig också möjlighet till egen hosting, vilket spelar roll när antalet körningar ökar. Zapier eller Make kan fortfarande fungera för en minimal bot, men du slår i taket snabbt när du lägger till sammanfattning, formateringsfixar och databasläsningar/-skrivningar. Om du är osäker, prata med en automationsexpert så får du en rak rekommendation.
När detta väl rullar slutar din bot att “träffa” samma användare om och om igen. Den kommer ihåg, den svarar snabbare och den spenderar din AI-budget som om det vore dina egna pengar – för det är det.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.