Callbacks
Cette page décrit comment vous pouvez utiliser les callbacks dans BookingJs pour réagir à des événements de réservation tels que des réservations réussies ou des annulations.
Aperçu
Avec les callbacks, vous pouvez exécuter du code personnalisé lorsque certains événements se produisent dans le widget. Cela est utile pour l'analytics, les redirections ou l'intégration avec d'autres systèmes.
Callbacks liés aux réservations
| Callback | Description |
|---|---|
openedBookingPage | La page de réservation a été ouverte |
closedBookingPage | La page de réservation a été fermée |
createBookingStarted | Le processus de réservation a démarré |
createBookingSuccessful | La réservation a réussi |
createBookingFailed | La réservation a échoué |
Paramètres
Tous les callbacks liés aux réservations reçoivent un objet contenant :
Paramètres du callback
{
timeslot: {
start: DateTime, // Luxon DateTime
end: DateTime,
timeslot_uuid: string, // UUID du rendez-vous
product_uuid: string, // UUID du produit
product_name: string,
resource_name: string,
capacity: number,
capacity_left: number,
kind: 'models.Bookable' | 'models.LotAppointment',
untouchedStart: string, // Chaîne ISO
untouchedEnd: string
},
data: {
firstName: string,
lastName: string,
email: string,
agbs: boolean,
// + champs personnalisés
},
response?: RTKQResponse // Uniquement pour Successful/Failed
}
Exemple
Callback de réservation
timum.init({
ref: 'ihre-ressourcen-referenz',
callbacks: {
createBookingSuccessful: ({ timeslot, data, response }) => {
// Événement analytics
gtag('event', 'booking_complete', {
resource: timeslot.resource_name,
product: timeslot.product_name,
customer_email: data.email
});
// Optionnel : redirection
// window.location.href = '/danke?booking=' + timeslot.timeslot_uuid;
},
createBookingFailed: ({ timeslot, data, response }) => {
console.error('Buchung fehlgeschlagen:', response);
}
}
});
Callbacks liés aux annulations
| Callback | Description |
|---|---|
openedCancelPage | La page d'annulation a été ouverte |
closedCancelPage | La page d'annulation a été fermée |
cancelationStarted | Le processus d'annulation a démarré |
cancelationSuccessful | L'annulation a réussi |
cancelationFailed | L'annulation a échoué |
Callbacks liés aux boîtes de dialogue
| Callback | Description |
|---|---|
openedProductSelection | Sélection du produit ouverte |
closedProductSelection | Sélection du produit fermée |
openedResourceSelection | Sélection de la ressource ouverte |
closedResourceSelection | Sélection de la ressource fermée |
openedConfirmationPage | Page de confirmation ouverte |
closedConfirmationPage | Page de confirmation fermée |
Remarque :
Les callbacks liés aux boîtes de dialogue ne reçoivent aucun paramètre.
Callbacks liés aux données
| Callback | Paramètres |
|---|---|
fetchingPublicDataSucceeded | contact, resource, provider, channel |
fetchingPublicDataFailed | error |
fetchingProductsSucceeded | products[] |
fetchingProductsFailed | error |
fetchingBookablesSucceeded | bookables (regroupés par date) |
fetchingBookablesFailed | error |
Exemple : Aucun rendez-vous disponible
Traitement des rendez-vous vides
timum.init({
ref: 'ihre-ressourcen-referenz',
callbacks: {
fetchingBookablesSucceeded: ({ bookables }) => {
const hasAppointments = Object.keys(bookables).length > 0;
if (!hasAppointments) {
// Masquer le widget
document.getElementById('bookingjs').style.display = 'none';
// Afficher l'alternative
document.getElementById('no-appointments').style.display = 'block';
}
}
}
});
postMessage pour iframe
Pour l'intégration iframe, vous pouvez utiliser postMessageTarget afin d'envoyer des événements à la page parente :
iframe postMessage
// Dans l'iframe
timum.init({
ref: 'ihre-ressourcen-referenz',
postMessageTarget: 'https://ihre-website.de'
});
// Dans la page parente
window.addEventListener('message', (event) => {
if (event.data.origin === 'bookingjs') {
console.log('Event:', event.data.type);
// event.data.type correspond au nom du callback
// par ex. 'createBookingSuccessful'
}
});
Important :
postMessageTarget remplace les callbacks normaux. Tous les événements sont alors envoyés via postMessage.
