chatwoot-develop/.agent/workflows/jasmine-padrao2.md
2026-01-19 19:26:23 -03:00

224 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
description: padrao jasmine docs
---
## 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 (2060 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.