Din Telegram-grupp är tyst en dag och plötsligt är du “den som borde posta något”. Då stressar du fram, slänger in ett halvdant meddelande och hoppas att det landar. Samtidigt dyker samma frågor upp om och om igen, och du har noll insyn i vilka som faktiskt engagerar sig.
Driver du en community för ett varumärke känns det här igen. En marknadschef märker det när engagemanget dippar inför en kampanj. En småföretagare märker det klockan 21, när du inser att du glömde posta igen. Den här automatiseringen med en Telegram Postgres-bot håller gruppen aktiv och gör att svaren känns genomtänkta, inte improviserade.
Du sätter upp en Telegram-bot som svarar med AI-driven humor eller hjälpsam info, publicerar schemalagda inlägg och loggar allt i Postgres så att du faktiskt kan se vad som fungerar.
Så här fungerar automatiseringen
Här är hela workflowet du kommer att sätta upp:
n8n Workflow Template: Telegram + Postgres: bot som postar och loggar
flowchart LR
subgraph sg0["Webhook 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/>Webhook Telegram"]
n1@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Commands", pos: "b", h: 48 }
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/postgres.svg' width='40' height='40' /></div><br/>Log message + statistics"]
n5@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule", 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/postgres.svg' width='40' height='40' /></div><br/>Get scheduled posts"]
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/postgres.svg' width='40' height='40' /></div><br/>Chat history"]
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/>Mention Analysis"]
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/postgres.svg' width='40' height='40' /></div><br/>Get user statistics"]
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/postgres.svg' width='40' height='40' /></div><br/>Get top users"]
n11@{ icon: "mdi:robot", form: "rounded", label: "AI response to command", pos: "b", h: 48 }
n12["<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/>Generating an information re.."]
n13@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Response type", 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/>Send info reply"]
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/>Send AI response"]
n16@{ icon: "mdi:robot", form: "rounded", label: "AI response to mention", pos: "b", h: 48 }
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/telegram.svg' width='40' height='40' /></div><br/>Reply to Mention"]
n18@{ icon: "mdi:robot", form: "rounded", label: "AI post generation", pos: "b", h: 48 }
n19["<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/>Submit scheduled post"]
n20["<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/>Save Bot Response"]
n21@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
n22@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch", 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/>Log command"]
n24@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If1", 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/postgres.svg' width='40' height='40' /></div><br/>Save Bot Response2"]
n21 --> n18
n24 --> n16
n24 --> n11
n22 --> n7
n22 --> n9
n22 --> n12
n22 --> n10
n5 --> n6
n7 --> n8
n10 --> n12
n13 --> n14
n13 --> n15
n8 --> n24
n0 --> n3
n0 --> n22
n18 --> n19
n18 --> n25
n6 --> n21
n9 --> n12
n1 -.-> n11
n1 -.-> n16
n1 -.-> n18
n11 --> n13
n11 --> n20
n16 --> n17
n16 --> n20
n12 --> n23
n12 --> n13
end
subgraph sg1["Flow 2"]
direction LR
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/postgres.svg' width='40' height='40' /></div><br/>Init Database"]
end
subgraph sg2["Flow 3"]
direction LR
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/postgres.svg' width='40' height='40' /></div><br/>Adding a schedule"]
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,n5 trigger
class n11,n16,n18 ai
class n1 aiModel
class n13,n21,n22,n24 decision
class n3,n6,n7,n9,n10,n20,n23,n25,n2,n4 database
class n8,n12 code
classDef customIcon fill:none,stroke:none
class n0,n3,n6,n7,n8,n9,n10,n12,n14,n15,n17,n19,n20,n23,n25,n2,n4 customIcon
Varför det här är viktigt: håll en Telegram-grupp aktiv utan att behöva passa den
“Bara posta mer” är ett dåligt råd när du redan går på knäna. Att posta konsekvent kräver idéarbete, skrivande, timing och sedan uppföljande svar när folk reagerar eller ställer frågor. Gör du det manuellt blir det dessutom gissningar: vilka inlägg får respons, vilka kommandon testar folk, vilka är mest aktiva och när gruppen faktiskt är vaken. Och ärligt talat är det värsta den mentala belastningen. Du är alltid halvt i arbete, eftersom du alltid är “jour” för chatten.
Det eskalerar snabbt. Här är var det oftast faller isär.
- Någon måste komma ihåg att posta dagens “något”, vilket gör att kontinuiteten faller så fort du blir upptagen.
- Svaren är repetitiva, så du ignorerar antingen meddelanden (engagemanget sjunker) eller så svarar du på samma saker om och om igen.
- Du kan inte förbättra det du inte spårar, och Telegrams chathistorik i sig är inget användbart analyssystem.
- Manuell statistik och topplistor tar tid, så det blir aldrig av, trots att det är bra för energin i communityt.
Det du bygger: en AI-telegrambot med schemaläggning och analys
Det här workflowet gör din Telegram-grupp till en plats som känns levande, även när du inte bevakar den. Det startar på två sätt: meddelanden och kommandon som kommer in i Telegram, och en schemaläggare som varje timme kontrollerar om några planerade inlägg ska publiceras. När någon skriver ett kommando som /joke eller /inspire routar workflowet det, hämtar lite nylig chattkontext från Postgres och genererar ett kort svar i er tonalitet via en AI-agent (med en OpenRouter-chatmodell). Mentions fungerar också, så om någon taggar boten svarar den i kontext i stället för att slänga ur sig en slumpmässig rad. I bakgrunden loggas varje meddelande, kommando och botsvar i Postgres så att du senare kan ställa riktiga frågor, som “Vad använder folk faktiskt?” eller “Vem håller chatten igång?”
Workflowet börjar med Telegram-meddelanden eller en schemakontroll varje timme. I mitten avgör det vad användaren vill (kommando, mention, statistikförfrågan) och genererar rätt svar. Till sist skickar det meddelandet tillbaka till Telegram och sparar korrekt formaterade poster i Postgres så att rapportering blir enkel.
Det du bygger
| Vad som automatiseras | Vad du uppnår |
|---|---|
|
|
Förväntade resultat
Säg att du driver en grupp med 200 personer och försöker hålla den varm med 3 schemalagda inlägg per dag (skämt, motivation och en slumpmässig fråga). Manuellt tar det kanske 10 minuter per inlägg att skriva, posta och reagera på svar, alltså runt 30 minuter om dagen. Lägg till ytterligare 20 minuter på att svara på vanliga prompts eller reagera på mentions, så är du uppe i cirka 50 minuter. Med det här workflowet blir postningen automatisk och de flesta svar hanteras direkt, så din “hands-on”-tid sjunker till en snabb 10-minuters avstämning.
Innan du börjar
- 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 kommandon och skicka inlägg
- Postgres för att lagra meddelanden, statistik och scheman
- OpenRouter API-nyckel (hämta den från openrouter.ai)
Nivå: Medel. Du kopplar in inloggningsuppgifter, kör en DB-initialisering en gång och ändrar några värden som chat_id och schemalagda tider.
Vill du att någon bygger detta åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).
Steg för steg
Ett Telegram-meddelande eller kommando triggar workflowet. Varje inkommande uppdatering fångas upp och loggas direkt till Postgres så att du får en pålitlig aktivitetslogg.
Workflowet routar förfrågan utifrån intent. En Switch-nod kontrollerar om det är /joke, /inspire, /random, /roast, /help, /stats eller /top. Om det är en mention kör den en snabb mention-kontroll och hämtar nylig konversationskontext från Postgres för att hålla svaren sammanhängande.
AI genererar svaret (eller så bygger kod ett infosvar). Roliga kommandon och mention-svar går via AI-agenten som drivs av OpenRouter-chatmodellen. Svar för statistik och topplistor sätts ihop från Postgres-frågor så att de blir korrekta och snabba.
Botten svarar i Telegram och lagrar resultatet. Workflowet skickar meddelandet till din chatt och skriver sedan tillbaka botsvaret (och kommandoanvändning) till Postgres för analys och felsökning senare.
Du kan enkelt ändra schemalagda tider så att de matchar din målgrupp, eller byta svarsstil från “kvick” till “stöttande” beroende på behov. Se den fullständiga implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera Telegram-triggern
Börja med att ansluta Telegrams uppdateringsström som startar hela engagemangsflödet.
- Lägg till och öppna Telegram Incoming Trigger och behåll Updates inställt på
*. - Inloggning krävs: Anslut era telegramApi-inloggningsuppgifter.
- Bekräfta att triggern är ansluten till både Record Message Stats och Command Router — Telegram Incoming Trigger skickar utdata till både Record Message Stats och Command Router parallellt.
Steg 2: Anslut Postgres och initiera datatabeller
Det här flödet använder Postgres för meddelandehistorik, statistik, kommandospårning och schemalagda inlägg. Anslut Postgres-inloggning på alla databasnoder och initiera schemat.
- Öppna Utility: Initialize Tables och ställ in Operation till
executeQuerymed det medföljande CREATE TABLE-skriptet. - Inloggning krävs: Anslut era postgres-inloggningsuppgifter i Utility: Initialize Tables.
- Använd samma postgres-inloggningsuppgifter på alla databasnoder (10+ noder hanterar meddelandeloggar, statistik, kommandon, schemalagda inlägg och svar).
- Öppna Utility: Insert Post Schedule och ersätt
[YOUR_ID]med ert mål-Telegram-chat_id.
[YOUR_ID] kommer schemalagda inlägg aldrig att levereras.Steg 3: Sätt upp AI-bearbetning och kontextbygge
Konfigurera OpenRouter-språkmodellen och AI-agentnoderna som genererar svar och schemalagda inlägg.
- Öppna OpenRouter Chat Model och ställ in Model till
openai/gpt-oss-120b. - Inloggning krävs: Anslut era openRouterApi-inloggningsuppgifter i OpenRouter Chat Model.
- Bekräfta att OpenRouter Chat Model är ansluten som språkmodell för AI Command Reply, AI Mention Reply och AI Scheduled Post (inloggningen ska ligga på den överordnade OpenRouter Chat Model, inte på agentnoderna).
- I AI Command Reply, behåll prompten i Text som
=Command: /{{ $json.command }} User: {{ $json.userName }} Chat context: {{ $json.recentMessages }} Time: {{ $json.timeContext }} Generate {{ $json.command === 'joke' ? 'a witty joke' : $json.command === 'inspire' ? 'a motivating line' : $json.command === 'roast' ? 'a sharp roast with folksy sarcasm' : 'a random interesting line' }} in your signature style with subtle humor and playful teasing.. - I AI Mention Reply, behåll Text inställt på
=User: {{ $json.userName }} {{ $json.isRandomRequest ? 'Mentioned the bot without text' : 'Message: "' + $json.userMessage + '"' }} Chat context: {{ $json.recentMessages }} Time: {{ $json.timeContext }} | Style: {{ $json.contentType }} {{ $json.isRandomRequest ? 'Make a witty remark about the chat situation.' : 'Reply to the message with subtle humor.' }} Be witty and tactful! 🎭. - I AI Scheduled Post, behåll Text inställt på
=Post type: {{ $json.post_type }} Generate {{ $json.post_type === 'morning_joke' ? 'a morning joke' : $json.post_type === 'daily_motivation' ? 'daily motivation' : 'a piece of random wisdom' }} in your style with subtle humor..
Steg 4: Konfigurera routing och meddelandeanalys
Sätt upp routningslogik för kommandon, omnämnanden och infosvar, och parsa samt analysera inkommande meddelanden.
- I Command Router, verifiera att alla kommandoregler är inställda på Starts With och matchar värden som
/joke,/inspire,/random,/roast,@GiggleGPTBot,/stats,/helpoch/top. - Säkerställ att Fetch Conversation History använder chat-ID-uttrycket
{{ $('Telegram Incoming Trigger').item.json.message.chat.id }}för att hämta senaste meddelanden. - Behåll Analyze Mentions som parsningslager för userId, innehållstyp, kontextfönster och detektion av omnämnanden.
- I Check Mention Prefix, bekräfta att villkoret kontrollerar
={{ $json.originalMessage }}Starts With@GiggleGPTBot. - I Route Response Type, säkerställ att villkoren använder
={{ $json.isInfoCommand }}och={{ $json.responseText }}för att routa utdatatyp.
Steg 5: Konfigurera utdata och schemalagd publicering
Leverera botsvar och schemalagda inlägg tillbaka till Telegram och lagra resultaten i Postgres för historik och analys.
- För schemalagda inlägg, ställ in Hourly Scheduler att köra varje timme med
0 * * * *och koppla den sedan till Retrieve Due Posts. - Validera schemalagda poster med Validate Scheduled Item genom att kontrollera att
={{ $json.chat_id }}finns. - Konfigurera Deliver Scheduled Post med Text
={{ $json.output }}och Chat ID={{ $('Retrieve Due Posts').item.json.chat_id }}. - Ställ in Store Scheduled Reply att infoga i
bot_responsesoch behåll frågan som angiven. - För infokommandon, konfigurera Send Info Message med Text
={{ $json.responseText }}och Chat ID={{ $json.chatId }}. - För omnämnandensvar, ställ in Send Mention Reply med Text
={{ $json.output }}och Chat ID={{ $('Analyze Mentions').item.json.chatId }}. - Säkerställ att AI Scheduled Post skickar utdata till både Deliver Scheduled Post och Store Scheduled Reply parallellt.
HTML i Telegram-noder för att bevara emoji och formatering på ett säkert sätt.Steg 6: Bekräfta uppdateringar för spårning och analys
Verifiera att meddelandestatistik, kommandoanvändning och botsvar sparas korrekt för senare analys.
- I Record Message Stats, behåll SQL-frågan som infogar i
user_messagesoch uppdateraruser_stats. - I Record Command Usage, behåll frågan som infogar i
bot_commandsoch ökaruser_stats.commands_count. - Bekräfta att Store Bot Reply skriver AI-utdata till
bot_responsesmed{{ $json.output.replace(/'/g, "''") }}. - Säkerställ att Build Info Reply tar emot data från både Fetch User Metrics och Retrieve Top Users, och att Build Info Reply sedan skickar utdata till både Record Command Usage och Route Response Type parallellt.
Steg 7: Testa och aktivera ert flöde
Kör end-to-end-tester för omnämnanden, kommandon och schemalagda inlägg innan ni aktiverar flödet i produktion.
- Klicka på Execute Workflow och skicka ett Telegram-meddelande som
/jokeeller@GiggleGPTBot helloför att trigga Telegram Incoming Trigger. - Verifiera att Telegram Incoming Trigger triggas och att Record Message Stats och Command Router kör parallellt.
- Bekräfta lyckade utdata: Send Info Message eller Send Mention Reply ska posta tillbaka i chatten med AI-svaret.
- Testa schemaläggning genom att köra Hourly Scheduler manuellt och kontrollera att Deliver Scheduled Post skickar ett inlägg.
- När allt fungerar, växla flödet till Active för att aktivera kontinuerlig drift.
Tips för felsökning
- Telegram-uppgifter kan sluta fungera om din webhook-/polling-setup ändras. Om svar slutar komma, kontrollera först dina Telegram-credentials i n8n och anslutningen i Telegram Trigger.
- Om du använder Wait-noder eller extern rendering varierar bearbetningstiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- OpenRouter-prompter är generiska som standard. Lägg in er varumärkesröst (och “gå inte över gränsen”-regler för /roast) tidigt, annars kommer du att redigera utdata i all evighet.
Snabba svar
Cirka 45 minuter om du redan har Telegram, Postgres och OpenRouter klart.
Nej. Du klistrar mest in credentials, kör DB-initialiseringen och justerar några värden som chat_id.
Ja. n8n har ett gratis alternativ för egen 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 OpenRouter-användning, som normalt är några cent per batch av svar beroende på modell.
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 klarar n8n bra. Egen hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det är det bästa. Du kan lägga till nya kommandon genom att utöka Command Router och peka dem till noden AI Command Reply med en ny prompt. Schemalagt innehåll styrs av Postgres-rader, så att lägga till “veckodagstips” eller “eventpåminnelser” är mest att lägga in nya schemaposter. Om du inte vill använda AI för vissa svar kan du i stället routa dem till kodvägen Build Info Reply.
Oftast är det bot-tokenen (fel, roterad eller inklistrad med ett osynligt mellanslag). Det kan också vara en webhook-/polling-mismatch: Telegram Trigger kan vara uppsatt på ett sätt, medan din bot är konfigurerad på ett annat. Kontrollera till sist att boten faktiskt är med i gruppen eller kanalen och har rättighet att posta; Telegram kan “acceptera” din setup men ändå blockera meddelanden i nedlåsta chattar.
För de flesta små communities räcker det gott. Med n8n Cloud Starter kan du hantera några tusen körningar per månad, vilket täcker mycket kommandoanvändning och schemalagda inlägg. Om du hostar själv finns ingen körningsgräns (det beror på din server), och Postgres loggar utan problem stora meddelandevolymer så länge du håller koll på index och lagring.
Ofta, ja. Det här workflowet använder grenlogik (kommandon, mentions, schemalagda inlägg), databasbeständighet och prompting i AI-agent-stil, vilket blir klumpigt och dyrt i enklare automatiseringsverktyg. n8n gör det också naturligt att lagra kontext i Postgres och återanvända den, vilket är hela anledningen till att svaren känns “medvetna”. Om du bara vill ha “när meddelande innehåller X, skicka Y” fungerar Zapier eller Make fint. Men för en bot som spårar, schemalägger och rapporterar är n8n helt enkelt bättre lämpat. Prata med en automationsexpert om du vill ha en snabb rekommendation för just din setup.
När det här väl rullar hålls gruppen aktiv utan att du behöver ligga över den. Och eftersom allt loggas i Postgres har du äntligen statistiken som krävs för att styra engagemanget i stället för att gissa.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.