Bokningar trillar in, någon pingar teamet, någon annan uppdaterar ett kalkylark, och på något sätt blir den ”snabba” administrationen en daglig tidstjuv. Sedan kommer en avbokning, arket förblir fel, och du kliver in i ett möte utan sammanhang.
Det här är den typ av röra som säljansvariga känner av under intensiva veckor, och som driftchefer får städa upp. Kundnära konsulter drabbas oftast hårdast. Med den här TimeRex-bokningsautomationen hamnar bokningar automatiskt i Google Sheets och ditt team får en Slack-klar brief före samtalet.
Nedan ser du hur arbetsflödet hanterar bekräftade möten, flaggar misstänkta webhook-anrop och städar upp avbokningar så att din uppföljning förblir tillförlitlig.
Så här fungerar automatiseringen
Hela n8n-arbetsflödet, från trigger till slutligt resultat:
n8n Workflow Template: TimeRex till Google Sheets, bokningsunderlag för Slack
flowchart LR
subgraph sg0["AI: Categorize Booki 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/webhook.dark.svg' width='40' height='40' /></div><br/>TimeRex Webhook"]
n1@{ icon: "mdi:database", form: "rounded", label: "Get Media Master", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Detect Media Source"]
n3@{ icon: "mdi:database", form: "rounded", label: "Find Booking by Event ID", pos: "b", h: 48 }
n4@{ icon: "mdi:database", form: "rounded", label: "Delete Cancelled Booking", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter by Calendar Type", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route by Event Type", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Verify Security Token", 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/slack.svg' width='40' height='40' /></div><br/>Slack: Security Alert"]
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/slack.svg' width='40' height='40' /></div><br/>Slack: Cancellation Alert"]
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/code.svg' width='40' height='40' /></div><br/>Extract Company from Email"]
n11@{ icon: "mdi:robot", form: "rounded", label: "AI: Categorize Booking", pos: "b", h: 48 }
n12@{ icon: "mdi:robot", form: "rounded", label: "AI: Generate Meeting Brief", pos: "b", h: 48 }
n13["<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/>Merge AI Results"]
n14@{ icon: "mdi:database", form: "rounded", label: "Append Enriched Booking", 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/slack.svg' width='40' height='40' /></div><br/>Slack: New Booking Alert"]
n16@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini (Categorize)", pos: "b", h: 48 }
n17@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini (Brief)", pos: "b", h: 48 }
n0 --> n7
n1 --> n2
n13 --> n14
n2 --> n10
n6 --> n1
n6 --> n3
n17 -.-> n12
n7 --> n5
n7 --> n8
n11 --> n12
n14 --> n15
n5 --> n6
n4 --> n9
n3 --> n4
n12 --> n13
n10 --> n11
n16 -.-> n11
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 n11,n12 ai
class n16,n17 aiModel
class n5,n6,n7 decision
class n1,n3,n4,n14 database
class n0 api
class n2,n10,n13 code
classDef customIcon fill:none,stroke:none
class n0,n2,n8,n9,n10,n13,n15 customIcon
Problemet: bokningsdetaljerna kommer in, men förberedelsen gör det inte
TimeRex kan boka mötet, absolut. Problemet är allt som händer efteråt. Någon behöver logga detaljerna, avgöra om det är försäljning eller support, kanske gissa bolaget utifrån en e-postadress, och sedan skriva en förberedelsenotis som inte låter som ”kolla LinkedIn”. Multiplicera det med några bokningar per dag så får du ett lågintensivt admin-löpband. Och avbokningar är den tysta mördaren. Om du inte tar bort dem från ditt spårningsark ser din pipeline bättre ut än verkligheten och teamet förbereder fortfarande möten som aldrig blir av.
Det går snabbt att summera. Här är var det vanligtvis faller isär i verkligheten.
- Du kopierar bokningsdetaljer till ett ark, och ett enda missat fält gör rapporteringen opålitlig senare.
- Mötesförberedelser blir inkonsekventa eftersom alla skriver briefar på olika sätt (eller inte alls).
- Avbokningar städas inte bort, så teamet slösar tid på att förbereda spökmöten.
- Webhook-säkerhet ignoreras tills något konstigt händer, och då får du panikspåra vad som gick fel.
Lösningen: TimeRex-bokningar berikas av AI, loggas och kommuniceras
Det här arbetsflödet lyssnar på TimeRex-webhooks i samma ögonblick som en bokning bekräftas eller avbokas. Först kontrollerar det en säkerhetstoken så att du inte blint litar på slumpmässiga förfrågningar. För bekräftade bokningar hämtar det en liten media-/källdirectory från Google Sheets (praktiskt när kalendernamn antyder var bokningen kom ifrån), och extraherar sedan ett troligt företagsnamn från gästens e-postdomän. Sedan kommer det hjälpsamma: ett AI-steg kategoriserar bokningen (Sälj, Support, Intervju, Partnerskap, Media) och skapar en kort, konkret mötesbrief som mötesvärden faktiskt kan använda. Till sist lägger den till den berikade posten i Google Sheets och skickar ett formaterat Slack-meddelande så att teamet är redo utan att jaga detaljer.
Om webhooken istället är en avbokning letar arbetsflödet upp bokningen via Event ID, tar bort motsvarande rad i Google Sheets och postar en avbokningsnotis i Slack. Korrekt spårning. Ingen förvirring.
Det här får du: automation vs. resultat
| Det här automatiserar arbetsflödet | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut i praktiken
Säg att du får 4 TimeRex-bokningar per dag. Manuellt kanske du lägger 5 minuter på att logga detaljer i Google Sheets och sedan ytterligare 5 minuter på att skriva ett Slack-meddelande och en snabb brief, vilket är cirka 40 minuter per dag. Lägg till en avbokning och du bränner ytterligare 10 minuter på att hitta och rätta arket. Med det här arbetsflödet är ditt ”arbete” i princip noll: webhooken triggar direkt, AI-briefen genereras i bakgrunden och Slack + Sheets uppdateras automatiskt. Du får tillbaka ungefär en timme på intensiva dagar, och arket speglar verkligheten.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- TimeRex som skickar webhooks för bokning och avbokning.
- Google Sheets för att lagra berikade bokningsposter.
- Slack för teamlarm och bokningsbriefar.
- Google Gemini API-nyckel (hämta den från Google AI Studio / Google Cloud).
Kunskapsnivå: Medel. Du klistrar in en webhook-URL i TimeRex, kopplar konton i n8n och matchar kolumner i Google Sheets noggrant.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
TimeRex skickar en boknings-webhook. Ett bekräftat eller avbokat möte träffar din n8n-webhook-endpoint samma sekund som det händer, så att du inte är beroende av att någon kommer ihåg att ”logga det senare”.
Arbetsflödet verifierar förfrågan. Det kontrollerar först en delad säkerhetstoken. Om token är fel postar n8n en säkerhetsnotis i Slack så att du ser att något är fel, istället för att tyst acceptera dåliga data.
Bekräftade bokningar berikas. n8n routar händelsen, kontrollerar valfritt ett ”media directory”-ark för att härleda bokningskälla från kalendernamnet, tar fram företaget från e-postdomänen och ber sedan Gemini klassificera bokningstypen och skriva en praktisk mötesbrief.
Allt skrivs och kommuniceras. Den slutliga posten läggs till i Google Sheets, och Slack får ett tydligt ”ny bokning”-meddelande med kategori, företag och förberedelsenotiser. Om det är en avbokning hittar n8n raden med matchande Event ID, tar bort den och postar en avbokningsnotis så att ingen förbereder i onödan.
Du kan enkelt ändra bokningskategorierna så att de passar ditt team (till exempel lägga till ”Demo” eller ”Onboarding”) utifrån era behov. Se den fullständiga implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementation
Steg 1: konfigurera webhook-triggern
Konfigurera den inkommande webhooken som tar emot bokningsdata och startar arbetsflödet.
- Lägg till och öppna Incoming Booking Webhook.
- Ställ in HTTP Method på
POST. - Ställ in Path på
/timerex-booking. - Kopiera den genererade webhook-URL:en och konfigurera den i ert bokningssystem.
- Skicka en test-payload för en bokning för att säkerställa att webhooken tar emot data.
/timerex-booking.
Steg 2: lägg till säkerhet och routinglogik
Skydda arbetsflödet och routa bokningar baserat på kalender och händelsetyp.
- Öppna Validate Security Token och ställ in villkoret så att det jämför
{{ $json.headers['x-timerex-authorization'] }}med er tokensträng (ersättYOUR_TIMEREX_SECURITY_TOKEN). - Bekräfta att den falska grenen går till Slack Security Notice för aviseringar om ogiltiga tokens.
- Öppna Calendar Type Gate och ställ in regeln så att den kontrollerar att
{{ $json.body.calendar_name }}innehållerYOUR_CALENDAR_FILTER_KEYWORD. - Öppna Event Type Router och verifiera två regler:
{{ $json.body.webhook_type }}är lika medevent_confirmedoch är lika medevent_cancelled.
Steg 3: anslut Google Sheets-datakällor
Konfigurera Google Sheets-noderna som läser och skriver bokningsdata.
- Öppna Retrieve Media Directory och ställ in Document på
YOUR_MEDIA_MASTER_SHEET_IDoch Sheet påMedia Master(gid=0). - Credential Required: Anslut era
googleSheetsOAuth2Api-credentials i Retrieve Media Directory. - Öppna Append Enriched Record och ställ in Operation på
append, Document påYOUR_BOOKINGS_SHEET_ID, och Sheet påBookings(gid=0). - Credential Required: Anslut era
googleSheetsOAuth2Api-credentials i Append Enriched Record. - Öppna Lookup Booking by Event och ställ in Document på
YOUR_BOOKINGS_SHEET_IDoch Sheet påBookings(gid=0). - Ställ in filtret lookupValue på
{{ $node['Incoming Booking Webhook'].json.body.event.id }}och lookupColumn påevent_id. - Credential Required: Anslut era
googleSheetsOAuth2Api-credentials i Lookup Booking by Event. - Öppna Remove Cancelled Entry, ställ in Operation på
delete, Start Index på{{ $json.row_number }}, och Number To Delete på1. - Credential Required: Anslut era
googleSheetsOAuth2Api-credentials i Remove Cancelled Entry.
Steg 4: konfigurera dataanrikning och AI-klassificering
Extrahera detaljer, klassificera bokningar med AI och skapa en mötesbrief.
- Verifiera att Identify Media Origin använder medialistan från Retrieve Media Directory och matchar mot
Incoming Booking Webhook’scalendar_name. - Kontrollera Derive Company from Email för att säkerställa att den parsar
guest_emailochguest_namefrån webhook-formuläret och outputtarcompany_name,media_sourceochevent_id. - Öppna AI Booking Classifier och bekräfta att prompttexten inkluderar
{{ $json.guest_name }},{{ $json.company_name }},{{ $json.email_domain }}och{{ $json.calendar_name }}. - Öppna AI Meeting Brief Builder och bekräfta att prompten använder
{{ $('Derive Company from Email').item.json.guest_name }},{{ $('AI Booking Classifier').item.json.text }}och{{ $('Derive Company from Email').item.json.booking_date }}. - Verifiera att Combine AI Outputs slår ihop AI-svaren och lägger till
created_atmednew Date().toISOString(). - Säkerställ att Gemini Chat Categorizer är ansluten som språkmodell för AI Booking Classifier; lägg till credentials i Gemini Chat Categorizer, inte i klassificerarnoden.
- Säkerställ att Gemini Chat Briefing är ansluten som språkmodell för AI Meeting Brief Builder; lägg till credentials i Gemini Chat Briefing, inte i brief builder-noden.
Steg 5: konfigurera Slack-notiser
Skicka aviseringar för säkerhetsproblem, nya bokningar och avbokningar.
- Öppna Slack Security Notice och behåll Text inställd på uttrycket som inkluderar
{{ $now.format('yyyy-MM-dd HH:mm:ss') }}. - Credential Required: Anslut era Slack OAuth2-credentials i Slack Security Notice.
- Öppna Slack New Booking Notice och bekräfta att meddelandet använder
{{ $json.guest_name }},{{ $json.booking_category }}och{{ $json.ai_meeting_brief }}. - Credential Required: Anslut era Slack OAuth2-credentials i Slack New Booking Notice.
- Öppna Slack Cancellation Notice och verifiera att den hämtar fält från
Incoming Booking Webhookmed uttryck som{{ $('Incoming Booking Webhook').item.json.body.event.id }}. - Credential Required: Anslut era Slack OAuth2-credentials i Slack Cancellation Notice.
Steg 6: verifiera körflöde och förgrening
Bekräfta att noderna är kopplade i avsedd ordning för bekräftelser och avbokningar.
- Säkerställ att Incoming Booking Webhook går vidare till Validate Security Token.
- Bekräfta att den giltiga vägen går från Validate Security Token → Calendar Type Gate → Event Type Router.
- Verifiera att bekräftelseflödet kör Event Type Router → Retrieve Media Directory → Identify Media Origin → Derive Company from Email → AI Booking Classifier → AI Meeting Brief Builder → Combine AI Outputs → Append Enriched Record → Slack New Booking Notice.
- Verifiera att avbokningsflödet kör Event Type Router → Lookup Booking by Event → Remove Cancelled Entry → Slack Cancellation Notice.
Steg 7: testa och aktivera
Validera arbetsflödet med en riktig boknings-payload och aktivera det för produktionsanvändning.
- Klicka på Execute Workflow och skicka en test-payload till Incoming Booking Webhook.
- Bekräfta att lyckade körningar lägger till en rad i arket
Bookingsoch postar ett meddelande via Slack New Booking Notice. - Skicka en avboknings-payload för att verifiera att Lookup Booking by Event och Remove Cancelled Entry tar bort rätt rad och triggar Slack Cancellation Notice.
- När testerna är godkända, växla arbetsflödet till Active för att aktivera körning i produktion.
Vanliga fallgropar
- Behörigheter i Google Sheets kan blockera tillägg eller borttag. Om rader inte uppdateras, kontrollera åtkomst för det anslutna Google-kontot och Sheet ID som används i Sheets-noderna.
- Om du använder Wait-noder eller extern rendering varierar bearbetningstider. Öka väntetiden om nedströms noder fallerar på tomma svar.
- Gemini-promptar börjar generiskt, vilket gör att ”briefen” kan kännas fluffig. Lägg in er tonalitet och en tajtare struktur tidigt (vad som ska verifieras, vad som ska frågas, vad som ska undvikas) annars kommer du att redigera utdata för alltid.
Vanliga frågor
Cirka 30–60 minuter om dina TimeRex-, Google- och Slack-konton är redo.
Nej. Du kopplar konton, klistrar in webhook + säkerhetstoken och matchar kolumnerna i Google Sheets.
Ja. n8n har ett gratis alternativ för egen hosting 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 användning av Google Gemini API, vilket oftast är litet per bokning men beror på promptstorlek och volym.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärd och hanterar n8n bra. Egen hosting ger dig obegränsat antal körningar men kräver grundläggande serveradministration.
Ja, och det bör du förmodligen. Uppdatera prompten i ”AI Booking Classifier” så att den använder dina kategorier (som Demo, Förnyelse, Onboarding) och justera logiken i ”Calendar Type Gate” och ”Event Type Router” om du använder flera kalendrar. Du kan också ändra vilka kolumner i arket som steget ”Append Enriched Record” skriver till, så att resultatet matchar hur du rapporterar. Om du vill byta till en annan AI-modell senare byter du ut Gemini-chatnoderna och behåller resten av flödet som det är.
Oftast beror det på att kontrollen av säkerhetstoken misslyckas. Bekräfta att token i TimeRex matchar det du lagt in i steget ”Validate Security Token”, och säkerställ att TimeRex pekar på rätt URL för ”Incoming Booking Webhook”. Om du ser bokningar men inga uppdateringar i arket är det troligare att det handlar om behörigheter i Google Sheets eller ett Sheet ID som inte matchar.
På n8n Cloud beror det på din månatliga exekveringsgräns, men de flesta små team klarar dagliga bokningar utan problem på Starter. Om du kör egen hosting finns ingen fast exekveringsgräns, och den verkliga begränsningen blir din server och hur snabbt dina AI-anrop svarar. I praktiken klarar den här typen av flöde utan problem dussintals bokningar per dag i de flesta miljöer.
Ofta, ja, eftersom det här flödet behöver förgreningar (bekräftad vs avbokad), uppslag och borttag i Google Sheets samt säkerhetshantering, vilket är där enklare builders börjar bli klumpiga eller dyra. n8n ger dig också mer kontroll över exakt Slack-meddelande och vad som lagras, och egen hosting kan vara avgörande om volymen växer. Nackdelen är uppsättningen: du lägger lite mer tid på att få det rätt första gången. Om du bara behöver ”skicka ett Slack-meddelande när en bokning sker” kan Zapier eller Make gå snabbare. Prata med en automationsexpert om du är osäker.
När detta är live försvinner bokningsadministrationen till stor del. Teamet får kontexten de behöver, ditt Google-ark förblir strukturerat och avbokningar slutar förorena dina siffror.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.