Callbacks

Esta página describe cómo puede utilizar los callbacks en BookingJs para reaccionar a eventos de reserva, como reservas exitosas o cancelaciones.

Resumen

Con los callbacks, puede ejecutar código personalizado cuando se producen determinados eventos en el widget. Esto es útil para la analítica, las redirecciones o la integración con otros sistemas.

Callbacks relacionados con la reserva

CallbackDescripción
openedBookingPageSe abrió la página de reserva
closedBookingPageSe cerró la página de reserva
createBookingStartedSe inició el proceso de reserva
createBookingSuccessfulLa reserva se realizó correctamente
createBookingFailedLa reserva falló

Parámetros

Todos los callbacks relacionados con la reserva reciben un objeto con:

Parámetros del callback
{
  timeslot: {
    start: DateTime,           // Luxon DateTime
    end: DateTime,
    timeslot_uuid: string,     // UUID de la cita
    product_uuid: string,      // UUID del producto
    product_name: string,
    resource_name: string,
    capacity: number,
    capacity_left: number,
    kind: 'models.Bookable' | 'models.LotAppointment',
    untouchedStart: string,    // Cadena ISO
    untouchedEnd: string
  },
  data: {
    firstName: string,
    lastName: string,
    email: string,
    agbs: boolean,
    // + campos personalizados
  },
  response?: RTKQResponse       // Solo para Successful/Failed
}

Ejemplo

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

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

Callbacks relacionados con la cancelación

CallbackDescripción
openedCancelPageSe abrió la página de cancelación
closedCancelPageSe cerró la página de cancelación
cancelationStartedSe inició el proceso de cancelación
cancelationSuccessfulLa cancelación se realizó correctamente
cancelationFailedLa cancelación falló

Callbacks relacionados con diálogos

CallbackDescripción
openedProductSelectionSelección de producto abierta
closedProductSelectionSelección de producto cerrada
openedResourceSelectionSelección de recurso abierta
closedResourceSelectionSelección de recurso cerrada
openedConfirmationPagePágina de confirmación abierta
closedConfirmationPagePágina de confirmación cerrada

Nota:

Los callbacks relacionados con diálogos no reciben ningún parámetro.

Callbacks relacionados con los datos

CallbackParámetros
fetchingPublicDataSucceededcontact, resource, provider, channel
fetchingPublicDataFailederror
fetchingProductsSucceededproducts[]
fetchingProductsFailederror
fetchingBookablesSucceededbookables (agrupados por fecha)
fetchingBookablesFailederror

Ejemplo: No hay citas disponibles

Gestión de citas vacías
timum.init({
  ref: 'ihre-ressourcen-referenz',
  callbacks: {
    fetchingBookablesSucceeded: ({ bookables }) => {
      const hasAppointments = Object.keys(bookables).length > 0;

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

postMessage para iframe

Para la integración con iframe, puede utilizar postMessageTarget para enviar eventos a la página padre:

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

// En la página padre
window.addEventListener('message', (event) => {
  if (event.data.origin === 'bookingjs') {
    console.log('Event:', event.data.type);
    // event.data.type corresponde al nombre del callback
    // p. ej. 'createBookingSuccessful'
  }
});

Importante:

postMessageTarget sustituye a los callbacks normales. En su lugar, todos los eventos se envían mediante postMessage.

Temas relacionados