Como estruturar a disponibilidade nos feeds

Como escolher um formato de disponibilidade

Há duas maneiras de especificar dados de disponibilidade: (1) Vagas abertas 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, ele precisa ser usado para toda a integração (feeds, servidor de reservas e atualizações em tempo real).

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

  • No seu sistema, você armazena a disponibilidade como intervalos explícitos, por exemplo, 8h00 - 8h30?
  • No seu sistema, você armazena a disponibilidade em um formato recorrente, ou seja, os comerciantes têm serviços que ocorrem com frequência consistente com poucos desvios? Por exemplo, os espaços são repetidos a cada 15 minutos, das 9h às 17h, e apenas um assento está disponível em cada incremento de 15 minutos.
  • Para os serviços dos comerciantes, pode haver mais de um lugar aberto por vez? Por exemplo, 30 vagas abertas para uma turma
  • Nenhuma das opções acima se aplica?
    • Use Horários disponíveis
    • Observação: embora o uso da recorrência seja mais eficiente e possa resultar em tamanhos de feed menores, se o modelo de dados não tiver suporte nativo à recorrência, não é recomendado usar a recorrência, porque será necessário recalcular o valor de todo o dia de slots recorrentes para cada atualização em tempo real.

    Horários disponíveis

    Definições de parâmetro:

    • spots_open: o número de vagas disponíveis no momento para esta entrada de disponibilidade.
    • spots_total: o número total de vagas que o comerciante tem para essa configuração, incluindo as que não estão disponíveis.

    O método Spots Open indica explicitamente todas as vagas disponíveis e oferece suporte ao 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 é feita, o número de spots_open diminui em 1 por uma atualização em tempo real. O número de spots_total permanece o mesmo. Quando spots_open = 0, o slot não aparece mais.

    Exemplos de serviços

    Uma aula de ioga ou um salão de beleza têm os seguintes planos de piso e nenhuma reserva ativa

    Figura 1: planta do andar sem reservas ativas

    O feed de disponibilidade para dois espaços desses comerciantes seria 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",
                }
              ]
        }
        

    Exemplo de serviços com uma reserva

    Figura 2:planta baixa com um agendamento ativo

    Agora um usuário reserva um dos lugares. Quando uma reserva é feita, uma atualização em tempo real é emitida para atualizar a disponibilidade. No próximo feed de disponibilidade diária, essa reserva vai aparecer. O feed de disponibilidade desses comerciantes teria spots_open decrementado em 1 para o horário de 1º de setembro de 2018 às 16h00 GMT O horário de 1 de setembro de 2018 às 20h00 GMT não vai mudar.

    Snippet do feed com uma reserva

    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âmetro

    • recorrência: a representação de espaços disponíveis recorrentes.
    • repeat_until_sec: o carimbo de data/hora UTC do horário de término do último intervalo em que a disponibilidade se repete.
    • repeat_every_sec: o número de segundos entre os horários disponíveis sucessivos. Por exemplo, se repeat_every_sec = 1800 (30 minutos) e o start_sec começar às 9h, os espaços vão se repetir a cada 30 minutos às 9h, 9h30, 10h e assim por diante.
      • Observação: não é necessário especificar spots_open e spots_total. Eles são considerados iguais a 1, a menos que haja uma 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 intervalo, a primeira vez no dia em que ele ocorre, a frequência com que ele deve ser repetido e quando ele deve parar de ser repetido no mesmo dia. Observação: um novo conjunto de horários recorrentes precisa ser especificado para cada dia separadamente. Se um slot já estiver reservado no período, você vai 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 individual terá suas próprias recorrências e exceções de programação.

    Exemplos de serviços

    Um salão de beleza tem o seguinte plano de piso e nenhuma reserva ativa

    Figura 3:plantas sem reservas ativas. Assume apenas um lugar aberto por serviço (por exemplo, Sally oferece serviços de corte de cabelo a cada 30 minutos, mas só pode atender um cliente por vez).

    O feed de disponibilidade para um horário desses comerciantes seria assim:

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

    Exemplo de serviços com uma reserva

    Figura 4:plantas com uma reserva ativa. Assume apenas um lugar aberto por serviço (por exemplo, Sally oferece serviços de corte de cabelo a cada 30 minutos, mas só pode atender um cliente por vez).

    Agora imagine que um usuário marca um corte de cabelo com Sally às 12h30. Quando uma reserva é feita, uma atualização em tempo real é emitida para atualizar a disponibilidade. No próximo feed de disponibilidade diária, essa reserva vai aparecer. O feed de disponibilidade desses comerciantes teria uma exceção de agendamento das 12h30 às 13h para um serviço com duração de 30 minutos.

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