Structurer la disponibilité dans les flux

Choisir un format de disponibilité

Vous pouvez spécifier les données de disponibilité de deux manières: (1) Spots Open (Spots ouverts) ou (2) Recurrence (Récurrence). Choisissez une seule méthode pour tous vos marchands et services. Une fois que vous avez sélectionné une méthode, vous devez vous en occuper pendant toute l'intégration (flux, serveur de réservation et mises à jour en temps réel).

Le guide suivant vous aidera à déterminer le format de disponibilité le plus adapté:

  • Dans votre système, stockez-vous la disponibilité sous forme d'emplacements explicites, par exemple de 8h à 8h30 ?
  • Stockez-vous la disponibilité dans un format récurrent, ce qui signifie que les marchands proposent des services à une fréquence constante avec quelques écarts ? Par exemple, les emplacements se répètent toutes les 15 minutes entre 9h et 17h, et un seul siège est disponible pour chaque tranche de 15 minutes.
  • Existe-t-il plusieurs places libres à la fois pour les services de vos marchands ? Par exemple, 30 emplacements libres pour un cours.
  • Aucune des propositions ci-dessus ?
    • Utilisez Spots Open.
    • Remarque: L'utilisation de la récurrence est plus efficace et peut entraîner une réduction de la taille des flux. Toutefois, si votre modèle de données n'est pas compatible avec la récurrence de manière native, il n'est pas recommandé d'utiliser cette récurrence, car vous devrez recalculer la journée entière d'emplacements récurrents pour chaque mise à jour en temps réel.

    Spots Open

    Définitions des paramètres:

    • spot_open: nombre de places actuellement disponibles pour cette entrée de disponibilité.
    • spot_total: nombre total d'emplacements que le marchand possède pour cette configuration, y compris ceux qui ne sont pas disponibles.

    La méthode Spots Open indique explicitement chaque disponibilité des emplacements et accepte le modèle d'avoir plusieurs emplacements pour le même service. Ces deux paramètres fonctionnent conjointement pour former une représentation numérique de la capacité du service.

    Lorsqu'une réservation a lieu, le nombre de spots_open doit diminuer de 1 via une mise à jour en temps réel (le nombre de places_total doit rester le même). Dès que spot_open est défini sur 0, l'emplacement ne doit plus s'afficher.

    Exemples de services

    Un cours de yoga ou un salon de beauté proposent les plans d'étage suivants et aucune réservation active

    Figure 1:Plan d'étage sans réservation active

    Le flux de disponibilité pour deux créneaux horaires chez ces marchands se présentera comme suit:

    JSON

        {
          "availability": [
                {
                  "spots_total": 6,
                  "spots_open": 6,
                  "duration_sec": 3600,
                  "service_id": "1001",
                  "start_sec": 1535817600, # Sept 1, 2018 4:00:00 PM GMT
                  "merchant_id": "1001"
                },
                {
                  "spots_total": 6,
                  "spots_open": 6,
                  "duration_sec": 3600,
                  "service_id": "1001",
                  "start_sec": 1535832000, # Sept 1, 2018 8:00:00 PM GMT
                  "merchant_id": "1001",
                }
              ]
        }
        

    Exemples de services avec réservation

    Figure 2:Plan d'étage avec une réservation active

    Un utilisateur réserve l'un de ces emplacements. Lorsqu'une réservation a lieu, une mise à jour en temps réel est publiée pour actualiser la disponibilité. Cette réservation devrait apparaître dans le prochain flux de disponibilité quotidien. Dans les flux de disponibilité de ces marchands, le champ "spots_open" sera décrémenté de 1 pour l'emplacement GMT du 1er septembre 2018 à 16h00. Le créneau du 1er septembre 2018 à 20h00 GMT reste le même.

    Extrait de flux avec réservation

    JSON

        {
          "availability": [
                {
                  "spots_total": 6,
                  "spots_open": 5,
                  "duration_sec": 3600,
                  "service_id": "1001",
                  "start_sec": 1535817600, # Sept 1, 2018 4:00:00 PM GMT
                  "merchant_id": "1001"
                },
                {
                  "spots_total": 6,
                  "spots_open": 6,
                  "duration_sec": 3600,
                  "service_id": "1001",
                  "start_sec": 1535832000, # Sept 1, 2018 8:00:00 PM GMT
                  "merchant_id": "1001",
                }
              ]
    }
        

    Récurrence

    Définitions des paramètres

    • Récurrence: représentation des créneaux de disponibilité qui se répètent régulièrement.
    • Par exemple: horodatage UTC du dernier emplacement jusqu'au moment où la disponibilité se répète.
    • répète_every_sec: nombre de secondes entre les créneaux de disponibilité successifs. Par exemple, si le paramètre répète_every_sec = 1 800 (30 minutes) et la valeur start_sec commence à 9h, les emplacements se répètent toutes les 30 minutes à 9h, 9h30, 10h, etc.
      • Remarque: Il n'est pas nécessaire de spécifier les valeurs "spot_open" et "spot_total", qui sont toutes deux considérées comme égales à 1, sauf en cas d'exception "schedule_exception".

    La méthode de récurrence indique la disponibilité quotidienne des services qui s'exécutent à intervalles réguliers (par exemple, un service qui se produit toutes les 30 minutes de 9h à 17h chaque jour). Avec la récurrence, vous spécifiez la durée de l'emplacement, la première fois qu'il se produit le jour où il s'exécute, la fréquence à laquelle il se répète et à quelle heure ce même jour doit-il cesser d'être répété. Remarque: Un nouvel ensemble d'emplacements récurrents doit être spécifié pour chaque jour séparément. Si un créneau est déjà réservé au cours de la période, vous devez indiquer une exception de planification. Par exemple, répétez ces opérations toutes les demi-heures entre 9h et 21h, sauf entre 11h et 11h30. Chaque service possède ses propres exceptions de récurrence et de planification.

    Exemples de services

    Un salon de beauté a opté pour le plan d'étage suivant, mais aucune réservation active

    Figure 3 : Plans d'étages sans réservation active Admet qu'un seul établissement est ouvert par service (par exemple, Sally propose des services de coupe de cheveux toutes les 30 minutes, mais ne peut participer qu'à un client à la fois).

    Le flux disponible pour un poste chez ces marchands se présentera comme suit:

    Extrait de flux :

    JSON

        {
        "availability": [
              {
                "merchant_id": "1001",
                "service_id": "1001",  # haircut
                "start_sec": 1493888400, # May 4, 2017 9:00:00 AM GMT
                "duration_sec": 1800,
                "recurrence": {
                  "repeat_every_sec": 1800,
                  "repeat_until_sec": 1493915400 # May 4, 2017 4:30:00 PM GMT
                }
              }
            ]
        }
        

    Exemples de services avec réservation

    Figure 4 : Plans d'étages avec une réservation active Admet qu'un seul établissement est ouvert par service (par exemple, Sally propose des services de coupe de cheveux toutes les 30 minutes, mais ne peut participer qu'à un client à la fois).

    Imaginons maintenant qu'un utilisateur réserve une coupe de cheveux avec Sally à 12h30. Lorsqu'une réservation a lieu, une mise à jour en temps réel est publiée pour actualiser la disponibilité. Cette réservation devrait apparaître dans le prochain flux de disponibilité quotidien. Le flux de disponibilité pour ces marchands aurait une exception de planification pour la durée de service d'une durée de 30 minutes entre 12h30 et 13h.

    Extrait de flux avec réservation :

    JSON

        {
          "availability": [
                {
                  "merchant_id": "1001",
                  "service_id": "1001",
                  "start_sec": 1493888400, # May 4, 2017 9:00:00 AM GMT
                  "duration_sec": 1800,
                  "recurrence": {
                    "repeat_every_sec": 1800,
                    "repeat_until_sec": 1493915400 # May 4, 2017 4:30:00 PM GMT
                  },
                  "schedule_exception": [
                    {
                      "time_range": {
                        "begin_sec": 1493901000, # May 4, 2017 12:30:00 PM GMT
                        "end_sec": 1493902800 # May 4, 2017 1:00:00 PM GMT
                      }
                    }
                  ],
                }
              ]
        }