Clasificación automática de correos o tickets con IA
Hay una clase de tareas donde los LLM aportan valor muy rápido:
- leer texto corto
- detectar intención
- etiquetar
- proponer una acción inicial
Correos de soporte, formularios de contacto y tickets entrantes encajan perfecto en ese patrón.
No necesitas que el modelo “resuelva todo”.
Necesitas que haga bien una primera clasificación para ordenar el flujo.
Qué vas a construir
Vamos a diseñar un clasificador que tome un mensaje entrante y devuelva una salida estructurada como esta:
{
"categoria": "facturacion",
"prioridad": "alta",
"sentimiento": "molesto",
"accion_sugerida": "escalar_a_finanzas"
}
Esa salida luego puede alimentar:
- un sistema de tickets
- una automatización en n8n
- alertas a Slack
- reglas de asignación interna
Cuándo conviene esta solución
Tiene sentido cuando:
- entra volumen suficiente de mensajes
- las categorías ya están relativamente claras
- quieres ahorrar tiempo de triage manual
No conviene cuando:
- el volumen es mínimo
- cada caso requiere análisis experto desde el primer segundo
- ni siquiera tienes definidas las categorías operativas
Regla práctica: si el equipo todavía discute “qué significa cada tipo de ticket”, primero define eso.
Paso 1: Define categorías útiles para la operación
No empieces por el prompt. Empieza por el negocio.
Ejemplo de categorías:
soporte_tecnicofacturacionventasreclamoduda_general
Y ejemplo de prioridades:
bajamediaalta
Si las categorías no son accionables, la clasificación no sirve de mucho.
Paso 2: Decide qué salida estructurada necesitas
Una forma mínima razonable:
{
"categoria": "soporte_tecnico",
"prioridad": "media",
"sentimiento": "neutral",
"accion_sugerida": "asignar_a_soporte"
}
Puedes añadir más campos si realmente los vas a usar:
- idioma
- cliente_existente
- producto
- urgencia_detectada
Pero no agregues 12 campos solo porque “la IA puede”.
Paso 3: Obliga al modelo a responder en JSON
Este punto es clave.
Si el output va a entrar en un flujo automático, texto libre no alcanza.
Un prompt inicial podría ser:
Analiza el siguiente mensaje y responde en JSON estricto.
Campos requeridos:
- categoria: soporte_tecnico | facturacion | ventas | reclamo | duda_general
- prioridad: baja | media | alta
- sentimiento: positivo | neutral | molesto
- accion_sugerida: asignar_a_soporte | escalar_a_finanzas | derivar_a_ventas | responder_faq | revision_manual
Si el mensaje no permite clasificar con seguridad, usa:
- categoria: duda_general
- accion_sugerida: revision_manual
Mensaje:
"""
{texto}
"""
La diferencia entre output estructurado y conversación suelta cambia completamente la facilidad de integración.
Paso 4: Añade ejemplos
Los ejemplos ayudan mucho a estabilizar comportamiento.
Ejemplo:
Ejemplo 1
Mensaje: "Me cobraron dos veces la suscripción mensual"
Salida:
{
"categoria": "facturacion",
"prioridad": "alta",
"sentimiento": "molesto",
"accion_sugerida": "escalar_a_finanzas"
}
Con pocos ejemplos bien elegidos, la consistencia sube bastante.
Paso 5: Valida la salida del modelo
Nunca asumas que el JSON siempre saldrá bien.
Debes validar:
- que sea JSON válido
- que los campos existan
- que los valores estén dentro del conjunto esperado
Pseudocódigo:
allowed_categories = {"soporte_tecnico", "facturacion", "ventas", "reclamo", "duda_general"}
result = llm_classify(message)
if result["categoria"] not in allowed_categories:
result["categoria"] = "duda_general"
result["accion_sugerida"] = "revision_manual"
La IA no debería escribir directamente en tu operación sin una capa de validación.
Paso 6: Integra la clasificación a un flujo real
Una vez validada la salida, ya puedes usarla para automatización.
Ejemplo de flujo:
Email o ticket entrante
↓
LLM clasifica
↓
Validación del JSON
↓
Asignación por categoría
↓
Alerta / ticket / CRM
Casos típicos:
facturacion-> Slack finanzasventas-> CRMsoporte_tecnico-> cola de soportereclamo+alta-> revisión prioritaria
Paso 7: Diseña una salida segura por defecto
Siempre debería existir una ruta de fallback:
{
"categoria": "duda_general",
"prioridad": "media",
"sentimiento": "neutral",
"accion_sugerida": "revision_manual"
}
Eso es mucho mejor que una clasificación creativa pero incorrecta.
Ejemplo mínimo en pseudocódigo
message = "Hola, me cobraron el plan anual pero mi cuenta sigue bloqueada"
prompt = build_prompt(message)
result = llm.generate_json(prompt)
validated = validate_schema(result)
route(validated)
No hace falta complicarlo más para una primera versión útil.
Errores comunes
1) Querer demasiadas categorías desde el día uno
Si ni el equipo humano clasifica con claridad 14 tipos distintos, el modelo tampoco lo hará bien.
2) No usar salida estructurada
Texto libre es cómodo para leer, incómodo para automatizar.
3) No permitir revisión manual
Todo clasificador real necesita un carril de excepción.
4) Confiar ciegamente en el tono seguro del modelo
La clasificación puede sonar impecable y aun así estar mal.
5) No evaluar con mensajes reales
Si entrenas o pruebas con ejemplos artificiales, el sistema parece mejor de lo que realmente es.
Qué medir
Mide al menos:
- precisión por categoría
- frecuencia de fallback
- errores de alto impacto
- tiempo ahorrado en triage
No evalúes solo si “parece inteligente”.
Evalúa si realmente mejora el proceso.
Cuándo esto ya da valor
Este tipo de automatización suele justificar su costo rápido cuando:
- baja el tiempo de clasificación manual
- mejora el enrutamiento inicial
- hace visibles patrones que antes quedaban mezclados
Eso ya es una mejora operativa real, incluso si el modelo no es perfecto.
Resumen
Para clasificar correos o tickets con IA de forma útil necesitas:
- categorías accionables
- salida JSON estricta
- validación posterior
- fallback a revisión manual
- integración con un flujo operativo real
- evaluación con datos reales
La IA aquí no reemplaza al equipo. Le quita trabajo repetitivo al principio del flujo y permite que el tiempo humano vaya a donde sí importa.
Si quieres integrar este patrón a soporte, ventas u operaciones, o llevarlo a n8n, CRM o una API propia, puedes escribirme desde Sobre Mí.