iCal feeds (import + export)
Aktualisiert am 2026-04-29
Voor channels die geen API hebben (en dus niet via Channex lopen) gebruik je iCal feeds. Werkt voor: Bedandbreakfast.eu, Gites de France, Clévacances, Belvilla, Novasol, Interhome, Logis Hotels en eigenlijk elke partij die een .ics URL aanbiedt.
Hoe het werkt
| Richting | Wat doet BedFlow |
|---|---|
| Import | Trekt een externe .ics URL elk uur op en zet elke VEVENT om in een blokkade in /room-availability-overview. Cancellaties bij de bron worden automatisch opgeruimd. |
| Export | Genereert een publieke .ics URL per kamer met alle bookings + manuele blokkades. Externe systemen abonneren erop. |
| Both | Beide tegelijk (kan zinvol zijn voor PMS-naar-PMS sync). |
Setup
- Open Beheer → iCal feeds in BedFlow
- Klik Nieuwe iCal feed
- Vul in:
- Naam: vrij te kiezen, bv. "Bedandbreakfast.eu — Kamer 4"
- Kamer: selecteer welke kamer
- Richting: meestal
importvoor inkomende blokkades - iCal URL: de
.icslink van het externe systeem
- Sla op
- Klik op Sync nu in de actie-kolom om direct te testen
- Cron pakt 'm verder elk uur op
Voor export
- Maak een feed met richting
export(URL niet nodig) - Na opslaan klik je Kopieer export-URL in de actie-kolom
- Plak die URL in het externe systeem (bv. Booking.com extranet → "Add iCal URL")
Multi-tenancy
Elke iCal feed is gekoppeld aan één property + één kamer. De TenantScope zorgt ervoor dat een operator alleen de feeds van zijn eigen property ziet. Het export-token in de publieke URL is 48 tekens lang en uniek per feed — een gelekt token onthult enkel de bookings van één kamer, niet van de hele tenant.
Onder de motorkap
- Tabel:
ical_feeds(property_id,room_id,direction,source_url,export_token, sync-status) - Service:
App\Services\Ical\IcalImportService(fetch + parse + reconcile) enApp\Services\Ical\IcalExportService(genereert RFC-5545 output) - Cron:
php artisan ical:sync-importsdraait elk uur via Laravel scheduler - Route:
GET /ical/{token}.ics— public export, no-auth, token-protected - Reconciliatie: geïmporteerde rows krijgen
source = "ical:{feed_id}"oproom_calendar_data. Bij elke sync worden alleen rows van datzelfde sourcetag opnieuw vergeleken — manuele blokkades, MyTourist sync of Channex bookings blijven onaangetast.
Limitaties
- iCal is een read-only sync: import neemt enkel beschikbaarheid mee, geen prijzen of gastinfo. Voor full-feature OTA-koppelingen gebruik je Channex.
- iCal-publishers updaten zelf vaak maar dagelijks — een booking via Bedandbreakfast.eu komt dus niet binnen seconden binnen, eerder na 1-24 uur.
- Recurrence rules (RRULE) worden NIET ondersteund. Voor accommodation-feeds is dat geen probleem (elke booking = 1 VEVENT).