# Captura y Almacenamiento de Datos: Gestión Efectiva de Información del Usuario

## Introducción

Los datos son el combustible de un chatbot efectivo. Capturar la información correcta, en el momento adecuado, y almacenarla de forma segura es crucial para personalización, seguimiento y cumplimiento legal. En este artículo, aprenderás estrategias completas de gestión de datos en chatbots.

## Tipos de Datos a Capturar

### Datos de Identificación

| Dato | Cuándo Capturar | Validación | Ejemplo |
|——|—————–|————|———|
| **Nombre** | Inicio de conversación | Mínimo 2 caracteres | «María González» |
| **Email** | Pre-compra, registro | Formato email válido | «maria@email.com» |
| **Teléfono** | Entrega, contacto urgente | 10 dígitos | «5512345678» |
| **Dirección** | Checkout, envío | Mínimo 10 caracteres | «Calle Reforma 123…» |

### Datos de Comportamiento

| Dato | Cómo Capturar | Uso |
|——|—————|—–|
| **Última Visita** | Automático (timestamp) | Re-engagement |
| **Productos Vistos** | Tracking de clics | Recomendaciones |
| **Carrito Abandonado** | Detectar cuando agrega pero no compra | Recuperación |
| **Páginas Visitadas** | Historial de navegación | Intereses |

### Datos de Preferencias

«`
Pregunta: «¿Cómo prefieres recibir ofertas?»

Opciones:
[WhatsApp] [Email] [SMS] [No deseo]

Guardar en: preferencia_comunicacion
«`

**Uso:** Personalizar canal de comunicación futuro.

## Estrategias de Captura de Datos

### 1. Captura Progresiva (Progressive Profiling)

**Concepto:** Pedir datos en múltiples interacciones, no todo de una vez.

**MAL (Fricción Alta):**
«`
Primera Interacción:
Nombre:
Apellido:
Email:
Teléfono:
Dirección:
Ciudad:
Código Postal:
Fecha de Nacimiento:

→ Usuario abandona (76% abandono)
«`

**BIEN (Captura Progresiva):**
«`
Interacción 1:
Nombre:
Email:

Interacción 2 (próxima compra):
Teléfono:

Interacción 3 (al hacer checkout):
Dirección:
«`

**Ventaja:** 42% menos abandono, mejor experiencia.

### 2. Captura Implícita vs. Explícita

**Implícita (Sin Preguntar):**
«`
// Captura automáticamente:
– Número de WhatsApp (ya disponible)
– Hora de contacto
– Dispositivo (móvil/desktop)
– Ubicación (si usuario comparte)
«`

**Explícita (Preguntando):**
«`
Pregunta: «¿Cuál es tu email?»
Usuario: «maria@email.com»
Guardar: email = «maria@email.com»
«`

**Equilibrio:** Captura implícitamente todo lo que puedas, pregunta explícitamente solo lo esencial.

### 3. Captura Contextual

**MAL (Fuera de Contexto):**
«`
Inicio de conversación:
Bot: «Hola! ¿Cuál es tu dirección?»
Usuario: «¿Para qué?» [confusión]
«`

**BIEN (En Contexto):**
«`
Después de seleccionar producto:
Bot: «Perfecto! Para enviarte el producto, ¿cuál es tu dirección?»
Usuario: [Proporciona dirección]
«`

**Regla:** Justifica SIEMPRE por qué pides cada dato.

## Validación de Datos

### Validación en Tiempo Real

#### Email
«`
Nodo: Pregunta de Email

Validación:
Formato: regex /^[^\s@]+@[^\s@]+\.[^\s@]+$/

Ejemplos Válidos:
✅ usuario@gmail.com
✅ maria.gonzalez@empresa.com.mx

Ejemplos Inválidos:
❌ usuario@gmail (sin .com)
❌ @gmail.com (sin usuario)
❌ usuario gmail.com (sin @)

Mensaje de Error:
«Email inválido. Debe tener formato: usuario@dominio.com»

Reintentos: 3
Después de 3 errores: Ofrecer escribir manualmente o saltar
«`

#### Teléfono (México)
«`
Validación:
Formato: 10 dígitos
Regex: /^[0-9]{10}$/

Ejemplos Válidos:
✅ 5512345678
✅ 3331234567

Ejemplos Inválidos:
❌ 55-1234-5678 (con guiones)
❌ 551234567 (9 dígitos)
❌ 555-1234 (7 dígitos)

Normalización:
Input: «55 1234 5678»
Normalizado: «5512345678»
«`

