Strutturazione della disponibilità nei feed

Scelta di un formato di disponibilità

Esistono due modi per specificare i dati sulla disponibilità: (1) Spot aperti o (2) Ricorrenza. Scegli un solo metodo da utilizzare per tutti i commercianti e i servizi. Una volta selezionato un metodo, devi seguirlo per l'intera integrazione (feed, server di prenotazione e aggiornamenti in tempo reale).

Consulta questa guida per determinare quale formato di disponibilità è più adatto:

  • Nel tuo sistema memorizzi la disponibilità come slot espliciti, ad esempio 8:00 - 8:30?
  • Nel tuo sistema, memorizzi la disponibilità in un formato ricorrente, ovvero i commercianti hanno servizi che si verificano con frequenza costante e con poche deviazioni? Ad esempio, gli slot si ripetono ogni 15 minuti dalle 9:00 alle 17:00 e è disponibile un solo posto per ogni incremento di 15 minuti.
  • Per i servizi dei tuoi commercianti, possono esserci più di uno spazio aperto alla volta? Ad esempio, 30 posti liberi per un corso
  • Nessuno dei casi precedenti è applicabile?
    • Utilizza Spot aperti
    • Nota: sebbene l'utilizzo della ricorrenza sia più efficiente e possa comportare dimensioni del feed più piccole, se il tuo modello di dati non supporta la ricorrenza in modo nativo, non è consigliabile utilizzare la ricorrenza, poiché dovrai ricalcolare l'intera giornata di slot ricorrenti per ogni aggiornamento in tempo reale.

    Posti aperti

    Definizioni dei parametri:

    • spot_open: il numero di posti attualmente disponibili per questa voce sulla disponibilità.
    • spot_total: il numero totale di spot a disposizione del commerciante per questa configurazione, inclusi quelli non disponibili.

    Il metodo Spot aperti indica esplicitamente la disponibilità di ogni slot e supporta il modello con più spot per lo stesso servizio. Questi due parametri interagiscono per creare una rappresentazione digitale della capacità del servizio.

    Quando viene effettuata una prenotazione, il numero di spot_open deve diminuire di 1 tramite un aggiornamento in tempo reale (il numero di spot_total deve rimanere invariato). Quando spot_open è pari a 0, l'area non dovrebbe più essere visualizzata.

    Servizi di esempio

    Una lezione di yoga o un salone di bellezza hanno le seguenti planimetrie e non sono previste prenotazioni attive

    Figura 1: planimetria senza prenotazioni attive

    Il feed di disponibilità per 2 slot presso questi commercianti avrebbe il seguente aspetto:

    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",
                }
              ]
        }
        

    Esempi di servizi con una prenotazione

    Figura 2: planimetria con una prenotazione attiva

    Ora un utente prenota uno degli spot. Quando viene effettuata una prenotazione, viene eseguito un aggiornamento in tempo reale per aggiornare la disponibilità. Questa prenotazione dovrebbe essere visibile nel successivo feed di disponibilità giornaliero. Per il feed della disponibilità di questi commercianti l'offerta di spot_open sarà diminuita del 1° per lo slot GMT del 1° settembre 2018 alle 16:00:00. Lo slot GMT del 1° settembre 2018 alle 20:00:00 rimane invariato.

    Snippet di feed con una prenotazione

    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",
                }
              ]
    }
        

    Ricorrenza

    Definizioni dei parametri

    • ricorrenza: la rappresentazione di slot di disponibilità che si ripetono in modo coerente.
    • ripeti_until_sec: il timestamp UTC dell'ora di fine dell'ultimo slot in cui si ripete la disponibilità.
    • ripeti_ogni_sec: il numero di secondi tra slot di disponibilità successivi. Ad esempio, se ripeti_ogni_sec = 1800 (30 minuti) e start_sec inizia alle 09:00, gli slot si ripeteranno ogni 30 minuti alle 09:00, alle 09:30, alle 10:00 e così via.
      • Nota: non è necessario specificare spot_open e spot_total, poiché vengono entrambi considerati 1, a meno che non sia presente un'eccezione schedule_exception.

    Il metodo della ricorrenza indica la disponibilità su base giornaliera per i servizi che si verificano a intervalli regolari, ad esempio un servizio che viene eseguito ogni 30 minuti ogni giorno dalle 9:00 alle 17:00. Con la ricorrenza, specifichi la durata dell'area, la prima volta nel giorno in cui si verifica l'area, la frequenza con cui l'area deve ripetersi e quando, nello stesso giorno, deve interrompersi. Nota: un nuovo insieme di slot ricorrenti deve essere specificato separatamente per ogni giorno. Se nell'intervallo di tempo è già stata prenotata un'area annuncio, devi specificare un'eccezione di pianificazione. Ad esempio, ripeti ogni mezz'ora dalle 9:00 alle 21:00 tranne dalle 11:00 alle 11:30. Ogni singolo servizio avrà le proprie eccezioni relative alla ricorrenza e alla programmazione.

    Servizi di esempio

    Un salone di bellezza ha la seguente planimetria e non ha prenotazioni attive

    Figura 3: planimetrie senza prenotazioni attive. Presuppone un solo posto aperto per servizio (ad esempio, Sally offre servizi di taglio capelli ogni 30 minuti, ma può assistere un solo cliente alla volta.)

    Il feed di disponibilità per 1 area annuncio presso questi commercianti avrebbe il seguente aspetto:

    Snippet di feed:

    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
                }
              }
            ]
        }
        

    Esempi di servizi con una prenotazione

    Figura 4: planimetrie con una prenotazione attiva. Presuppone un solo posto aperto per servizio (ad esempio, Sally offre servizi di taglio capelli ogni 30 minuti, ma può assistere un solo cliente alla volta.)

    Ora immagina che una utente prenota un taglio di capelli con Sara alle 12:30. Quando viene effettuata una prenotazione, viene eseguito un aggiornamento in tempo reale per aggiornare la disponibilità. Questa prenotazione dovrebbe essere visibile nel successivo feed di disponibilità giornaliero. Il feed della disponibilità per questi commercianti prevede un'eccezione alla pianificazione tra le 12:30 e le 13:00 per un servizio della durata di 30 minuti.

    Snippet di feed con una prenotazione:

    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
                      }
                    }
                  ],
                }
              ]
        }