Widget-Ereignisse
Callbacks und Ereignisse, um auf Benutzeraktionen zu reagieren und den Buchungsablauf anzupassen.
Einführung
Das Widget gibt Ereignisse zu verschiedenen Zeitpunkten des Buchungsablaufs aus. Sie können diese Ereignisse über Callbacks in der Anfangskonfiguration abonnieren:
SalonBookIt.init({
apiKey: 'hh_pub_live_...',
container: '#widget',
// Ereignis-Callbacks
onReady: (business) => { /* ... */ },
onStepChange: (step, data) => { /* ... */ },
onServiceSelect: (service) => { /* ... */ },
onBookingComplete: (booking) => { /* ... */ },
onError: (error) => { /* ... */ }
});
Ereignisreferenz
onReady
Wird ausgelöst, wenn das Widget vollständig geladen und einsatzbereit ist.
Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
business |
object |
Geladene Geschäftsinformationen |
Beispiel
onReady: (business) => {
console.log('Geschäft:', business.nombre);
console.log('Verfügbare Services:', business.servicios_count);
// Externe UI aktualisieren
document.querySelector('.loading').style.display = 'none';
}
Objekt business
{
"id": "uuid-del-tenant",
"nombre": "Mi Salon",
"telefono": "+34612345678",
"email": "info@misalon.com",
"direccion": "Calle Principal 123",
"logo_url": "https://...",
"servicios_count": 12,
"profesionales_count": 5,
"moneda": "EUR",
"simbolo_moneda": "€"
}
onStepChange
Wird ausgelöst, wenn der Benutzer im Buchungsablauf vor- oder zurückgeht.
Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
step |
string |
Name des aktuellen Schritts |
data |
object |
Bisher gesammelte Daten |
Verfügbare Schritte
'services'- Serviceauswahl'staff'- Fachmannauswahl'datetime'- Datum- und Zeitauswahl'customer'- Kundendaten'payment'- Zahlung (falls zutreffend)'confirmation'- Endgültige Bestätigung
Beispiel
onStepChange: (step, data) => {
console.log('Aktueller Schritt:', step);
// Analytics
gtag('event', 'booking_step', {
'step_name': step,
'services_selected': data.services?.length || 0
});
// Externe Breadcrumbs aktualisieren
updateBreadcrumbs(step);
}
onServiceSelect
Wird ausgelöst, wenn der Benutzer einen Service auswählt oder abwählt.
Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
service |
object |
Ausgewählter Service |
selected |
boolean |
Ob ausgewählt oder abgewählt |
allSelected |
array |
Alle aktuell ausgewählten Services |
Beispiel
onServiceSelect: (service, selected, allSelected) => {
console.log(selected ? 'Hinzugefügt:' : 'Entfernt:', service.nombre);
// Gesamtpreis in externer UI aktualisieren
const total = allSelected.reduce((sum, s) => sum + s.precio, 0);
document.querySelector('.total-price').textContent = `€${total}`;
}
onStaffSelect
Wird ausgelöst, wenn der Benutzer einen Fachmann auswählt.
Beispiel
onStaffSelect: (staff) => {
console.log('Fachmann:', staff.nombre);
// staff = { id, nombre, imagen_url, especialidades }
}
onDateSelect
Wird ausgelöst, wenn der Benutzer ein Datum und eine Uhrzeit auswählt.
Beispiel
onDateSelect: (datetime) => {
console.log('Datum:', datetime.fecha); // '2024-01-20'
console.log('Uhrzeit:', datetime.hora); // '10:30'
}
onBookingComplete
Wird ausgelöst, wenn die Buchung erfolgreich erstellt wurde (vor der Zahlung, falls zutreffend).
Beispiel
onBookingComplete: (booking) => {
console.log('Buchung erstellt:', booking.id);
// Analytics
gtag('event', 'purchase', {
'transaction_id': booking.id,
'value': booking.total,
'currency': 'EUR'
});
// Zur Bestätigungsseite weiterleiten
window.location.href = `/reserva-confirmada/${booking.id}`;
}
Objekt booking
{
"id": 12345,
"codigo": "ABC123",
"fecha": "2024-01-20",
"hora_inicio": "10:30",
"hora_fin": "11:00",
"servicios": [
{ "id": 1, "nombre": "Klassischer Schnitt", "precio": 25.00 }
],
"profesional": {
"id": 5,
"nombre": "Carlos Garcia"
},
"cliente": {
"nombre": "Juan Perez",
"email": "juan@email.com",
"telefono": "+34612345678"
},
"total": 25.00,
"estado": "bestätigt",
"pago_pendiente": true
}
onPaymentComplete
Wird ausgelöst, wenn die Zahlung erfolgreich abgeschlossen wurde.
Beispiel
onPaymentComplete: (payment) => {
console.log('Zahlung abgeschlossen');
console.log('ID:', payment.payment_intent_id);
console.log('Betrag:', payment.amount);
// Erfolgsmeldung anzeigen
showSuccessMessage('Zahlung erhalten!');
}
onError
Wird ausgelöst, wenn an irgendeinem Punkt des Ablaufs ein Fehler auftritt.
Beispiel
onError: (error) => {
console.error('Error:', error.code, error.message);
// An Fehlersystem melden
Sentry.captureException(error);
// Nachricht an Benutzer anzeigen
if (error.code === 'SLOT_UNAVAILABLE') {
alert('Es tut uns leid, dieser Zeitpunkt ist nicht mehr verfügbar.');
}
}
Häufige Fehlercodes
| Code | Beschreibung |
|---|---|
INVALID_API_KEY |
Ungültiger API-Schlüssel |
NETWORK_ERROR |
Verbindungsfehler |
SLOT_UNAVAILABLE |
Zeitpunkt nicht mehr verfügbar |
PAYMENT_FAILED |
Zahlungsfehler |
VALIDATION_ERROR |
Ungültige Formulardaten |
onClose
Wird ausgelöst, wenn der Benutzer das Widget schließt (nur im Modal-Modus).
Beispiel
onClose: () => {
console.log('Widget geschlossen');
// Fragen, ob Entwurf gespeichert werden soll
if (hasUnsavedData()) {
saveBookingDraft();
}
}
Widget-Methoden
Neben Ereignissen können Sie das Widget programmatisch steuern:
// Widget-Referenz erhalten
const widget = SalonBookIt.init({ ... });
// Modal öffnen (nur im Modal/Button-Modus)
widget.open();
// Modal schließen
widget.close();
// Zu einem bestimmten Schritt gehen
widget.goToStep('services');
// Widget zurücksetzen
widget.reset();
// Widget zerstören
widget.destroy();