Feeds iCal (importação + exportação)

Atualizado em 2026-04-29

Para canais que não têm API (e que, portanto, não passam pelo Channex) usa feeds iCal. Funciona com: Bedandbreakfast.eu, Gites de France, Clévacances, Belvilla, Novasol, Interhome, Logis Hotels e, na verdade, qualquer plataforma que disponibilize um URL .ics.

Como funciona

| Direção | O que o BedFlow faz | |---|---| | Importação | Consulta um URL .ics externo a cada hora e converte cada VEVENT num bloqueio em /room-availability-overview. Cancelamentos na origem são limpos automaticamente. | | Exportação | Gera um URL .ics público por quarto com todas as reservas + bloqueios manuais. Os sistemas externos subscrevem-no. | | Both | Ambos ao mesmo tempo (pode fazer sentido para sincronização PMS a PMS). |

Configuração

  1. Abra Gestão → Feeds iCal no BedFlow
  2. Clique em Novo feed iCal
  3. Preencha:
    • Nome: livre, p. ex. "Bedandbreakfast.eu — Quarto 4"
    • Quarto: selecione o quarto
    • Direção: normalmente import para bloqueios recebidos
    • iCal URL: o link .ics do sistema externo
  4. Guarde
  5. Clique em Sincronizar agora na coluna de ações para testar de imediato
  6. Depois o cron trata do resto, de hora a hora

Para exportar

  1. Crie um feed com direção export (não precisa de URL)
  2. Depois de guardar, clique em Copiar URL de exportação na coluna de ações
  3. Cole esse URL no sistema externo (p. ex. extranet do Booking.com → "Add iCal URL")

Multi-tenancy

Cada feed iCal está ligado a uma propriedade + um quarto. O TenantScope garante que um operador só vê os feeds da sua própria propriedade. O token de exportação no URL público tem 48 caracteres e é único por feed — um token divulgado revela apenas as reservas de um quarto, não as de todo o tenant.

Por baixo do capô

  • Tabela: ical_feeds (property_id, room_id, direction, source_url, export_token, estado de sincronização)
  • Serviço: App\Services\Ical\IcalImportService (fetch + parse + reconcile) e App\Services\Ical\IcalExportService (gera output RFC-5545)
  • Cron: php artisan ical:sync-imports corre a cada hora via o scheduler do Laravel
  • Rota: GET /ical/{token}.ics — exportação pública, sem autenticação, protegida por token
  • Reconciliação: as linhas importadas recebem source = "ical:{feed_id}" em room_calendar_data. Em cada sincronização só são recomparadas as linhas com essa mesma etiqueta de origem — bloqueios manuais, a sincronização do MyTourist ou reservas do Channex ficam intactos.

Limitações

  • O iCal é uma sincronização só de leitura: a importação traz apenas disponibilidade, sem preços nem dados de hóspedes. Para integrações OTA completas use o Channex.
  • Os próprios publicadores de iCal muitas vezes só atualizam diariamente — uma reserva feita no Bedandbreakfast.eu não chega em segundos, mas sim após 1 a 24 horas.
  • Regras de recorrência (RRULE) NÃO são suportadas. Para feeds de alojamento isso não é problema (cada reserva = 1 VEVENT).