chatwoot-develop/progresso/2026-01-16_runbook_reserva_pix_daniela_jasmine.md
2026-01-19 19:26:23 -03:00

132 lines
4.7 KiB
Markdown

# Runbook: Reserva Conversacional com Pix (Jasmine -> Daniela)
**Data:** 16/01/2026
**Objetivo:** garantir que a conversa gere reserva e envie Pix Copia e Cola via sub-agente Daniela.
## 1. Fluxo esperado (resumo)
1) Jasmine identifica reserva futura e chama o sub-agente `daniela_reservas`.
2) Daniela usa ferramentas internas para:
- atualizar contato (nome/CPF),
- consultar disponibilidade e preco,
- criar rascunho de reserva,
- gerar Pix.
3) Pix Copia e Cola e enviado como mensagem separada no WhatsApp.
## 2. Configuracoes que precisam estar ativas
### 2.1 Assistente Jasmine
- **Cenario habilitado:** `Daniela Reservas` (tool key `consultar_daniela_reservas`).
- **Ferramentas disponiveis no cenario:**
- `update_contact`
- `check_availability`
- `create_reservation_intent`
- `generate_pix`
- **Modelo/Chave LLM:** `assistant.api_key` valido (ou `CAPTAIN_OPEN_AI_API_KEY`).
### 2.2 Pipeline de decisao (JasmineBrain)
- A decisao precisa carregar `tool_input` quando `strategy = execute_tool`.
- A chamada do runner precisa incluir `additional_data: { message:, tool_input: }`.
Arquivos envolvidos:
- `enterprise/app/services/captain/llm/jasmine_brain.rb`
- `enterprise/app/services/captain/llm/assistant_chat_service.rb`
- `enterprise/app/services/captain/tools/tool_runner.rb`
### 2.3 Sub-agente Daniela (ScenarioDelegatorTool)
- O runner deve ser chamado com `runner.run(pergunta_interna, max_turns: ...)`.
- Se o sub-agente falhar, existe fallback para concluir a reserva e gerar Pix.
Arquivo:
- `enterprise/lib/captain/tools/scenario_delegator_tool.rb`
### 2.4 Pix (Banco Inter)
- `Captain::Inter::CobService` exige no `unit`:
- `inter_pix_key`
- `inter_account_number`
- `inter_cert_path`
- `inter_key_path`
Arquivo:
- `enterprise/app/services/captain/inter/cob_service.rb`
### 2.5 Unidade vinculada ao Inbox
- O Inbox da conversa deve estar ligado a uma unidade:
- `conversation.inbox.captain_inbox.unit`.
### 2.6 Precos e sinal (Pix 50%)
- **Preco enviado ao cliente** vem de `Captain::Pricing`:
- UI: `/accounts/:accountId/captain/pricings` (Dashboard > Captain > Pricings).
- API: `GET /api/v1/accounts/:account_id/captain/pricings`.
- **Pix Copia e Cola** cobra 50% do `total_amount`:
- `enterprise/app/services/captain/inter/cob_service.rb` (WhatsApp/Conversas).
- `app/services/captain/inter_service.rb` (API publica).
## 3. Fluxo tecnico detalhado (estado)
1) **Atualiza contato**
- `update_contact` grava nome/CPF no contato.
2) **Criar rascunho**
- `create_reservation_intent(suite, price)` cria reserva `draft`.
3) **Gerar Pix**
- `generate_pix` busca o ultimo `draft` e gera Pix.
- Atualiza reserva para `pending_payment`.
- Envia Pix Copia e Cola como mensagem unica (somente o codigo).
- Se ja existir Pix em `pending_payment`, reenvia se ainda valido; se expirado (1h), gera um novo.
Arquivos:
- `enterprise/app/services/captain/tools/update_contact_tool.rb`
- `enterprise/app/services/captain/tools/create_reservation_intent_tool.rb`
- `enterprise/app/services/captain/tools/generate_pix_tool.rb`
## 4. Fallback automatico (quando o sub-agente falha)
Se o sub-agente `Daniela Reservas` retorna erro, o fallback executa:
- Extrair nome/CPF do texto recebido.
- Atualizar contato com nome/CPF.
- Reutilizar `pending_payment` se ja existir Pix (reenviar mensagem).
- Se nao houver rascunho, criar `draft` via `create_reservation_intent`.
- Gerar Pix via `generate_pix`.
Arquivo:
- `enterprise/lib/captain/tools/scenario_delegator_tool.rb`
## 5. Checklist rapido para restaurar se quebrar
1) **Cenario Daniela habilitado** no assistente Jasmine.
2) **Ferramentas listadas** no cenario: `update_contact`, `check_availability`, `create_reservation_intent`, `generate_pix`.
3) **JasmineBrain** retorna `tool_input` (nao pode ser perdido).
4) **ToolRunner** passa `tool_input` para ferramentas e seta `pergunta_interna`.
5) **ScenarioDelegatorTool** chama runner corretamente e fallback ativo.
6) **Unit do inbox** com dados do Inter (pix key, conta, certificados).
## 6. Logs de referencia (sinais de sucesso)
- `CreateReservationIntentTool`:
- `SUCCESS: Reserva iniciada com sucesso!`
- `GeneratePixTool`:
- `Cobrança Pix gerada com sucesso. Copia e Cola enviado...`
- Mensagem enviada no WhatsApp com:
- apenas o codigo Pix (uma mensagem dedicada)
Logs uteis:
- `log/tool_debug.log`
- `log/development.log`
- `log/brain_debug.log`
## 7. Alertas comuns
- `undefined method 'type' for an instance of String` dentro do sub-agente.
- O fallback cobre isso, mas se quebrar verifique o runner.
- `Text and attachments cannot be both nil`.
- Evitar mensagens vazias no contexto.
- `Incorrect API key`.
- Ajustar `assistant.api_key` ou `CAPTAIN_OPEN_AI_API_KEY`.