132 lines
4.7 KiB
Markdown
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`.
|