Quando o cliente abre o link e não acha horário num dia que precisa, ele pode entrar na fila de espera desse dia. Quando alguém cancela ou abre vaga ali, o sistema oferece automaticamente — quem confirma primeiro fica com o slot.
Como o cliente entra
-
Cliente abre
/b/{barbearia}/{barbeiro}(ou a landing direto). -
Tenta agendar mas o dia desejado está cheio.
-
Aparece o botão "Entrar na fila de espera deste dia".
-
Ele preenche:
- Data preferida (já preenchida).
- Período preferido — manhã, tarde, noite ou "qualquer".
- Barbeiro preferido — o barbeiro escolhido, ou "qualquer".
- Notas (opcional) — texto livre, vê pra equipe ("preciso até as 11h", "pra antes do casamento").
- Dados do cliente — nome, telefone, e-mail (mesmo padrão do booking).
-
Confirma e cai numa página de status com link permanente.
O que o sistema faz
- Cria uma
WaitlistEntrycomstatus = waiting. - Gera
access_tokenpra cliente acessar/cancelar a fila depois (mesmo conceito do agendamento).
A página de status mostra:
- Detalhes da fila (dia, período, barbeiro).
- "Vamos te avisar por WhatsApp/e-mail assim que abrir vaga".
- Botão Cancelar minha entrada na fila.
Quando o sistema oferta
Quando alguém cancela um agendamento ou abre janela compatível, o matcher automático procura entries da fila que poderiam ocupar o slot.
Critérios pro match:
- Data bate (mesmo dia da entry).
- Barbeiro bate (ou entry quer "qualquer").
- Período bate com o horário do slot (ou entry quer "qualquer").
- Serviço que cabe na duração disponível.
Pra cada match, o sistema:
- Cria uma oferta (
WaitlistOffer) com link único de confirmação (confirm_token). - Manda WhatsApp pro cliente — "Abriu vaga: [data, hora, barbeiro]. Você tem 30 minutos pra confirmar."
- A oferta tem prazo de expiração — se ninguém confirma, expira sozinha.
Cliente confirma a oferta
Cliente recebe a mensagem com link, abre, vê o slot oferecido e clica Confirmar:
- Sistema valida (em transação) que o slot ainda está livre.
- Cria o agendamento normal.
- Marca a entry da fila como
fulfilled. - Cancela ofertas paralelas desse cliente (se ele estava em mais de uma fila).
- Manda confirmação normal de agendamento (e-mail/WhatsApp).
Cliente recusa ou ignora
- Recusa explícita: marca a oferta como recusada. A entry da fila volta a
waiting— pronta pra outro match. - Ignora: oferta expira em 30 minutos sozinha. Mesma volta pra
waiting.
Em ambos os casos, o slot que abriu vai pro próximo da fila ou volta a ficar disponível normalmente.
Quando a entry expira
- No fim do dia preferido, a entry da fila sem match vira
expired. Cliente pode entrar na fila de outro dia se quiser.
Quando expira ou é cancelada
- Cliente cancela pelo link —
status = cancelled,cancelled_reason = customer. - Staff cancela pelo painel —
status = cancelled,cancelled_reason = staff. - Sistema expira sozinho —
status = expired.
Próximos passos
- Gerenciar a fila no painel — ver lista, cancelar, encaixar manualmente.
- Confirmação e lembrete por WhatsApp — como o cliente recebe a oferta.