Estruturar dados de disponibilidade para reservas

Para mostrar seus horários no fluxo de reserva, envie um mapeamento preciso e atualizado do seu inventário. O número de vagas disponíveis pode mudar significativamente após uma única reserva devido à natureza dos restaurantes e à capacidade de juntar mesas ou ao tamanho do grupo. Os exemplos neste documento mostram como manter e mapear seu inventário disponível corretamente.

Confira abaixo os parâmetros especificados no Availability definition:

  • party_size: o tamanho do grupo que o estabelecimento pode acomodar neste horário. Os diagramas neste artigo mostram as várias maneiras de configurar o tamanho do grupo.
  • spots_open: o número de mesas disponíveis para um determinado horário e tamanho de grupo.
  • spots_total: o número total de tabelas que o comerciante tem para essa configuração, incluindo as tabelas indisponíveis.

Esses três parâmetros trabalham juntos para criar uma representação digital da planta baixa. party_size é o número de pessoas que cada mesa pode acomodar. Há uma entrada para cada tamanho que uma tabela pode acomodar. spots_open e spots_total são contagens de tabelas que podem acomodar esse party_size.

Exemplo de planta baixa vazia

Imagine um restaurante com a seguinte planta e sem reservas ativas:

Figura 1. Planta baixa sem reservas ativas

Figura 1. Planta baixa sem reservas ativas.

Estes são os valores para party_size, spots_open e spots_total:

party_size spots_open spots_total
4 3 3
5 3 3
6 4 4
7 1 1
8 1 1

O feed de disponibilidade para um horário específico desse comerciante é assim:

{
  "availability": [
        {
          "spots_total": 3,
          "spots_open": 3,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 4
          }
        },
        {
          "spots_total": 3,
          "spots_open": 3,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 5
          }
        },
        {
          "spots_total": 4,
          "spots_open": 4,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 6
          }
        },
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 7
          }
        },
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 8
          }
        }
      ]
}

Exemplo de planta baixa com uma reserva

Um restaurante com uma das mesas redondas reservadas anteriormente é o seguinte:

Figura 1. Planta baixa com uma reserva ativa

Figura 2. Planta baixa com uma reserva ativa.

Estes são os valores para party_size, spots_open e spots_total:

party_size spots_open spots_total
4 2 3
5 2 3
6 3 4
7 1 1
8 1 1

O feed de disponibilidade para um horário específico desse comerciante é assim:

{
  "availability": [
        {
          "spots_total": 3,
          "spots_open": 2,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 4
          }
        },
        {
          "spots_total": 3,
          "spots_open": 2,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 5
          }
        },
        {
          "spots_total": 4,
          "spots_open": 3,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 6
          }
        },
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 7
          }
        },
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 8
          }
        }
      ]
}

Especificar a disponibilidade de restaurantes com suporte a tabelas combinadas

Há muitas maneiras de um restaurante combinar mesas para atender a grupos maiores. Você precisa especificar spots_open e spots_total de uma forma que reflita com precisão se você pode aceitar grupos de um determinado tamanho.

Confira a seguir um exemplo de como especificar a combinação de tabelas. Seus feeds podem variar de acordo com o método de cálculo usado. É aceitável especificar spots_open e spots_total de uma forma que corresponda à lógica da sua empresa.

Se um restaurante permitir a combinação de mesas para formar um grupo maior, atualize seus spots_open e spots_total para refletir isso.

Por exemplo, um restaurante que pode combinar duas mesas pequenas para acomodar um grupo de 7 a 10 pessoas:

Figura 1. Planta baixa sem reservas ativas

Figura 3. Planta baixa sem reservas ativas.

Se não houver reservas ativas, estes serão os valores de party_size, spots_open e spots_total:

party_size spots_open spots_total
4 3 3
5 3 3
6 4 4
7 1 1
8 1 1
9 1 1
10 1 1

Agora, com a mesma planta, uma reserva é feita para um grupo de dez pessoas que combina duas mesas pequenas.

Figura 1. Planta baixa com uma reserva ativa em duas mesas

Figura 4. Planta baixa com uma reserva ativa em duas mesas.

Então, os valores de party_size, spots_open e spots_total são os seguintes:

party_size spots_open spots_total
4 1 3
5 1 3
6 2 4
7 1 1
8 1 1
9 0 1
10 0 1