Reserve with Google
Gäste reservieren direkt aus der Google-Suche oder Google Maps — Onboard ist der hinterlegte Reservierungspartner und legt die Buchung in Echtzeit an.
Wenn ein Gast nach einem teilnehmenden Restaurant sucht, blendet Google neben Adresse und Öffnungszeiten einen „Tisch reservieren"-Button ein. Der Gast wählt Personenzahl und Uhrzeit innerhalb von Google — die Buchung selbst läuft über Onboard und erscheint sekundenschnell im Live-Tischplan.
Googles Buchungs-Partner-Programm. Die Buchungen werden Onboard als Reservierungspartner zugeschrieben ("Anfragen über den Partner") und in der Quellen-Spalte mit google_reserve markiert.
Architektur
Die Integration besteht aus zwei Richtungen: Google crawlt drei Feeds mit Restaurantdaten, Services und Verfügbarkeit; Google ruft den Onboard-Booking-Server auf, sobald ein Gast bucht oder eine Buchung ändert.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| merchants feed | GET | — | — | Ein Eintrag pro freigeschaltetem Standort — Adresse, Place-ID, Öffnungszeiten. |
| services feed | GET | — | — | Ein Service pro aktivem Reservierungstyp (Innen, Terrasse, Lounge …). Inaktive Standorte zeigen einen Fallback-Service "Dine-in". |
| availability feed | GET | — | — | 30 Tage × geprüfte Gruppengrößen × Reservierungstypen. Google ruft diesen Feed regelmäßig ab. |
| booking server | POST | — | — | Endpoints für Liveness-Check, Verfügbarkeit, Buchung anlegen, ändern, abfragen, auflisten — HTTP-Basic-Auth. |
Reservierungstypen werden zu Google-Services
Der Tab-Bereich im Google-Buchungsdialog („Restaurant / Außenplätze / Lounge") wird aus den aktiven Reservierungstypen gespeist. Jeder Typ wird zu einem Service-Eintrag im Services-Feed. Der Verfügbarkeits-Feed probiert pro Typ — so erscheint „Terrasse 18:30" nur, wenn ein außengemappter Tisch tatsächlich frei ist.
Echtzeit-Verfügbarkeit
Sobald über das öffentliche Widget oder das Dashboard ein Tisch belegt wird, sendet Onboard ein notifyAvailabilityChange() an Googles mapsbooking.googleapis.com. Der frische Slot verschwindet binnen Sekunden aus dem Reserve-Dialog — die 15-Minuten-Sync-Cron bleibt als Sicherheitsnetz.
Datenmodell
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| locations.rwg_enabled | boolean | — | — | Pro Standort umlegbar. |
| locations.google_place_id | string | — | — | Google-My-Business-Place-ID des Standorts (vom Betreiber gepflegt). |
| locations.rwg_merchant_id | uuid | — | — | Partner-seitige ID, die wir an Google liefern. Standard: die Standort-UUID. |
| reservations.google_booking_id | string | — | — | Opaker Google-Buchungs-Identifier. Doppelt als Idempotenz-Schlüssel. |
| reservations.source = 'google_reserve' | enum value | — | — | Setzt sich automatisch für jede über Google angelegte Buchung. Filterbar in Reports. |
Restaurant freischalten
- 1
Reservierungstypen aktivieren
Stelle sicher, dass die relevanten Typen (Innen, Terrasse …) auf Tische gemappt sind. Die Google-Integration spiegelt exakt, was das Widget zeigt. - 2
Integrations-Seite öffnen
„Reservierungen → Integrationen → Google" — sichtbar für Admin- und Manager-Rollen. - 3
Standort einschalten und Place-ID hinterlegen
Place-ID findest du im Google-Place-ID-Finder. Onboard validiert das Format vor dem Speichern. - 4
Auf den nächsten Crawl warten
Google ruft die Feeds typischerweise alle paar Stunden ab. Verfügbarkeits-Änderungen werden zusätzlich alle 15 Minuten gepusht.
Endpunkte (technische Referenz)
Alle Endpoints liegen unter /api/google-reservations/.... Feeds sind öffentlich (keine personenbezogenen Daten), Booking-Endpoints sitzen hinter HTTP-Basic-Auth (GOOGLE_RWG_BASIC_USER / GOOGLE_RWG_BASIC_PASS). Die outbound Pushes nutzen einen GOOGLE_RWG_SERVICE_ACCOUNT_JSON. Solange diese Umgebungsvariablen nicht gesetzt sind, antwortet der Booking-Server mit 503 und der Notifier loggt fire-and-forget — bequem für Staging-Setups.