SincroDev Logo SincroDev

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_tecnico
  • facturacion
  • ventas
  • reclamo
  • duda_general

Y ejemplo de prioridades:

  • baja
  • media
  • alta

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 finanzas
  • ventas -> CRM
  • soporte_tecnico -> cola de soporte
  • reclamo + 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:

  1. categorías accionables
  2. salida JSON estricta
  3. validación posterior
  4. fallback a revisión manual
  5. integración con un flujo operativo real
  6. 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í.