iCal feeds (импорт + експорт)

Bijgewerkt op 2026-05-24

За канали, които нямат API (и следователно не минават през Channex), използвате iCal feeds. Работи за: Bedandbreakfast.eu, Gites de France, Clévacances, Belvilla, Novasol, Interhome, Logis Hotels и всъщност всяка платформа, която предлага .ics URL.

Как работи

| Посока | Какво прави BedFlow | |---|---| | Импорт | Изтегля външен .ics URL всеки час и превръща всеки VEVENT в блокировка в /room-availability-overview. Анулациите при източника се почистват автоматично. | | Експорт | Генерира публичен .ics URL за всяка стая с всички bookings + ръчни блокировки. Външни системи се абонират за него. | | Both | И двете едновременно (може да е полезно за PMS-към-PMS sync). |

Setup

  1. Отворете Управление → iCal feeds в BedFlow
  2. Кликнете Нов iCal feed
  3. Попълнете:
    • Име: свободно избираемо, напр. "Bedandbreakfast.eu — Стая 4"
    • Стая: изберете коя стая
    • Посока: най-често import за входящи блокировки
    • iCal URL: .ics линкът на външната система
  4. Запазете
  5. Кликнете Sync сега в колоната с действия, за да тествате веднага
  6. Cron-ът го поема нататък всеки час

За експорт

  1. Създайте feed с посока export (URL не е нужен)
  2. След запазване кликнете Копирай export-URL в колоната с действия
  3. Поставете този URL във външната система (напр. Booking.com extranet → "Add iCal URL")

Multi-tenancy

Всеки iCal feed е свързан с един property + една стая. TenantScope гарантира, че оператор вижда само feeds на собственото си property. Export токенът в публичния URL е 48 символа дълъг и уникален за feed — изтекъл токен разкрива само резервациите на една стая, не на целия tenant.

Под капака

  • Таблица: ical_feeds (property_id, room_id, direction, source_url, export_token, sync-статус)
  • Service: App\Services\Ical\IcalImportService (fetch + parse + reconcile) и App\Services\Ical\IcalExportService (генерира RFC-5545 output)
  • Cron: php artisan ical:sync-imports работи всеки час през Laravel scheduler
  • Route: GET /ical/{token}.ics — public export, no-auth, token-защитен
  • Reconciliation: импортираните редове получават source = "ical:{feed_id}" в room_calendar_data. При всеки sync се сравняват наново само редове със същия source tag — ръчните блокировки, MyTourist sync или Channex bookings остават недокоснати.

Ограничения

  • iCal е read-only sync: импортът поема само наличност, без цени или гост-информация. За full-feature OTA интеграции използвайте Channex.
  • iCal публикаторите често обновяват само ежедневно — резервация през Bedandbreakfast.eu няма да пристигне за секунди, а след 1-24 часа.
  • Recurrence rules (RRULE) НЕ се поддържат. За accommodation feeds това не е проблем (всяка резервация = 1 VEVENT).