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

Postgres till Google Sheets: chattloggar i flikar

Rickard Andersson Partner, Nodenordic.se

Din AI-agent levererar. Loggarna gör det inte. De fastnar i Postgres, är svåra att överblicka, jobbiga att dela, och varje “snabb genomgång” blir till SQL, exporter och ett kalkylark som fortfarande behöver efterarbete.

Den här automationen för Postgres Sheets transcripts träffar produktchefer först, eftersom de snabbt behöver se mönster. Men supportansvariga som jagar “vad hände egentligen?” och marknadsförare som vill granska kundernas faktiska språk märker det också. Du får felfria, delningsbara transkript i Google Sheets, organiserade per session.

Nedan ser du exakt hur flödet flyttar data från din chatthistoriktabell till en flik per session, vad du behöver för att köra det och var team oftast går fel.

Så fungerar den här automationen

Hela n8n-flödet, från trigger till slutresultat:

n8n Workflow Template: Postgres till Google Sheets: chattloggar i flikar

Problemet: chatttranskript sitter fast i databasen

När dina agentkonversationer ligger i Postgres (eller Supabase) är datan tekniskt säker, men i praktiken osynlig. En produktchef vill granska fem sessioner inför ett roadmap-möte. En supportansvarig behöver en “dålig” konversation för att träna teamet. Någon kör en fråga, exporterar CSV, klistrar in i Sheets och slösar sedan tid på att fixa tidsstämplar, sortera meddelanden och dela upp sessioner i separata flikar. Och nästa dag gör du det igen eftersom loggarna har ändrats.

Det blir mycket väldigt snabbt. Friktionen byggs på.

  • Att hämta sessionsloggar manuellt innebär oftast minst 30 minuter av fråga, export och formatering per förfrågan.
  • Meddelanden granskas i fel ordning, eftersom en CSV-export inte “känns” som en konversation.
  • Att dela rå databasåtkomst är inget alternativ för de flesta team, så granskningar fastnar hos den som kan köra SQL.
  • När folk börjar copy-pasta smyger små fel in och du tappar förtroendet för det du tittar på.

Lösningen: exportera varje session till en egen flik i Google Sheets

Det här flödet hämtar konversationshistorik från din n8n_chat_histories-tabell i Postgres och gör den till något hela teamet faktiskt kan använda. Det startar enligt schema (dagligen är vanligt) eller med en manuell körning när du behöver det nu. Först samlar det in de unika session_id-värdena så det vet vilka konversationer som finns. Sedan loopar det igenom sessionerna en i taget, rensar motsvarande flik om den redan finns, duplicerar en mallflik, döper om den till sessions-ID:t och lägger till hela meddelandehistoriken som strukturerade rader. Slutresultatet är ett Google Sheet där varje session är ett dedikerat, lättläst transkript.

Flödet startar när schematriggaren kör (eller när du klickar på manuell körning). Postgres-frågor hämtar sessions-ID:n och sedan meddelanden för varje session. Till sist byggs Google Sheets om så att transkriptet alltid är aktuellt, utan att du rör CSV-filer.

Det du får: automation vs. resultat

Exempel: så här ser det ut

Säg att din agent har cirka 40 sessioner per dag och att varje session har 15–30 meddelanden. Manuellt blir till och med “bara att ta några exempel” ofta 10 minuter per session mellan att fråga, exportera, dela upp och formatera, så du kan bränna cirka 6 timmar på en vecka utan att märka det. Med det här flödet lägger du kanske 10 minuter en gång på att sätta upp Sheet-mallen och behörigheter, och sedan körs den dagliga körningen automatiskt. Du öppnar Google Sheets och flikarna finns redan där, döpta efter sessions-ID, redo att granskas.

Det här behöver du

  • n8n-instans (prova n8n Cloud gratis)
  • Self-hosting-alternativ om du föredrar det (Hostinger fungerar bra)
  • Postgres för att lagra chattminnesloggar i en tabell.
  • Google Sheets för att granska transkript i delade flikar.
  • Google OAuth-uppgifter (skapa i Google Cloud Console, anslut sedan i n8n).

Kunskapsnivå: Medel. Du kopplar databasuppgifter, sätter upp Google-autentisering och justerar en SQL-fråga om ditt schema skiljer sig.

Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).

Så fungerar det

Ett schema (eller manuell körning) sätter igång. Du kan köra det dagligen vid lunch, varje timme eller bara när du behöver en färsk uppsättning transkript inför ett möte.

Sessions-ID:n hämtas från Postgres. Flödet frågar din n8n_chat_histories-tabell för att få unika session_id-värden och loopar sedan igenom dem så att varje konversation hanteras konsekvent.

Varje session får en egen flik. Med en mallflik i Google Sheets duplicerar flödet den, döper om den till sessions-ID:t (via en HTTP-begäran till Sheets API) och rensar sedan eventuella gamla rader så att transkriptet byggs om strukturerat.

