Feeds iCal (importación + exportación)

Actualizado el 2026-04-29

Para los canales que no tienen API (y que por tanto no pasan por Channex) se usan los feeds iCal. Funciona con: Bedandbreakfast.eu, Gites de France, Clévacances, Belvilla, Novasol, Interhome, Logis Hotels y, en realidad, cualquier plataforma que ofrezca una URL .ics.

Cómo funciona

| Dirección | Qué hace BedFlow | |---|---| | Importación | Consulta una URL .ics externa cada hora y convierte cada VEVENT en un bloqueo en /room-availability-overview. Las cancelaciones en el origen se limpian automáticamente. | | Exportación | Genera una URL .ics pública por habitación con todas las reservas + bloqueos manuales. Los sistemas externos se suscriben a ella. | | Both | Ambas a la vez (puede tener sentido para sincronización PMS a PMS). |

Configuración

  1. Abra Gestión → Feeds iCal en BedFlow
  2. Haga clic en Nuevo feed iCal
  3. Rellene:
    • Nombre: libre, p. ej. "Bedandbreakfast.eu — Habitación 4"
    • Habitación: seleccione la habitación
    • Dirección: normalmente import para bloqueos entrantes
    • iCal URL: el enlace .ics del sistema externo
  4. Guarde
  5. Haga clic en Sincronizar ahora en la columna de acciones para probar de inmediato
  6. Después el cron lo recoge cada hora

Para exportar

  1. Cree un feed con dirección export (no hace falta URL)
  2. Tras guardar, haga clic en Copiar URL de exportación en la columna de acciones
  3. Pegue esa URL en el sistema externo (p. ej. extranet de Booking.com → "Add iCal URL")

Multi-tenancy

Cada feed iCal está vinculado a una propiedad + una habitación. El TenantScope garantiza que un operador solo vea los feeds de su propia propiedad. El token de exportación de la URL pública tiene 48 caracteres y es único por feed — un token filtrado solo revela las reservas de una habitación, no las de todo el tenant.

Bajo el capó

  • Tabla: ical_feeds (property_id, room_id, direction, source_url, export_token, estado de sincronización)
  • Servicio: App\Services\Ical\IcalImportService (fetch + parse + reconcile) y App\Services\Ical\IcalExportService (genera salida RFC-5545)
  • Cron: php artisan ical:sync-imports se ejecuta cada hora vía el scheduler de Laravel
  • Ruta: GET /ical/{token}.ics — exportación pública, sin autenticación, protegida por token
  • Reconciliación: las filas importadas reciben source = "ical:{feed_id}" en room_calendar_data. En cada sincronización solo se vuelven a comparar las filas con esa misma etiqueta de origen — los bloqueos manuales, la sincronización de MyTourist o las reservas de Channex quedan intactos.

Limitaciones

  • iCal es una sincronización de solo lectura: la importación solo trae disponibilidad, no precios ni datos de huéspedes. Para integraciones OTA completas use Channex.
  • Los propios publicadores de iCal a menudo solo actualizan a diario — una reserva hecha en Bedandbreakfast.eu no llega en segundos, sino más bien entre 1 y 24 horas después.
  • Las reglas de recurrencia (RRULE) NO están soportadas. Para feeds de alojamiento eso no es problema (cada reserva = 1 VEVENT).