#### Código Postal
«`
Validación:
Exactamente 5 dígitos
Regex: /^[0-9]{5}$/

Validación Avanzada:
Consultar API de códigos postales válidos de México

Si Inválido:
«Código postal no encontrado. ¿Podrías verificarlo?»
«`

#### Fecha
«`
Formatos Aceptados:
– DD/MM/YYYY (25/01/2024)
– YYYY-MM-DD (2024-01-25)

Validaciones:
– Formato correcto
– Fecha existe (no 32/01/2024)
– Dentro de rango permitido

Ejemplo (Reserva):
Fecha Mínima: Hoy
Fecha Máxima: +60 días

Si fuera de rango:
«Solo aceptamos reservas con máximo 60 días de anticipación»
«`

### Validación Post-Captura

«`
Después de capturar email:

Nodo: Verificar Email

Acción: Enviar código de 6 dígitos a email
Pregunta: «Te enviamos un código a {{email}}. ¿Cuál es?»

Validación:
Input usuario == código_enviado

Si correcto:
email_verificado = True

Si incorrecto (3 intentos):
«No coincide. ¿Quieres que lo reenviemos o cambiar el email?»
«`

## Almacenamiento de Datos

### Variables de Sesión vs. Persistentes

#### Variables de Sesión (Temporales)
«`
Duración: Solo durante la conversación activa
Uso: Datos temporales de flujo

Ejemplos:
– producto_seleccionado
– paso_actual
– intento_actual
«`

#### Variables Persistentes (Permanentes)
«`
Duración: Indefinida (guardadas en base de datos)
Uso: Datos del usuario para futuras conversaciones

Ejemplos:
– nombre
– email
– historial_compras
– preferencias
«`

### Configuración de Persistencia

«`
Nodo: Guardar Datos del Usuario

Acción: Guardar en Base de Datos

Tabla: usuarios

Campos:
whatsapp_id: {{telefono}} (Primary Key)
nombre: {{nombre}}
email: {{email}}
fecha_registro: {{fecha_actual}}
ultima_interaccion: {{fecha_hora_actual}}

Operación:
SI usuario existe:
UPDATE (actualizar ultima_interaccion)
SI NO:
INSERT (crear nuevo registro)
«`

## Privacidad y Cumplimiento Legal

### GDPR y Leyes de Protección de Datos

#### Consentimiento Explícito

**Requerido en México (Ley Federal de Protección de Datos Personales):**

«`
Antes de capturar datos sensibles:

Mensaje:
«Para continuar, necesitamos tu consentimiento para recopilar y procesar tus datos personales.

Lee nuestro Aviso de Privacidad: [link]

¿Aceptas?»

[Sí, acepto] [Leer Aviso] [No acepto]

Guardar:
consentimiento_fecha: {{fecha_actual}}
consentimiento_ip: {{ip_usuario}}
acepto_privacidad: True
«`

**Obligatorio Registrar:**
– Qué aceptó
– Cuándo aceptó
– Dónde aceptó (IP, canal)

#### Derecho al Olvido (Right to be Forgotten)

**Implementar Comando:**
«`
Usuario escribe: «Eliminar mis datos» o «ARCO»

Bot:
«Entiendo que deseas ejercer tus derechos ARCO (Acceso, Rectificación, Cancelación, Oposición).

¿Qué deseas hacer?»

[Ver Mis Datos]
[Actualizar Datos]
[Eliminar Mis Datos]
[Cancelar]

Si selecciona «Eliminar Mis Datos»:
→ Proceso de confirmación
→ Eliminación en 30 días (período de gracia)
→ Notificación de confirmación
«`

### Datos Sensibles

**Definición (LFPDPPP):**
– Origen racial/étnico
– Estado de salud
– Información genética
– Creencias religiosas/filosóficas
– Afiliación sindical
– Opiniones políticas
– Preferencia sexual

**NUNCA capturar en chatbot sin:**
1. Consentimiento explícito separado
2. Justificación legal clara
3. Medidas de seguridad reforzadas
4. Cifrado end-to-end

## Seguridad de Datos

### Cifrado

