Kvitton samlas snabbt på hög. Sedan tappar du en halv eftermiddag på att skriva in summor igen, gissa kategorier och rätta “oops”-misstag som smyger sig in i ditt kalkylark.
Frilansare känner av det vid deklarationen. En småföretagare känner av det varje vecka. Och om du driver kundops på en byrå blir kvittologgning i Telegram ytterligare en “snabb uppgift” som i tysthet äter upp din dag.
Det här arbetsflödet gör om Telegram-meddelanden (bilder eller text) till strukturerade, kategoriserade poster i Google Sheets och skickar sedan en korrekt formaterad sammanfattning tillbaka i chatten. Du får lära dig vad det gör, vad du behöver och hur du kör det stabilt.
Så fungerar den här automatiseringen
Här är hela arbetsflödet du kommer att sätta upp:
n8n Workflow Template: Telegram + Google Sheets: kvitton loggas och sorteras
flowchart LR
subgraph sg0["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/code.svg' width='40' height='40' /></div><br/>Format Summary Message"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Telegram File"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Download Image"]
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/telegram.svg' width='40' height='40' /></div><br/>Telegram Trigger"]
n4@{ icon: "mdi:robot", form: "rounded", label: "AI Categorizer", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Invalid Input", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract Text Input", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check for Image", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "Receipt Parser", pos: "b", h: 48 }
n9@{ icon: "mdi:brain", form: "rounded", label: "AI Analyzer", pos: "b", h: 48 }
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/telegram.svg' width='40' height='40' /></div><br/>Send Error Message"]
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/>Send Expense Summary"]
n12@{ icon: "mdi:cog", form: "rounded", label: "Extract Value From Image", pos: "b", h: 48 }
n9 -.-> n4
n4 --> n0
n2 --> n12
n8 -.-> n4
n7 --> n1
n7 --> n6
n3 --> n7
n1 --> n2
n6 --> n4
n5 --> n10
n5 --> n11
n0 --> n5
n12 --> n4
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 n3 trigger
class n4,n8 ai
class n9 aiModel
class n5,n7 decision
class n1,n2 api
class n0 code
classDef customIcon fill:none,stroke:none
class n0,n1,n2,n3,n10,n11 customIcon
Varför det här spelar roll: utgiftsspårning som inte urartar
Manuell utgiftsspårning fallerar på tråkiga, dyra sätt. Du planerar att logga kvitton “senare”, men senare blir fredag kväll eller månadsskifte, när du är trött och stressar. En suddig bild ligger i kamerarullen, papperskvittot bleknar och transaktionen dyker upp som ett kryptiskt butiksnamn i bankflödet. Även om du faktiskt matar in allt får du ändå inkonsekventa kategorier, saknade datum och totalsummor som inte matchar kvittot eftersom du råkade trycka fel på en siffra. Multiplicera det med varje kaffeköp, leverantörsinköp eller taxiresa. Det är inte svårt arbete. Det är oändligt arbete.
Friktionen byggs på. Här är det som brukar skapa fel.
- Du lägger cirka 5 minuter per kvitto bara på att kopiera grunderna (butik, datum, total), och det blir timmar vid månadens slut.
- Kategorierna glider eftersom du gör bedömningar i stunden, vilket gör att raden “Mat” till slut döljer prenumerationer och förbrukningsmaterial.
- Kvittofoton hamnar lite varstans, så att bevisa ett köp senare blir en skattjakt.
- En missad nolla eller en siffra på fel plats kan sabba utgiftssammanfattningar, och du märker det inte förrän du redan bygger rapporter.
Det du bygger: Telegram-kvitton till kategoriserade rader i Sheets
Du sätter upp en automatisering som lyssnar på meddelanden som skickas till din Telegram-bot. Om du skickar en textutgift tas den som den är. Om du skickar ett kvittofoto hämtar arbetsflödet bilden från Telegram och kör OCR (textigenkänning) med Tesseract, vilket gör om bilden till kopierbar text. Därefter tolkar en AI-modell (via OpenRouter) underlaget, extraherar viktiga fält (butik, plats, datum, artiklar, total) och tilldelar en kategori som Mat & dryck, Hushåll eller Transport. Till sist får du en formaterad sammanfattning tillbaka i Telegram och en korrekt strukturerad rad sparad i Google Sheets så att din utgiftsspårning förblir konsekvent utan daglig handpåläggning.
Arbetsflödet börjar med ett Telegram-meddelande. Det routar meddelandet baserat på “foto vs text”, och standardiserar sedan allt till en enda strukturerad payload. Därifrån parsar och kategoriserar AI:n, och du får antingen en sammanfattning eller en felvarning om totalsumman är ogiltig.
Det du bygger
| Vad som automatiseras | Vad du uppnår |
|---|---|
|
|
Förväntade resultat
Säg att du loggar 10 kvitton i veckan. Manuellt tar även en noggrann process cirka 5 minuter per kvitto, så du lägger nästan en timme bara på att mata in data (och det är innan du rättar fel). Med det här arbetsflödet skickar du en bild eller en kort text till Telegram på cirka 30 sekunder och väntar sedan på sammanfattningen medan arket uppdateras i bakgrunden. Du får tillbaka ungefär 45 minuter varje vecka, och dessutom slipper du den där “städspurten” vid månadsskiftet.
Innan du börjar
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Telegram för att ta emot kvittofoton och texter
- Google Sheets för att lagra korrekta, strukturerade utgiftsrader
- OpenRouter API-nyckel (hämta den i din OpenRouter-dashboard)
Svårighetsnivå: Nybörjare. Du kopplar in behörigheter, klistrar in en API-nyckel och väljer rätt Google Sheet och kolumner.
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 antingen en textbeskrivning (“Köpte kaffe på…”) eller ett kvittofoto. Den enda ingången gör vanan lätt att hålla fast vid.
Arbetsflödet avgör: foto eller text. Om det finns en bild hämtar n8n Telegram-filen och laddar ner själva bilddatan. Om det är ren text mappar arbetsflödet in den i en standardiserad payload så att den kan behandlas på samma sätt senare.
OCR och AI gör röran strukturerad. Tesseract läser kvittotext från bilden, sedan klassificerar en OpenRouter-chattmodell utgiften och extraherar fält som butik, datum, artiklar, total och kategori. En strukturerad parser håller utdata konsekvent så att ditt ark inte fylls av slumpmässiga format.
Du får en sammanfattning och korrekt loggning. Ett kodsteg bygger ett tydligt sammanfattningsmeddelande för Telegram, och en kontroll av “ogiltig totalsumma” routar till antingen en felvarning eller den slutliga sammanfattningen. Den strukturerade datan skrivs också till Google Sheets för rapportering och avstämning.
Du kan enkelt ändra kategorilistan och sammanfattningsformatet efter dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera Telegram-triggern
Konfigurera arbetsflödet så att det lyssnar efter nya Telegram-meddelanden som indata för utgifter och kvitton.
- Lägg till noden Telegram Intake Trigger i ert arbetsflöde.
- Autentiseringsuppgifter krävs: anslut era telegramApi-uppgifter.
- I Telegram Intake Trigger låter ni Updates vara inställt på
message(som i arbetsflödet). - Lämna Flowpast Branding som en referensnotering (ingen konfiguration behövs).
Steg 2: routa text- kontra bildindata
Dela upp flödet baserat på om inkommande Telegram-meddelande innehåller ett foto och hämta samt OCR-tolka bilder när de finns.
- Konfigurera Detect Image Presence för att kontrollera om det finns ett foto, med Left Value satt till
{{ $json.message.photo }}och operatornexists. - Notera att Detect Image Presence skickar utdata parallellt till både Retrieve Telegram File och Map Text Payload.
- I Retrieve Telegram File ställer ni in URL till
=https://api.telegram.org/bot[CONFIGURE_YOUR_TOKEN]/getFile?file_id={{ $json.message.photo[3].file_id }}. - I Fetch Image File ställer ni in URL till
=https://api.telegram.org/file/bot[CONFIGURE_YOUR_TOKEN]/{{ $node['Retrieve Telegram File'].json['result']['file_path'] }}och behåller Response Format somfile. - Koppla Fetch Image File till OCR Image Text för att extrahera text från kvitton.
- I Map Text Payload mappar ni meddelandetexten till parserns indata med message satt till
{{ $json.message.text }}.
[CONFIGURE_YOUR_TOKEN] i URL:erna för både Retrieve Telegram File och Fetch Image File med er riktiga Telegram-bot-token, annars kommer filnedladdningarna att misslyckas.Steg 3: konfigurera AI-klassificering och parsning
Använd AI-kedjan för att klassificera utgiftstext och säkerställa strukturerad utdata för sammanfattningar.
- I Classify Expense Input ställer ni in Text till
{{ $json.text }}och behåller Prompt Type somdefine. - Säkerställ att Classify Expense Input har Has Output Parser aktiverat och är kopplad till Structured Receipt Parser.
- Behåll schemat i Structured Receipt Parser som det är angivet i JSON Schema Example för att normalisera butik, varor och totalsummor.
- Autentiseringsuppgifter krävs: anslut era openRouterApi-uppgifter i OpenRouter Chat Model.
- OpenRouter Chat Model är kopplad som språkmodell för Classify Expense Input — säkerställ att autentiseringsuppgifterna läggs till i OpenRouter Chat Model, inte i parserns subnod.
Steg 4: skapa sammanfattningen och validera totalsummor
Skapa en användarvänlig sammanfattning från parsade data och upptäck fel när totalsumman är noll.
- Använd Compose Summary Note för att formatera utdata; behåll den angivna JavaScript Code som bygger meddelandet och hanterar nolltotalsummor.
- Koppla Classify Expense Input till Compose Summary Note så att parsat utdata omvandlas till sammanfattningsmeddelandet.
- I Validate Zero Total behåller ni villkoret där Left Value är
{{ $json.message }}och är lika med felsträngen.
Steg 5: konfigurera utdataåtgärder
Skicka antingen en felvarning eller en lyckad utgiftssammanfattning till användaren baserat på valideringsresultatet.
- I Dispatch Error Alert ställer ni in Text till
=hello {{ $('Telegram Intake Trigger').item.json.message.from.first_name }} {{ $json.message }}och Chat ID till{{ $('Telegram Intake Trigger').item.json.message.chat.id }}. - Autentiseringsuppgifter krävs: anslut era telegramApi-uppgifter i Dispatch Error Alert.
- I Send Expense Recap ställer ni in Text till
=hello {{ $('Telegram Intake Trigger').item.json.message.from.first_name }} Ini Rekap Belanjamu {{ $json.message }}och Chat ID till{{ $('Telegram Intake Trigger').item.json.message.chat.id }}. - Autentiseringsuppgifter krävs: anslut era telegramApi-uppgifter i Send Expense Recap.
Steg 6: testa och aktivera ert arbetsflöde
Verifiera hela flödet med både textbaserade och bildbaserade kvitton och aktivera det sedan för produktionsanvändning.
- Klicka på Execute Workflow och skicka ett Telegram-meddelande till er bot med utgiftstext för att verifiera vägen Map Text Payload → Classify Expense Input.
- Skicka en kvittobild för att testa Retrieve Telegram File → Fetch Image File → OCR Image Text → Classify Expense Input.
- Bekräfta lyckade körningar genom att ta emot sammanfattningsmeddelandet från Send Expense Recap och felmeddelanden från Dispatch Error Alert när totalsummor är noll.
- När ni är nöjda, växla arbetsflödet till Active för kontinuerligt Telegram-intag.
Tips vid felsökning
- Telegram-inloggningar kan löpa ut eller kräva specifika behörigheter. Om det slutar fungera, kontrollera din n8n-post under Credentials för Telegram API och bekräfta först att BotFather-token fortfarande är korrekt.
- Om du använder Wait-noder eller extern rendering varierar bearbetningstiderna. Öka väntetiden om noder längre fram fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din tonalitet tidigt, annars kommer du att redigera utdata för alltid.
Snabba svar
Cirka 30 minuter om din bot och ditt ark redan är klara.
Nej. Du kopplar främst konton och klistrar in en API-nyckel.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis testperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också räkna med OpenRouter-användning (ofta en lågkostnads- eller gratisnivåmodell, beroende på vad du väljer).
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärt och klarar n8n bra. Self-hosting ger dig obegränsat antal körningar men kräver grundläggande serverhantering.
Ja, och det bör du troligen. De flesta börjar med att redigera kategorilistan i AI-steget “Classify Expense Input” och justerar sedan koden i “Compose Summary Note” så att sammanfattningen matchar hur de granskar utgifter. Om du inte behöver OCR kan du hoppa över bildgrenen helt och bara behålla spåret “Map Text Payload”. Du kan också byta ut loggningen i Google Sheets mot en annan databas senare och ändå behålla Telegram som intake.
Oftast är det en ogiltig eller roterad bot-token. Kontrollera token från BotFather igen och bekräfta att rätt Telegram-inloggning är vald både i Telegram Trigger och i noden “Send Expense Recap”. Om bilder inte laddas ner kan det också vara ett behörighetsproblem vid filhämtning eller en trasig Telegram-fil-URL, så granska exekveringsdatan runt “Retrieve Telegram File”.
För de flesta små team fungerar hundratals kvitton i månaden fint, och self-hosting tar bort exekveringsgränser helt.
Ofta ja, eftersom det här arbetsflödet har grenar (foto vs text), OCR, strukturerad parsning och felhantering som lätt blir både krångligt och dyrt i enklare automationsverktyg. n8n ger dig också mer kontroll över hur data formas innan den hamnar i Google Sheets, vilket är där röriga loggar vanligtvis börjar. Nackdelen är uppsättning: OCR här använder en community-nod, så self-hosting ger den smidigaste upplevelsen. Om allt du behöver är “meddelande till rad i Sheets” kan Zapier eller Make gå snabbare. Prata med en automationsexpert om du vill ha hjälp att välja.
När det här väl rullar slutar kvitton vara en helgsyssla. Ditt ark förblir strukturerat, dina sammanfattningar förblir lättlästa och du får tillbaka tiden utan att behöva förlita dig på viljestyrka.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.