La Miglior Integrazione per la Gestione degli Appuntamenti su Webflow

Nicola ToledoNicola Toledo
Integrazione Web App
··8 min di lettura

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

Piattaforma Cal.com
Piattaforma Cal.com

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_PROFILE

Dopo 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:

EventoQuando si attiva
BOOKING_CREATEDUna nuova prenotazione è confermata
BOOKING_REQUESTEDUna richiesta di prenotazione in attesa
BOOKING_CANCELLEDUna prenotazione è cancellata
BOOKING_RESCHEDULEDUna prenotazione è spostata
BOOKING_REJECTEDUna richiesta di prenotazione rifiutata
BOOKING_PAIDIl pagamento è completato
BOOKING_PAYMENT_INITIATEDInizia il processo di pagamento
BOOKING_NO_SHOW_UPDATEDLo stato di mancata presenza aggiornato
MEETING_STARTEDInizia un video meeting
MEETING_ENDEDFinisce un video meeting
RECORDING_READYUna registrazione è disponibile
RECORDING_TRANSCRIPTION_GENERATEDLa trascrizione è pronta
INSTANT_MEETINGUn meeting è attivato su richiesta
FORM_SUBMITTEDInviato form di prenotazione
FORM_SUBMITTED_NO_EVENTInviato form autonomo
OOO_CREATEDCreato un periodo d'assenza (OOO)
AFTER_HOSTS_CAL_VIDEO_NO_SHOWHost non collegato a videochiamata
AFTER_GUESTS_CAL_VIDEO_NO_SHOWOspite 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:

  1. Il fornitore clicca su "Connetti il tuo account Cal.com" nell'interfaccia UI in Webflow
  2. Wized inizializza il redirect all'OAuth su Cal.com
  3. L'utente conferma di scambiare accesso e delegare operazioni e l'app reindirizza su un url fornendoti un codice univoco temporaneo
  4. Xano recepisce istantaneamente da stringa questo codice API scambiandolo segretamente e immagazzina tutto
  5. Ai clienti non serve fare niente se non accedere ai profili specifici nei domini per finalizzare l’operato
  6. Gli eventi faranno trigger per registrare a database ogni singolo mutato in prenotazioni Xano dal Webhook Cal
  7. 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!

Nicola Toledo

Hai un progetto in mente?

Vediamo se posso aiutarti

Prenota una chiamata gratuita