Din Telegram-bot känns inte “hjälpsam” när en kund skickar fem meddelanden på 20 sekunder och får fem osammanhängande svar tillbaka. Det känns spamigt. Och ärligt talat får det din support att se spretig ut även när teamet verkligen anstränger sig.
Den här Telegram Sheets automation träffar supportansvariga först, men marknadsteam som driver community-grupper och småföretagare som hanterar DM:s känner igen samma problem. Du får ett enda tydligt, kontextuellt svar per meddelandeburst, plus en prydlig revisionslogg i Google Sheets.
Nedan ser du exakt hur arbetsflödet batchar meddelanden, hanterar röstmeddelanden, loggar allt och skickar ett enda AI-svar vid rätt tidpunkt.
Så fungerar den här automatiseringen
Hela n8n-arbetsflödet, från trigger till slutresultat:
n8n Workflow Template: Telegram + Google Sheets: lugnare botsvar
flowchart LR
subgraph sg0["Telegram Flow"]
direction LR
n0@{ icon: "mdi:swap-vertical", form: "rounded", label: "Pass text message", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Link Filter", 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/merge.svg' width='40' height='40' /></div><br/>Merge"]
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Transcript Error Output", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Transcript Result", 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/telegram.svg' width='40' height='40' /></div><br/>Get Audio File"]
n7@{ icon: "mdi:robot", form: "rounded", label: "Transcribe a recording", pos: "b", h: 48 }
n8@{ icon: "mdi:database", form: "rounded", label: "Append row in sheet", pos: "b", h: 48 }
n9@{ icon: "mdi:database", form: "rounded", label: "Get row(s) in sheet", pos: "b", h: 48 }
n10@{ icon: "mdi:vector-polygon", form: "rounded", label: "Embeddings OpenAI1", pos: "b", h: 48 }
n11@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n12@{ icon: "mdi:robot", form: "rounded", label: "AI Agent", pos: "b", h: 48 }
n13@{ icon: "mdi:database", form: "rounded", label: "Get row(s) in sheet1", pos: "b", h: 48 }
n14@{ icon: "mdi:swap-horizontal", form: "rounded", label: "What to do", pos: "b", h: 48 }
n15@{ icon: "mdi:database", form: "rounded", label: "Update row in sheet", pos: "b", h: 48 }
n16@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n17@{ icon: "mdi:database", form: "rounded", label: "Delete rows or columns from ..", pos: "b", h: 48 }
n18@{ icon: "mdi:database", form: "rounded", label: "Update row in sheet1", 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/code.svg' width='40' height='40' /></div><br/>No Rows"]
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/code.svg' width='40' height='40' /></div><br/>Batch Messages"]
n21@{ icon: "mdi:memory", form: "rounded", label: "Simple Memory", pos: "b", h: 48 }
n22@{ icon: "mdi:cube-outline", form: "rounded", label: "Supabase Vector Store", 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 message Back to TG"]
n24["<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"]
n25@{ icon: "mdi:database", form: "rounded", label: "Delete Row from Message Chec..", pos: "b", h: 48 }
n16 --> n9
n2 --> n3
n19 --> n14
n12 --> n23
n14 --> n15
n14 --> n18
n3 --> n8
n1 --> n6
n1 --> n0
n21 -.-> n12
n20 --> n17
n6 --> n7
n24 --> n1
n11 -.-> n12
n0 --> n2
n5 --> n2
n10 -.-> n22
n8 --> n13
n9 --> n20
n15 --> n16
n13 --> n19
n22 -.-> n12
n7 --> n5
n7 --> n4
n23 --> n25
n4 --> n2
n17 --> n12
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 n24 trigger
class n7,n12 ai
class n11 aiModel
class n21 ai
class n22 ai
class n10 ai
class n1,n14 decision
class n8,n9,n13,n15,n17,n18,n25 database
class n19,n20 code
classDef customIcon fill:none,stroke:none
class n2,n6,n19,n20,n23,n24 customIcon
Problemet: Telegram-botar svarar för snabbt (och för ofta)
Folk skriver inte supportfrågor som de skriver mejl. De skickar ett snabbt meddelande, sedan ett till med en skärmbildsbeskrivning, sedan “och…” och därefter ordernumret. Om din bot svarar på varje meddelande direkt får du en rörig tråd: svar som missar kontext, dubbla svar och kunder som känner att de pratar med en bugg. På din sida tappar du dessutom tidslinjen. Du kan inte enkelt återskapa vad som sades, vad boten såg och varför den svarade som den gjorde.
Det eskalerar snabbt. Här är var det faller isär i verkligheten.
- Snabba meddelandeskurar skapar flera halvsvar, vilket förvirrar kunder och genererar fler följdfrågor.
- Dina AI-kostnader går upp eftersom du betalar för fem anrop i stället för ett bättre anrop.
- Röstmeddelanden ignoreras eller hanteras manuellt om du inte bygger in transkribering i flödet.
- Utan enkel loggning kan du inte granska konversationer när något går fel.
Lösningen: debouncade Telegram-svar loggade i Sheets
Det här arbetsflödet lyssnar på varje inkommande Telegram-meddelande och grupperar sedan tyst meddelanden från samma användare till en enda “burst”. I stället för att svara direkt skapar det ett kort väntfönster (cirka 20–30 sekunder) och förlänger det om användaren fortsätter att skriva. Under tiden lagras varje meddelande i ett Google Sheet så att inget försvinner. När användaren slutar hämtar n8n de köade meddelandena, slår ihop dem till en enda prompt och skickar ett enda AI-genererat svar tillbaka till Telegram. Efter att ha svarat rensar det de köade raderna och återställer användarens väntestatus, redo för nästa konversation.
Arbetsflödet startar i samma ögonblick som ett Telegram-meddelande kommer in. Text går direkt in i meddelandekön och röstmeddelanden hämtas och transkriberas (Whisper) innan de ansluter till samma ström. I slutet ser användaren ett lugnt svar och du ser en tydlig logg i Sheets.
Det du får: automatisering vs. resultat
| Vad det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att en kund skickar 6 meddelanden på under 30 sekunder (helt normalt): “Hej”, “Min order har inte kommit”, “Order #18372”, “Det står levererad”, plus två följdmeddelanden. Utan batchning kan det trigga 6 botsvar och 6 AI-anrop på under en minut, och de tidiga svaren missar ofta ordernumret. Med det här arbetsflödet lägger du ungefär 1 minut på att låta fönstret stänga, sedan skickar du 1 konsoliderad prompt till AI och levererar 1 tydligt svar. Chatten förblir läsbar och du betalar inte för brus.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
- Telegram-bot för att ta emot meddelanden och skicka svar
- Google Sheets för att lagra köade meddelanden och debounce-status
- OpenAI API-nyckel (hämta den i din OpenAI-dashboard)
Svårighetsgrad: Medel. Du kopplar Telegram- och Google-uppgifter och klistrar sedan in ett par uttryck (som tidsstämpelkontrollen “äldre än 30s”).
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Ett Telegram-meddelande kommer in. Arbetsflödet triggas på nya Telegram-uppdateringar och kontrollerar sedan om det är text eller röst för att kunna routa det rätt.
Röst konverteras till text. Om det är ett röstmeddelande hämtar n8n ljudfilen från Telegram och transkriberar den med OpenAI (Whisper). Om transkriberingen misslyckas mappar arbetsflödet en säker fallback så att du inte får tomma prompts.
Meddelanden köas och “debouncas”. Varje inkommande meddelande läggs till i ett Google Sheet (“Message Retention”), därefter slår arbetsflödet upp användaren i ett andra sheet (“Message Checkup”). Om användaren inte väntar just nu, eller om senaste uppdateringen är äldre än cirka 30 sekunder, sätter det användaren i vänteläge och startar vänttimern. Om användaren redan väntar uppdaterar det bara tidsstämpeln så att fönstret förlängs.
Ett svar skickas tillbaka, sedan sker städning. När väntetiden är slut hämtar n8n alla köade rader för den användaren, slår ihop dem till en prompt, kör AI-agenten (med minne och valfritt kunskapslager), skickar ett enda Telegram-svar och raderar de bearbetade raderna samt väntflaggan.
Du kan enkelt ändra väntetiden så att den passar din målgrupp (snabbare chattar vs. långsammare, mer detaljerade). Se hela implementationsguiden nedan för anpassningsmöjligheter.
Steg-för-steg-implementeringsguide
Steg 1: konfigurera Telegram-triggern
Konfigurera Telegram-ingången så att inkommande meddelanden startar arbetsflödet och förgrenas efter meddelandetyp.
- Lägg till och öppna Telegram Incoming Trigger.
- Credential Required: Anslut era telegramApi-uppgifter.
- Under Updates låter ni
messagevara markerat för att ta emot text- och röstmeddelanden. - Koppla Telegram Incoming Trigger till Validate Message Type för att utvärdera om en röstfil finns.
Steg 2: anslut Google Sheets
Dessa noder lagrar och hämtar meddelandebatcher och väntestatus. Det här arbetsflödet använder flera Google Sheets-noder; anslut uppgifter en gång och återanvänd dem i samtliga.
- Öppna Append Log Entry och ställ in Operation till
append. - Ställ in Document till
ATEM Chat Logsoch Sheet tillMsg Retention. - Mappa kolumner: date till
{{$now}}, message till{{$json.processedMessage}}och user_id till{{$json.sessionId}}. - Credential Required: Anslut era googleSheetsOAuth2Api-uppgifter till Append Log Entry, Retrieve Log Rows, Lookup Waiting Rows, Flag Waiting Status, Refresh Waiting Timestamp, Clear Retention Rows och Remove Waiting Row.
⚠️ Vanlig fallgrop: Google Sheets-noderna refererar till platshållare som [YOUR_ID]. Ersätt dessa med era faktiska dokument- och bladval i varje Google Sheets-nod.
Steg 3: konfigurera meddelandeintag och transkribering
Det här steget normaliserar text- och röstmeddelanden till en och samma ström för batchning.
- I Validate Message Type säkerställer ni att första villkoret använder
{{$json.message.voice.file_id}}med exists för att upptäcka röstmeddelanden. - Koppla röstgrenen från Validate Message Type till Fetch Voice File och textgrenen till Forward Text Payload.
- I Fetch Voice File ställer ni in Resource till
fileoch File ID till{{$('Telegram Incoming Trigger').item.json.message.voice.file_id}}. Credential Required: Anslut era telegramApi-uppgifter. - I Transcribe Audio Clip ställer ni in Resource till
audiooch Operation tilltranscribe. Credential Required: Anslut era openAiApi-uppgifter. - I Forward Text Payload mappar ni processedMessage till
{{$json.message.text}}, sessionId till{{$json.message.chat.id}}och name till{{$json.message.from.first_name}}. - I Map Transcription Text mappar ni processedMessage till
{{$json.text}}och sessionId till{{$('Telegram Incoming Trigger').item.json.message.chat.id}}. - Koppla Forward Text Payload, Map Transcription Text och Map Transcription Error till Combine Streams med numberInputs inställt på
3.
⚠️ Vanlig fallgrop: Transcribe Audio Clip har continueErrorOutput aktiverat, så fel routas till Map Transcription Error. Säkerställ att den grenen är kopplad till Combine Streams enligt bilden.
Steg 4: konfigurera batchning och väntelogik
Den här delen loggar inkommande meddelanden, avgör om den ska vänta in fler och aggregerar när tidsfönstret stänger.
- I Refine Output Fields ställer ni in processedMessage till
{{$json.processedMessage || $json.error || ''}}och sessionId till{{$('Telegram Incoming Trigger').item.json.message.from.id}}. - Koppla Refine Output Fields till Append Log Entry och vidare till Lookup Waiting Rows för att kontrollera väntestatus.
- I Normalize Empty Rows behåller ni JavaScript-koden som returnerar en standardrad när ingen vänt-rad finns.
- I Decide Wait Logic bekräftar ni villkoren:
{{$json.last_updated}}före{{ new Date(Date.now() - 30000).toISOString() }}ELLER{{$json.is_waiting}}är false. - Sant-grenen från Decide Wait Logic går till Flag Waiting Status (sätter vänteläge), därefter Delay Window med amount
30, sedan Retrieve Log Rows och därefter Aggregate Messages. - Falskt-grenen från Decide Wait Logic går till Refresh Waiting Timestamp för att hålla väntfönstret aktivt.
- I Clear Retention Rows ställer ni in startIndex till
{{$('Aggregate Messages').item.json.start_row_number}}och numberToDelete till{{$('Aggregate Messages').item.json.row_count}}.
⚠️ Vanlig fallgrop: Väntelogiken är beroende av konsekventa tidsstämplar i Msg Waiting. Säkerställ att både Flag Waiting Status och Refresh Waiting Timestamp skriver {{$now}} till last_updated.
Steg 5: konfigurera AI-svarslagret
AI-lagret använder OpenAI, minne och en Supabase-kunskapsbas för att skapa svar från de aggregerade meddelandena.
- Öppna Conversational Agent och ställ in Text till
{{$('Aggregate Messages').item.json.message}}. - Ställ in System Message i Conversational Agent till er prompt (för närvarande
ADD YOUR PROMPT HERE). - Öppna OpenAI Chat Engine och välj Model som
gpt-5-mini. Credential Required: Anslut era openAiApi-uppgifter. - Öppna Supabase Knowledge Store och ställ in Mode till
retrieve-as-tool. Credential Required: Anslut era supabaseApi-uppgifter. - Öppna Generate OpenAI Vectors och låt den vara ansluten till Supabase Knowledge Store. Credential Required: Anslut era openAiApi-uppgifter.
- Koppla OpenAI Chat Engine som språkmodell och Windowed Memory som minne till Conversational Agent. Obs: Generate OpenAI Vectors och Windowed Memory är AI-undernoder, så uppgifter konfigureras på föräldranoderna (OpenAI Chat Engine och Supabase Knowledge Store).
Steg 6: konfigurera utdata till Telegram
Skicka AI-svaret tillbaka till användaren och rensa vänt-rader.
- I Send Reply to Telegram ställer ni in Text till
{{$json.output.text}}och Chat ID till{{$('Aggregate Messages').item.json.session_id}}. - Credential Required: Anslut era telegramApi-uppgifter i Send Reply to Telegram.
- Koppla Send Reply to Telegram till Remove Waiting Row för att städa upp väntestatusen efter att ett svar har skickats.
Steg 7: testa och aktivera ert arbetsflöde
Verifiera hela flödet för text- och röstmeddelanden och aktivera sedan arbetsflödet.
- Klicka på Execute Workflow och skicka ett Telegram-textmeddelande till er bot för att bekräfta att Forward Text Payload → Append Log Entry → Flag Waiting Status körs.
- Skicka flera meddelanden inom 30 sekunder och bekräfta att Delay Window väntar, och att Retrieve Log Rows → Aggregate Messages → Conversational Agent körs därefter.
- Skicka ett röstmeddelande och bekräfta att Fetch Voice File → Transcribe Audio Clip → Map Transcription Text används innan batchning.
- Kontrollera att Send Reply to Telegram returnerar ett AI-svar och att Remove Waiting Row rensar väntestatusen.
- När allt fungerar växlar ni arbetsflödet till Active för att möjliggöra produktionsanvändning.
Vanliga fallgropar
- Google Sheets-autentisering kan löpa ut eller kräva specifika behörigheter. Om något slutar fungera, kontrollera först n8n:s credential-koppling och att arket är delat med samma Google-konto eller servicekonto.
- Om du använder Wait-noder eller extern transkribering varierar processningstiderna. Öka väntetiden om noder längre ner i flödet misslyckas på grund av tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du att redigera output för alltid.
Vanliga frågor
Cirka 45 minuter om din bot och dina Sheets är redo.
Nej. Du kopierar ett tidsstämpeluttryck och kopplar konton, men du bygger ingen app.
Ja. n8n har ett gratisalternativ för egen drift 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 med OpenAI API-kostnader (ofta bara några dollar i månaden vid typiska supportvolymer).
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen drift på en VPS. För egen drift är Hostinger VPS prisvärd och hanterar n8n bra. Egen drift ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det är en vanlig justering. Du ändrar varaktigheten i Wait-noden och “äldre än”-kontrollen av tidsstämpeln som används i IF-villkoret för väntlogiken. Många team anpassar också prompten i AI-agenten efter sin tonalitet, lägger till eskaleringsregler (t.ex. “skicka till en människa om meddelandet innehåller återbetalning”) och loggar extra fält till Sheets som chat_id, message_type och ett konversations-ID.
Oftast beror det på att webhooken inte registreras korrekt eller att bot-token i n8n inte längre matchar det Telegram förväntar sig. Dubbelkolla att Telegram Trigger är aktiv och att din n8n-instans går att nå från publika internet (egen drift kan ibland blockera inkommande anrop). Om röstmeddelanden misslyckas kan det också bero på saknade behörigheter för att hämta filer, vilket brukar synas som fel i steget “Fetch Voice File”. Fixa anslutningen först och testa sedan igen med ett enkelt textmeddelande.
På n8n Cloud Starter kan du köra tusentals körningar per månad, vilket räcker för de flesta mindre supportteam. Om du kör egen drift finns ingen gräns för antal körningar; det beror främst på serverstorlek och hur ofta du transkriberar röst. I praktiken skalar det här arbetsflödet bra eftersom det hanterar användare oberoende av varandra, men Google Sheets kan bli flaskhalsen om du loggar väldigt stora volymer. Om du förväntar dig hög trafik, överväg att flytta lagringen från Sheets till en databas senare.
För debounce-batchning är n8n oftast ett bättre val eftersom du kan hantera väntfönster, grenlogik och städning utan krångliga workarounds. Det ger också möjlighet till egen drift, vilket spelar roll när antalet körningar sticker iväg. Zapier eller Make kan fortfarande fungera om du håller det enkelt, men ofta blir det dyrare när du lägger till AI-steg och logik med flera grenar. Om du är osäker, prata med en automationsexpert så hjälper vi dig välja den minst smärtsamma vägen.
När det här väl är igång slutar din bot att avbryta folk mitt i tanken. Du får renare konversationer, färre bortkastade AI-anrop och en Google Sheets-logg som du faktiskt kan lita på.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.