Estruturação da disponibilidade em feeds

Como escolher um formato de disponibilidade

Há duas maneiras de especificar dados de disponibilidade: (1) espaços abertos ou (2) recorrência. Escolha apenas um método para usar em todos os seus comerciantes e serviços. Depois de selecionar um método, mantenha-o durante toda a integração (feeds, servidor de agendamento e atualizações em tempo real).

Use o guia a seguir para determinar qual formato de disponibilidade é o mais adequado:

  • No sistema, você armazena a disponibilidade como slots explícitos, por exemplo, das 8h às 8h30?
  • No seu sistema, você armazena disponibilidade em um formato recorrente, o que significa que os comerciantes têm serviços que ocorrem com frequência consistente com poucos desvios? Por exemplo, os slots são repetidos a cada 15 minutos das 9h às 17h, e apenas um assento está disponível a cada incremento de 15 minutos.
  • Para os serviços dos seus comerciantes, é possível haver mais de um espaço aberto por vez? Por exemplo, 30 espaços abertos para uma classe
  • Nenhuma das opções acima se aplica?
    • Use o Spots abertos
    • Observação: embora o uso da recorrência seja mais eficiente e possa resultar em tamanhos de feed menores, se seu modelo de dados não for compatível com a recorrência, não será recomendável usá-la, porque será necessário calcular novamente o número inteiro de slots recorrentes para cada atualização em tempo real.

    Horários disponíveis

    Definições de parâmetros:

    • spot_open: o número de espaços atualmente disponíveis para esta entrada de disponibilidade.
    • spot_total: o número total de espaços que o comerciante tem para essa configuração, incluindo aqueles que não estão disponíveis.

    O método Spots do Spot indica explicitamente todas as disponibilidades de slot e é compatível com o modelo de ter vários espaços para o mesmo serviço. Esses dois parâmetros trabalham juntos para criar uma representação digital da capacidade do serviço.

    Quando uma reserva acontece, o número de spot_open deve diminuir em 1 por meio de uma atualização em tempo real (o número de spot_total deve permanecer o mesmo). Quando spot_open = 0, o slot não será mais exibido.

    Exemplos de serviços

    Aula de ioga ou salão de beleza com as seguintes plantas e nenhuma reserva ativa

    Figura 1: planta baixa sem reservas ativas

    O feed de disponibilidade de dois slots desses comerciantes ficaria assim:

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

    Exemplos de serviços com um agendamento

    Figura 2:planta baixa com uma reserva ativa

    Agora um usuário reserva um dos locais. Quando isso acontece, uma atualização em tempo real é emitida para atualizar a disponibilidade. No próximo feed de disponibilidade diária, essa reserva deve ser refletida. O feed de disponibilidade para esses comerciantes teria que diminuir o spot_open em 1 para o espaço de 1o de setembro de 2018 às 16:00:00 GMT. O horário de 1o de setembro de 2018 às 20:00:00 GMT não foi alterado.

    Snippet de feed com um agendamento

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

    Recorrência

    Definições de parâmetros

    • A recorrência é a representação de slots de disponibilidade recorrentes e consistentes.
    • repetir_até_sec: o carimbo de data/hora UTC do horário de término do último slot em que a disponibilidade é repetida até.
    • repete_every_sec: o número de segundos entre slots de disponibilidade sucessivos. Por exemplo, se restart_every_sec = 1800 (30 minutos) e o start_sec começa às 9h, os slots são repetidos a cada 30 minutos às 9h, 9h30, 10h etc.
      • Observação: não é necessário especificar spot_open e spot_total. Eles são considerados 1, a menos que haja um schedule_exception.

    O método de recorrência indica a disponibilidade diária de serviços que ocorrem em intervalos regulares, por exemplo, um serviço que ocorre a cada 30 minutos, das 9h às 17h, todos os dias. Com a recorrência, você especifica a duração do slot, a primeira vez no dia em que ele ocorre, a frequência com que esse slot deve ser repetido e, quando no mesmo dia, ele deve parar de se repetir. Observação: é necessário especificar um novo conjunto de slots recorrentes para cada dia separadamente. Se um horário já estiver reservado no intervalo de tempo, você especificará uma exceção de programação. Por exemplo, repita a cada meia hora das 9h às 21h, exceto das 11h às 11h30. Cada serviço terá as próprias exceções de recorrência e programação.

    Exemplos de serviços

    Um salão de beleza tem a seguinte planta baixa e nenhuma reserva ativa

    Figura 3: plantas baixas sem reservas ativas. Supõe que apenas um lugar está aberto por serviço (por exemplo, Sally oferece serviços de corte de cabelo a cada 30 minutos, mas só pode participar de um cliente por vez).

    O feed de disponibilidade de 1 slot desses comerciantes seria assim:

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

    Exemplos de serviços com um agendamento

    Figura 4:plantas baixas com uma reserva ativa. Supõe que apenas um lugar está aberto por serviço (por exemplo, Sally oferece serviços de corte de cabelo a cada 30 minutos, mas só pode participar de um cliente por vez).

    Agora imagine que um usuário reserva um corte com Sally às 12h30. Quando isso acontece, uma atualização em tempo real é emitida para atualizar a disponibilidade. No próximo feed de disponibilidade diária, essa reserva será refletida. O feed de disponibilidade desses comerciantes teria uma exceção de programação entre 12h30 e 13h00 para um serviço com duração de 30 minutos.

    Snippet de feed com um agendamento:

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