Automatización con IA

Análisis de Feedback de Clientes

Agrega y analiza reseñas de clientes con análisis de sentimiento por IA

Flujo 10: Análisis de Feedback de Clientes

El problema

El feedback de clientes llega en formularios de satisfacción, reseñas de Google, emails de soporte y encuestas NPS. Nadie tiene tiempo de leerlo todo, clasificarlo y actuar. Las quejas graves se pierden entre el ruido de respuestas positivas. Las empresas que analizan su feedback sistemáticamente mejoran su NPS 20-30 puntos en un año. Este flujo convierte cada respuesta de Typeform en un análisis de sentimiento accionable, con escalado automático al equipo cuando el feedback es negativo.

Herramientas necesarias

Nodo n8n Función
Typeform Trigger Detecta cada nueva respuesta de la encuesta de satisfacción
HTTP Request Llama a Claude API para análisis de sentimiento y categorización
IF Bifurca según sentimiento: negativo vs positivo/neutro
Slack Alerta al equipo con feedback negativo (escalado inmediato)
Notion Registra todo el feedback analizado en la base de datos

Servicios externos:

  • Cuenta Typeform con formulario de satisfacción publicado
  • API Key de Anthropic (console.anthropic.com)
  • Workspace de Slack con canal #feedback-clientes
  • Integración Notion configurada en n8n

Configuración paso a paso

Nodo 1: Typeform Trigger

Añade el nodo Typeform Trigger:

  • Credentials: cuenta Typeform (OAuth2)
  • Form: tu encuesta de satisfacción o NPS
  • Simplify: ON

Estructura recomendada del formulario Typeform:

  • Pregunta NPS: "¿Cuánto nos recomendarías a un amigo?" (escala 0-10)
  • Pregunta abierta: "¿Qué es lo que más valoras de nuestro servicio?"
  • Pregunta abierta: "¿Qué mejorarías o qué no ha funcionado bien?"
  • Campo oculto: cliente_id (para vincular con el CRM)

Campos disponibles:

{{ $json['¿Cuánto nos recomendarías?'] }}    → puntuación NPS (0-10)
{{ $json['¿Qué más valoras?'] }}             → feedback positivo
{{ $json['¿Qué mejorarías?'] }}              → feedback de mejora
{{ $json['Email'] }}                          → email del respondiente

Nodo 2: Set — Preparar texto completo del feedback

Añade un nodo Set:

  • texto_feedback: expresión que concatena todas las respuestas abiertas
  • nps: ={{ $json['¿Cuánto nos recomendarías?'] }}
  • email_cliente: ={{ $json['Email'] || 'Anónimo' }}
  • fecha: ={{ $now.toFormat('dd/MM/yyyy HH:mm') }}
  • texto_completo:
=`NPS: ${$json['¿Cuánto nos recomendarías?']}/10

Lo que más valoro: ${$json['¿Qué más valoras?'] || 'Sin respuesta'}

Lo que mejoraría: ${$json['¿Qué mejorarías?'] || 'Sin respuesta'}`

Nodo 3: HTTP Request — Claude API (análisis de sentimiento)

Añade el nodo HTTP Request:

  • Method: POST
  • URL: https://api.anthropic.com/v1/messages
  • Authentication: Header Auth
    • x-api-key: tu API Key de Anthropic
  • Headers: anthropic-version: 2023-06-01, content-type: application/json
  • Body (JSON):
{
  "model": "claude-3-5-haiku-20241022",
  "max_tokens": 500,
  "messages": [
    {
      "role": "user",
      "content": "={{ $json.prompt_analisis }}"
    }
  ]
}

En el nodo Set anterior, crea el campo prompt_analisis:

Analiza este feedback de cliente y devuelve ÚNICAMENTE un JSON válido.

FEEDBACK:
{{ $json.texto_completo }}

Devuelve este JSON:
{
  "sentimiento": "positivo|negativo|neutro|mixto",
  "puntuacion_sentimiento": número del 1 al 10 (1=muy negativo, 10=muy positivo),
  "categoria_principal": "producto|precio|servicio|atencion_cliente|usabilidad|entrega|otro",
  "problema_especifico": "descripción breve del problema si existe, o null",
  "aspecto_positivo": "lo que destaca positivamente si existe, o null",
  "urgencia": "alta|media|baja",
  "requiere_respuesta": true si el cliente espera contacto, false si no,
  "resumen_accionable": "una frase con la acción que debería tomarse, máximo 20 palabras"
}

Nodo 4: Code — Parsear respuesta de Claude

