feat(whatsapp): QWEN primary AI backend, Hermes fallback, conversation history, vehicle persistence, demo prompts

- Add QWEN (qwen3.6) as primary AI backend with short system prompt
- Hermes remains as fallback with 45s timeout
- Increase QWEN timeout to 35s, max_tokens to 4000
- Add conversation history loading from whatsapp_messages (last 4 msgs)
- Persist detected vehicle in whatsapp_sessions table
- Add 'limpiar chat' / 'nuevo chat' / 'reset' commands to clear history
- Fix CSS conflict: rename whatsapp chat-panel classes to wa-chat-panel
- Fix JS ID conflicts with chat.js widget (waChatPanel, waChatMessages, etc.)
- Improve no-stock response: conversational with alternatives
- Split search_query by | for multi-part lookups
- Add DEMO_PROMPTS.md and DEMO_PROMPTS_V2.md
This commit is contained in:
2026-05-06 20:27:14 +00:00
parent 371d72887e
commit ff45905b49
33 changed files with 3040 additions and 445 deletions

198
DEMO_PROMPTS_V2.md Normal file
View File

@@ -0,0 +1,198 @@
# 🧪 10 Prompts de Demo — Funcionalidades del Agente WhatsApp
> Usa estos prompts en orden o saltando entre ellos para mostrar la versatilidad del agente.
---
## 1. Búsqueda directa con vehículo clásico mexicano
**Prompt:**
```
Necesito bujías para un Nissan Tsuru 2015
```
**¿Qué demuestra?**
- Detección precisa de vehículo mexicano clásico (Tsuru)
- Traducción automática a inglés: `Spark Plug`
- Búsqueda en inventario local con compatibilidad de vehículo
**Respuesta esperada:** Tabla de bujías NGK/Bosch con stock y precios.
---
## 2. Diagnóstico por síntoma — suspensión
**Prompt:**
```
Mi carro se jala hacia la izquierda al frenar, qué puede ser?
```
**¿Qué demuestra?**
- Capacidad de diagnóstico sin mencionar una parte específica
- Relaciona síntoma con partes probables: terminales, rotulas, balatas del lado izquierdo
- Genera `search_query`: `Tie Rod End`
**Respuesta esperada:** Diagnóstico + lista de partes probables ordenadas por probabilidad.
---
## 3. Cotización de kit completo — embrague
**Prompt:**
```
Cuánto cuesta cambiar el clutch de un Pointer 2010?
```
**¿Qué demuestra?**
- Detecta "Pointer" como modelo mexicano
- Interpreta "cambiar el clutch" como kit completo (embrague + plato + collarín)
- Genera múltiples `search_query` separados por `|`: `Clutch Kit|Clutch Plate|Release Bearing`
**Respuesta esperada:** Lista de componentes del kit de embrague con precios.
---
## 4. Mantenimiento preventivo — servicio de 50,000 km
**Prompt:**
```
Quiero el servicio de 50 mil kilómetros para mi Jetta 2019
```
**¿Qué demuestra?**
- Entiende "servicio de 50,000 km" como paquete de mantenimiento
- Genera lista completa: aceite, filtros, bujías, refrigerante, frenos
- `search_query`: `Oil Filter|Air Filter|Spark Plug|Coolant|Brake Pad`
**Respuesta esperada:** Paquete de servicio con todas las partes necesarias.
---
## 5. Parte sin especificar vehículo (prueba de persistencia)
**Prompt:**
```
Y el filtro de aceite cuánto cuesta?
```
**¿Qué demuestra?**
- **Contexto persistente:** recuerda que se habló del Jetta 2019 (prompt 4)
- No pide "¿para qué carro?" de nuevo
- Usa el vehículo guardado en sesión automáticamente
**Respuesta esperada:** Precio del filtro de aceite compatible con Jetta 2019.
---
## 6. Falla eléctrica — no arranca
**Prompt:**
```
Mi camioneta no quiere arrancar en las mañanas, qué le puede faltar?
```
**¿Qué demuestra?**
- Diagnóstico eléctrico sin mencionar parte específica
- Sugiere: batería, motor de arranque, alternador, cables de bujías
- `search_query`: `Starter Motor` (la parte más probable)
**Respuesta esperada:** Diagnóstico con 3-4 partes posibles + la más probable primero.
---
## 7. Combo de frenos completos
**Prompt:**
```
Cotízame frenos completos delanteros para un Aveo 2017
```
**¿Qué demuestra?**
- Interpreta "frenos completos delanteros" como combo: balatas + discos + líquido
- Genera `search_query`: `Brake Pad|Brake Disc|Brake Fluid`
- Ofrece cotización de múltiples ítems de una sola vez
**Respuesta esperada:** Tabla con balatas, discos y líquido de frenos compatibles.
---
## 8. Parte para vehículo europeo (sin stock local)
**Prompt:**
```
Busco un radiador para Audi A4 2021
```
**¿Qué demuestra?**
- Detección de vehículo europeo con formato correcto
- Cuando no hay stock, responde de forma conversacional (NO un mensaje seco)
- Ofrece alternativas: pedido por encargo, equivalentes, o tiendas cercanas
**Respuesta esperada:**
> "No encontré ese radiador en stock para tu Audi A4 2021, pero puedo:
> • Pedirlo por encargo con 3-5 días de entrega
> • Buscar un equivalente de otra marca
> ¿Qué prefieres?"
---
## 9. Agregar segunda parte a cotización abierta
**Prompt:**
```
También agrega un filtro de aire
```
**¿Qué demuestra?**
- Flujo conversacional de cotización multi-paso
- Agrega ítem adicional a la cotización ya abierta
- Actualiza conteo de productos y total parcial
**Respuesta esperada:**
> "✅ *Filtro de aire* × 1 agregado. Llevas 4 productos — total parcial: $1,240.50"
---
## 10. Confirmar pedido y cerrar venta
**Prompt:**
```
Sí, todo bien, confirmo el pedido
```
**¿Qué demuestra?**
- Detecta intención de confirmación ("sí", "confirmo", "todo bien")
- Cierra la cotización como pedido confirmado
- Genera número de pedido y mensaje de cierre profesional
**Respuesta esperada:**
> "✅ *Pedido confirmado!*
> Tu cotización #42 fue registrada.
> Nos pondremos en contacto contigo para coordinar la entrega.
> ¡Gracias por tu compra! 🙏"
---
## 🎬 Sugerencia de guión para la demo (8-10 minutos)
| Minuto | Prompt | Efecto demo |
|--------|--------|-------------|
| 0:00 | Prompt 1 (Tsuru bujías) | Saludo rápido, resultados en 2s |
| 0:45 | Prompt 2 (se jala al frenar) | Diagnóstico inteligente |
| 1:45 | Prompt 4 (servicio Jetta) | Paquete completo de mantenimiento |
| 3:00 | Prompt 5 (filtro de aceite) | "¿Recuerdas el carro?" — contexto persistente |
| 3:45 | Prompt 7 (frenos Aveo) | Cotización múltiple con tabla |
| 4:45 | Prompt 9 (agregar filtro de aire) | Cotización conversacional |
| 5:30 | Prompt 10 (confirmo pedido) | Cierre de venta |
| 6:00 | Prompt 8 (Audi sin stock) | Manejo elegante de "no tengo" |
| 6:45 | Prompt 3 (Pointer clutch) | Kit completo con precios |
| 7:30 | Prompt 6 (no arranca) | Diagnóstico final |
---
## 🛡️ Plan de contingencia
Si en algún momento QWEN tarda más de 30 segundos:
1. Decir: *"Voy a reenviar el mensaje, a veces el asistente necesita un segundo intento"*
2. Reenviar el mismo prompt
3. Si sigue lento, usar `limpiar chat` y empezar ese flujo de nuevo