Behöver ert företag hjälp med att implementera AI? Kontakta oss och få prisoffert här →
AI Skolan
januari 22, 2026

Supabase + Telegram: kvitton till totalsumma i chatten

Rickard Andersson Partner, Nodenordic.se

Att jaga kvitton är irriterande. Ännu värre är att när de väl kommer in måste du fortfarande kisa på totalsummor, skriva om datum för hand och gissa vilken kostnadskategori ekonomiavdelningen vill ha den här gången.

Den här Telegram-kvittoautomatiseringen slår hårdast mot Ops-chefer och ekonomiassistenter, men även byråägare som reser mycket i kundprojekt känner av det. Du laddar upp kvitton i chatten och får tillbaka en strukturerad uppdelning plus en totalsumma, utan att bygga ett kalkylarksmonster.

Det här arbetsflödet gör “skicka mig kvittona” till “här är sammanställningen”. Du får se hur det fungerar, vad du behöver och var team oftast kör fast.

Så fungerar automatiseringen

Se hur detta löser problemet:

n8n Workflow Template: Supabase + Telegram: kvitton till totalsumma i chatten

Utmaningen: förvandla kvittokaos till utläggsersättning

Utlägg för resor är enkla i teorin, tills verkligheten dyker upp som suddiga foton, hotellfakturor uppdelade på flera sidor och taxikvitton som knappt ser ut som kvitton. Någon laddar upp en fil i en chatt. Någon annan kopierar siffror in i ett ark. Sedan börjar frågorna: “Vilken valuta är det här?” “Är dricks inkluderad?” “Vilket datum ska jag använda för hotellet?” Varje fram-och-tillbaka är liten, men i ett team blir det en veckovis tidstjuv och ett trovärdighetsproblem när totalsummor inte stämmer.

Det växer snabbt. Här är var det brukar fallera i det dagliga arbetet.

  • Kvitton kommer i olika format, så din “process” ändras varje gång.
  • Manuell inmatning skapar små fel som tar längre tid att hitta än att förebygga.
  • Folk tappar kontext i chattrådar, så du ställer samma följdfrågor om och om igen.
  • Det finns ingen sessionsbaserad historik över vad som skickats in, vilket gör totalsummor och revisioner smärtsamma.

Lösningen: ladda upp kvitton i Telegram, få totalsummor tillbaka

Det här n8n-flödet ger dig ett lättviktigt, chattbaserat inflöde för resekvitton. En användare skickar ett Telegram-liknande chattmeddelande (via flödets chat UI-trigger) och kan bifoga en eller flera kvittofiler. Om filer finns normaliserar flödet den binära payloaden, skickar varje fil till en OCR-endpoint och sparar OCR-“blocken” i Supabase under samma session. Sedan läser en AI-agent både chatttexten och den sparade OCR-utmatningen, extraherar strukturerade fält (leverantör, datum, valuta, total, kategori, anteckningar) och räknar fram en totalsumma med ett kalkylatorverktyg så att matematiken blir konsekvent. Till sist svarar agenten i chatten med en prydlig sammanställning som är redo att godkännas eller exporteras.

Flödet startar med ett chattmeddelande och valfria bilagor. OCR omvandlar stökiga bilder och PDF:er till maskinläsbara block, och Supabase håller dessa block kopplade till sessionen så att du kan be om en konsoliderad sammanfattning senare. Agenten formaterar resultatet som en strukturerad utgiftstabell med uppdelning per kategori och en totalsumma.

Vad som förändras: före vs. efter

Effekt i verkligheten

Säg att en kollega skickar in 8 kvitton från en resa. Manuellt är det kanske 5 minuter per kvitto att läsa, skriva in totalsummor och rimlighetskolla datum, plus ytterligare 10 minuter med frågor när något saknas, alltså ungefär 50 minuter. Med det här flödet laddar de upp allt en gång i chatten (cirka 2 minuter), OCR kör i bakgrunden och agenten returnerar utgiftstabellen och totalsumman. Du gör fortfarande en stickprovskontroll, men grovjobbet är borta.