**En Tránsito:**
«`
✅ HTTPS obligatorio
✅ TLS 1.2+ para APIs
✅ Certificados SSL válidos
«`

**En Reposo:**
«`
// Ejemplo de cifrado de datos sensibles:

Antes de guardar en BD:
email_cifrado = encrypt(email, clave_maestra)

Al recuperar:
email_descifrado = decrypt(email_cifrado, clave_maestra)
«`

**Campos a Cifrar:**
– Emails
– Teléfonos
– Direcciones
– Datos de pago (NUNCA almacenar CVV)

### Tokens vs. Datos Reales

**Para Pagos (PCI-DSS Compliance):**

«`
MAL (Almacenar Tarjeta):
numero_tarjeta: «4111111111111111»
cvv: «123»
expiracion: «12/25»

BIEN (Usar Tokenización):
token_pago: «tok_Wh8F3k92jD…»
ultimos_4_digitos: «1111»
marca: «Visa»

// El token lo proporciona Stripe/Mercado Pago/etc.
// NUNCA manejar tarjetas directamente
«`

## Enriquecimiento de Datos

### Autocompletado con APIs Externas

#### Ejemplo: Autocompletar Dirección con Código Postal

«`
Usuario ingresa: «06600»

Nodo: Consultar API de Códigos Postales

API Call: GET https://api-sepomex.hckdrk.mx/query/get_codigo_postal/06600

Respuesta:
{
«codigo_postal»: «06600»,
«estado»: «Ciudad de México»,
«municipio»: «Cuauhtémoc»,
«colonias»: [«Juárez», «Centro»]
}

Bot:
«Tu código postal es de {{municipio}}, {{estado}}.
¿En qué colonia?»

[Lista de colonias disponibles]
«`

**Beneficio:** Usuario no tiene que escribir manualmente ciudad/estado.

### Normalización de Datos

«`
Input del Usuario:
nombre: » MARÍA gonzález »
email: «Maria@GMAIL.COM»
telefono: «55 1234 5678»

Normalización:
nombre: «María González» (capitalizar correctamente)
email: «maria@gmail.com» (lowercase)
telefono: «5512345678» (eliminar espacios)
«`

**Funciones de Normalización:**
«`javascript
// Nombre
function normalizarNombre(nombre) {
return nombre
.trim()
.toLowerCase()
.split(‘ ‘)
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
.join(‘ ‘);
}

// Email
function normalizarEmail(email) {
return email.trim().toLowerCase();
}

// Teléfono
function normalizarTelefono(tel) {
return tel.replace(/\D/g, »); // Solo dígitos
}
«`

## Gestión de Datos Duplicados

### Detección de Usuarios Existentes

«`
Flujo de Registro:

1. Pregunta: «¿Cuál es tu email?»
2. Acción: Buscar email en base de datos

SI encontrado:
usuario_existente = True
Mensaje: «Vi que ya tienes cuenta con nosotros, {{nombre}}! 😊
¿Quieres actualizar algún dato?»

[No, está bien]
[Sí, actualizar]

SI NO encontrado:
usuario_existente = False
Mensaje: «Perfecto! Eres nuevo por aquí. Bienvenido!»
→ Continuar flujo de registro completo
«`

### Merge de Datos

**Escenario:** Usuario contacta desde 2 números diferentes.

«`
Número A: +52 55 1111 1111
Datos: nombre=»María», email=»maria@email.com»

Número B: +52 55 2222 2222
Datos: nombre=»María González», email=»maria@email.com»

Detección: Mismo email

Acción:
1. Marcar como duplicado
2. Preguntar: «Veo que tienes 2 números registrados. ¿Cuál prefieres usar?»
3. Merge datos (quedarse con el más completo)
4. Marcar número secundario como «alias»
«`

## Exportación de Datos

### Dashboard de Datos Capturados

**Métricas Clave:**
«`
Total de Usuarios: 5,234
– Con Email: 4,890 (93%)
– Con Teléfono: 5,234 (100%)
– Con Dirección: 3,100 (59%)

Completitud Promedio de Perfil: 67%

Datos Faltantes Más Comunes:
1. Fecha de Nacimiento (78% faltante)
2. Dirección (41% faltante)
3. Preferencias de Comunicación (35% faltante)
«`

### Exportar para Análisis

