Telefonen ringer, du tar emot reseförfrågan – och sedan börjar den röriga delen. Anteckningar på tre ställen, halvt ifyllda uppgifter och det där ”jag loggar det senare”-löftet som i tysthet blir till missade uppföljningar.
Resebyråägare känner av det först. Men en försäljningschef som jagar återuppringningar och en driftperson som städar kalkylblad stöter på samma huvudvärk. Den här Sheets Postgres-automationen fångar samtalet, validerar reseuppgifter och ser till att din pipeline inte läcker leads.
Det här arbetsflödet visar hur du går från ”hoppas vi skrev ner det” till strukturerade samtalsloggar, verifierad reseinfo och snabba svar som får dig att framstå som proffsig.
Så fungerar den här automationen
Hela n8n-arbetsflödet, från trigger till slutligt output:
n8n Workflow Template: Google Sheets + Postgres: felfria CRM-samtalsloggar
flowchart LR
subgraph sg0["Flow 1"]
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/webhook.dark.svg' width='40' height='40' /></div><br/>Detect Incoming Call"]
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/postgres.svg' width='40' height='40' /></div><br/>Validate Trip Details"]
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/webhook.dark.svg' width='40' height='40' /></div><br/>Deliver Organizer Info"]
n0 --> n1
n1 --> n2
end
subgraph sg1["Flow 2"]
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/webhook.dark.svg' width='40' height='40' /></div><br/>Capture Voice Input"]
n4["<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/postgres.svg' width='40' height='40' /></div><br/>Update Booking Record"]
n5["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Send Booking Confirmation"]
n3 --> n4
n4 --> n5
end
subgraph sg2["Detect New Lead Flow"]
direction LR
n6@{ icon: "mdi:play-circle", form: "rounded", label: "Detect New Lead", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format Lead Information", pos: "b", h: 48 }
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Initiate Marketing Outreach"]
n6 --> n7
n7 --> n8
end
subgraph sg3["Flow 4"]
direction LR
n9["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Receive Call Response"]
n10@{ icon: "mdi:database", form: "rounded", label: "Log User Input", pos: "b", h: 48 }
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/webhook.dark.svg' width='40' height='40' /></div><br/>Relay Response to System"]
n10 --> n11
n9 --> n10
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 n6 trigger
class n1,n4,n10 database
class n0,n2,n3,n5,n8,n9,n11 api
classDef customIcon fill:none,stroke:none
class n0,n1,n2,n3,n4,n5,n8,n9,n11 customIcon
Problemet: samtalsanteckningar blir inte till korrekta bokningar
Ett samtal med en reseförfrågan har hög intent. Det är också kaotiskt. Folk pratar snabbt, datum ändras mitt i meningen och ”vi funderar på antingen Bali eller Vietnam” blir en vag notering du inte kan agera på. Sedan kommer adminjobbet: logga samtalet, reda ut om reseuppgifterna ens är rimliga, tilldela en ansvarig och komma ihåg att följa upp. Om något steg missas får du det värsta utfallet. Ett varmt lead kallnar för att ingen hade felfri data när det faktiskt gällde.
Det byggs snabbt på, särskilt när veckan är en dimma av samtal och WhatsApp-meddelanden.
- Samtalsdetaljer skrivs in i Google Sheets senare, vilket gör att tidsstämplar, intent och kontext ofta blir fel.
- Reseuppgifter valideras inte, så du lovar sådant du inte kan leverera (eller måste ringa upp igen bara för att reda ut grunderna).
- Bokningar kan dubbelloggas när två personer registrerar samma uppringare i olika verktyg.
- Uppföljning av leads bygger på minnet – och minnet är inget system.
Lösningen: logga varje samtal, verifiera resedata och styr nästa åtgärd
Det här n8n-arbetsflödet gör inkommande samtalsaktivitet till strukturerad CRM-data du kan lita på. När ett samtal kommer in (eller när ditt telefonsystem skickar en callback-händelse) sparar arbetsflödet uppringarens uppgifter i Google Sheets så att du direkt får en sökbar logg för uppföljning och rapportering. Parallellt kontrollerar det reseuppgifterna mot din Postgres-databas innan någon binder upp sig till fel destination, fel datum eller en arrangör som inte är tillgänglig. Om uppgifterna godkänns i valideringen får uppringaren automatiskt rätt arrangörsinformation eller bokningssvar. Om inte kan du routa förfrågan till en människa eller fånga saknade fält på ett strukturerat sätt.
Arbetsflödet börjar med en samtalstrigger, validerar sedan resan i Postgres och skickar därefter ett svar tillbaka till samtalssystemet. Separata spår hanterar bokningsinsamling (upsert av bokningspost, skicka bekräftelse) och lead-detektering (formatera leaddata, starta marknadsutskick via HTTP) så att du kan köra sälj och marknad utan att trampa varandra på tårna.
Vad du får: automation vs. resultat
| Vad det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut i praktiken
Säg att du får cirka 12 förfrågningssamtal per dag. Manuellt tar det kanske 10 minuter att logga varje samtal och strukturera upp detaljerna, plus ytterligare 5 minuter för en rimlighetskontroll av datum, destination och arrangörers tillgänglighet. Det är ungefär 3 timmar per dag. Med det här arbetsflödet hamnar samtalsloggen i Google Sheets automatiskt och Postgres-valideringen körs i bakgrunden; du lägger bara tid på samtal som inte går igenom valideringen eller som kräver mänsklig bedömning. De flesta team får tillbaka runt 2 timmar om dagen när allt är intrimmat.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Google Sheets för samtalsloggar och kalkylblad för leadspårning
- Postgres för att validera resor och lagra bokningar
- API för telefoni/telefonsystem (hämtas från din samtalsleverantörs dashboard)
Kunskapsnivå: Medel. Du kopplar konton, mappar fält och bekräftar att dina databastabeller/kolumner matchar det arbetsflödet förväntar sig.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Inkommande samtal eller callback startar flödet. Ditt telefonsystem anropar en n8n-webhook när någon ringer (eller när samtalet avslutas och skickar ett callback-payload). Den händelsen är ”single source of truth” för samtalsposten.
Reseuppgifter kontrolleras mot Postgres. Arbetsflödet frågar dina tabeller för arrangörer och resor för att bekräfta att grunderna följer dina regler, som destination, resedatum och eventuell tillgänglighetsstatus som du lagrar.
Bokningsdata fångas och uppdateras strukturerat. När uppringaren visar bokningsintent (ofta via röstinsamling som hanteras av din telefonilösning) upsertar n8n bokningsraden i Postgres så att återkommande uppringare inte råkar skapa en andra ”ny bokning”.
Allt loggas och besvaras automatiskt. Uppringarens data skrivs in i Google Sheets för snabb överblick, filtrering och överlämningar, och sedan svarar arbetsflödet tillbaka till samtalssystemet (arrangörsinformation, bokningssvar eller bekräftelse) så att loopen stängs.
Du kan enkelt justera valideringsreglerna så att de passar dina paket, partners och stopptider utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera webhook-triggern
Det här arbetsflödet använder flera webhook-endpoints för att ta emot inkommande samtalshändelser och inmatning från uppringaren.
- Lägg till noden Incoming Call Trigger och ställ in HTTP Method till
POSToch Path tillget-call. - I Incoming Call Trigger ställer ni in Response Mode till
responseNodeså att svaret skickas från Return Organizer Details. - Lägg till noden Capture Caller Input och ställ in HTTP Method till
POSToch Path tillinput-data. - Ställ in Capture Caller Input till Response Mode
responseNodeså att Send Booking Reply kan svara. - Lägg till noden Inbound Call Callback och ställ in HTTP Method till
POSToch Path tillcall. - Låt Inbound Call Callback vara inställd på Response Mode
responseNodeså att Return System Acknowledgement kan svara.
Tips: När ni har sparat varje webhook, kopiera produktions-URL:en från n8n och konfigurera er telefonioperatör att POST:a till rätt endpoint.
Steg 2: anslut Google Sheets och lead-trigger
Nya leads från Google Sheets triggar utgående marknadsföringssamtal och samtalsutfall registreras tillbaka i Sheets.
- Lägg till New Lead Detector och ställ in Event till
rowAdded. - Ställ in Document ID till
[YOUR_ID]och Sheet Name till[YOUR_ID]i New Lead Detector. - Inloggningsuppgifter krävs: Anslut era
googleSheetsTriggerOAuth2Api-inloggningsuppgifter till New Lead Detector. - Lägg till Record Caller Data och ställ in Operation till
appendOrUpdate. - Ställ in Authentication till
serviceAccount, Document ID till[YOUR_ID]och Sheet Name tillgid=0i Record Caller Data. - Mappa kolumner med de medföljande uttrycken, till exempel call_notes till
{{ $json.body.message.toolCalls[0].function.arguments.call_notes }}och phone_number till{{ $json.body.message.toolCalls[0].function.arguments.phone_number }}. - Inloggningsuppgifter krävs: Anslut era
googleApi-inloggningsuppgifter till Record Caller Data.
⚠️ Vanlig fallgrop: Säkerställ att ert Google Sheet innehåller samma kolumn-ID:n som anges i Record Caller Data (till exempel phone_number och call_notes), annars kommer upsert att misslyckas.
Steg 3: anslut Postgres-datalagret
Postgres används för att verifiera resdetaljer och upserta bokningsposter.
- Lägg till Verify Trip Details och ställ in Operation till
selectmed Limit150. - Ställ in Schema till
publicoch Table till[YOUR_ID]i Verify Trip Details. - Inloggningsuppgifter krävs: Anslut era
postgres-inloggningsuppgifter till Verify Trip Details. - Lägg till Upsert Booking Entry och ställ in Operation till
upsertmed Mapping ModeautoMapInputData. - Ställ in Schema till
publicoch Table till[YOUR_ID]i Upsert Booking Entry. - Inloggningsuppgifter krävs: Anslut era
postgres-inloggningsuppgifter till Upsert Booking Entry.
⚠️ Vanlig fallgrop: Ersätt [YOUR_ID] med ett riktigt tabellnamn i båda Postgres-noderna för att undvika körningsfel.
Steg 4: konfigurera lead-förberedelse och utgående samtal
Nya leads transformeras och skickas till API:t för utgående samtal.
- Lägg till Prepare Lead Data och ställ in tilldelningen Phone_number till uttrycket
=+{{ $json.Phone }}. - Lägg till Launch Marketing Call och ställ in URL till
https://api.vapi.ai/callmed MethodPOST. - Ställ in Send Body till
trueoch Specify Body tilljsoni Launch Marketing Call. - Ställ in JSON Body till
{ "assistantId": "[YOUR_ID]", "phoneNumberId": "[YOUR_ID]", "customers": [ { "number":"{{ $json.Phone }}" } ] }. - Inloggningsuppgifter krävs: Anslut era
httpBearerAuth-inloggningsuppgifter till Launch Marketing Call.
⚠️ Vanlig fallgrop: Ersätt båda [YOUR_ID]-värdena i JSON-body med era faktiska VAPI-assistent- och telefonnummer-ID:n.
Steg 5: konfigurera webhook-svar
Varje webhook använder en response-nod för att bekräfta hanteringen tillbaka till det anropande systemet.
- Koppla Incoming Call Trigger till Verify Trip Details och därefter till Return Organizer Details.
- I Return Organizer Details ställer ni in Respond With till
jsonoch Response Body till{ "results": [ { "toolCallId": "{{ $('Incoming Call Trigger').item.json.body.message.toolCalls[0].id }}", "result": "{{ $json.available }}" } ] }. - Koppla Capture Caller Input till Upsert Booking Entry och därefter till Send Booking Reply.
- I Send Booking Reply ställer ni in Respond With till
jsonoch Response Body till{ "results": [ { "toolCallId": "{{ $('Capture Caller Input').item.json.body.message.toolCalls[0].id }}", "result": "{{ $json.status }}" } ] }. - Koppla Inbound Call Callback till Record Caller Data och därefter till Return System Acknowledgement för att avsluta webhook-svaret.
Tips: Exekveringsflödet är sekventiellt utan parallella grenar: varje webhook-väg slutförs innan dess response-nod skickar JSON tillbaka.
Steg 6: testa och aktivera ert arbetsflöde
Validera varje trigger-väg och bekräfta att data skrivs till Postgres och Google Sheets.
- Klicka på Execute Workflow och skicka en test-POST till Incoming Call Trigger för att bekräfta att Verify Trip Details och Return Organizer Details returnerar ett giltigt JSON-svar.
- Skicka en test-POST till Capture Caller Input och bekräfta att Upsert Booking Entry skriver till Postgres och att Send Booking Reply returnerar en status.
- Lägg till en ny rad i Google Sheet för att trigga New Lead Detector och bekräfta att Launch Marketing Call skickar HTTP-begäran.
- Skicka en test-payload till Inbound Call Callback och verifiera att Record Caller Data uppdaterar arket innan Return System Acknowledgement svarar.
- När alla tester passerar, växla arbetsflödet till Active för att aktivera produktionsbearbetning.
Vanliga fallgropar
- Google Sheets-autentisering kan löpa ut eller kräva specifika behörigheter. Om något slutar fungera, kontrollera först vyn Credentials i n8n och bekräfta att det anslutna Google-kontot fortfarande har redigeringsåtkomst till det aktuella kalkylarket.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- Postgres-frågor misslyckas tyst när kolumnnamn inte matchar. Dubbelkolla ditt tabellschema för fält som destination, resedatum och arrangörsstatus innan du skyller på arbetsflödet.
Vanliga frågor
Cirka 45 minuter om du har åtkomst till Sheets, Postgres och telefonsystemet på plats.
Nej. Du kommer mest att mappa fält och klistra in inloggningsuppgifter i n8n. Den enda ”tekniska” delen är att bekräfta att kolumnerna i dina Postgres-tabeller matchar det du vill lagra.
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 avgifter från din telefonileverantör och eventuella kostnader för röstigenkänning om din lösning använder det.
Två alternativ: n8n Cloud (hanterat, enklast) 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, och det bör du. Du kan justera Postgres-valideringen i steget ”Verify Trip Details” för att kontrollera olika arrangörspooler per destination, datumintervall eller pakettyp. Vanliga anpassningar är att routa VIP-uppringare till ett specifikt team, lägga till en regel för minsta gruppstorlek och skriva till separata Google Sheets-flikar per filial.
Oftast beror det på att Googles auktorisering har löpt ut eller att kalkylarket har flyttats till en annan plats i Drive. Anslut Google Sheets-credential igen i n8n och bekräfta sedan att exakt Sheet ID och fliknamn fortfarande matchar det som steget ”Record Caller Data” skriver till. Om det fungerar för vissa rader men inte andra kan du också stöta på skyddade intervall eller en ändrad rubrikrad.
I en typisk setup är hundratals samtal per dag realistiskt.
Ofta ja, eftersom det här arbetsflödet drar nytta av grenlogik, databasvalidering och att skriva till flera system utan att det blir en dyr explosion av tasks. n8n ger dig också self-hosting-alternativet, vilket blir viktigt när samtalsvolymen växer. Zapier eller Make kan fortfarande fungera bra för ett enkelt ”logga till Sheets”-flöde, men så fort du lägger till Postgres-kontroller och villkorade svar blir det lätt pilligt. Den rätta lösningen beror ärligt talat på hur strikta dina valideringsregler är och hur många spår du behöver. Prata med en automationsexpert om du är osäker på vad som passar.
Du slutar tappa leads på grund av rörig administration, och teamet slipper gissa vad som hände i samtalet. Sätt upp det en gång, och låt sedan arbetsflödet sköta loggning och validering medan du fokuserar på att stänga bokningar.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.