O caminho completo da primeira mensagem no WhatsApp até o PIX confirmado, o lembrete e o check-in. Mapeado ponta a ponta — sem caixas-pretas, sem suposições.
Toda mensagem percorre estes quatro blocos — sempre nesta ordem.
Entrada do cliente, via WE API.
process_message, dedup, regras e roteamento.
Condução conversacional e tom de vendedor.
Dados reais, transações e webhooks.
Nunca inventar preço, disponibilidade, promoção ou comodidade.
Da primeira mensagem ao pós-reserva, cada passo tem propósito e validação.
Webhook recebe e deduplica.
Lock por instância ou seleção do cliente.
Reserva, dúvida, reabertura, cancelamento.
Pula descoberta e vai à disponibilidade.
Pergunta gosto antes de data.
Validação de janela e antecedência.
Tool real-time, nada inventado.
Foto, preço e amenities reais.
Confirmação por contexto, não só nome.
Sempre perguntar, nunca assumir.
Resumo claro antes de prosseguir.
Apenas no fim, se necessário.
Tool criar_reserva valida tudo.
PIX via Asaas com link único.
Polling + webhook de confirmação.
Mensagem de sucesso e código.
Resumo + Maps + Uber.
Cliente apresenta código na recepção.
Reengajamento contextual.
Cada decisão é um nó com regras explícitas — não é magia, é fluxo.
if (tem_urgencia) → fast_track() else → descoberta_guiada() if (suite.disponivel) → confirmar_escolha() else → consultar_disponibilidade(exclude_room_ids) if (pagamento.status == 'pago') → confirmar_reserva() elif (status == 'pendente') → manter_estado(ttl) else → liberar_horario()
Pending actions guiam respostas curtas. TTL evita estado preso. Histórico mantém contexto sem quebrar tools.
unit_idUnidade ativa da conversa.
awaiting_unit_selectionFlag para multi-unidade.
pending_action_typeTipo da próxima ação esperada.
pending_action_dataPayload parcial da ação.
pending_action_expires_atTTL para evitar estado preso.
messagesHistórico para contexto sem quebrar tools.
Quando o cliente responde só um número, o sistema sabe a qual pergunta se refere.
Estados antigos expiram, evitando travas de fluxo entre sessões.
Contexto suficiente para o LLM, sem inflar tool calls.
Mostra Suíte A e B
shown_room_ids = [A, B]
"tem mais?"
exclude_room_ids = [A, B]
Mostra C e D, sem repetir
Tempo determinado em horas: 3h, 6h, 12h, 24h.
Estadia até a manhã seguinte, quando aplicável à unidade.
Nunca assumir pernoite automaticamente.
Da reserva ao link, do link ao status, do status à confirmação.
criar_reservaReserva validada e persistida.
gerar_link_pagamentoCobrança PIX no Asaas.
webhook · statusEventos de pago, cancelado, expirado.
mensagem ao clienteSem expor erro técnico cru.
verificar_status_pagamento aceita booking_id, phone ou transaction_ref.
A retomada muda conforme o estágio onde o cliente parou — fotos, permanência, pagamento.