200 lines
9.6 KiB
Markdown
200 lines
9.6 KiB
Markdown
## Guia de pensamento para alinhar Jasmine + Daniela Reservas
|
||
|
||
Sempre que precisar revisar ou ajustar o fluxo de reservas, siga este checklist mental. Ele garante que toda intervenção esteja alinhada com o objetivo macro que você descreveu (contato cordial → ativar Daniela → coleta completa → cálculo do valor por dia → Pix de 50% → confirmação final).
|
||
|
||
1. **Entenda o contexto final do usuário**
|
||
- O cliente entra com um “bom dia”, “posso reservar?” ou similar.
|
||
- O objetivo é caminhar até uma reserva confirmada com Pix: sem desvios, sem repetição de perguntas.
|
||
- Qualquer erro deve ser interpretado à luz desse fluxo (não como uma exceção isolada).
|
||
|
||
2. **Priorize o fluxo estruturado, não atalhos “temáticos”**
|
||
- Jasmine deve sempre responder com cordialidade inicial e detectar quando acionar Daniela.
|
||
- Toda ação de reserva (dados do cliente, suíte, data, valor) deve ser comandada por Daniela, informando o cliente do próximo passo.
|
||
- Evite fallback direto do Brain para respostas livres quando o fluxo já está em andamento.
|
||
|
||
3. **Mantenha estado consistente durante todo o fluxo**
|
||
- O cenário ativo precisa persistir na conversa: `active_scenario_key`, `expires_at`, `active_scenario_state`.
|
||
- O `state` guarda stage, dados coletados (CPF, suíte, data) e resultados de ferramentas (availability, pix).
|
||
- Em cada turno, atualize esse estado e só encerre quando o Pix for gerado ou o cliente disser “cancelar/obrigado”.
|
||
|
||
4. **Ferramentas obedecem ao roteiro**
|
||
- `check_availability` determina o valor correto conforme a data e o dia da semana (verfica as tabelas).
|
||
- `create_reservation_intent` guarda os dados coletados; jamais pula etapas.
|
||
- `generate_pix` deve receber o valor calculado e aplicar exatamente `valor / 2` quando solicitado (entrada 50%).
|
||
- Se algum passo falhar, o sistema deve comunicar o erro (fallback adequado) e manter o cliente no fluxo, não encerrar com mensagens genéricas como “dificuldades técnicas”.
|
||
|
||
5. **Fluxo conversacional esperado**
|
||
1. Jasmine responde com cordialidade e confirma a intenção.
|
||
2. Daniela entra pedindo nome/CPF, suíte, data, horário.
|
||
3. Daniela informa valor, explica “pode pagar 50% agora via Pix”.
|
||
4. Daniela chama `generate_pix`, envia o código, explica "copie e cole".
|
||
5. Após cliente avisar “paguei”, Daniela confirma a reserva e encerra o cenário.
|
||
6. Se o cliente desistir ou pedir humano, encerre/limpe sticky e deixe Lucia (Jasmine) responder com fallback apropriado.
|
||
|
||
6. **Logs e documentação**
|
||
- Sempre que alterar algo, registre nas instruções/prompt das agents (ex: prompt da Daniela deve explicitar o roteiro).
|
||
- Se necessário fazer mudanças pontuais, vincule essas mudanças ao fluxo (não apenas "ajustar o Pix").
|
||
- Use este documento como ponto de referência antes de testar: se você “esquecer”, leia e repita mentalmente o que o Rodrigo quer.
|
||
|
||
Se precisar de ajuda para transformar isso em tarefas técnicas (migrations, short-circuit, state), é só avisar.
|
||
|
||
---
|
||
|
||
## Documento de referência ampliado (fluxo reserva + Pix)
|
||
|
||
### 1. Objetivo “padrão-ouro”
|
||
O sistema deve rodar este fluxo previsível para cada pedido de reserva:
|
||
1. Cliente cumprimenta → Jasmine responde educadamente.
|
||
2. Cliente manifesta “quero reservar” → Jasmine delega para Daniela.
|
||
3. Daniela conduz todo o plano: coleta dados, chama ferramentas (precio/disponibilidade/pix), monta a próxima mensagem.
|
||
4. Jasmine publica o texto final no tom oficial (voz única para o cliente).
|
||
5. Coleta obrigatória concentrada na Daniela: nome completo, CPF, suíte, data, horário/período.
|
||
6. Daniela confirma: “Sua reserva ficou assim… total R$T. Posso gerar o Pix (50%)?”
|
||
7. Cliente confirma → Daniela gera Pix de metade do total e instrui “copie e cole no seu banco”.
|
||
8. Após o cliente avisar “paguei”, Daniela confirma o pagamento e informa que a reserva está confirmada.
|
||
|
||
Sucesso significa que a reserva segue esse roteiro, com Pix gerado/confirmado e sem decisões aleatórias.
|
||
|
||
### 2. Papéis e responsabilidades
|
||
- **Jasmine (“interface única”)**: cumprimenta, decide se deve delegar, publica as respostas da Daniela e mantém o tom padrão. Nunca responde diretamente sobre reservas, preços ou Pix — sempre delega ao subagente adequado.
|
||
- **Daniela (“motor transacional”)**: permanece na camada interna. Recebe contexto, coleta dados, valida, chama `check_availability`, `create_reservation_intent`, `generate_pix`, constrói o `mensagem_para_cliente` e retorna também o `estado_atualizado` e as ações requisitadas.
|
||
|
||
### 3. Regras de comportamento
|
||
- Tom educado e uniforme mesmo quando a resposta vem da Daniela.
|
||
- Não inventar preços ou disponibilidade: os valores derivam exclusivamente de `check_availability` e do histórico fornecido.
|
||
- Sempre perguntar “posso gerar o Pix?” antes de chamar `generate_pix`.
|
||
- Não sair do fluxo: enquanto o sticky scenario estiver ativo, o Brain não deve responder com mensagens independentes ou fallback.
|
||
|
||
### 4. Arquitetura mínima para consistência
|
||
A) **Sticky “modo reserva”** – Conversa persiste: `active_scenario_key`, `active_scenario_expires_at`, `active_scenario_state`. Uma vez ativado por Daniela, todas as próximas mensagens vão direto para ela até conclusão/cancelamento.
|
||
B) **Estado mínimo persistido** – `active_scenario_state` deve conter:
|
||
- `stage` (p.ex. collecting_data, quoting, waiting_payment)
|
||
- `collected` (nome, CPF, suíte, data, horário)
|
||
- `last_quote` (preço, disponibilidade, dia/turno)
|
||
- `pix_status` (pending/paid/confirmed)
|
||
Isso evita perda de memória entre turnos e mantém o fluxo determinístico.
|
||
|
||
### 5. Tratamento de erros (visão macro)
|
||
Quando surgir um erro (resposta desalinhada, ferramenta falhando, handoff disparado), trace o contexto:
|
||
1. Qual stage estava ativo?
|
||
2. Jasmine desviou e respondeu sozinha?
|
||
3. Daniela repetiu perguntas ou perdeu dados?
|
||
4. Qual tool falhou ou retornou inválido?
|
||
Corrija sempre com base nesse fluxo padrão — não apenas “ajuste a frase”, mas reforce o sticky/state/sequence.
|
||
|
||
### 6. Como trabalhamos na prática
|
||
Sempre que você me mostrar um erro, envie:
|
||
1. Mensagem do cliente.
|
||
2. Resposta publicada pela Jasmine.
|
||
3. Trecho do log relevante (20–60 linhas) indicando decisão/tool.
|
||
|
||
Com isso eu devolvo:
|
||
* Onde travar o sticky/state.
|
||
* Qual prompt deve ser ajustado.
|
||
* Qual ferramenta/filtro precisa validar o valor ou o Pix.
|
||
|
||
### 7. Regra mestre
|
||
“Daniela é o cérebro do fluxo transacional e retorna o texto pronto; Jasmine é a única voz que publica para o cliente no tom oficial. O sistema deve manter estado e sticky para que o fluxo seja determinístico.”
|
||
|
||
---
|
||
|
||
## 🎯 Simulação de atendimento ideal – experiência perfeita de reserva
|
||
|
||
**Cliente:**
|
||
Boa noite
|
||
|
||
**Jasmine:**
|
||
Boa noite! 😊
|
||
Seja bem-vindo. Como posso te ajudar hoje?
|
||
|
||
**Cliente:**
|
||
Gostaria de fazer uma reserva
|
||
|
||
**Jasmine:**
|
||
Perfeito! Vou te ajudar com isso 😊
|
||
Para darmos continuidade à sua reserva, poderia me informar, por favor, seu nome completo e CPF?
|
||
|
||
**Cliente:**
|
||
João Pedro da Silva, CPF 123.456.789-00
|
||
|
||
**Jasmine:**
|
||
Obrigada, João 😊
|
||
Agora me diga, por favor: qual suíte você deseja reservar?
|
||
|
||
**Cliente:**
|
||
Suíte Luxo
|
||
|
||
**Jasmine:**
|
||
Ótima escolha! ✨
|
||
Para qual data e horário/período você gostaria da reserva?
|
||
|
||
**Cliente:**
|
||
Dia 20/02, das 22h às 10h
|
||
|
||
**Jasmine:**
|
||
Perfeito! Só um instante que vou verificar a disponibilidade e os valores para você 😊
|
||
|
||
(internamente: Daniela consulta disponibilidade e preço)
|
||
|
||
**Jasmine:**
|
||
Prontinho! 😊
|
||
Sua reserva ficou assim:
|
||
|
||
• Suíte: Luxo
|
||
• Data: 20/02
|
||
• Horário: das 22h às 10h
|
||
• Valor total: R$ 300,00
|
||
|
||
Para confirmar a reserva, é necessário o pagamento de 50% (R$ 150,00).
|
||
Posso gerar o Pix para você agora?
|
||
|
||
**Cliente:**
|
||
Pode sim
|
||
|
||
**Jasmine:**
|
||
Perfeito 😊
|
||
Segue abaixo o Pix para pagamento da entrada:
|
||
|
||
💰 Valor: R$ 150,00
|
||
📌 Chave Pix: 123e4567-e89b-12d3-a456-426614174000
|
||
|
||
👉 Basta copiar a chave Pix, colar no aplicativo do seu banco e realizar o pagamento.
|
||
Assim que pagar, me avise por aqui para que eu confirme sua reserva, tudo bem?
|
||
|
||
**Cliente:**
|
||
Pronto, acabei de pagar
|
||
|
||
**Jasmine:**
|
||
Só um instante que vou confirmar o pagamento para você 😊
|
||
|
||
(internamente: Daniela confirma pagamento)
|
||
|
||
**Jasmine:**
|
||
Pagamento confirmado com sucesso! ✅
|
||
|
||
Sua reserva está confirmada 🎉
|
||
Resumo final:
|
||
|
||
• Suíte: Luxo
|
||
• Data: 20/02
|
||
• Horário: das 22h às 10h
|
||
• Entrada paga: R$ 150,00
|
||
|
||
Qualquer dúvida ou se precisar de algo mais, é só me chamar.
|
||
Será um prazer te receber! 😊✨
|
||
|
||
### 🔑 Por que essa experiência é boa
|
||
- Linguagem humana e educada
|
||
- Um pedido por vez (sem sobrecarregar)
|
||
- Confirmação clara antes da cobrança
|
||
- Segurança no Pix
|
||
- Encerramento com sensação de sucesso
|
||
|
||
Se quiser, nos próximos passos posso:
|
||
- marcar onde entra cada stage,
|
||
- transformar isso em script técnico para os prompts da Daniela/Jasmine, ou
|
||
- criar a versão “anti-confusão” (quando o cliente muda de assunto ou responde errado).
|
||
|
||
### 💬 Instrução extra: Pix Copia e Cola completo
|
||
Quando o GeneratePixTool retornar o código, **garanta que o bloco de código contenha a string inteira**, iniciando em `0002010...` e terminando no checksum `...6304XXXX`. Esse é o valor que o cliente precisa colar no banco; qualquer corte causa “Pix inválido”. Copie exatamente o `raw_payload` do tool (ou o `formatted_message` caso já contenha a string completa) e anexe no bloco antes de enviar. Nada deve ser truncado ou substituído pela Jasmine depois de a mensagem sair.
|