Krav

  • n8n-instans (testa n8n Cloud gratis)
  • Self-hosting-alternativ om du föredrar det (Hostinger fungerar bra)
  • Supabase för att lagra OCR-block per chattsession.
  • OCR API-endpoint för att extrahera text från filer.
  • Mistral Cloud-inloggningsuppgifter (hämta från din Mistral-kontopanel).

Svårighetsgrad: Medel. Du kopplar in inloggningsuppgifter, skapar en enkel Supabase-tabell och klistrar in en OCR-endpoint-URL.

Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).

Flödet i arbetsflödet

Ett chattmeddelande startar allt. Flödet tar emot ett meddelande och (valfritt) kvittobilagor, med ett sessions-ID så att alla filer hålls kopplade till samma ersättningstråd.

Filerna förbereds för konsekvent hantering. Om en uppladdning finns delar n8n upp varje bilaga och normaliserar den binära payloaden så att OCR-anropet alltid ser likadant ut, även när användare skickar olika filtyper.

OCR körs och Supabase lagrar resultaten. Varje kvitto skickas till din OCR-leverantör via HTTP-begäran och de returnerade textblocken upsertas till en Supabase-temp_table med sessions-ID och filnamn.

En AI-agent extraherar utgifter och räknar totalsummor. Agenten läser chatkontexten plus OCR-blocken, plockar ut fält som leverantör, datum, valuta och totalbelopp och använder ett kalkylatorverktyg för att räkna fram en totalsumma över flera kvitton.

Du kan enkelt ändra vilka fält som extraheras och hur resultatet formateras, så att det matchar er policy för utlägg. Se hela implementationsguiden nedan för anpassningsalternativ.

Steg-för-steg-guide för implementering

Steg 1: konfigurera chatttriggern

Konfigurera chattgränssnittet som samlar in användarmeddelanden och filuppladdningar för resekvitton.

  1. Lägg till noden Incoming Chat Event som din trigger.
  2. Ställ in Publictrue.
  3. Ställ in Initial Messages👋 Hi there! 📝 Need help with a document? Upload it here! 🔐 We follow a zero-retention policy — your files are never stored permanently..
  4. I Options aktiverar ni Allow File Uploads och ställer in Load Previous Sessionmemory.
  5. Koppla Session Memory Buffer till Incoming Chat Event via AI-minnesanslutningen och ställ in Context Window Length10.
Tips: Anpassningen av chattgränssnittet i Incoming Chat Event använder anpassad CSS. Behåll den som den är om ni inte behöver matcha varumärkesfärger.

Steg 2: anslut Supabase

Konfigurera Supabase så att arbetsflödet kan lagra och hämta OCR-data.

  1. Öppna Persist OCR Result och välj er Supabase-anslutning. Inloggningsuppgifter krävs: Anslut era supabaseApi-inloggningsuppgifter.
  2. Ställ in Table IDtemp_table.
  3. Mappa fält i Fields: ställ in session_id{{ $('Incoming Chat Event').item.json.sessionId }}, file{{ $json.data[0].parseJson().blocks }} och file_name{{ $json.data[0].parseJson().source }}.
  4. Öppna Fetch Supabase Records och välj er Supabase-anslutning. Inloggningsuppgifter krävs: Anslut era supabaseApi-inloggningsuppgifter.
  5. Ställ in OperationgetAll, Table IDtemp_table och lägg till ett filter där session_id är lika med {{ $('Incoming Chat Event').item.json.sessionId }}.

Steg 3: konfigurera filbearbetning