Añade un nodo Code (JavaScript):

const respuesta = $input.first().json.content[0].text;
const limpio = respuesta.replace(/```json\n?/g, '').replace(/```\n?/g, '').trim();
const analisis = JSON.parse(limpio);

return [{json: {
  ...analisis,
  nps: $('Set').item.json.nps,
  email_cliente: $('Set').item.json.email_cliente,
  texto_original: $('Set').item.json.texto_completo,
  fecha: $('Set').item.json.fecha
}}];

Nodo 5: IF — Filtrar feedback negativo

Añade el nodo IF:

  • Condition 1:
    • Value 1: ={{ $json.sentimiento }}
    • Operation: Equals
    • Value 2: negativo
  • OR
  • Condition 2:
    • Value 1: ={{ $json.puntuacion_sentimiento }}
    • Operation: Smaller or Equal
    • Value 2: 4

Rama true → feedback negativo (alerta inmediata) Rama false → feedback positivo/neutro (solo log en Notion)

Nodo 6a: Slack — Alerta de feedback negativo (rama true)

Añade el nodo Slack:

  • Operation: Send a Message
  • Channel: #feedback-clientes
  • Text (expresión):
=`🚨 *FEEDBACK NEGATIVO — Atención requerida*

*NPS:* ${$json.nps}/10 | *Sentimiento:* ${$json.puntuacion_sentimiento}/10
*Categoría:* ${$json.categoria_principal}
*Urgencia:* ${$json.urgencia}

*Problema detectado:*
${$json.problema_especifico || 'Ver texto completo'}

*Acción recomendada:*
${$json.resumen_accionable}

*Texto original del cliente:*
_${$json.texto_original}_

*Cliente:* ${$json.email_cliente}
*Requiere respuesta directa:* ${$json.requiere_respuesta ? 'SÍ' : 'No necesariamente'}
*Fecha:* ${$json.fecha}`

Nodo 6b: Notion — Registrar todo el feedback

Añade el nodo Notion en ambas ramas (positivo y negativo):

  • Operation: Create a Page in Database
  • Database: tu base de datos de feedback en Notion
  • Title: ={{ $json.fecha }} — {{ $json.sentimiento }} — NPS: {{ $json.nps }}
  • Properties:
    • Sentimiento (Select): ={{ $json.sentimiento }}
    • Puntuacion_Sentimiento (Number): ={{ $json.puntuacion_sentimiento }}
    • NPS (Number): ={{ $json.nps }}
    • Categoria (Select): ={{ $json.categoria_principal }}
    • Urgencia (Select): ={{ $json.urgencia }}
    • Email_Cliente (Email): ={{ $json.email_cliente }}
    • Requiere_Respuesta (Checkbox): ={{ $json.requiere_respuesta }}
    • Fecha (Date): ={{ $now.toISO() }}
  • Content: añade un bloque de texto con el feedback original y el análisis completo

Ejemplo de prompt IA

Analiza este feedback de cliente:

FEEDBACK:
NPS: 3/10

Lo que más valoro: El producto funciona bien cuando funciona.

Lo que mejoraría: El soporte tarda 3 días en responder. La última actualización
rompió la exportación de informes y nadie nos avisó. Llevamos una semana
sin poder exportar nada. Es inaceptable para un servicio de pago.

Respuesta de Claude:

{
  "sentimiento": "negativo",
  "puntuacion_sentimiento": 2,
  "categoria_principal": "atencion_cliente",
  "problema_especifico": "Bug en exportación de informes post-actualización sin aviso, soporte con 3 días de respuesta",
  "aspecto_positivo": "Producto funciona correctamente en condiciones normales",
  "urgencia": "alta",
  "requiere_respuesta": true,
  "resumen_accionable": "Contactar cliente en menos de 2 horas, resolver bug de exportación y explicar protocolo de actualizaciones"
}

Ahorro estimado

Tarea Antes Con automatización
Leer y clasificar feedback manualmente 2 h/semana 0 min
Detectar quejas críticas en tiempo real Imposible (revisión semanal) Instantáneo
Registrar y categorizar en base de datos 1 h/semana 0 min
Total semanal 3 h/semana ~15 min (responder alertas urgentes)

Ahorro neto: ~2,75 horas/semana. El mayor valor no es el tiempo ahorrado: es responder a quejas críticas en minutos en lugar de días. Un cliente insatisfecho contactado en 2 horas tiene 5 veces más probabilidades de renovar que uno contactado en 3 días. Coste de Claude por análisis: ~€0,0005 por respuesta procesada.