iCal feeds (import + export)

Bijgewerkt op 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

  1. Open Beheer → iCal feeds in BedFlow
  2. Klik Nieuwe iCal feed
  3. Vul in:
    • Naam: vrij te kiezen, bv. "Bedandbreakfast.eu — Kamer 4"
    • Kamer: selecteer welke kamer
    • Richting: meestal import voor inkomende blokkades
    • iCal URL: de .ics link van het externe systeem
  4. Sla op
  5. Klik op Sync nu in de actie-kolom om direct te testen
  6. Cron pakt 'm verder elk uur op

Voor export

  1. Maak een feed met richting export (URL niet nodig)
  2. Na opslaan klik je Kopieer export-URL in de actie-kolom
  3. 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) en App\Services\Ical\IcalExportService (genereert RFC-5545 output)
  • Cron: php artisan ical:sync-imports draait 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}" op room_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 sec­onden binnen, eerder na 1-24 uur.
  • Recurrence rules (RRULE) worden NIET ondersteund. Voor accommodation-feeds is dat geen probleem (elke booking = 1 VEVENT).