Meddelanden läggs till som läsbara rader. För varje session hämtar en andra Postgres-fråga meddelanden, och Google Sheets lägger sedan till dem med kolumner som Vem (user/assistant), Meddelande och Datum (formaterat från created_at).

Du kan enkelt ändra vad som identifierar en “session” till att gruppera på något mer beständigt som user_id beroende på dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.

Steg-för-steg-guide för implementation

Steg 1: konfigurera den manuella triggern

Det här arbetsflödet kan startas manuellt eller enligt ett schema, så konfigurera båda triggers så att de matchar era operativa behov.

  1. Lägg till noden Manual Launch Trigger för att möjliggöra körningar vid behov.
  2. Lägg till noden Scheduled Run Trigger och ställ in schemaregeln så att den körs vid 12 (timkonfiguration använder triggerAtHour = 12).
  3. Säkerställ att både Manual Launch Trigger och Scheduled Run Trigger är kopplade till Retrieve Session IDs.

Steg 2: anslut Postgres

Dessa noder frågar och underhåller er tabell med sessionshistorik i Postgres.

  1. Öppna Retrieve Session IDs och bekräfta att Query är satt till select distinct(session_id) from n8n_chat_histories med Operation satt till executeQuery.
  2. Öppna Fetch Session Messages och ställ in Table till n8n_chat_histories, Schema till =public, och lägg till ett Where-villkor: Column = session_id, Value = {{ $('Iterate Session List').item.json.session_id }}.
  3. Om ni planerar att köra det valfria underhållet, konfigurera Utility: Add Created Timestamp med frågan ALTER TABLE ONLY "n8n_chat_histories" ADD COLUMN "created_at" TIMESTAMP DEFAULT NOW();.
  4. Credential Required: Anslut era postgres-inloggningsuppgifter till Retrieve Session IDs, Fetch Session Messages och Utility: Add Created Timestamp.

Steg 3: anslut Google Sheets

Dessa noder förbereder och uppdaterar en flik i arket för varje session i ert kalkylblad för konversationslogg.

  1. I Purge Sheet Rows ställer ni in Document ID till ert kalkylblads-ID (ersätt [YOUR_ID]), Sheet Name till {{ $json.session_id }} och Range till A2:C10000.
  2. I Clone Template Tab ställer ni in URL till =https://sheets.googleapis.com/v4/spreadsheets/{{ $('Purge Sheet Rows').params.documentId.value }}/sheets/0:copyTo och säkerställ att body-parametern destinationSpreadsheetId är {{ $('Purge Sheet Rows').params.documentId.value }}.
  3. I Retitle Sheet Tab ställer ni in URL till =https://sheets.googleapis.com/v4/spreadsheets/{{ $('Purge Sheet Rows').params.documentId.value }}:batchUpdate och JSON Body till { "requests": [{ "updateSheetProperties": { "properties": { "sheetId": {{ $json.sheetId }}, "title": "{{ $('Purge Sheet Rows').item.json.session_id }}", "hidden": false }, "fields": "title, hidden" } }] }.
  4. Credential Required: Anslut era googleSheetsOAuth2Api-inloggningsuppgifter till Purge Sheet Rows, Clone Template Tab och Retitle Sheet Tab.

⚠️ Vanlig fallgrop: Om Document ID fortfarande är [YOUR_ID] kommer arbetsflödet att misslyckas när flikar rensas och kopieras.

Steg 4: konfigurera sessionsbearbetning

Det här steget batchar sessions-ID:n, skapar/byter namn på flikar och sätter sessionskontexten för nedströmsnoder.

  1. Konfigurera Iterate Session List för att bearbeta batchar från Retrieve Session IDs (standardinställningarna räcker).
  2. I Assign Session Identifier lägger ni till en tilldelning med namnet session_id med värdet {{ $('Purge Sheet Rows').first().json.session_id }}.
  3. Bekräfta flödet: Retrieve Session IDsIterate Session ListPurge Sheet Rows.
  4. Purge Sheet Rows skickar utdata parallellt till både Fetch Session Messages och Clone Template Tab.
  5. Bekräfta grenen för flikupplägg: Clone Template TabRetitle Sheet TabAssign Session IdentifierPurge Sheet Rows.

Steg 5: konfigurera utdata till Google Sheets

Konversationsmeddelanden läggs till i rätt sessionsflik efter att de har hämtats från Postgres.

  1. Öppna Append Conversation Rows och ställ in Operation till append.
  2. Ställ in Sheet Name till {{ $('Iterate Session List').item.json.session_id }} och Document ID till samma kalkylblad som används i Purge Sheet Rows.
  3. Mappa kolumner med befintliga uttryck: Who = {{ $json.message.type }}, Date = {{ $json.created_at.toDateTime().format('yyyy-MM-dd hh:mm:ss') }}, Message = {{ $json.message.content }}.
  4. Credential Required: Anslut era googleSheetsOAuth2Api-inloggningsuppgifter till Append Conversation Rows.