«`
Formatos de Exportación:
– CSV: Para Excel, análisis manual
– JSON: Para integraciones técnicas
– SQL Dump: Para backups

Filtros:
– Usuarios activos últimos 30 días
– Usuarios con compras >$1000
– Usuarios sin email
– Usuarios que aceptaron marketing
«`

**Ejemplo CSV:**
«`
nombre,email,telefono,ultima_compra,total_gastado,acepto_marketing
María,maria@email.com,5512345678,2024-01-15,2500,true
Juan,juan@email.com,5599887766,2024-01-10,800,false
«`

## Retención de Datos

### Políticas de Retención

**Recomendación Legal (México):**

| Tipo de Dato | Retención Mínima | Retención Máxima | Acción al Expirar |
|————–|——————|——————|——————-|
| **Transacciones** | 5 años (fiscal) | 10 años | Archivar |
| **Datos Personales** | N/A | Hasta que usuario pida eliminar | Eliminar |
| **Logs de Actividad** | 6 meses | 2 años | Eliminar |
| **Datos de Marketing** | N/A | Renovar consentimiento cada 2 años | Eliminar si no renueva |

### Limpieza Automática

«`
Tarea Programada (Diaria):

SI usuario_inactivo > 2 años Y sin_compras:
Acción:
1. Enviar email: «Tu cuenta será eliminada en 30 días por inactividad»
2. Esperar 30 días
3. SI NO hay respuesta:
– Anonimizar datos (mantener ID para análisis)
– Eliminar PII (nombre, email, teléfono)
– Mantener datos agregados (edad, ciudad, total compras)
«`

## Mejores Prácticas

### DO ✅

1. **Justifica cada dato pedido**
«`
MAL: «¿Tu fecha de nacimiento?»
BIEN: «¿Tu fecha de nacimiento? Te enviaremos un regalo especial 🎁»
«`

2. **Captura progresivamente**
– Primera vez: Mínimo (nombre, email)
– Segunda interacción: Teléfono
– Al comprar: Dirección

3. **Valida inmediatamente**
– Formato correcto
– Datos lógicos (no nacimiento en futuro)

4. **Normaliza y limpia**
– Lowercase en emails
– Capitalizar nombres
– Eliminar espacios extra

5. **Cifra datos sensibles**
– Emails, teléfonos, direcciones
– Nunca almacenar contraseñas en texto plano

### DON’T ❌

1. **No pidas datos innecesarios**
«`
❌ «¿Tu nivel de estudios?» (si vendes zapatos)
«`

2. **No captures sin consentimiento**
«`
❌ Capturar email de firmante digital sin avisar
«`

3. **No almacenes tarjetas**
«`
❌ NUNCA guardar CVV
❌ Usar tokenización (Stripe, Mercado Pago)
«`

4. **No compartas datos sin permiso**
«`
❌ Vender/compartir emails a terceros sin consentimiento explícito
«`

## Checklist de Captura de Datos

Antes de publicar flujo con captura de datos:

– [ ] Aviso de Privacidad visible y accesible
– [ ] Consentimiento explícito antes de capturar
– [ ] Justificación clara de por qué pides cada dato
– [ ] Validación implementada para cada campo
– [ ] Normalización de datos activada
– [ ] Cifrado de datos sensibles configurado
– [ ] Políticas de retención definidas
– [ ] Derecho al olvido implementado
– [ ] Backups programados
– [ ] Logs de acceso a datos habilitados

## Conclusión

La captura y almacenamiento efectivo de datos es fundamental para un chatbot personalizado y eficiente, pero debe equilibrarse con privacidad y cumplimiento legal. Puntos clave:

1. **Captura progresiva** – No abrumes al inicio
2. **Valida siempre** – Datos incorrectos = problemas
3. **Protege celosamente** – Cifrado y seguridad
4. **Cumple la ley** – GDPR, LFPDPPP
5. **Transparencia** – Usuario sabe qué, cómo y por qué

**Próximos pasos:**
– [Variables Personalizadas](/docs/chatbot-builder/builder-variables-datos/variables-personalizadas)
– [Contexto de Conversación](/docs/chatbot-builder/builder-variables-datos/contexto-conversacion)

**Artículo actualizado:** Enero 2024 | **Categoría:** Chatbot Builder – Variables y Datos | **Dificultad:** Intermedio

Compartir artículo