Schnellstart: das Widget
Das Widget ist eine Option zur Integration mit i-Reserve, wenn Sie Ihren Kunden die Möglichkeit bieten möchten, mit i-Reserve auf Ihrer eigenen Seite zu reservieren. Beispiele für das Widget finden Sie in der Vergaderzalen-Demo (Tab-Widget) und der Rondleidingen-Demo (Button-Widget). Diese Anleitung begleitet Sie bei der Inbetriebnahme des Widgets.
Zuerst erstellen wir Links für die Seiten, die das Widget anzeigen soll. Das Standard-Widget hat zwei Tabs, daher wählen wir hierfür zwei Seiten aus. Dies können zum Beispiel zwei Kalenderseiten sein oder die Produktliste und ein Kontaktformular.
Wenn Sie die beiden Seiten ausgewählt und gegebenenfalls erstellt haben, gehen Sie in der Konfiguration der Umgebung zu Kundenseite > Inhaltsseiten > Seiten verwalten. Hier können neue SEO-Links hinzugefügt werden. Nachfolgend werden zwei wichtige Einstellungen dazu erläutert.
Original
Geben Sie bei Original ein, was nach dem "/" hinter dem Domainnamen steht.
- Für https://rondleidingen.i-reserve.net/front?mod=form&form_id=7 geben Sie also front?mod=form&form_id=7 ein.
Alias
Geben Sie hier ein, was nach dem "/" stehen soll. Dies kann zum Beispiel "contact" oder "zalen" sein. Wenn Sie "contact" wählen, ist die Seite ab dann auch über {Ihre Umgebungs-URL}/contact erreichbar (auf rondleidingen.i-reserve.net wird dies zum Beispiel https://rondleidingen.i-reserve.net/contact)
Da wir nun die Seiten haben, die für das Widget verwendet werden sollen, können wir die Konfiguration anlegen. Dazu gehen wir in der Konfiguration der Umgebung zu Kundenseite > Widget und Buttons.
Fügen Sie hier eine neue Konfiguration hinzu und wählen Sie den Typ Widget. Beim Widget-Typ kann zwischen einem Button-Widget oder einem Tab-Widget gewählt werden.
Suchen Sie bei Tab eins und Tab zwei die SEO-Links, die wir im vorherigen Schritt angelegt haben. Hinter dem Namen steht hier [SEO].
In die Felder Tab eins Beschreibung und Tab zwei Beschreibung geben Sie die Namen ein, die die Tabs erhalten sollen.
Wenn Sie mit diesen Einstellungen fertig sind, klicken Sie auf den </>-Button unten am Block. Hier finden Sie die Tags, die in den Head und den Body der Seite auf Ihrer Website aufgenommen werden müssen.
Wenn Sie das Widget in mehreren Sprachen verwenden möchten, sind einige zusätzliche Schritte erforderlich, um dies korrekt einzurichten.
SEO-Links
Mithilfe der SEO-Links können dieselben Seiten in verschiedenen Sprachen angezeigt werden.
Für https://rondleidingen.i-reserve.net/front?mod=form&form_id=7 geben Sie bei Original bei den SEO-Links Folgendes ein:
- Niederländisch: front?mod=form&form_id=7&lang=nl
- Englisch: front?mod=form&form_id=7&lang=en
- Deutsch: front?mod=form&form_id=7&lang=de
Achten Sie darauf, dass Sie beim Alias verschiedene Aliasse verwenden, zum Beispiel "contact", "contact-en" und "contact-de"
Widget-Konfigurationen
Legen Sie für jede Sprache eine separate Widget-Konfiguration an, in der Sie die SEO-Links dieser Sprache verwenden.
Hinzufügen zu Ihrer Website
Kopieren Sie für eine sprachspezifische Konfiguration die Head- und Body-Tags. Setzen Sie diese anschließend auf die entsprechenden Sprachseiten Ihrer Website.
Native Widget — Integrationsanleitung
Anweisungen für das Platzieren des <ires-native-widget> auf einer Website.
1. Widget auf eine Seite setzen
Fügen Sie zwei Zeilen zu Ihrem HTML hinzu:
<script type="module" src="https://default.i-reserve.net/javascript/embed/iResController.js"></script>
<ires-native-widget src="https://default.i-reserve.net/api/rest/widget/{configId}"></ires-native-widget>
Ersetzen Sie {configId} durch die ID Ihrer Widget-Konfiguration (zu finden im Admin-Panel).
Vollständiges Beispiel
<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Mein Restaurant</title>
<script type="module" src="https://default.i-reserve.net/javascript/embed/iResController.js"></script>
</head>
<body>
<h1>Willkommen in unserem Restaurant</h1>
<p>Buchen Sie einen Tisch über das Reservierungswidget unten rechts.</p>
<ires-native-widget src="https://default.i-reserve.net/api/rest/widget/30120"></ires-native-widget>
</body>
</html>
Das Widget erscheint als Floating Button unten rechts auf der Seite.
Attribute
| Attribut | Erforderlich | Beschreibung |
|---|---|---|
| src | ja | URL zur Widget-API (https://{domain}/api/rest/widget/{configId}) |
| lang | nein | Sprache: nl, en, de, fr. Standard: automatisch auf Basis der Browsersprache |
Beispiel mit Sprache
<ires-native-widget
src="https://default.i-reserve.net/api/rest/widget/30120"
lang="en"
></ires-native-widget>
2. Widget über JavaScript öffnen
Das Widget kann programmatisch über den globalen iResWidget-Namespace geöffnet, geschlossen und umgeschaltet werden. Dies ist praktisch für eigene "Jetzt reservieren"-Buttons.
Globaler Namespace: iResWidget
| Methode | Beschreibung |
|---|---|
| iResWidget.OpenWidget() | Öffnet das Widget |
| iResWidget.OpenWidget(params) | Öffnet das Widget mit Deeplink-Parametern (siehe Abschnitt 3) |
| iResWidget.CloseWidget() | Schließt das Widget |
| iResWidget.ToggleWidget() | Öffnet das Widget, wenn es geschlossen ist, schließt es, wenn es geöffnet ist |
Beispiel: Button mit onclick
<button onclick="iResWidget.OpenWidget()">
Jetzt reservieren
</button>
Beispiel: mehrere Buttons auf der Seite
<nav>
<a href="#" onclick="iResWidget.OpenWidget(); return false;">
Reservieren
</a>
</nav>
<section class="hero">
<h1>Willkommen in unserem Restaurant</h1>
<button onclick="iResWidget.OpenWidget()">
Jetzt reservieren
</button>
</section>
<footer>
<button onclick="iResWidget.OpenWidget()">
Tisch reservieren
</button>
</footer>
Beispiel: aus eigenem JavaScript
<script>
document.addEventListener('DOMContentLoaded', () => {
// Nach 5 Sekunden öffnen
setTimeout(() => iResWidget.OpenWidget(), 5000);
// An einen eigenen Button koppeln
document.getElementById('mijn-knop').addEventListener('click', () => {
iResWidget.OpenWidget();
});
});
</script>
<button id="mijn-knop">Buchen Sie einen Tisch</button>
Alternative: über DOM-Referenz
Die Methoden open(), close() und toggle() sind auch auf dem HTML-Element selbst verfügbar:
<script>
const widget = document.querySelector('ires-native-widget');
widget.open();
widget.close();
widget.toggle();
</script>
3. Deeplink: Widget mit vorausgefüllten Daten öffnen
Das Widget kann mit optionalen Parametern geöffnet werden, die den Buchungsablauf vorausfüllen. Abhängig davon, wie viele Informationen Sie mitgeben, überspringt das Widget Schritte und navigiert direkt zum richtigen Bildschirm.
Verfügbare Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
| productId | number | Produkt-ID zum Vorauswählen |
| date | string | Startdatum im Format YYYY-MM-DD (z. B. "2025-07-15") |
| dateTo | string | Enddatum im Format YYYY-MM-DD (für Tagesmodus) |
| persons | number | Anzahl der Personen |
| time | string | Gewünschte Startzeit im Format HH:MM (z. B. "14:00") |
Alle Parameter sind optional. Sie können jede Kombination verwenden.
Was passiert bei welcher Kombination?
| Mitgegebene Parameter | Ergebnis |
|---|---|
| (keine) | Widget öffnet sich auf dem Auswahlbildschirm |
| date, persons | Auswahlbildschirm mit vorausgefülltem Datum und Personen |
| productId | Produkt ist automatisch aufgeklappt, Zeitslots sichtbar |
| productId + time | Auswahl wird übersprungen, direkt zu Optionen/Checkout |
| productId + date + persons + time | Maximales Überspringen: direkt zu Optionen oder Checkout |
Beispiel: Button mit Deeplink
<!-- Nur Datum und Personen einstellen -->
<button onclick="iResWidget.OpenWidget({ date: '2025-07-15', persons: 4 })">
Für den 15. Juli reservieren (4 Personen)
</button>
<!-- Produkt vorauswählen -->
<button onclick="iResWidget.OpenWidget({ productId: 123 })">
Diese Aktivität buchen
</button>
<!-- Vollständiger Deeplink: Produkt + Datum + Personen + Zeit -->
<button onclick="iResWidget.OpenWidget({ productId: 123, date: '2025-07-15', persons: 2, time: '14:00' })">
Direkt für 14:00 Uhr buchen
</button>
Beispiel: über DOM-Referenz mit Deeplink
<script>
const widget = document.querySelector('ires-native-widget');
widget.open({
productId: 123,
date: '2025-07-15',
persons: 2,
time: '14:00'
});
</script>
Beispiel: Deeplink aus eigener Anwendung
<script>
// Aus einem Produktkatalog oder CMS
function boekProduct(productId, datum) {
iResWidget.OpenWidget({
productId: productId,
date: datum,
persons: 2
});
}
</script>
<div class="product-card">
<h3>Kanufahren auf der Amstel</h3>
<button onclick="boekProduct(456, '2025-08-01')">Reservieren</button>
</div>
<div class="product-card">
<h3>Stadtrundgang</h3>
<button onclick="boekProduct(789, '2025-08-01')">Reservieren</button>
</div>
4. URL-Deeplink: Widget über Query-Parameter öffnen
Das Widget erkennt beim Laden der Seite automatisch Query-Parameter in der URL. Dies ermöglicht es, direkte Links zu teilen, die das Widget automatisch mit vorausgefüllten Daten öffnen.
Verfügbare URL-Parameter
| Parameter | Beschreibung |
|---|---|
| ires-product | Produkt-ID |
| ires-date | Startdatum (YYYY-MM-DD) |
| ires-dateTo | Enddatum (YYYY-MM-DD) |
| ires-persons | Anzahl der Personen |
| ires-time | Startzeit (HH:MM) |
Beispiele
https://mijnsite.nl/reserveren?ires-product=123&ires-date=2025-07-15&ires-persons=4&ires-time=14:00
Nur Datum und Personen:
https://mijnsite.nl/reserveren?ires-date=2025-07-15&ires-persons=2
Nur Produkt (Widget öffnet sich mit aufgeklapptem Produkt):
https://mijnsite.nl/reserveren?ires-product=123
Verwendung in E-Mails oder Marketing
Diese URLs sind ideal für:
- E-Mail-Kampagnen: direkter Link zu einem bestimmten Produkt + Datum
- Social Media: "Buchen Sie direkt über diesen Link"
- QR-Codes: Besucher scannen und gelangen direkt in den richtigen Buchungsablauf
5. Content Security Policy (CSP)
Wenn die Website eine strikte Content Security Policy verwendet, benötigt das Widget eine Nonce, um Inline-Styles zuzulassen. Ohne Nonce werden die Styles des Widgets blockiert.
Nonce an das Widget übergeben
Fügen Sie ein <meta>-Tag mit der servergenerierten Nonce oberhalb des Widget-Skripts hinzu:
<!-- Nonce generiert durch Ihren Server (z. B. PHP, Node.js, etc.) --> <meta name="csp-nonce" content="abc123serverNonce"> <!-- Widget-Skript mit derselben Nonce --> <script nonce="abc123serverNonce" src="https://wecloudit.i-reserve.net/iResController.js"></script>
Das Widget erkennt die Nonce automatisch über:
- <meta name="csp-nonce" content="...">-Tag
- Das nonce-Attribut am Skript-Element
Minimale CSP-Header
Das Widget benötigt mindestens die folgenden CSP-Direktiven:
style-src 'self' 'nonce-<nonce>'; script-src 'self' 'nonce-<nonce>'; font-src 'self' data:; connect-src 'self' https://*.i-reserve.net;
Achtung: Font Awesome ist in das Widget-Bundle eingebaut (als Data-URI). Es sind keine externen Font-/Stylesheet-Requests an CDNs erforderlich.
6. Styling
Das Widget bringt seine eigenen Stile über Shadow DOM mit und passt sich automatisch auf Basis der Design-Einstellungen im Admin-Panel an (primaryColor, backgroundColor, textColor, etc.).
Der Floating Button steht standardmäßig unten rechts (position: fixed; bottom: 20px; right: 20px). Auf Mobilgeräten (< 480px) passt sich das Widget automatisch auf die volle Breite an.






