Callbacks

Questa pagina descrive come può utilizzare i callback in BookingJs per reagire a eventi di prenotazione come prenotazioni riuscite o cancellazioni.

Panoramica

Con i callback può eseguire codice personalizzato quando si verificano determinati eventi nel widget. Ciò è utile per l'analytics, i redirect o l'integrazione con altri sistemi.

Callback relativi alle prenotazioni

CallbackDescrizione
openedBookingPageLa pagina di prenotazione è stata aperta
closedBookingPageLa pagina di prenotazione è stata chiusa
createBookingStartedIl processo di prenotazione è stato avviato
createBookingSuccessfulLa prenotazione è andata a buon fine
createBookingFailedLa prenotazione non è riuscita

Parametri

Tutti i callback relativi alle prenotazioni ricevono un oggetto con:

Parametri del callback
{
  timeslot: {
    start: DateTime,           // Luxon DateTime
    end: DateTime,
    timeslot_uuid: string,     // UUID dell'appuntamento
    product_uuid: string,      // UUID del prodotto
    product_name: string,
    resource_name: string,
    capacity: number,
    capacity_left: number,
    kind: 'models.Bookable' | 'models.LotAppointment',
    untouchedStart: string,    // Stringa ISO
    untouchedEnd: string
  },
  data: {
    firstName: string,
    lastName: string,
    email: string,
    agbs: boolean,
    // + campi personalizzati
  },
  response?: RTKQResponse       // Solo per Successful/Failed
}

Esempio

Callback di prenotazione
timum.init({
  ref: 'ihre-ressourcen-referenz',
  callbacks: {
    createBookingSuccessful: ({ timeslot, data, response }) => {
      // Evento analytics
      gtag('event', 'booking_complete', {
        resource: timeslot.resource_name,
        product: timeslot.product_name,
        customer_email: data.email
      });

      // Opzionale: redirect
      // window.location.href = '/danke?booking=' + timeslot.timeslot_uuid;
    },
    createBookingFailed: ({ timeslot, data, response }) => {
      console.error('Buchung fehlgeschlagen:', response);
    }
  }
});

Callback relativi alle cancellazioni

CallbackDescrizione
openedCancelPageLa pagina di cancellazione è stata aperta
closedCancelPageLa pagina di cancellazione è stata chiusa
cancelationStartedIl processo di cancellazione è stato avviato
cancelationSuccessfulLa cancellazione è andata a buon fine
cancelationFailedLa cancellazione non è riuscita

Callback relativi alle finestre di dialogo

CallbackDescrizione
openedProductSelectionSelezione del prodotto aperta
closedProductSelectionSelezione del prodotto chiusa
openedResourceSelectionSelezione della risorsa aperta
closedResourceSelectionSelezione della risorsa chiusa
openedConfirmationPagePagina di conferma aperta
closedConfirmationPagePagina di conferma chiusa

Nota:

I callback relativi alle finestre di dialogo non ricevono alcun parametro.

Callback relativi ai dati

CallbackParametri
fetchingPublicDataSucceededcontact, resource, provider, channel
fetchingPublicDataFailederror
fetchingProductsSucceededproducts[]
fetchingProductsFailederror
fetchingBookablesSucceededbookables (raggruppati per data)
fetchingBookablesFailederror

Esempio: Nessun appuntamento disponibile

Gestione degli appuntamenti vuoti
timum.init({
  ref: 'ihre-ressourcen-referenz',
  callbacks: {
    fetchingBookablesSucceeded: ({ bookables }) => {
      const hasAppointments = Object.keys(bookables).length > 0;

      if (!hasAppointments) {
        // Nascondere il widget
        document.getElementById('bookingjs').style.display = 'none';
        // Mostrare l'alternativa
        document.getElementById('no-appointments').style.display = 'block';
      }
    }
  }
});

postMessage per iframe

Per l'integrazione tramite iframe, può utilizzare postMessageTarget per inviare eventi alla pagina padre:

iframe postMessage
// Nell'iframe
timum.init({
  ref: 'ihre-ressourcen-referenz',
  postMessageTarget: 'https://ihre-website.de'
});

// Nella pagina padre
window.addEventListener('message', (event) => {
  if (event.data.origin === 'bookingjs') {
    console.log('Event:', event.data.type);
    // event.data.type corrisponde al nome del callback
    // ad es. 'createBookingSuccessful'
  }
});

Importante:

postMessageTarget sovrascrive i callback normali. Tutti gli eventi vengono invece inviati tramite postMessage.

Argomenti correlati