Se hai bisogno di aggiungere funzionalità di prenotazione a Webflow, probabilmente hai esaminato strumenti come Calendly, SavvyCal o Acuity. Tutti funzionano — ma condividono la stessa limitazione fondamentale: sono costruiti per gli utenti finali, non per gli sviluppatori. Le cose cambiano completamente con Cal.com.
Perché Cal.com si Distingue dalla Concorrenza

La maggior parte delle piattaforme di pianificazione tratta gli sviluppatori come un pensiero secondario. Calendly ti offre un widget incorporabile e un'API limitata — ma stai in gran parte lavorando attorno alla piattaforma, non con essa. SavvyCal è elegante ma altrettanto rigido. Il modello di base è sempre lo stesso: la piattaforma di prenotazione è al comando e tu la stai solo incorporando.
Cal.com adotta un approccio completamente diverso. È sviluppato pensando prima agli sviluppatori (developer-first): open source, un'API REST ben documentata (v2) e costruito per essere profondamente esteso.
Tre Modi per Utilizzare Cal.com in Webflow
Questo articolo tratta tre strumenti complementari che lavorano insieme: l'Embed (per mostrare un'interfaccia utente di prenotazione), l'OAuth (per collegare l'account Cal.com di un utente alla tua app) e i Webhook (per sincronizzare gli eventi di prenotazione con il tuo backend in tempo reale). Puoi usarli in modo indipendente o combinarli a seconda del tuo caso d'uso.
1. Embed — Il Modo più Rapido per Mostrare un'UI di Prenotazione
Il modo più veloce per iniziare è utilizzare l'embed nativo di Cal.com. Inserisci uno script nella tua pagina Webflow e viene visualizzato un calendario di prenotazione — in linea o come finestra modale (popup). I tuoi visitatori interagiranno direttamente con il flusso di prenotazione di Cal.com, che è curato e ottimizzato per dispositivi mobili fin dal primo utilizzo.
Aggiungi questo script al codice personalizzato della tua pagina Webflow (in Impostazioni Pagina → Prima del tag </body>):
(function (C, A, L) {
let p = function (a, ar) {
a.q.push(ar);
};
let d = C.document;
C.Cal =
C.Cal ||
function () {
let cal = C.Cal;
let ar = arguments;
if (!cal.loaded) {
cal.ns = {};
cal.q = cal.q || [];
d.head.appendChild(d.createElement("script")).src = A;
cal.loaded = true;
}
if (ar[0] === L) {
const api = function () {
p(api, arguments);
};
const namespace = ar[1];
api.q = api.q || [];
typeof namespace === "string"
? (cal.ns[namespace] = api) && p(api, ar)
: p(cal, ar);
return;
}
p(cal, ar);
};
})(window, "https://app.cal.com/embed/embed.js", "init");
Cal("init", { origin: "https://app.cal.com" });
Cal("ui", {
styles: { branding: { brandColor: "#000000" } },
hideEventTypeDetails: false,
});Quindi aggiungi un pulsante trigger nel tuo canvas Webflow con questi attributi personalizzati:
<button
data-cal-link="tuo-username/tuo-evento"
data-cal-config='{"layout":"month_view"}'
>
Prenota una chiamata
</button>Questo approccio è ideale per i casi d'uso semplici in cui tu sei l'host — un freelance, un consulente o un'azienda che offre un singolo tipo di appuntamento. I clienti prenotano direttamente nel tuo calendario Cal.com. Puoi personalizzare il colore del brand e il layout, ma l'esperienza base rimane di Cal.com.
2. OAuth — Collega l'Account Cal.com di un Utente alla tua App
Se la tua piattaforma ha più fornitori (coach, medici, consulenti...), vorrai che ciascuno di loro colleghi il proprio account Cal.com in modo che possano gestire la propria disponibilità, tipi di evento e sincronizzazione del calendario. L'OAuth rende questo possibile.
Gli utenti cliccano su "Connetti Cal.com" nella tua app Webflow e attraversano un flusso di autorizzazione standard:
https://app.cal.com/oauth/authorize
?client_id=TUO_CLIENT_ID
&redirect_uri=https://tuaapp.com/cal-callback
&response_type=code
&scope=READ_BOOKING,READ_PROFILEDopo l'approvazione dell'utente, Cal.com reindirizza alla tua app con un codice di autorizzazione. Lo scambi con dei token sul tuo backend:
POST https://app.cal.com/api/auth/oauth/token
{
"code": "CODICE_AUTORIZZAZIONE",
"client_id": "TUO_CLIENT_ID",
"client_secret": "TUO_CLIENT_SECRET",
"redirect_uri": "https://tuaapp.com/cal-callback",
"grant_type": "authorization_code"
}Archivia l'access_token e il refresh_token accanto al record dell'utente. Ora puoi effettuare chiamate all'API di Cal.com per conto di quell'utente: recuperando i suoi tipi di eventi, leggendo le prenotazioni o visualizzando la sua disponibilità nella tua UI.
Poiché ogni utente gestisce il proprio calendario direttamente in Cal.com, ha accesso a tutto: regole di disponibilità, sincronizzazione con Google Calendar (per prevenire doppie prenotazioni), moduli di assunzione personalizzati e pagamenti Stripe. La tua app coordina semplicemente il flusso — gli utenti sono pienamente consapevoli di avere un account su Cal.com.
3. Webhooks — Sincronizza gli Eventi di Prenotazione col tuo Backend in Tempo Reale
Invece di interrogare (polling) l'API di Cal.com, puoi registrare dei webhook per ricevere notifiche in tempo reale ogni volta che succede qualcosa su un calendario. Cal.com invia una richiesta POST al tuo endpoint per ogni evento.
Cal.com supporta un set completo di eventi webhook:
| Evento | Quando si attiva |
|---|---|
BOOKING_CREATED | Una nuova prenotazione è confermata |
BOOKING_REQUESTED | Una richiesta di prenotazione in attesa |
BOOKING_CANCELLED | Una prenotazione è cancellata |
BOOKING_RESCHEDULED | Una prenotazione è spostata |
BOOKING_REJECTED | Una richiesta di prenotazione rifiutata |
BOOKING_PAID | Il pagamento è completato |
BOOKING_PAYMENT_INITIATED | Inizia il processo di pagamento |
BOOKING_NO_SHOW_UPDATED | Lo stato di mancata presenza aggiornato |
MEETING_STARTED | Inizia un video meeting |
MEETING_ENDED | Finisce un video meeting |
RECORDING_READY | Una registrazione è disponibile |
RECORDING_TRANSCRIPTION_GENERATED | La trascrizione è pronta |
INSTANT_MEETING | Un meeting è attivato su richiesta |
FORM_SUBMITTED | Inviato form di prenotazione |
FORM_SUBMITTED_NO_EVENT | Inviato form autonomo |
OOO_CREATED | Creato un periodo d'assenza (OOO) |
AFTER_HOSTS_CAL_VIDEO_NO_SHOW | Host non collegato a videochiamata |
AFTER_GUESTS_CAL_VIDEO_NO_SHOW | Ospite non collegato a videochiamata |
Ascolta questi eventi sul tuo backend per rendere i dati persistenti, attivare automazioni, inviare email o aggiornare il tuo CRM:
// Esempio handler webhook (Node.js / Express)
app.post("/webhooks/cal", express.json(), async (req, res) => {
const { triggerEvent, payload } = req.body;
switch (triggerEvent) {
case "BOOKING_CREATED":
await db.bookings.create({
calBookingId: payload.bookingId,
userId: getUserByCalEmail(payload.organizer.email),
startTime: payload.startTime,
endTime: payload.endTime,
attendee: payload.attendees[0],
status: "confirmed",
});
break;
case "BOOKING_CANCELLED":
await db.bookings.update(
{ status: "cancelled" },
{ where: { calBookingId: payload.bookingId } },
);
break;
case "RECORDING_READY":
await db.sessions.update(
{ recordingUrl: payload.recordingUrl },
{ where: { calBookingId: payload.bookingId } },
);
break;
}
res.sendStatus(200);
});Mettere Tutto Insieme con Webflow, Wized e Xano
Per i builder no-code e low-code, un solido stack tecnico per combinare tutti e tre gli strumenti è Webflow + Wized + Xano.
Webflow gestisce la tua interfaccia utente (UI) — pagine di prenotazione, cruscotti dei fornitori e schermate di connessione. Wized aggiunge la logica front-end JavaScript per comunicare tra Webflow e il tuo backend senza scrivere alcun codice complesso lato client. Xano agisce come database e backend generale: gestisce il flusso di scambio Token OAuth, gestisce le password dei booking form e utenti ed infine espone gli endpoint sicuri (API) capaci di connettersi interamente per comunicare verso il webhook che Cal.com attiverà verso le nostre chiamate (event post).
Un tipico flusso multi-fornitore (es: vari medici in una clinica online) funzionerebbe in questo modo:
- Il fornitore clicca su "Connetti il tuo account Cal.com" nell'interfaccia UI in Webflow
- Wized inizializza il redirect all'OAuth su Cal.com
- L'utente conferma di scambiare accesso e delegare operazioni e l'app reindirizza su un url fornendoti un codice univoco temporaneo
- Xano recepisce istantaneamente da stringa questo codice API scambiandolo segretamente e immagazzina tutto
- Ai clienti non serve fare niente se non accedere ai profili specifici nei domini per finalizzare l’operato
- Gli eventi faranno trigger per registrare a database ogni singolo mutato in prenotazioni Xano dal Webhook Cal
- Wized ricaricherà poi alla prima opportunità per far visualizzare graficamente nei nuovi slot liberi gli UI ed aggiornamenti a vista Webflow
Casi D'uso del Mondo Reale
Marketplace di Coaching — Ogni coach collega il proprio account Cal.com tramite l'autenticazione OAuth. I clienti riescono a ricercare il talento e inviare booking grazie ad elementi visuali incorporati del loro profilo personale in appositi form per le sessioni prenotate. A fine di pagamenti con carta confermati Xano farà da registro. Su RECORDING_READY farai disponibili via backend nel Webflow le registrazioni scaricabili nel canale dashboard client.
Piattaforme di Telemedicina — Esatti specialisti predefiniscono giorni d'accesso liberando flessibilità direttamente al portale Cal integrandosi l'app Google o iOS a riprova d'altre chiamate (double bookings). Grazie l'update a db per il webhook BOOKING_CREATED automatizzi via mail lo screening del paziente a check previsti in calendario.
Consulenti Finanziari, Legali e Tecnici — Gli avvocati sfruttando i filtri d’accesso precisi d'Intake di base nel loro form Cal avranno risposte ed inquadrature dal prospect via Wized ed event FORM_SUBMITTED dirette ed istantanee salvando profilazione dei lead dentro Airtable o CRM personali all’instante in totale efficienza del lavoro asincrono.
Perché è Meglio Essere Scalabili Più Che Partire Da Solo Creati Con Sistemi Primitivi Propri?
Prenotazioni/Appuntamenti spesso sembrano molto elementari da programmare di prim’acchito, tralasciando sfide assolute riguardando calcolo ed adeguamenti automatici tra gli innumerevoli ed asincroni Fusi orari mondiali, interruzioni ed emergenze cancellazioni (Bufers times cross accounts). E per finire rimborsi incassi da fatturazione (stripe etc..) su decine di regole specifiche, non fa in modo assolutamente rapido gestirsi questi eventi su un db Xano se di prima progettazione, ci pensa Cal.com in modo brillante in tutte quelle sue sfaccettature permettendoti al 100% per un no code il facile utilizzo d’infrastruttura completa. Assaporerai tranquillità e puro concentrato mirato ai goal della Piattaforma da promuovere!
