Guide calendriers
iCalendar et multicanal : synchroniser des nuits sans promettre du temps réel
Comprendre le format iCalendar, organiser plusieurs calendriers d’hébergement et contrôler fraîcheur, doublons, suppressions et accès avant de publier une disponibilité.
iCalendar est un format d’échange, pas une garantie de disponibilité
La RFC 5545 définit iCalendar comme un format indépendant des services pour représenter et échanger des événements, tâches et périodes libres ou occupées. Un fichier ou une URL .ics transporte donc des données de calendrier ; il ne dit pas à lui seul à quelle fréquence un opérateur relit la source, quelles règles de séjour sont comprises ni si une réservation externe vient d’être confirmée.
Dans l’hébergement, un événement sert souvent à bloquer une période. Il peut ne contenir ni prix, ni capacité, ni conditions d’annulation, ni identité exploitable du voyageur. Une date occupée ne suffit pas à reconstruire une offre commerciale et une date absente ne prouve pas qu’elle est réservable.
- Format : structure commune des événements
- Transport : URL ou fichier fourni par une source
- Planification : fréquence de relecture décidée par le consommateur
- Décision : disponibilité finale confirmée par le système ou l’hébergeur autorisé
Lire les champs utiles sans inventer ceux qui manquent
Pour chaque bloc VEVENT utilisé comme période occupée, contrôlez au minimum l’identifiant UID, la date de création ou mise à jour DTSTAMP, le début DTSTART et la fin DTEND. SEQUENCE peut indiquer une révision lorsqu’il est fourni. Les dates doivent être interprétées selon leur type : une valeur DATE représente une journée entière, tandis qu’une valeur DATE-TIME peut dépendre d’un fuseau ou être exprimée en UTC.
Conservez la valeur source, le fuseau interprété et la version normalisée. Si une date est invalide, si la fin précède le début ou si l’identifiant manque, placez l’événement en quarantaine au lieu de fabriquer un intervalle plausible.
| Élément | Usage opérationnel | Limite à afficher |
|---|---|---|
| UID | Reconnaître le même événement lors d’une relecture | Il n’est unique que dans le contexte prévu par l’émetteur |
| DTSTART / DTEND | Construire l’intervalle bloqué | Le type de date et le fuseau changent l’interprétation |
| DTSTAMP / LAST-MODIFIED | Tracer la fraîcheur déclarée par la source | Ce n’est pas l’heure du dernier téléchargement |
| SEQUENCE | Distinguer certaines révisions | Elle peut être absente et ne remplace pas la comparaison complète |
| STATUS | Qualifier un événement confirmé ou annulé quand fourni | Les valeurs et usages varient selon les exporteurs |
Cartographier un calendrier par logement et par canal
Un registre multicanal associe chaque URL source à un logement canonique, un fournisseur, un sens d’échange, un état actif ou suspendu et un propriétaire de synchronisation. N’utilisez jamais une même URL pour plusieurs logements par commodité et ne lancez pas deux pollers concurrents sur la même source.
Quand un channel manager ou MAESTHOM possède déjà la synchronisation, TOO NICE TO MISS ne doit pas relire les flux en parallèle. Il consomme à terme un snapshot qualifié ou reste hors du circuit. Cette règle évite les boucles d’import/export et les blocages fantômes créés lorsqu’un événement réimporté ressemble à une nouvelle réservation.
- Inventorier les logements canoniques
- Associer chaque canal à un logement exact
- Désigner un seul propriétaire de synchronisation
- Définir le sens import, export ou lecture seule
- Tracer la dernière réussite et la prochaine échéance
- Prévoir la désactivation et le rollback sans supprimer l’historique
Mettre en place une relecture incrémentale et idempotente
Une tâche planifiée récupère la source avec une durée maximale bornée et réutilise ETag ou Last-Modified lorsque le serveur les fournit. Elle valide la taille, le type de contenu et la syntaxe avant normalisation. La clé de déduplication combine l’identifiant de source et le UID ; une modification met à jour l’événement existant au lieu d’ajouter un second blocage.
Le prochain snapshot n’est publié qu’après validation complète. En cas d’échec, le dernier snapshot connu reste identifiable avec son âge, mais il ne doit pas être prolongé silencieusement au-delà de la règle de fraîcheur. Les erreurs temporaires utilisent un retry avec backoff ; les erreurs de schéma vont en quarantaine et nécessitent une revue bornée.
- Checkpoint par source, jamais global à tous les logements
- Déduplication source + UID
- Import atomique puis bascule du manifeste courant
- Métriques succès, échec, âge, événements créés/modifiés/supprimés
- Replay manuel limité à une source et une fenêtre de dates
Traiter suppressions, annulations et délais de propagation
Un événement absent lors d’une seule lecture ne doit pas être supprimé sans règle : la source peut être tronquée, temporairement indisponible ou limitée à une fenêtre. Comparez la couverture annoncée, l’état STATUS lorsqu’il existe et plusieurs lectures selon le contrat du fournisseur. Une suppression confirmée doit libérer le blocage dans le système canonique, puis être propagée sans boucle vers les sorties autorisées.
Les plateformes documentent leurs propres délais. Airbnb indique par exemple une actualisation automatique de ses calendriers importés toutes les trois heures et précise que certains blocages définis ailleurs peuvent ne pas être importés. Ce fait décrit Airbnb au 24 août 2026 ; il ne doit pas être généralisé à tous les opérateurs ni présenté comme du temps réel.
- Afficher l’heure de dernière synchronisation réussie
- Distinguer source indisponible et calendrier réellement vide
- Vérifier manuellement avant d’ouvrir un dernier stock incertain
- Conserver une procédure de fermeture rapide en cas de double réservation potentielle
Protéger les URL de calendrier et les données de séjour
La RFC 5545 rappelle que les informations de calendrier peuvent être sensibles. Une URL d’export doit être traitée comme un accès confidentiel : ne la placez ni dans une page publique, ni dans les paramètres d’une URL de navigation, ni dans les journaux applicatifs ou analytics. Stockez-la chiffrée côté serveur, limitez les personnes et services autorisés et prévoyez sa rotation ou révocation.
Le contenu importé est réduit au besoin opérationnel. Un site-guide n’a besoin d’aucune adresse de voyageur, note privée ou description de réservation. Pour afficher une disponibilité publique, publiez un snapshot agrégé ou un état de dates, jamais le flux iCalendar brut.
- Aucun lien .ics confidentiel dans le HTML ou le navigateur
- Journaux expurgés des URL et descriptions
- Accès par logement et par service
- Rotation après partage accidentel ou changement de prestataire
- Cache privé ou no-store pour les réponses authentifiées
Checklist avant de qualifier une disponibilité multicanal
La synchronisation réduit certaines doubles saisies, mais ne remplace pas la confirmation du canal qui possède le stock. Avant de publier une nuit comme disponible, vérifiez le propriétaire de synchronisation, l’âge du dernier succès, la couverture de dates, les erreurs en quarantaine et les éventuels holds locaux.
TOO NICE TO MISS n’importe actuellement aucun flux iCalendar public. Ce guide décrit une méthode et les conditions d’un futur connecteur ; il ne prouve ni intégration OTA, ni inventaire réel, ni réservation active.
- Logement canonique et source identifiés
- Dernière réussite dans la fraîcheur autorisée
- Aucun second poller sur la même source
- Fuseaux et journées entières testés
- Suppressions et annulations réconciliées
- URL source absente des sorties publiques
- Demande présentée comme à confirmer
Sources
- RFC 5545 — iCalendar · RFC Editor / IETF · vérifié le 24 août 2026
- Synchronisation du calendrier d’hôte avec d’autres sites · Airbnb · vérifié le 24 août 2026
