review: auto-review do Captain em 2026-05-13
Some checks failed
Some checks failed
This commit is contained in:
parent
c72543cc59
commit
8522f925c7
288
docs/captain/reviews/2026-05-13.md
Normal file
288
docs/captain/reviews/2026-05-13.md
Normal file
@ -0,0 +1,288 @@
|
|||||||
|
# Captain Review — 2026-05-13
|
||||||
|
|
||||||
|
**Período:** últimas 72h (2026-05-11 a 2026-05-13)
|
||||||
|
**Analisado:** 4 assistants (Qnn01, PrimeAL, PrimeVL, Express AL)
|
||||||
|
**Conversas com assignee/handoff:** 40
|
||||||
|
**Conversas problemáticas:** 9 bugs / 10 legítimas (restantes sem incidentes notáveis)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Conversas analisadas
|
||||||
|
|
||||||
|
| Conv | Hotel | Contato | Problema | Legítima? |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| 7768 | PrimeVL | Luiz Gustavo | Tool status_suites travou, cliente esperou 20+ min | ❌ Bug |
|
||||||
|
| 7755 | PrimeAL | anny | Tool status_suites travou, cliente esperou 10+ min | ❌ Bug |
|
||||||
|
| 7774 | PrimeVL | Luffy do chapéu de Palha | Tool status_suites travou, cliente esperou 30+ min | ❌ Bug |
|
||||||
|
| 7702 | PrimeAL | Lorena Magalhães | Escalada por "passa cartão e divide?" sem resposta | ❌ Bug |
|
||||||
|
| 7742 | PrimeAL | LAYLA | Escalada por "vcs passam cartão?" sem resposta | ❌ Bug |
|
||||||
|
| 7517 | PrimeVL | Kawane | Escalada por "pode levar comida e bebidas?" sem resposta | ❌ Bug |
|
||||||
|
| 7727 | PrimeAL | Jeferson | Fotos da Hidro enviadas 3x; escalada por "tem que encher?" | ❌ Bug |
|
||||||
|
| 7539 | PrimeAL | Sousa | Mensagem interna "Self-improvement review" vazou no chat | ❌ Bug |
|
||||||
|
| 7548 | PrimeAL | Adailton | Pix gerado com valor incorreto no reenvio (R$70 vs R$85) | ❌ Bug |
|
||||||
|
| 7722 | Express | Larisse Kelly | Pedido de recibo por dia para RH | ✅ Legítima |
|
||||||
|
| 7715 | Express | Larisse Kelly | Pedido de nota fiscal diária para RH | ✅ Legítima |
|
||||||
|
| 7583 | Express | AL.🫥 | Pedido de estorno de reserva em outra unidade | ✅ Legítima |
|
||||||
|
| 7614 | Express | AL.🫥 | Pedido de estorno | ✅ Legítima |
|
||||||
|
| 7765 | PrimeVL | Bruna Thais | Pedido de desconto por ser primeira vez/aniversário | ✅ Legítima |
|
||||||
|
| 7524 | PrimeAL | ALAN KARDEC | Negociação de estadia longa (3 diárias) | ✅ Legítima |
|
||||||
|
| 7481 | PrimeVL | . | Cliente consultou preço e foi embora | ✅ Legítima |
|
||||||
|
| 7807 | PrimeVL | Millymendes | Atendimento normal, IA funcionou bem | ✅ Legítima |
|
||||||
|
| 7690 | Express | Rogerio | Redirect para Prime (sem hidro no Express) | ✅ Legítima |
|
||||||
|
| 7640 | Qnn01 | 🍀🧸🍀 | Consulta de preço, inatividade | ✅ Legítima |
|
||||||
|
| 7698 | Express | Jadiel Sousa | Humano tomou conta normalmente | ✅ Legítima |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔍 Padrões identificados
|
||||||
|
|
||||||
|
### Padrão 1: Tool `status_suites` trava e IA deixa cliente esperando indefinidamente (CRÍTICO)
|
||||||
|
|
||||||
|
**Ocorrências:** 3 conversas (7768, 7755, 7774)
|
||||||
|
**Qual regra violou:** Implicitamente viola #9 (handoff silencioso sem resposta ao cliente) e a própria regra do cenário `disponibilidade_suites`: "Se a ferramenta falhar, avise que teve instabilidade e peça um instante."
|
||||||
|
**Comportamento errado:** IA manda "⏳ Um momento — vou verificar." e nunca volta. O sistema adiciona `ia_abriu_conversa` (indicando chamada de tool), mas a IA não responde — cliente fica esperando 10–30 min até timeout ou humano intervir.
|
||||||
|
**Deveria ser:** Ao detectar falha (ou ausência de resposta da tool), IA deve informar o cliente e dar alternativa (ligar, pré-reservar mesmo assim).
|
||||||
|
**Escopo do fix:** (a) geral — aconteceu em PrimeAL e PrimeVL
|
||||||
|
|
||||||
|
**Exemplos:**
|
||||||
|
- Conv 7768: Cliente perguntou "A 303 tá?" — IA disse "⏳" às 21:46, primeiro cliente retornou foi às 21:47 ("Ok"), depois ficou mandando "?", "Oii", "Oi", "?????" até 22:21. Humano respondeu às 22:53.
|
||||||
|
- Conv 7774: Cliente disse "E pra hoje" às 22:23, IA disse "⏳", humano só apareceu às 22:54 — 30 min depois.
|
||||||
|
|
||||||
|
**💡 Fix sugerido** — Substituir a seção de fallback em `disponibilidade_suites.md` de todos os assistants (após o bloco "Se a ferramenta falhar…"):
|
||||||
|
|
||||||
|
**ANTES:**
|
||||||
|
```
|
||||||
|
Se a ferramenta falhar, avise que teve instabilidade e peça um instante.
|
||||||
|
```
|
||||||
|
|
||||||
|
**DEPOIS:**
|
||||||
|
```
|
||||||
|
## ⚠️ Fallback quando `status_suites` falha ou não retorna
|
||||||
|
Se a ferramenta retornar erro OU não houver resultado após a chamada:
|
||||||
|
1. NÃO fique em silêncio. NÃO chame handoff.
|
||||||
|
2. Responda ao cliente imediatamente:
|
||||||
|
"Opa, tive uma instabilidade aqui e não consegui verificar em tempo real 😅
|
||||||
|
Para garantir disponibilidade agora, você pode:
|
||||||
|
- Me informar que quer reservar mesmo assim — eu registro a pré-reserva e a recepção confirma na chegada.
|
||||||
|
- Ou ligar direto: [número do hotel].
|
||||||
|
O que prefere?"
|
||||||
|
3. Se o cliente quiser prosseguir, roteie para daniela_reservas normalmente.
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] Aprovar
|
||||||
|
- [ ] Rejeitar (motivo: _______)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Padrão 2: Escalada silenciosa para perguntas operacionais básicas (ALTO)
|
||||||
|
|
||||||
|
**Ocorrências:** 4 conversas (7702, 7742, 7517, 7727)
|
||||||
|
**Qual regra violou:** Regra #9 (NUNCA handoff por pergunta de valor/simples). Perguntas sobre formas de pagamento e política de uso são do mesmo nível que perguntas de preço — a IA deveria responder diretamente.
|
||||||
|
**Comportamento errado:** Quando cliente pergunta sobre cartão, parcelamento, trazer comida ou hidro cheia, IA manda "⏳ Um momento — vou verificar." e escala para humano sem responder. Cliente fica esperando.
|
||||||
|
**Deveria ser:** Responder direto com as informações da política da unidade.
|
||||||
|
**Escopo do fix:** (a) geral — aconteceu em PrimeAL e PrimeVL
|
||||||
|
|
||||||
|
**Exemplos e respostas corretas identificadas pelos humanos:**
|
||||||
|
- "Passa cartão?" → Humano: "Sim aceitamos cartão no hotel" (7742)
|
||||||
|
- "Passa cartão e divide?" → Humano: "Não dividimos" (7702)
|
||||||
|
- "Pode levar comida e bebidas de fora?" → Humano: "sim pode trazer" (7517)
|
||||||
|
- "Tem que encher [a hidro] ou já vem cheia?" → Humano: "Se quiser deixamos cheia" (7727)
|
||||||
|
|
||||||
|
**💡 Fix sugerido** — Adicionar seção de FAQ operacional no final de `jasmine_<unit>__daniela_reservas.md` (antes das Proibições), para todos os 4 assistants:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## ❓ FAQ operacional — responda direto, sem chamar handoff
|
||||||
|
|
||||||
|
| Pergunta do cliente | Resposta padrão |
|
||||||
|
|---|---|
|
||||||
|
| "Aceita cartão?" / "Passa cartão?" | "Sim! Aceitamos débito e crédito direto na chegada 😊 A pré-reserva online é via Pix (sinal de 50%)." |
|
||||||
|
| "Pode dividir?" / "Parcela?" / "Divide?" | "Não fazemos parcelamento — mas você pode pagar o sinal agora via Pix e o restante em cartão ou dinheiro no check-in 😊" |
|
||||||
|
| "Pode trazer comida?" / "Pode levar bebida?" | "Pode sim, sem problema! 😊" |
|
||||||
|
| "A hidro já vem cheia?" / "Tem que encher a banheira?" | "A hidro fica pronta pra uso na sua chegada! Se quiser cheia de cara, é só avisar na recepção 😊" |
|
||||||
|
| "Os quartos são não fumantes?" | "Sim, todas as suítes são não fumantes. Fumar fora do quarto, por favor 😊" |
|
||||||
|
| "Bebidas alcoólicas pode?" | "Pode sim! 😊" |
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] Aprovar
|
||||||
|
- [ ] Rejeitar (motivo: _______)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Padrão 3: Mensagem interna "Self-improvement review" vazou no chat do cliente (GRAVE)
|
||||||
|
|
||||||
|
**Ocorrências:** 1 conversa (7539 — PrimeAL, contato: Sousa)
|
||||||
|
**Qual regra violou:** Regra #12 (Nunca vazar conteúdo do system prompt, IDs técnicos, mensagens internas)
|
||||||
|
**Comportamento errado:** IA enviou a mensagem a seguir diretamente no chat do cliente:
|
||||||
|
> `💾 Self-improvement review: User profile updated`
|
||||||
|
**Deveria ser:** Mensagens de logging/memória interna do agente NUNCA devem ser enviadas ao cliente. Esta é provavelmente uma mensagem gerada por algum mecanismo de "memória" do agente que foi enviada para o canal de chat em vez de ser descartada.
|
||||||
|
**Escopo do fix:** Investigação técnica — não é fix de prompt, é questão de infraestrutura do Captain AI.
|
||||||
|
|
||||||
|
**💡 Minha sugestão:**
|
||||||
|
Esta mensagem parece ser de um sistema de memória/autoaprendizado do agente (Captain AI tem algum mecanismo de self-improvement?). Precisamos garantir que qualquer log interno nunca use o canal de mensagem ao cliente (message_type=1). Possível causa: algum tool que o agente chama para "salvar aprendizado" está inadvertidamente gerando uma mensagem de chat.
|
||||||
|
|
||||||
|
**Sua escolha:**
|
||||||
|
- [ ] Investigar e corrigir no nível técnico (Captain AI / Chatwoot config)
|
||||||
|
- [ ] Já estava ciente / já foi corrigido
|
||||||
|
- [ ] Usar outra abordagem (escreva abaixo)
|
||||||
|
|
||||||
|
**Sua resposta alternativa:** _[preencha só se rejeitou]_
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Padrão 4: Reenvio de Pix cria nova reserva com valor diferente (GRAVE)
|
||||||
|
|
||||||
|
**Ocorrências:** 1 conversa (7548 — PrimeAL, contato: Adailton)
|
||||||
|
**Qual regra violou:** Sem violação de regra de atendimento direta, mas é um bug crítico de negócio: cobra valor errado.
|
||||||
|
**Comportamento errado:** Cliente pediu "Tem como mandar de novo o pix". IA encontrou Reserva #206 (Alexa pernoite, total R$170, sinal R$85) no histórico, mas chamou `generate_pix` com parâmetros novos e gerou uma **nova** Reserva #207 com total R$140 e sinal R$70 — valor diferente do original. A IA inclusive detectou a discrepância (enviou nota interna alertando sobre duplicidade/cobrança incorreta) mas enviou o Pix errado mesmo assim.
|
||||||
|
**Deveria ser:** Ao pedido de reenvio de Pix, NÃO criar nova reserva. Escalar para humano que pode reenviar o link correto.
|
||||||
|
**Escopo do fix:** (a) geral — fix em `daniela_reservas.md` de todos os 4 assistants
|
||||||
|
|
||||||
|
**💡 Fix sugerido** — Adicionar na seção de FAQ ou Proibições de `daniela_reservas.md`:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## 🔄 Reenvio de Pix — regra crítica
|
||||||
|
Se o cliente pedir "manda o Pix de novo", "reenvie o Pix", "não recebi o Pix" ou similar:
|
||||||
|
- **NÃO** chame `generate_pix` novamente — isso cria uma nova reserva com valores possivelmente diferentes.
|
||||||
|
- Responda: "Para reenviar o Pix da sua reserva, preciso da ajuda da equipe — um momentinho!" e chame `handoff`.
|
||||||
|
- O motivo: o reenvio precisa apontar para a reserva original, e a IA não tem acesso ao link anterior.
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] Aprovar
|
||||||
|
- [ ] Rejeitar (motivo: _______)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Padrão 5: Ferramenta `send_suite_images` chamada múltiplas vezes (duplicação de fotos)
|
||||||
|
|
||||||
|
**Ocorrências:** 1 conversa (7727 — PrimeAL, contato: Jeferson)
|
||||||
|
**Qual regra violou:** Regra #10 (send_suite_images EXIGE parâmetro — e por extensão, nunca deve ser chamada em loop)
|
||||||
|
**Comportamento errado:** Quando cliente pediu fotos da Hidromassagem, o sistema enviou 3 mensagens idênticas "Suíte SPA Hidromassagem" seguidas. A tool `send_suite_images` foi chamada 3 vezes para a mesma categoria.
|
||||||
|
**Deveria ser:** Uma única chamada por categoria. Se o cliente quiser ver de novo, IA pode chamar de novo mas nunca em rafaga automática.
|
||||||
|
**Escopo do fix:** (a) geral — adicionar em `maria_fotos.md` de todos os 4 assistants
|
||||||
|
|
||||||
|
**💡 Fix sugerido** — Adicionar regra no `jasmine_<unit>__maria_fotos.md` após a seção de uso da ferramenta:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## ⛔ Regra anti-duplicata
|
||||||
|
- Chame `send_suite_images` **uma única vez** por categoria por turno.
|
||||||
|
- Nunca chame a mesma ferramenta duas vezes seguidas sem uma nova mensagem do cliente entre as chamadas.
|
||||||
|
- Se a ferramenta retornar sucesso, não repita a chamada.
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] Aprovar
|
||||||
|
- [ ] Rejeitar (motivo: _______)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ❓ Perguntas pra o Rodrigo responder
|
||||||
|
|
||||||
|
### Pergunta 1: Auto-resposta de disponibilidade para datas futuras (mesmo antes de fechar reserva)
|
||||||
|
|
||||||
|
**Conversa:** 7768, 7755, 7774
|
||||||
|
**Contexto:** Clientes pedem "a 303 tá?" ou "quero pra hoje" — IA tenta verificar disponibilidade em tempo real mas trava. O cenário disponibilidade_suites.md diz "Se for amanhã ou data futura, não travar a venda por disponibilidade em tempo real: siga para daniela_reservas." Mas para "hoje/agora" manda checar mesmo.
|
||||||
|
**O que preciso saber:** Quando status_suites falha pra pedidos de "hoje", você prefere: (A) IA continua direto pra reserva sem verificar disponibilidade, ou (B) IA pede pra cliente ligar/aguardar?
|
||||||
|
|
||||||
|
**💡 Minha sugestão:**
|
||||||
|
Opção A — se o cliente quer reservar "pra hoje", IA registra a pré-reserva normalmente e a recepção confirma na chegada (já é o que acontece com datas futuras). Falha de disponibilidade não deve travar venda.
|
||||||
|
|
||||||
|
**Sua escolha:**
|
||||||
|
- [ ] Opção A — ir direto para reserva, sem verificar disponibilidade (mesmo para "hoje")
|
||||||
|
- [ ] Opção B — avisar instabilidade e pedir para ligar
|
||||||
|
- [ ] Outra (escreva abaixo)
|
||||||
|
|
||||||
|
**Sua resposta alternativa:** _[preencha só se rejeitou]_
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Pergunta 2: Números de telefone nos prompts — estão corretos?
|
||||||
|
|
||||||
|
**Contexto:** Conv 7690, humano deu o número 61991868492 para o cliente contatar o Prime. Em 7614, humano deu (61) 4042-8064 para o Prime Ceilândia. O prompt da IA não tem número de telefone (vai buscar no faq_lookup). Os humanos passam números "na mão" quando necessário.
|
||||||
|
**O que preciso saber:** Devemos adicionar os números de telefone de cada unidade diretamente nos prompts (para a IA poder responder quando a ferramenta de disponibilidade falha e sugerir ligar)?
|
||||||
|
|
||||||
|
**💡 Minha sugestão:**
|
||||||
|
Sim — adicionar uma seção "Contato de emergência" em cada arquivo de disponibilidade_suites.md com o telefone da unidade. Assim a IA pode dizer "Se precisar confirmar agora, ligue: [número]".
|
||||||
|
|
||||||
|
**Sua escolha:**
|
||||||
|
- [ ] Usar a sugestão acima (adicionar telefones nos prompts de disponibilidade)
|
||||||
|
- [ ] Não — os humanos que passam o número quando necessário
|
||||||
|
- [ ] Usar outra abordagem (escreva abaixo)
|
||||||
|
|
||||||
|
**Sua resposta alternativa:** _[preencha só se rejeitou]_
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Diffs completos (antes/depois)
|
||||||
|
|
||||||
|
### Arquivo: `_modelos/scenarios/jasmine_<unit>__disponibilidade_suites.md` (todos os 4)
|
||||||
|
|
||||||
|
**ANTES (linha existente):**
|
||||||
|
```
|
||||||
|
Se a ferramenta falhar, avise que teve instabilidade e peça um instante.
|
||||||
|
```
|
||||||
|
|
||||||
|
**DEPOIS:**
|
||||||
|
```
|
||||||
|
## ⚠️ Fallback quando `status_suites` falha ou não retorna
|
||||||
|
Se a ferramenta retornar erro OU não houver resultado após a chamada:
|
||||||
|
1. NÃO fique em silêncio. NÃO chame handoff.
|
||||||
|
2. Responda ao cliente imediatamente:
|
||||||
|
"Opa, tive uma instabilidade aqui e não consegui verificar em tempo real 😅
|
||||||
|
Para garantir disponibilidade agora, você pode:
|
||||||
|
- Me informar que quer reservar mesmo assim — eu registro a pré-reserva e a recepção confirma na chegada.
|
||||||
|
- Ou ligar direto: [número do hotel].
|
||||||
|
O que prefere?"
|
||||||
|
3. Se o cliente quiser prosseguir, roteie para daniela_reservas normalmente.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Arquivo: `_modelos/scenarios/jasmine_<unit>__daniela_reservas.md` (todos os 4)
|
||||||
|
|
||||||
|
**ANTES:** *(seção de FAQ operacional não existe)*
|
||||||
|
|
||||||
|
**DEPOIS (adicionar antes das Proibições):**
|
||||||
|
```markdown
|
||||||
|
## ❓ FAQ operacional — responda direto, sem chamar handoff
|
||||||
|
|
||||||
|
| Pergunta do cliente | Resposta padrão |
|
||||||
|
|---|---|
|
||||||
|
| "Aceita cartão?" / "Passa cartão?" | "Sim! Aceitamos débito e crédito direto na chegada 😊 A pré-reserva online é via Pix (sinal de 50%)." |
|
||||||
|
| "Pode dividir?" / "Parcela?" | "Não fazemos parcelamento — mas você pode pagar o sinal agora via Pix e o restante em cartão ou dinheiro no check-in 😊" |
|
||||||
|
| "Pode trazer comida?" / "Pode levar bebida?" | "Pode sim, sem problema! 😊" |
|
||||||
|
| "A hidro já vem cheia?" / "Tem que encher a banheira?" | "A hidro fica pronta pra uso na sua chegada! Se quiser cheia de cara, é só avisar na recepção 😊" |
|
||||||
|
| "Os quartos são não fumantes?" | "Sim, todas as suítes são não fumantes 😊" |
|
||||||
|
| "Bebidas alcoólicas pode?" | "Pode sim! 😊" |
|
||||||
|
|
||||||
|
## 🔄 Reenvio de Pix — regra crítica
|
||||||
|
Se o cliente pedir "manda o Pix de novo", "reenvie o Pix", "não recebi o Pix":
|
||||||
|
- **NÃO** chame `generate_pix` novamente — cria nova reserva com valor possivelmente diferente.
|
||||||
|
- Responda: "Para reenviar o Pix da sua reserva existente, preciso da ajuda da equipe 😊 Um momento!" e chame `handoff`.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Arquivo: `_modelos/scenarios/jasmine_<unit>__maria_fotos.md` (todos os 4)
|
||||||
|
|
||||||
|
**ANTES:** *(sem regra anti-duplicata)*
|
||||||
|
|
||||||
|
**DEPOIS (adicionar no final):**
|
||||||
|
```markdown
|
||||||
|
## ⛔ Regra anti-duplicata
|
||||||
|
- Chame `send_suite_images` **uma única vez** por categoria por turno.
|
||||||
|
- Nunca chame a mesma ferramenta duas vezes seguidas sem nova mensagem do cliente.
|
||||||
|
- Se a ferramenta retornar sucesso, não repita a chamada.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ Checklist de aprovação
|
||||||
|
|
||||||
|
Após revisar, marque suas decisões e responda às perguntas nos campos acima:
|
||||||
|
|
||||||
|
- [ ] Padrão 1 — Fallback de disponibilidade (Aprovado/Rejeitado)
|
||||||
|
- [ ] Padrão 2 — FAQ operacional básico (Aprovado/Rejeitado)
|
||||||
|
- [ ] Padrão 3 — Self-improvement leak (Ciente/Ação necessária)
|
||||||
|
- [ ] Padrão 4 — Pix reenvio com valor errado (Aprovado/Rejeitado)
|
||||||
|
- [ ] Padrão 5 — Fotos duplicadas (Aprovado/Rejeitado)
|
||||||
|
- [ ] Pergunta 1 — Disponibilidade pra hoje: opção A ou B?
|
||||||
|
- [ ] Pergunta 2 — Telefones nos prompts: sim ou não?
|
||||||
Loading…
Reference in New Issue
Block a user