Integration
Verschiedene Wege, BookingJs einzubinden
Nur einbetten statt integrieren?
Script Tag (CDN)
Die einfachste Methode zur Integration ist die Verwendung eines Script-Tags mit unserem CDN. Ideal für statische Websites und schnelle Prototypen.
<div id="bookingjs" style="margin: 32px"></div>
<script type="module">
import * as timum from 'https://cdn.timum.de/bookingjs/1/booking.js';
timum.init({ ref: 'booking-widget-demo-resource@timum' });
</script>Funktionsfähiges Beispiel auf jsFiddle
Tipp
https://ihre-website.de?ref=ihre-ressourcen-referenzMit URL-Parameter
<!-- URL: https://ihre-website.de?ref=ihre-ressourcen-referenz -->
<div id="bookingjs" style="margin: 32px"></div>
<script type="module">
import * as timum from 'https://cdn.timum.de/bookingjs/1/booking.js';
timum.init(); // Referenz wird aus URL-Parameter gelesen
</script>ESM Import
Für moderne JavaScript-Projekte mit Build-Tools wie Webpack, Vite oder Rollup können Sie das Paket als npm-Dependency installieren.
Installation
# Mit Yarn
yarn add @timum/booking
# Mit npm
npm install @timum/bookingVerwendung
import { init } from '@timum/booking';
// Stellen Sie sicher, dass ein Element mit id="bookingjs" existiert
init({ ref: 'ihre-ressourcen-referenz' });Beispielprojekt auf StackBlitz
React Component
Für React-Anwendungen bieten wir eine native Komponente mit voller TypeScript-Unterstützung.
Installation
yarn add @timum/bookingVerwendung
import { TimumBooking } from '@timum/booking';
function BookingPage() {
return (
<TimumBooking
appConfig={{
ref: 'ihre-ressourcen-referenz',
// weitere Optionen...
}}
muiTheme={{
// MUI Theme Anpassungen (PRO)
}}
/>
);
}Mit allen Optionen
import { TimumBooking } from '@timum/booking';
function BookingPage() {
return (
<TimumBooking
appConfig={{
ref: 'ihre-ressourcen-referenz',
prdRefs: 'produkt-referenz', // optional
channelKey: 'RESOURCE_PUBLIC', // optional
height: '600px',
culture: 'de',
callbacks: {
createBookingSuccessful: ({ timeslot, data }) => {
console.log('Termin gebucht:', timeslot);
},
},
}}
muiTheme={{
palette: {
primary: {
main: '#337ab7',
},
},
typography: {
fontFamily: 'Inter, sans-serif',
},
}}
/>
);
}Mehrere Instanzen auf einer Seite
TimumBooking unterstützt mehrere Buchungs-Widgets auf derselben Seite. Jede Instanz erhält automatisch eine eindeutige iframe-ID und verwaltet ihre Konfiguration isoliert – Props, Themes und Callbacks bleiben pro Instanz getrennt, und beim Unmount wird sauber aufgeräumt.
import { TimumBooking } from '@timum/booking';
// Mehrere Widgets für verschiedene Ressourcen
<div>
<TimumBooking appConfig={{ ref: 'resource-a@timum', height: '500px' }} />
<TimumBooking appConfig={{ ref: 'resource-b@timum', height: '500px' }} />
</div>;iframe (für Legacy-Systeme)
Wenn Ihr CMS keine Script-Einbindung erlaubt: timum hostet für jede Referenz eine fertige Widget-Seite unter /widget/<referenz>. Diese URL verwenden Sie direkt als iframe-Quelle – ohne eigenes Hosting. Optionen wie Sprache, Terminarten oder Kanal übergeben Sie als URL-Parameter.
<iframe
src="https://www.timum.de/widget/ihre-ressourcen-referenz"
width="100%"
height="600"
style="border: none;"
></iframe>
<!-- Mit Optionen per URL-Parameter (z. B. Sprache und Terminart) -->
<iframe
src="https://www.timum.de/widget/ihre-ressourcen-referenz?culture=en&prdRefs=besichtigung"
width="100%"
height="600"
style="border: none;"
></iframe>Ansichts-Varianten
Neben /widget/ gibt es weitere Pfade, die dieselbe Referenz in anderen Kalender-Ansichten rendern:
/widget/<ref>– Standardansicht/weekwidget/<ref>– Wochenkalender/weekstackwidget/<ref>– kompakte Wochenansicht/listwidget/<ref>– reine Listenansicht/details-month-widget/<ref>– Monatsansicht mit Termindetails/details-week-widget/<ref>– Wochenansicht mit Termindetails
Eigene Embed-Seite (für Event-Kommunikation)
In der gehosteten Widget-Seite stehen keine Callbacks zur Verfügung. Wenn Sie Events auf der Parent-Seite benötigen, hosten Sie stattdessen eine eigene kleine Seite mit dem Script-Tag-Snippet und postMessageTarget:
<!-- embed.html – eigene Seite mit dem BookingJs-Snippet -->
<div id="bookingjs" style="margin: 32px"></div>
<script type="module">
import * as timum from 'https://cdn.timum.de/bookingjs/1/booking.js';
timum.init({
ref: 'ihre-ressourcen-referenz',
postMessageTarget: 'https://www.example.com' // Events an die Parent-Seite senden
});
</script>
<!-- Auf Ihrer Seite einbetten -->
<iframe
src="https://www.example.com/embed.html"
width="100%"
height="600"
style="border: none;"
></iframe>Hinweis zu iframe
Vergleich der Methoden
| Methode | Vorteile | Nachteile |
|---|---|---|
| Script Tag | Einfach, keine Dependencies | Weniger Kontrolle über Build |
| ESM Import | Tree-shaking, TypeScript | Benötigt Build-Tool |
| React Component | Native Integration, Props | Nur für React-Projekte |
| iframe | Isolation, einfach | Eingeschränkte Callbacks |
Verwandte Themen
War diese Seite hilfreich?
