← SCRAM AI Lab

Tutoriales

AI nudges automáticos sobre datos del CRM

Detectar patrones en deals, contactos y actividades para generar recomendaciones accionables que un vendedor abre en 24h. SQL primero, LLM después — no al revés.

May 21, 2026

5 lecturas

El nudge que el vendedor abre es el que usaste SQL para detectar

El error que vemos en todos los CRMs que prometen "AI insights" es pedirle al LLM que encuentre los patrones. No los va a encontrar: los costos explotan, las latencias son atroces y la mitad de las recomendaciones son alucinadas. El patrón que funciona en producción es invertido: SQL detecta, LLM contextualiza. La máquina relacional sabe contar; el LLM sabe redactar el mensaje que el vendedor abre desde su iPhone a las 9 PM.

Los 4 tipos de nudge que importan

Después de mirar métricas de adopción en cinco clientes, estos son los únicos que pasan el filtro de "el vendedor lo abre y actúa":

  • Deal stale 14d+: deals en stage activo sin actividad registrada
  • Contacto inactivo high-score: lead score 70+ sin tocar en 21d
  • Tareas overdue del owner: agrupadas por contacto para evitar spam
  • Deal high-value / low-probability: monto sobre el top 20%, probabilidad bajo 30%

Nótese lo que no está: "contacto cumple años", "se acerca renovación en 6 meses", "el clima está bueno para llamar". Calendar reminders no son nudges; son ruido.

Detector SQL para deals stale

SELECT d.id, d.title, d.amount, d.stage, d.owner_id,
       c.full_name, c.email,
       MAX(a.created_at) AS last_activity
FROM crm_deal d
JOIN crm_contact c ON c.id = d.primary_contact_id
LEFT JOIN crm_activity a ON a.deal_id = d.id
WHERE d.status = 'open'
  AND d.stage IN ('qualified', 'proposal', 'negotiation')
GROUP BY d.id, c.id
HAVING MAX(a.created_at) < NOW() - INTERVAL '14 days'
   OR MAX(a.created_at) IS NULL
ORDER BY d.amount DESC
LIMIT 50;

Contextualizar con Claude Sonnet

Para cada fila del SQL, hacemos una sola llamada a Claude Sonnet 4.6 (tier 2 en nuestro router) con el contexto mínimo del deal y el historial de actividad. El prompt:

const prompt = `Eres un asesor comercial revisando un deal stale.

Deal: ${deal.title} - $${deal.amount} MXN
Stage: ${deal.stage}
Contacto: ${contact.full_name} (${contact.email})
Última actividad: ${daysSince} días atrás - ${lastActivity.type}
Historial reciente: ${activitySummary}

Genera UN nudge accionable de 2 frases para el vendedor:
1. Por qué este deal merece atención AHORA
2. Acción concreta sugerida (llamar / email específico / agendar)

No saludes. No expliques que es un nudge. Directo al grano.`;

Costo por nudge: ~$0.003 USD. Para 50 nudges diarios son $4.50/mes por org. La alternativa de Opus es 5x más cara y no mueve la métrica.

La métrica que importa

Trackeen nudges atendidos en 24h, no nudges generados. Un nudge atendido es uno donde el vendedor registra actividad sobre ese deal/contacto en las 24h siguientes a haber abierto el panel. En SCRAM ese ratio es 41%; cuando bajaba de 30% sabíamos que el detector SQL estaba generando ruido (umbral de días mal, stages incorrectos) y volvíamos a tunear.

Push vs pull

No hacemos push notifications. Los nudges viven en un widget del dashboard que el vendedor revisa en su rutina matutina. Push agresivo a Slack/email destruye la señal en dos semanas: aprenden a ignorarlos. El nudge debe ser un regalo, no una interrupción.

La pregunta abierta: ¿qué pasa cuando el LLM aprende del comportamiento del vendedor (cuáles atiende, cuáles ignora) y reordena? Estamos probando un bandit contextual encima del detector SQL — primeros resultados en el siguiente artículo de esta serie.

ai-nudges
crm
automatizacion
← Volver a SCRAM AI Lab