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
| Callback | Descripción |
|---|---|
openedBookingPage | Se abrió la página de reserva |
closedBookingPage | Se cerró la página de reserva |
createBookingStarted | Se inició el proceso de reserva |
createBookingSuccessful | La reserva se realizó correctamente |
createBookingFailed | La 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
| Callback | Descripción |
|---|---|
openedCancelPage | Se abrió la página de cancelación |
closedCancelPage | Se cerró la página de cancelación |
cancelationStarted | Se inició el proceso de cancelación |
cancelationSuccessful | La cancelación se realizó correctamente |
cancelationFailed | La cancelación falló |
Callbacks relacionados con diálogos
| Callback | Descripción |
|---|---|
openedProductSelection | Selección de producto abierta |
closedProductSelection | Selección de producto cerrada |
openedResourceSelection | Selección de recurso abierta |
closedResourceSelection | Selección de recurso cerrada |
openedConfirmationPage | Página de confirmación abierta |
closedConfirmationPage | Página de confirmación cerrada |
Nota:
Los callbacks relacionados con diálogos no reciben ningún parámetro.
Callbacks relacionados con los datos
| Callback | Parámetros |
|---|---|
fetchingPublicDataSucceeded | contact, resource, provider, channel |
fetchingPublicDataFailed | error |
fetchingProductsSucceeded | products[] |
fetchingProductsFailed | error |
fetchingBookablesSucceeded | bookables (agrupados por fecha) |
fetchingBookablesFailed | error |
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.
