Din Telegram-bot är grym … tills en verklig lead ställer en rörig fråga. Då blir det copy-paste till en människa, några förvirrande meddelanden och plötsligt upprepar prospektet sig (eller värre: försvinner).
Det här problemet med Telegram OpenAI-handoff drabbar growth marketers först eftersom hastighet är avgörande. Men säljare och kundnära founders känner av det också. Du behöver ett strukturerat sätt att lämna över kontrollen till en person och sedan lämna tillbaka chatten till boten utan att tappa kontext.
Det här n8n-workflowet ger dig en enkel ”tillståndsbaserad” handoff. Du får se hur det routar meddelanden, fångar upp detaljer, pausar automatiseringen för en människa och sedan återaktiverar AI:n med en användbar sammanfattning.
Problemet: botsamtal faller isär exakt när du behöver förtroende
Lead-samtal är inte linjära. En bot kan samla in grunderna, svara på vanliga frågor och hålla tempot uppe, men i samma ögonblick som någon ställer en nyanserad prisfråga eller vill ha trygghet blir ”automationslagret” friktion. Du slutar med att vidarebefordra skärmdumpar, sammanfatta kontext ur minnet och hoppas att säljaren inte ställer samma onboardingfrågor igen. Det handlar inte bara om tid. Det handlar om momentum. Och i Telegram är momentum hela spelet eftersom kanalen känns personlig och snabb.
Det märks snabbt. Här är var det brukar fallera i riktiga team.
- Manuella handoffs är inkonsekventa, så prospekt upprepar detaljer och förtroendet sjunker.
- Det finns ingen pålitlig signal för ”vem som har kontroll”, vilket gör att både bot och människa kan svara (eller att ingen gör det).
- Samtalskontexten finns i någons huvud eller i en rörig chattlogg, och AI:n kan inte använda den senare.
- När du börjar skala blir några missade handoffs per vecka ett läckage i pipelinen som du inte enkelt kan spåra.
Så här fungerar automatiseringen
Hela n8n-workflowet, från trigger till slutligt output:
n8n Workflow Template: Telegram + OpenAI: smidiga överlämningar bot–människa
flowchart LR
subgraph sg0["Telegram Intake Flow"]
direction LR
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/redis.svg' width='40' height='40' /></div><br/>Retrieve State Flag"]
n4@{ icon: "mdi:brain", form: "rounded", label: "Primary Chat Model", pos: "b", h: 48 }
n5@{ icon: "mdi:memory", form: "rounded", label: "Chat Memory Store", pos: "b", h: 48 }
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/>Telegram Intake Trigger"]
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/>Send Handoff Notice"]
n9@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route by State", pos: "b", h: 48 }
n10@{ icon: "mdi:robot", form: "rounded", label: "Extract Client Details", pos: "b", h: 48 }
n11@{ icon: "mdi:brain", form: "rounded", label: "Extraction Chat Model", 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/>Apply Default Fields"]
n13@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Validate Required Fields", pos: "b", h: 48 }
n14@{ icon: "mdi:robot", form: "rounded", label: "Onboarding Assistant", pos: "b", h: 48 }
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/redis.svg' width='40' height='40' /></div><br/>Fetch Onboarding History"]
n16@{ icon: "mdi:robot", form: "rounded", label: "Aftercare Assistant", pos: "b", h: 48 }
n17@{ icon: "mdi:memory", form: "rounded", label: "Aftercare Memory", pos: "b", h: 48 }
n18@{ icon: "mdi:brain", form: "rounded", label: "Aftercare Chat Model", pos: "b", h: 48 }
n19@{ icon: "mdi:wrench", form: "rounded", label: "Handoff Workflow Tool", pos: "b", h: 48 }
n20@{ icon: "mdi:cog", form: "rounded", label: "Run Sub-Workflow (Configure ..", pos: "b", h: 48 }
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/>Post Aftercare Reply"]
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/telegram.svg' width='40' height='40' /></div><br/>Send Human In-Progress"]
n27@{ icon: "mdi:memory", form: "rounded", label: "Onboarding Memory", pos: "b", h: 48 }
n28@{ icon: "mdi:memory", form: "rounded", label: "Inject Onboarding Context", pos: "b", h: 48 }
n29["<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/>Continue Onboarding Chat"]
n4 -.-> n14
n5 -.-> n14
n18 -.-> n16
n17 -.-> n16
n27 -.-> n28
n19 -.-> n16
n8 --> n28
n12 --> n13
n14 --> n15
n7 --> n3
n16 --> n24
n13 --> n20
n13 --> n29
n11 -.-> n10
n9 --> n25
n9 --> n16
n9 --> n14
n20 --> n8
n3 --> n9
n10 --> n12
n15 --> n10
end
subgraph sg1["Handoff Trigger Input 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/>Await Human Handoff"]
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/redis.svg' width='40' height='40' /></div><br/>Set State to Bot"]
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/redis.svg' width='40' height='40' /></div><br/>Set State to Human"]
n6@{ icon: "mdi:play-circle", form: "rounded", label: "Handoff Trigger Input", pos: "b", h: 48 }
n21["<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 Return Greeting"]
n22@{ icon: "mdi:memory", form: "rounded", label: "Return Memory Buffer", pos: "b", h: 48 }
n23@{ icon: "mdi:memory", form: "rounded", label: "Insert Human Summary", 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/>Notify User Transfer"]
n22 -.-> n23
n26 --> n2
n6 --> n26
n23 --> n21
n1 --> n23
n2 --> n0
n0 --> n1
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 n7,n6 trigger
class n10,n14,n16 ai
class n4,n11,n18 aiModel
class n19 ai
class n5,n17,n27,n28,n22,n23 ai
class n9,n13 decision
class n3,n15,n1,n2 database
class n12 code
classDef customIcon fill:none,stroke:none
class n3,n7,n8,n12,n15,n24,n25,n29,n0,n1,n2,n21,n26 customIcon
Lösningen: tillståndsbaserad bot-till-människa-handoff i Telegram
Det här workflowet använder Telegram som frontdörr, Redis som ”sessionshjärna” och OpenAI som assistent. Varje inkommande meddelande kontrollerar en enkel tillståndsflagga för användaren. Om tillståndet är tomt startar boten onboarding och samlar in de detaljer du faktiskt behöver för en säljförfrågan. När den har tillräckligt växlar den tillståndet till ”human”, notifierar din agent i en separat chatt och boten slutar engagera leaden utöver ett standardiserat svar. När agenten är klar skickar de en kort sammanfattning via ett human-in-the-loop-handoffmeddelande. Workflowet växlar sedan tillbaka tillståndet till ”bot”, lägger in sammanfattningen i minnet och AI:n fortsätter med eftermarknadsstöd som om inget tappats.
Flödet börjar med en Telegram-intake-trigger och routar sedan utifrån tillstånd via en Switch. I mitten extraherar och validerar det nyckeldetaljer, lämnar över till en människa vid behov och återaktiverar till sist OpenAI med agentens sammanfattning lagrad i Redis.
Det du får: automatisering vs. resultat
| Vad det här workflowet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du får 10 Telegram-förfrågningar i veckan. Utan automatisering lägger en säljare oftast cirka 10 minuter på att läsa tråden, plocka ut detaljer och skriva en handoff-notis, alltså ungefär 100 minuter ren upphämtnings-/ikapp-tid. Med det här workflowet kör onboarding automatiskt och agenten skriver bara en kort sammanfattning på slutet (kanske 2 minuter). ”Admin-tiden” sjunker till cirka 20 minuter totalt, och resten blir faktisk försäljning och support.
Det du behöver
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Telegram för boten, användarmeddelanden och agentchatten
- Redis för att lagra sessionstillstånd och chattminne
- OpenAI API-nyckel (hämta den i din OpenAI API-dashboard)
Svårighetsgrad: medel. Du kopplar några konton, sätter miljövariabler/credentials och testar tillståndsbyten med riktiga Telegram-meddelanden.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så funkar det
Ett Telegram-meddelande triggar allt. När en användare skickar ett meddelande startar workflowet från Telegram-intake-triggern och slår direkt upp användarens aktuella ”tillstånd”.
Workflowet kontrollerar en tillståndsflagga i Redis. Om det inte finns något tillstånd ännu behandlar det chatten som en ny förfrågan. Om tillståndet är ”human” stoppar det AI:n från att svara och skickar i stället ett kort ”pågår”-svar till användaren.
AI:n samlar in det som betyder något och lämnar sedan över snyggt. Under onboarding använder workflowet OpenAI för att extrahera kunddetaljerna du bryr dig om, applicerar standardvärden och validerar obligatoriska fält. När informationen är komplett skickar det en handoff-notis till din agent och växlar tillståndet till ”human” så att boten inte stör.
Människan återaktiverar boten med en sammanfattning. När agenten är klar lämnar de en kort recap via human-in-the-loop-meddelandet. Workflowet lagrar recapen i Redis-minnet, växlar tillbaka tillståndet till ”bot”, skickar en välkomsthälsning tillbaka och eftermarknadsassistenten tar över för följdfrågor.
Du kan enkelt modifiera tillstånden (till exempel lägga till ”prisgranskning” eller ”teknisk support”) så att de matchar din funnel. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera triggern Execute Workflow
Det här arbetsflödet använder en Telegram-intagstrigger och en överlämningstrigger för återkoppling från en människa. Ställ in båda triggern så att automatiseringen kan ta emot live-meddelanden och hantera svar vid överlämning.
- Välj Telegram Intake Trigger och verifiera att den är inställd att lyssna efter Updates av
message. - Autentiseringsuppgifter krävs: Anslut era telegramApi-autentiseringsuppgifter i Telegram Intake Trigger.
- Välj Handoff Trigger Input och bekräfta att workflowInputs inkluderar
chatId,sessionId,userId,usernameochsummary.
Steg 2: Anslut Telegram- och Redis-tjänster
Det här arbetsflödet använder flera Telegram- och Redis-noder för tillståndsspårning, meddelanden och minne. Anslut autentiseringsuppgifter en gång och återanvänd dem över noderna.
- Öppna Retrieve State Flag och anslut Redis: Autentiseringsuppgifter krävs: Anslut era redis-autentiseringsuppgifter.
- Säkerställ att Redis-autentiseringsuppgifter är anslutna för Set State to Human, Set State to Bot, Fetch Onboarding History, Chat Memory Store, Aftercare Memory, Onboarding Memory och Return Memory Buffer.
- Anslut Telegram-autentiseringsuppgifter för alla meddelandenoder (7+ noder), inklusive Notify User Transfer, Send Handoff Notice, Send Human In-Progress, Continue Onboarding Chat, Await Human Handoff, Post Aftercare Reply och Send Return Greeting.
Tips: Om ni uppdaterar en Telegram-token, välj om autentiseringsuppgifterna i varje Telegram-nod för att säkerställa att webhooken förblir giltig.
Steg 3: Konfigurera logik för routning baserat på tillstånd
Användarmeddelanden routas baserat på en Redis-tillståndsflagga för att avgöra om en människa hanterar konversationen, om eftervård behövs eller om onboarding ska fortsätta.
- I Retrieve State Flag, ställ in Key till
=handoff_{{ $json.message.chat.id }}_stateoch Property Name tilldata. - I Route by State, verifiera att reglerna jämför Left Value
={{ $json.data }}medhumanochbot, och ställ in fallback-utgången tillOnboarding. - Bekräfta körflödet: Telegram Intake Trigger → Retrieve State Flag → Route by State.
⚠️ Vanlig fallgrop: Om Redis-nyckeln är felaktig eller saknas kommer Route by State att skicka användare till onboarding-vägen som fallback.
Steg 4: Sätt upp onboarding-assistent och minne
Onboarding-assistenten samlar in användaruppgifter och använder minne för att behålla kontext mellan meddelanden.
- Öppna Onboarding Assistant och ställ in Text till
{{ $('Telegram Intake Trigger').first().json.message.text }}. - Säkerställ att Primary Chat Model är ansluten som språkmodell för Onboarding Assistant. Autentiseringsuppgifter krävs: Anslut era openAiApi-autentiseringsuppgifter i Primary Chat Model.
- Säkerställ att Chat Memory Store är ansluten som minne för Onboarding Assistant med Session Key
=handoff_{{ $('Telegram Intake Trigger').first().json.message.chat.id }}_chat. Autentiseringsuppgifter krävs: Anslut era redis-autentiseringsuppgifter i Chat Memory Store. - Bekräfta flödet: Onboarding Assistant → Fetch Onboarding History → Extract Client Details.
Tips: Om ni redigerar onboarding-prompten i Onboarding Assistant, håll listan över obligatoriska uppgifter i linje med attributen i Extract Client Details.
Steg 5: Konfigurera extrahering och validering av detaljer
Användaruppgifter extraheras från den senaste konversationshistoriken, standardvärden appliceras och obligatoriska fält valideras innan överlämning.
- I Fetch Onboarding History, ställ in Key till
=handoff_{{ $('Telegram Intake Trigger').first().json.message.chat.id }}_chatoch Property Name tilldata. - I Extract Client Details, behåll Text-uttrycket som angivet och bekräfta de obligatoriska attributen:
firstname,lastname,address_and_postcodeochreason_for_call. - Säkerställ att Extraction Chat Model är ansluten som språkmodell för Extract Client Details. Autentiseringsuppgifter krävs: Anslut era openAiApi-autentiseringsuppgifter i Extraction Chat Model.
- I Apply Default Fields, behåll kodblocket som slår ihop standardvärden med extraherad output.
- I Validate Required Fields, verifiera att villkorsuttrycket är
{{ Object.values($json).every(val => Boolean(val)) }}.
Steg 6: Konfigurera mänsklig överlämning och returflöde
Den här vägen notifierar användaren om överlämning, skickar en sammanfattning till en människa, uppdaterar tillståndsflaggor och returnerar användaren till boten efter att människan svarat.
- I Run Sub-Workflow (Configure Required), välj sub-workflow-ID:t som ska ta emot den extraherade sammanfattningen. Ställ in Mode till
eachoch säkerställ att input mappar fält somsummarymedname: {{ $json.firstname }} {{ $json.lastname }}. - I Send Handoff Notice, ställ in Chat ID till
{{ $('Telegram Intake Trigger').first().json.message.chat.id }}och behåll notistexten. - I Notify User Transfer, bekräfta överlämningsmeddelandet och att det leder till Set State to Human.
- I Set State to Human, ställ in Key till
=handoff_{{ $json.sessionId }}_stateoch Value till=human. - I Await Human Handoff, ställ in Chat ID till
=[YOUR_ID]och behåll meddelandemallen som hämtar från Handoff Trigger Input. Autentiseringsuppgifter krävs: Anslut era telegramApi-autentiseringsuppgifter. - I Set State to Bot, ställ in Key till
=handoff_{{ $('Handoff Trigger Input').first().json.sessionId }}_stateoch Value tillbot. - I Insert Human Summary, behåll Mode som
insertså att mänskliga svaret injiceras i minnet, och bekräfta sedan att den skickar vidare till Send Return Greeting. - I Send Return Greeting, ställ in Chat ID till
{{ $('Handoff Trigger Input').first().json.chatId }}.
⚠️ Vanlig fallgrop: Om Run Sub-Workflow (Configure Required) inte pekar på ett giltigt workflow-ID kommer användare aldrig att få överlämningsnotisen.
Steg 7: Konfigurera eftervårdsassistent och meddelanden
När tillståndet är satt till bot använder eftervårdssvar en separat assistent med eget minne och egen modell.
- I Aftercare Assistant, ställ in Text till
{{ $('Telegram Intake Trigger').item.json.message.text }}. - Säkerställ att Aftercare Chat Model är ansluten som språkmodell för Aftercare Assistant. Autentiseringsuppgifter krävs: Anslut era openAiApi-autentiseringsuppgifter i Aftercare Chat Model.
- Säkerställ att Aftercare Memory är ansluten som minne för Aftercare Assistant med Session Key
=handoff_{{ $('Telegram Intake Trigger').first().json.message.chat.id }}_chat2. Autentiseringsuppgifter krävs: Anslut era redis-autentiseringsuppgifter i Aftercare Memory. - I Post Aftercare Reply, ställ in Text till
{{ $json.output }}och Chat ID till{{ $('Telegram Intake Trigger').first().json.message.chat.id }}.
Tips: Om svaren verkar sakna kontext, rensa Redis-minnesnycklarna eller sänk contextWindowLength i Aftercare Memory.
Steg 8: Testa och aktivera ert arbetsflöde
Kör ett fullständigt test för onboarding, mänsklig överlämning och retur-till-bot-beteende innan ni aktiverar arbetsflödet.
- Klicka på Execute Workflow och skicka ett meddelande till er bot för att trigga Telegram Intake Trigger.
- Verifiera att Route by State skickar nya användare till onboarding och att Continue Onboarding Chat svarar med output från Onboarding Assistant.
- Fyll i onboarding-detaljerna och bekräfta att flödet når Run Sub-Workflow (Configure Required) och därefter Send Handoff Notice.
- Trigga ett svar för mänsklig överlämning till Handoff Trigger Input och bekräfta att Notify User Transfer, Await Human Handoff, Insert Human Summary och Send Return Greeting körs i följd.
- När ni är nöjda, slå på arbetsflödet till Active för produktionsanvändning.
Vanliga fallgropar
- Telegram-botens behörigheter och chatt-ID:n är lätta att blanda ihop. Om handoff-notiser inte kommer fram, kontrollera först Telegram-nodens chattmål och botens åtkomst.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- Redis-nycklar kan ”se korrekta ut” men ändå peka på fel användaridentitet. Om tillståndsroutningen beter sig slumpmässigt, granska Redis-nyckelmönstret och bekräfta att det konsekvent matchar Telegrams användar-ID.
Vanliga frågor
Vanligtvis cirka 45 minuter om din Telegram-bot, Redis och din OpenAI-nyckel är klara.
Nej. Du kopplar mest credentials och justerar några fält och meddelanden i n8n. Lite vana vid testning (skicka meddelanden, verifiera tillståndsändringar) hjälper.
Ja. n8n har ett gratis self-hosted-alternativ 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 in OpenAI API-användning (ofta några dollar i månaden vid låg volym) och den Redis-hosting du väljer.
Två alternativ: n8n Cloud (managerat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och hanterar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, men då byter du ut Telegram-triggern och noderna för att skicka meddelanden mot en WhatsApp-motsvarighet. Kärnlogiken är densamma: en Redis-tillståndsflagga, en onboarding-agent, en eftermarknadsagent och en human-in-the-loop-sammanfattning som återaktiverar boten. De flesta team justerar också standardmeddelandet ”en människa svarar” så att det matchar kanalens ton.
För det mesta är det bot-tokenen eller chatt-ID:t som är målet. Skapa en ny token i BotFather vid behov och bekräfta sedan att Telegram-noderna i n8n pekar på rätt chatt för både användaren och agenten. Kontrollera också att boten har behörighet att posta i chatten, särskilt i grupper.
Många, så länge Redis och din n8n-instans är dimensionerade för din meddelandevolym.
Ofta, ja, eftersom detta är en tillståndsmaskin, inte en enkel ”trigger och sedan åtgärd”. Du behöver grenlogik, minne och möjligheten att pausa boten medan en människa tar över, vilket är klumpigt i de flesta no-code task-automationsverktyg. n8n låter dig också self-hosta, så hög meddelandevolym inte blir en gigantisk faktura. Zapier eller Make kan fortfarande fungera om du bara vill ha ett grundläggande ”vidarebefordra till människa”-flöde utan någon riktig kontext för återaktivering. Om du är osäker, prata med en automationsexpert så mappar vi det till din exakta funnel.
Det här är den typ av automatisering som gör att din Telegram-kanal känns ”alltid på” utan att låtsas som att människor inte är en del av processen. Sätt upp det en gång, så slutar handoffs vara ett dagligt kaos.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.