Improve intent detection: keyword layer + better Gemini prompt

- Add detectarIntencionKeyword() with regex patterns in Colombian Spanish
  that runs before Gemini (instant, no API cost)
- Gemini is now only called for ambiguous text
- Improve Gemini prompt with real examples and informal Spanish
- Replace generic "no entendí" with actionable buttons

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro
2026-07-14 15:25:39 +00:00
co-authored by Claude Sonnet 4.6
parent a21675b12c
commit e43fe4043f
2 changed files with 81 additions and 18 deletions
+25 -12
View File
@@ -58,25 +58,38 @@ class GeminiIntentService
$promptExtra = ChatConfig::get('gemini_prompt_extra', '');
return <<<PROMPT
Eres un clasificador de intenciones para una tienda de streaming (peliculas, series).
Eres un clasificador de intenciones para SirPremium, una tienda colombiana de streaming (Netflix, Disney+, HBO, Spotify, etc.).
Los usuarios escriben en español latinoamericano informal, con jerga colombiana y errores ortográficos.
{$promptExtra}
Acciones validas (devuelve EXACTAMENTE una de estas en el campo "action"):
- menu.principal (usuario quiere ver el menu, inicio, ayuda general)
- servicios.listar (quiere ver servicios, planes, catalogo, que hay disponible)
- promo.listar (quiere ver promociones, ofertas, descuentos)
- recarga.iniciar (quiere recargar saldo, agregar dinero, cargar cuenta)
- credenciales.listar (quiere ver sus credenciales, usuario, contrasena, cuenta, acceso)
- historial.ver (quiere ver historial, compras anteriores, que ha comprado)
- perfil.ver (quiere ver su perfil, sus datos, su informacion)
- asesor.solicitar (quiere hablar con una persona, agente, asesor, humano, soporte)
Acciones válidas devuelve EXACTAMENTE una de estas:
- menu.principal saludo, "hola", "inicio", "volver", "menú", pedir ayuda general
- servicios.listar ver planes, catálogo, qué servicios hay, "quiero Netflix", "qué tienen", "cuánto vale", preguntar por precios
- promo.listar ver promociones, ofertas, combos, descuentos, "hay algo especial"
- recarga.iniciar recargar saldo, cargar dinero, "quiero poner saldo", "cómo recargo", "agregar plata", "depositar"
- credenciales.listar ver contraseña, cómo entrar, "no puedo acceder", "dame el usuario", "mis datos de Netflix", "cómo me conecto"
- historial.ver historial de compras, "qué he comprado", "mis pedidos", "mis servicios activos"
- perfil.ver ver perfil, mis datos personales, cambiar información
- asesor.solicitar hablar con persona, "quiero un asesor", "necesito ayuda de alguien", "soporte humano"
Ejemplos de clasificación:
"hacer recarga" recarga.iniciar
"quiero recargar" recarga.iniciar
"cargar saldo" recarga.iniciar
"poner plata" recarga.iniciar
"ver planes" servicios.listar
"qué tienen de Netflix" servicios.listar
"hay promociones" promo.listar
"mis contraseñas" credenciales.listar
"no puedo entrar a mi cuenta" credenciales.listar
"hablar con alguien" asesor.solicitar
Texto del usuario: "{$texto}"
Responde UNICAMENTE con un JSON valido, sin markdown, sin explicacion:
Responde ÚNICAMENTE con JSON válido, sin markdown, sin explicación:
{"action": "la_accion", "data": {}}
Si no puedes determinar la intencion con certeza, usa: {"action": "menu.principal", "data": {}}
Si el texto es completamente ambiguo o irrelevante, usa: {"action": "menu.principal", "data": {}}
PROMPT;
}