Detektera filuppladdningar, extrahera binärdata och normalisera den för OCR-API:t.

  1. Konfigurera Check File Attachment med ett villkor som kontrollerar om files finns med {{ $json.files }}.
  2. Koppla Incoming Chat Event till Check File Attachment.
  3. Koppla “true”-utgången från Check File Attachment till Extract Binary Segment.
  4. I Extract Binary Segment ställer ni in Field to Split Out$binary och aktiverar Include Binary.
  5. Koppla Extract Binary Segment till Normalize Binary Payload och ställ in JS Code till:
  6. return items.map(item => { const binaryKeys = Object.keys(item.binary || {}); const firstKey = binaryKeys[0]; if (!firstKey) { return item; } return { json: item.json, binary: { data: item.binary[firstKey] } }; });
⚠️ Vanlig fallgrop: Om fältnamnet för filuppladdning ändras kan Normalize Binary Payload inte hitta den första binära nyckeln. Håll uppladdningsfältet i Incoming Chat Event konsekvent.

Steg 4: konfigurera OCR-API-anropet

Skicka den normaliserade filen till er OCR-endpoint för att extrahera textdata.

  1. Koppla Normalize Binary Payload till OCR API Request.
  2. Ställ in MethodPOST och Content Typemultipart-form-data.
  3. Lägg till body-parametrar: mode = single, output_type = jsonl, include_images = false.
  4. Lägg till ett binärt formulärfält med namnet files där Input Data Field Name är satt till data.

Steg 5: konfigurera utdata-routing och persistens

Lagra OCR-resultat och slå sedan ihop flödet så att agenten kan svara oavsett om en fil laddades upp eller inte.

  1. Koppla OCR API Request till Persist OCR Result.
  2. Koppla Persist OCR Result till Combine Branches.
  3. Koppla “false”-utgången från Check File Attachment till den andra ingången på Combine Branches så att även förfrågningar med enbart text fortsätter.

Steg 6: konfigurera agenten för analys av resekostnader

Konfigurera AI-agenten för att analysera OCR-data och besvara användarfrågor om resekostnader.

  1. Koppla Combine Branches till Travel Expense Analyst.
  2. I Travel Expense Analyst ställer ni in Text{{ $('Incoming Chat Event').item.json.chatInput }} och behåller Prompt Type som define.
  3. Koppla Mistral Chat Engine som språkmodell till Travel Expense Analyst och ställ in Modelmistral-medium-latest. Inloggningsuppgifter krävs: Anslut era mistralCloudApi-inloggningsuppgifter.
  4. Koppla Agent Memory Window till Travel Expense Analyst via AI-minne (inga inloggningsuppgifter krävs).
  5. Koppla Computation Tool och Fetch Supabase Records som AI-verktyg till Travel Expense Analyst så att den kan beräkna totalsummor och hämta sparade kvitton.
Tips: Noder för AI-verktyg och minne (som Computation Tool och Agent Memory Window) konfigureras via Travel Expense Analyst. Ställ in inloggningsuppgifter på den överordnade verktygsnoden om det krävs, inte på underanslutningen.

Steg 7: testa och aktivera ert arbetsflöde

Verifiera flödet från början till slut med ett exempelkvittot innan ni aktiverar i produktion.

  1. Klicka på Execute Workflow och öppna chattgränssnittet från Incoming Chat Event.
  2. Skicka ett meddelande och ladda upp en exempelkvittfil för att trigga Check File AttachmentExtract Binary SegmentOCR API Request.
  3. Bekräfta att Persist OCR Result skriver till Supabase och att Travel Expense Analyst returnerar en strukturerad sammanfattning med en totalsumma.
  4. Aktivera arbetsflödet genom att växla det till Active när resultaten ser korrekta ut.
🔒

Lås upp fullständig steg-för-steg-guide

Få den kompletta implementeringsguiden + nedladdningsbar mall

Se upp för

  • Supabase-inloggningsuppgifter kan löpa ut eller kräva specifika behörigheter. Om något skapar fel, kontrollera först API-nycklarna i ditt Supabase-projekt och tabellbehörigheterna.
  • Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
  • Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du redigera utdata för alltid.

