Bokningsförfrågningar låter enkla tills du fastnar i en WhatsApp-tråd där du ställer samma frågor, kollar kalendern och ändå oroar dig för att missa ett meddelande. Sedan dyker någon inte upp eftersom de ”inte såg detaljerna”.
Om du kör kundsessioner slår WhatsApp-bokningsautomation snabbt igenom. Coacher märker det i DM:s på kvällen. Klinikadministratörer märker det i receptionen. Och konsulter märker det när leads svalnar efter för mycket fram och tillbaka.
Det här arbetsflödet gör ett enda WhatsApp-meddelande till en riktig Cal.com-bokning, loggar den i Google Sheets och skickar en påminnelse via SMS före besöket. Du får se hur det fungerar, vad du behöver och var team oftast kör fast.
Så fungerar den här automationen
Hela n8n-flödet, från trigger till slutlig output:
n8n Workflow Template: WhatsApp + Cal.com-bokningar, loggat i Google Sheets
flowchart LR
subgraph sg0["AI Booking Assistant 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/>Webhook Trigger (WhatsApp In.."]
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch: Confirm vs Chat Flow", pos: "b", h: 48 }
n2@{ icon: "mdi:robot", form: "rounded", label: "AI Booking Assistant (Dr Fir..", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "LLM: GPT-4o Chat Model", pos: "b", h: 48 }
n4@{ icon: "mdi:memory", form: "rounded", label: "AI Conversation Memory", pos: "b", h: 48 }
n5@{ icon: "mdi:database", form: "rounded", label: "Create New Prospect in Googl..", pos: "b", h: 48 }
n6@{ icon: "mdi:database", form: "rounded", label: "Update Prospect with Booking..", pos: "b", h: 48 }
n7@{ icon: "mdi:wrench", form: "rounded", label: "Fetch Available Time Slots", 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/webhook.dark.svg' width='40' height='40' /></div><br/>Send Response to WhatsApp"]
n9@{ icon: "mdi:database", form: "rounded", label: "Retrieve Prospect Details", 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/code.svg' width='40' height='40' /></div><br/>Normalize Booking Time (UTC .."]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Send Booking"]
n12["<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 Date for Readability .."]
n13@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Booking Status (Succes..", pos: "b", h: 48 }
n14["<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/>Webhook Response: Booking Co.."]
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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook Response: Booking Fa.."]
n16@{ icon: "mdi:database", form: "rounded", label: "Mark Booking as Confirmed in..", pos: "b", h: 48 }
n11 --> n12
n4 -.-> n2
n3 -.-> n2
n9 --> n10
n7 -.-> n2
n1 --> n2
n1 --> n9
n2 --> n8
n0 --> n1
n5 -.-> n2
n10 --> n11
n14 --> n16
n6 -.-> n2
n12 --> n13
n13 --> n14
n13 --> n15
end
subgraph sg1["Trigger: Check Appointments Every Hour Flow"]
direction LR
n17@{ icon: "mdi:play-circle", form: "rounded", label: "Trigger: Check Appointments ..", pos: "b", h: 48 }
n18@{ icon: "mdi:database", form: "rounded", label: "Read Upcoming Appointments f..", pos: "b", h: 48 }
n19["<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/>Filter Appointments Within N.."]
n20["<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/seven.svg' width='40' height='40' /></div><br/>Send SMS Reminder"]
n21@{ icon: "mdi:database", form: "rounded", label: "Mark SMS as Sent in Sheet", pos: "b", h: 48 }
n20 --> n21
n18 --> n19
n17 --> n18
n19 --> n20
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 n17 trigger
class n2 ai
class n3 aiModel
class n7 ai
class n4 ai
class n1,n13 decision
class n5,n6,n9,n16,n18,n21 database
class n0,n8,n11,n14,n15 api
class n10,n12,n19 code
classDef customIcon fill:none,stroke:none
class n0,n8,n10,n11,n12,n14,n15,n19,n20 customIcon
Problemet: bokningschattar i WhatsApp skapar dolt kaos
De flesta verksamheter som tar emot bokningar tappar inte leads för att de saknar efterfrågan. De tappar leads för att bokningen går långsamt. En prospekt skriver på WhatsApp, du svarar, de svarar senare, du kollar Cal.com, föreslår tider, sedan ändras något och du börjar om. Samtidigt försöker du leverera sessioner, hantera löner eller ta hand om patienter. Den ”snabba chatten” blir ett litet projekt, och de projekten staplas varje vecka. Ännu värre: manuell schemaläggning bjuder in fel: två personer frågar efter samma slot, någons e-postadress blir felstavad eller så skickas aldrig påminnelsen.
Det bygger upp snabbt. Här är var det fallerar i verkligheten.
- Du slutar med att ställa samma kvalificerande frågor om och om igen (namn, e-post, tjänst), och det stjäl fokus från jobbet du faktiskt säljer.
- Att kontrollera tillgänglighet manuellt skapar förseningar, vilket gör att prospekt ofta bokar någon annanstans eller helt enkelt slutar svara.
- Detaljer ligger utspridda på olika ställen, så du saknar en strukturerad logg över bokningar, statusar och vem som behöver uppföljning.
- Påminnelser är lätta att glömma, och uteblivanden slår dubbelt eftersom du förlorar både tid och intäkter.
Lösningen: AI sköter chatten, Cal.com sköter tiden
Det här arbetsflödet startar i samma ögonblick som någon skriver till dig på WhatsApp. I stället för att du går in i ”vilken dag passar?”-läge svarar en AI-bokningsassistent direkt, ställer rätt frågor och håller samtalet framåt. När den vet vem personen är och vad de vill ha (namn, e-post, vald tjänst) kontrollerar den Cal.com-tillgänglighet via API:t, erbjuder giltiga tider och bokar besöket när kunden bekräftar. Sedan uppdaterar den en Google Sheets-logg så att du kan följa varje bokning på ett ställe. Till sist kör den schemalagt i bakgrunden, hittar sessioner som snart börjar och skickar en SMS-påminnelse cirka 2 timmar före besöket.
Flödet börjar med en WhatsApp-webhook och routar sedan meddelandet: vanlig chatt går till AI-agenten, medan bekräftelser går vidare i bokningsspåret. I bokningsspåret formaterar den datumet, skapar Cal.com-bokningsförfrågan, verifierar att det lyckas och svarar tillbaka på WhatsApp så att kunden vet att allt är bokat. Senare kontrollerar den timvisa påminnelsetriggern Google Sheets och skickar SMS till personer vars tid snart är inne.
Det här får du: automation vs. resultat
| Det här automatiserar arbetsflödet | Resultat du får |
|---|---|
|
|
Exempel: så kan det se ut
Säg att du får 12 bokningsförfrågningar i veckan via WhatsApp. Manuellt kanske du lägger cirka 10 minuter per förfrågan på svar, att kolla Cal.com, bekräfta detaljer och skicka påminnelser, vilket blir ungefär 2 timmar i veckan. Med det här flödet sjunker ”människotiden” till snabb översyn: kanske 2 minuter för att granska specialfall eller undantag, alltså runt 20 minuter totalt. Resten kör i bakgrunden, inklusive SMS-påminnelsen cirka 2 timmar före sessionen.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Självhostat alternativ om du föredrar det (Hostinger fungerar bra)
- WhatsApp API-leverantör för att ta emot och skicka meddelanden.
- Cal.com för att hämta lediga tider och skapa bokningar.
- Google Sheets för att logga bokningar och påminnelsestatus.
- OpenAI API-nyckel (hämta den från OpenAI API-dashboarden).
- Cal.com API-nyckel (hämta den från Cal.coms utvecklarinställningar).
- Inloggningsuppgifter till SMS-leverantör (hämta dem från din SMS-tjänst, till exempel sms77).
Svårighetsgrad: Medel. Du kopplar mest konton och klistrar in API-nycklar, men du behöver vara bekväm med att testa webhooks och läsa loggar när något fallerar.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Ett WhatsApp-meddelande triggar flödet. WhatsApp Intake Webhook tar emot inkommande chattmeddelanden från din leverantör (som 360dialog, Twilio eller Ultramsg) och skickar dem direkt vidare till routningslogik.
Meddelanden routas till ”chatt” eller ”bekräfta”. En Switch-nod separerar vanlig konversation från bekräftelse-liknande svar, så arbetsflödet vet när det ska fortsätta ställa frågor och när det faktiskt ska boka en tid.
AI-assistenten sköter dialogen. AI Scheduling Assistant använder en OpenAI-chattmodell plus en minnesbuffer för konversationen, vilket behåller kontext så att den inte frågar samma sak tre gånger. Den kan också anropa ett HTTP-verktyg för att hämta Cal.com-tillgänglighet under chatten.
Bokning och loggning sker automatiskt. När kunden bekräftar normaliserar flödet tidsstämplar, formaterar bokningsdatumet, skapar bokningsförfrågan i Cal.com och verifierar utfallet. Det uppdaterar Google Sheets med fält som namn, e-post, datum, tid, status och reminder_sent, och svarar sedan tillbaka på WhatsApp med resultatet.
Påminnelser körs i bakgrunden. En timvis schematrigger läser kommande bokningar från Google Sheets, filtrerar besök inom de kommande 2 timmarna, skickar en SMS-påminnelse och markerar sedan påminnelsen som skickad så att folk inte blir spammade.
Du kan enkelt justera påminnelsetiden så att den passar din verksamhet (1 timme innan, 24 timmar innan) utifrån dina behov. Se hela implementeringsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera webhook-triggern
Det här arbetsflödet startar när ett WhatsApp-meddelande når er webhook och routar sedan konversationen baserat på bekräftelseintention.
- Lägg till och öppna WhatsApp Intake Webhook.
- Ställ in HTTP Method till
POSToch Path till6438cd95-74cb-4f40-a1a5-853706fe96f6. - Ställ in Response Mode till
responseNodeså att Return WhatsApp Reply kan svara. - I Route Confirm vs Chat, behåll reglerna som använder
={{ $json.body.userInput }}för att dela upp ”confirm” kontra chat-meddelanden.
body.userInput och body.contactId finns innan ni fortsätter.Steg 2: anslut Google Sheets
Flera noder läser och uppdaterar samma kalkylark för lead-insamling, bokningsdetaljer och spårning av påminnelser.
- Öppna Add Prospect to Sheet och välj ert kalkylark: Document
[YOUR_ID]och Sheetgid=0(“mes RDV”). - Inloggningsuppgifter krävs: anslut era googleSheetsOAuth2Api-uppgifter i Add Prospect to Sheet.
- Öppna Update Sheet Booking Info och bekräfta samma Document
[YOUR_ID]och Sheetgid=0. - Inloggningsuppgifter krävs: anslut era googleSheetsOAuth2Api-uppgifter i Update Sheet Booking Info.
- Öppna Lookup Prospect Record och säkerställ att filtret använder
={{ $('WhatsApp Intake Webhook').item.json.body.contactId }}med Lookup Column satt tillID du contact. - Inloggningsuppgifter krävs: anslut era googleSheetsOAuth2Api-uppgifter i Lookup Prospect Record, Flag Booking Confirmed, Read Upcoming Bookings och Mark SMS Sent.
=. Ersätt båda med ert faktiska kalkylarks-ID och blad (t.ex. [YOUR_ID], gid=0), annars kommer uppdateringen att misslyckas.Steg 3: konfigurera AI-assistenten för schemaläggning
AI-agenten hanterar konversationen, sparar leads och anropar verktyg för att kontrollera tillgänglighet och uppdatera bokningsdata.
- Öppna AI Scheduling Assistant och behåll Text-inmatningen som
=input : {{ $json.body.userInput }}. - Granska System Message för att säkerställa att er tjänstemappning, ton och språkregler matchar ert erbjudande.
- Öppna GPT-4o Chat Engine och behåll modellen inställd på
gpt-4o. - Inloggningsuppgifter krävs: anslut era openAiApi-uppgifter i GPT-4o Chat Engine. Den här noden driver AI Scheduling Assistant.
- I Conversation Memory Buffer behåll Session Key satt till
={{ $json.body.contactId }}och Context Window Length till50.
Steg 4: konfigurera skapande av bokning och WhatsApp-svar
När en användare bekräftar söker arbetsflödet upp deras post, normaliserar tiden, skapar bokningen och svarar med lyckat resultat eller fel.
- Bekräfta körvägen: WhatsApp Intake Webhook → Route Confirm vs Chat → Lookup Prospect Record → Normalize Booking Timestamp → Create Booking Request → Format Booking Date → Verify Booking Outcome.
- I Normalize Booking Timestamp, behåll JS-koden som outputar
normalizedi UTC Z-format. - I Create Booking Request, ställ in URL till
https://api.cal.com/v2/bookingsoch behåll JSON body-uttrycket:{ "eventTypeId": {{ $('Lookup Prospect Record').item.json['ID de l’événement'] }}, "start": "{{ $json.normalized }}", "attendee": { "name": "{{ $('Lookup Prospect Record').item.json.Nom }}", "email": "{{ $('Lookup Prospect Record').item.json.Courriel }}", "timeZone": "Europe/Paris" }, "bookingFieldsResponses": { "title": "{{ $('Lookup Prospect Record').item.json['Résumé'] }}" } } - I headers för Create Booking Request, ställ in Authorization till
Bearer [CONFIGURE_YOUR_TOKEN], Content-Type tillapplication/jsonoch cal-api-version till2024-08-13. - I Verify Booking Outcome, behåll kontrollerna för lyckat resultat och fel som använder
={{ $('Create Booking Request').item.json.status }}. - Anpassa vid behov meddelandena i Respond: Booking Success och Respond: Booking Error under Response Body.
- I Flag Booking Confirmed, säkerställ att Réservé är satt till
confirmoch att ID du contact använder={{ $('Lookup Prospect Record').item.json['ID du contact'] }}.
[CONFIGURE_YOUR_TOKEN] finns i Create Booking Request och Retrieve Available Slots. Ersätt den med en giltig token, annars kommer alla bokningsåtgärder att misslyckas.Steg 5: konfigurera loop för sms-påminnelser
Ett schema som körs varje timme läser kommande bokningar, filtrerar dem inom 2 timmar och skickar samt loggar sms-påminnelser.
- Öppna Hourly Appointment Trigger och behåll Interval satt till
hoursså att den körs varje timme. - Öppna Read Upcoming Bookings och verifiera att den pekar på Document
[YOUR_ID]och Sheetgid=0. - I Filter Next 2h Visits, behåll JS-logiken som kontrollerar
RéservéochRappel SMS envoyé, och beräknar tvåtimmarsfönstret. - I Dispatch SMS Reminder, ställ in To till
={{ $('Read Upcoming Bookings').item.json['Numéro de téléphone'] }}och Message till=Bonjour {{ $json.Nom }}, ceci est un petit rappel : votre rendez-vous pour {{ $json['Nom de l’événement'] }} est prévu dans les 2 prochaines heures. - Inloggningsuppgifter krävs: anslut era sms77Api-uppgifter i Dispatch SMS Reminder.
- I Mark SMS Sent, säkerställ att Rappel SMS envoyé är satt till
envoyeroch att ID du contact använder={{ $('Read Upcoming Bookings').item.json['ID du contact'] }}.
Réservé = confirm för att validera påminnelseflödet.Steg 6: testa och aktivera ert arbetsflöde
Validera varje väg—chatflöde, bokningsbekräftelse och påminnelser—innan ni går live.
- Klicka på Execute Workflow och skicka en WhatsApp-testpayload till WhatsApp Intake Webhook med
body.userInput,body.contactIdochbody.phoneNumber. - Bekräfta att AI Scheduling Assistant svarar via Return WhatsApp Reply och att leads sparas i Add Prospect to Sheet.
- Testa ett “confirm”-meddelande för att följa bokningsvägen och verifiera att Create Booking Request returnerar
status: successoch att Respond: Booking Success triggas. - Trigga Hourly Appointment Trigger manuellt och verifiera att Dispatch SMS Reminder skickar ett meddelande och att Mark SMS Sent uppdaterar arket.
- När alla vägar fungerar, växla arbetsflödet till Active för att aktivera produktionsanvändning.
Vanliga fallgropar
- Inloggningsuppgifter hos WhatsApp-leverantören kan löpa ut eller kräva specifika behörigheter för att svara på meddelanden. Om saker slutar fungera: börja med att kontrollera leverantörens dashboard-loggar och webhookens leveranshistorik.
- Om du använder Wait-noder eller extern rendering varierar processtider. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- OpenAI-prompter är ofta för generiska som standard. Lägg in din tjänstelista, bokningsregler och tonalitet i systemprompten tidigt, annars kommer du redigera output i all evighet.
Vanliga frågor
Cirka 45 minuter om du redan har dina WhatsApp-, Cal.com- och Sheets-konton redo.
Nej. Du kopplar konton, lägger in API-nycklar och testar några exempelchattar. Den enda ”tekniska” delen är att verifiera att din webhook tar emot meddelanden.
Ja. n8n har ett gratis självhostat 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 OpenAI API-användning samt avgifter för WhatsApp-/SMS-leverantörer.
Två alternativ: n8n Cloud (hanterat, enklast att sätta upp) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och klarar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serveradministration.
Ja, och det är en av de bästa anledningarna att använda n8n här. Uppdatera prompten i AI Scheduling Assistant så att den speglar dina tjänster, längder och regler (till exempel ”intake-samtal är 15 minuter, sessioner är 60”). Om du vill ha olika tillgänglighet per tjänst, justera HTTP-verktygsanropet Retrieve Available Slots så att det filtrerar på eventtyp eller kalender/teammedlem i Cal.com. För påminnelser: ändra filterlogiken för ”nästa 2 timmar” och schematriggerns frekvens, och fortsätt använda fältet reminder_sent i Google Sheets för att förhindra dubletter.
Oftast är det WhatsApp-leverantörens setup, inte n8n. Bekräfta att din webhook-URL är korrekt, att leverantören faktiskt levererar events och att du svarar inom leverantörens tillåtna meddelandefönster. Om arbetsflödet tar emot meddelanden men inte kan svara, kontrollera leverantörens auth-token och behörigheter för att skicka meddelanden. Bekräfta också att din Route Confirm vs Chat-logik matchar exakt de svarsformat dina användare skickar (folk skriver ärligt talat sällan ”confirm” på samma sätt två gånger).
Många, så länge dina leverantörer hänger med. På n8n Cloud begränsas du främst av dina månatliga körningar och planstorlek; vid self-hosting begränsas du av din server. I praktiken kan de flesta småföretag köra hundratals bokningar per månad utan problem och sedan skala upp genom att optimera prompter, minska onödiga anrop till Cal.com och batcha påminnelsekontroller i Google Sheets.
Ofta, ja. Det här flödet behöver förgrening (chatt vs bekräfta), minne för konversationen, HTTP-anrop till Cal.com och ett schemalagt påminnelsejobb, vilket är där n8n brukar vara flexibelt och prisvärt. Zapier eller Make kan fortfarande fungera för enklare automationer som ”ny bokning → logga rad”, men de blir klumpiga när du vill ha en AI-agent som driver chatten. Om du är osäker, prata med en automationsexpert och beskriv din volym och dina bokningsregler.
När det här väl är live slutar bokningar bo i ditt huvud (eller i din chatt-historik). Arbetsflödet tar hand om repetitiva moment så att du kan fokusera på själva besöket.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.