Como estruturar a disponibilidade em feeds

Como escolher um formato de disponibilidade

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

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

  • No seu sistema, você armazena a disponibilidade como horários explícitos, por exemplo, das 8h às 8h30?
  • No seu sistema, você armazena a disponibilidade em um formato recorrente, o que significa que os comerciantes têm serviços que ocorrem com frequência consistente e poucos desvios? Por exemplo, os horários se repetem 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 seus comerciantes, pode haver mais de um espaço aberto por vez? Por exemplo, 30 vagas abertas para uma turma.
  • Nenhuma das opções acima se aplica?
    • Use a opção Horários disponíveis
    • Observação: embora o uso de recorrência seja mais eficiente e possa resultar em tamanhos de feed menores, caso seu modelo de dados não tenha suporte nativo, não é recomendável usá-la, porque será necessário recalcular todo o dia de slots recorrentes para cada atualização em tempo real.

    Horários disponíveis

    Definições dos parâmetros:

    • spot_open: o número de vagas disponíveis no momento para esta entrada de disponibilidade.
    • spot_total: o número total de pontos que o comerciante tem para esta configuração, incluindo aqueles que não estão disponíveis.

    O método "Spots Open" indica explicitamente cada disponibilidade de slot e é compatível com o modelo de ter vários locais para o mesmo serviço. Esses dois parâmetros trabalham juntos para criar uma representação digital da capacidade de serviço.

    Quando há uma reserva, o número de spot_open precisa ser reduzido em 1 com uma atualização em tempo real. O número de spot_total precisa permanecer o mesmo. Depois que spot_open = 0, o slot não deverá mais aparecer.

    Exemplos de serviços

    Uma aula de ioga ou um salão de beleza tem as seguintes plantas baixas e não há reservas ativas

    Figura 1:planta baixa sem reservas ativas.

    O feed de disponibilidade para dois horários nesses 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",
                }
              ]
        }
        

    Exemplos de serviços com um agendamento

    Figura 2:planta baixa com um agendamento ativo.

    Agora, um usuário reserva um dos pontos. Quando uma reserva acontece, uma atualização em tempo real é emitida para atualizar a disponibilidade. No próximo feed de disponibilidade diária, essa reserva deve aparecer. O feed de disponibilidade desses comerciantes teria uma diminuição de 1% no campo spot_open em 1o de setembro de 2018, às 16h (GMT). O horário de 1o de setembro de 2018, às 20h (GMT), permanece inalterado.

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

    • recorrência: a representação de horários de disponibilidade que se repetem de forma consistente.
    • remember_until_sec: o carimbo de data/hora UTC do horário de término do último horário em que a disponibilidade se repete.
    • repetido_cada_sec: o número de segundos entre os slots de disponibilidade sucessivos. Por exemplo, se repeat_every_sec = 1800 (30 minutos) e 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. Ambos são considerados 1, a menos que haja uma schedule_exception

    O método de recorrência indica a disponibilidade diária para serviços que ocorrem em intervalos regulares. Por exemplo, um serviço que acontece 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 do dia em que ele ocorre, a frequência com que ele será repetido e em que momento no mesmo dia ele terá que parar de se repetir. Observação: um novo conjunto de horários recorrentes precisa ser especificado para cada dia separadamente. Se um horário já estiver reservado dentro do período, 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 individual 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 não tem reservas ativas

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

    O feed de disponibilidade de 1 espaço desses comerciantes teria esta aparência:

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

    Exemplos de serviços com um agendamento

    Figura 4:plantas baixas com um agendamento ativo. Considera apenas uma vaga aberta por serviço (por exemplo, Sally oferece serviços de corte de cabelo a cada 30 minutos, mas só pode atender a um cliente por vez.)

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

    Snippet do feed com uma reserva:

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