Vanliga frågor

Hur snabbt kan jag implementera den här Telegram-kvittoautomatiseringen?

Vanligtvis på ungefär en timme när dina Supabase- och OCR-konton är klara.

Kan icke-tekniska team implementera den här automatiseringen från kvitto till totalsumma?

Ja, men någon bör vara bekväm med att koppla konton och testa några exempelkvittton. Det är ingen “riktig kodning”, men du kommer att klistra in en OCR-endpoint och skapa en liten tabell i Supabase.

Är n8n gratis att använda för det här arbetsflödet för Telegram-kvittoautomatisering?

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 in kostnader för OCR och AI-modellanvändning, som beror på leverantör och hur många kvitton du hanterar.

Var kan jag hosta n8n för att köra den här automatiseringen?

Två alternativ: n8n Cloud (managed, enklast setup) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och kör n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.

Hur anpassar jag den här Telegram-kvittoautomatiseringen till mina specifika utmaningar?

Du kan byta OCR-leverantör genom att ändra noden OCR API Request till en annan HTTP-endpoint, så länge den returnerar textblock som du kan lagra. Om du vill ha andra utdatafält justerar du agentinstruktionerna i Travel Expense Analyst (till exempel lägg till “projektkod” eller “kundnamn”). Vanliga anpassningar är striktare kategoriregler, att tvinga en hemmavaluta och att skriva de slutliga raderna till Google Sheets för bokföring.

Varför fallerar min Supabase-anslutning i det här flödet?

Oftast är det en ogiltig eller roterad API-nyckel i n8n. Det kan också vara row-level security eller saknade behörigheter på temp_table, så att upsert misslyckas trots att inloggningsuppgifterna “kopplar upp”. Om du nyligen bytt namn på kolumner (som session_id eller file_name), uppdatera mappningen i noden Persist OCR Result så att den matchar.

Vilken kapacitet har den här lösningen för Telegram-kvittoautomatisering?

I n8n Cloud Starter begränsas du av dina månatliga körningar, så högre kvittovolym kan tvinga dig till en större plan. Om du self-hostar finns ingen körningsgräns, och kapaciteten beror främst på din serverstorlek samt hastigheten i din OCR-API. I praktiken klarar flödet många kvitton eftersom det bearbetar dem ett i taget och lagrar OCR-utdata per session. Den verkliga begränsningen är oftast OCR:ens rate limits, inte n8n i sig.

Är den här Telegram-kvittoautomatiseringen bättre än att använda Zapier eller Make?

Ofta ja, eftersom detta är mer än en enkel “fil in, rad ut”-zap. Du förgrenar baserat på om en fil finns, normaliserar binärdata, lagrar OCR-block för senare sessionssammanfattningar och använder en agent med ett kalkylatorverktyg för totalsummor. Zapier och Make kan göra delar av detta, men OCR i flera steg plus sessionsmedvetna sammanfattningar blir ofta rörigt och dyrt. Om du bara behöver “OCR:a ett kvitto och skicka mig texten” fungerar de bra. Om du vill ha chattupplevelsen och konsoliderade totalsummor passar n8n bättre. Prata med en automationsexpert om du vill ha hjälp att välja.

Ladda upp kvitton en gång, få tillbaka en användbar uppdelning och håll OCR-spåret säkert kopplat till sessionen i Supabase. Ärligt talat är det en liten förändring som gör att utläggsersättning känns tråkigt igen.

Kontakta oss

Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.

×

Använd mall

Få direkt tillgång till denna n8n-arbetsflödes JSON-fil

Få prisoffert redan idag!
Få prisoffert redan idag!

Berätta vad ni behöver hjälp med så hör vi av oss inom en arbetsdag!

Få prisoffert redan idag!
Få prisoffert redan idag!

Berätta vad ni behöver hjälp med så hör vi av oss inom en arbetsdag!

Launch login modal Launch register modal