Steg 6: testa och aktivera ert arbetsflöde

Kör ett manuellt test för att bekräfta att sessions-ID:n hämtas, att flikar skapas/rensas och att konversationsmeddelanden visas korrekt.

  1. Klicka på Execute Workflow med Manual Launch Trigger.
  2. Verifiera att Retrieve Session IDs returnerar sessions-ID:n och att varje ID bearbetas av Iterate Session List.
  3. Bekräfta att Purge Sheet Rows rensar A2:C10000, att Clone Template Tab skapar en ny flik och att Retitle Sheet Tab döper den till aktuell session_id.
  4. Kontrollera kalkylbladet så att Append Conversation Rows lägger till rader med Who, Date och Message.
  5. Aktivera arbetsflödet för att möjliggöra Scheduled Run Trigger för automatiserade exporter.
🔒

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

Få den kompletta implementeringsguiden + nedladdningsbar mall

Vanliga fallgropar

  • Google Sheets-behörigheter kan löpa ut eller kräva specifika rättigheter. Om något slutar fungera: kontrollera först n8n-skärmen Credentials och att det anslutna Google-kontot har åtkomst till målarket.
  • Om du använder Wait-noder eller extern rendering varierar bearbetningstider. Öka väntetiden om nedströms noder fallerar på tomma svar.
  • Postgres-scheman glider i verkligheten. Om din created_at-kolumn saknas eller lagras i ett annat format kommer “datum”-kolumnen i Sheets att se fel ut tills du uppdaterar frågan och mappningen.

Vanliga frågor

Hur lång tid tar det att sätta upp den här automationen för Postgres Sheets transcripts?

Cirka en timme om din Postgres-tabell och dina Google-uppgifter är redo.

Behöver jag kunna koda för att automatisera Postgres Sheets transcripts?

Nej. Du kommer främst att klistra in uppgifter och bekräfta att Postgres-frågorna matchar din tabell.

Är n8n gratis att använda för det här Postgres Sheets transcripts-flödet?

Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på $20/månad för högre volym. Du behöver också räkna in Google API-användning (oftast försumbar vid normal skrivning till kalkylark).

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

Två alternativ: n8n Cloud (hanterat, 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 obegränsade körningar men kräver grundläggande serveradministration.

Kan jag anpassa det här Postgres Sheets transcripts-flödet för att gruppera på user_id i stället för session_id?

Ja, men gör det med eftertanke. Flödet använder ett steg “Assign Session Identifier” där sessionsnyckeln sätts innan flikar skapas. Om din minneskonfiguration stödjer en beständig identifierare (som user_id), mappa det värdet där så att flikarna i arket representerar användare, inte sessioner. Vanliga justeringar är att ändra frågan för sessions-ID, justera regeln för fliknamn och lägga till extra kolumner (som konversationsbetyg eller ärende-ID) när rader läggs till.

Varför misslyckas min Google Sheets-anslutning i det här flödet?

Oftast beror det på att OAuth-godkännandet har löpt ut eller att fel Google-konto används. Återanslut Google Sheets-uppgiften i n8n och bekräfta sedan att målarket är delat med det kontot. Kontrollera också att dina HTTP Request-steg (som används för att duplicera och döpa om flikar) pekar på rätt kalkylarks-ID. Om det fungerar för några sessioner och sedan fallerar kan rate limiting inträffa när du försöker bygga om många flikar samtidigt.

Hur många sessioner kan den här automationen för Postgres Sheets transcripts hantera?

Om du self-hostar n8n finns ingen hård körningsgräns (det beror mest på din server och Google API-kvoter). På n8n Cloud är den praktiska gränsen kopplad till dina månatliga körningar. I verklig användning bearbetar team ofta några hundra sessioner per körning utan problem, så länge de håller ett bra tempo på flikskapande och skrivningar.

Är den här automationen för Postgres Sheets transcripts bättre än att använda Zapier eller Make?

Ofta, ja. Den stora vinsten är kontroll: att loopa igenom sessioner, rensa flikar, duplicera en mallflik och sedan lägga till rader är den typen av flerstegslogik som blir klumpig (och dyr) i enklare verktyg. n8n låter dig också self-hosta, vilket spelar roll när loggarna växer och du inte vill betala per liten delsteg. Samtidigt: om du bara behövde en engångs-“exportera dagens rader till ett ark” kan Zapier eller Make gå snabbare att klicka ihop. Prata med en automationsexpert om du vill ha en rekommendation utifrån din volym.

När dina transkript automatiskt hamnar i Sheets blir granskningar enklare och beslut går snabbare. Sätt upp det en gång och öppna sedan bara den flik du behöver.

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