# Promoción por WhatsApp Sistema automatizado de promoción vía WhatsApp utilizando n8n, Supabase y WhatsApp Cloud API. --- # Descripción General Este flujo administra la interacción completa con usuarios mediante WhatsApp para registrar participantes en una promoción. Incluye: - Validación de mensajes entrantes - Gestión de consentimiento de privacidad y marketing - Registro de información del usuario - Validación y registro de códigos de productos - Control de estados del usuario - Prevención de fraude y spam --- # Tecnologías Utilizadas - n8n - Supabase - PostgreSQL - WhatsApp Cloud API --- # Arquitectura del Flujo El sistema funciona mediante una máquina de estados (`state machine`) donde cada usuario tiene un estado actual que determina la siguiente acción del flujo. ## Estados Disponibles - `CONSENT_PRIVACY` - `CONSENT_MARKETING` - `ASK_NAME` - `ASK_ID` - `ASK_EMAIL` - `ASK_LOCATION` - `ASK_CODE` - `MENU_AFTER_CODE` - `DONE` --- # Flujo General ## 1. Recepción y Normalización El flujo recibe mensajes desde WhatsApp y: - Extrae el contenido del mensaje - Detecta el tipo de mensaje: - Texto - Imagen - Interactivo - Normaliza caracteres y acentos - Filtra números bloqueados --- ## 2. Validación Inicial Si el mensaje no contiene contenido válido: - El flujo se detiene automáticamente --- ## 3. Creación o Consulta del Usuario Se ejecuta la función RPC: ```sql ensure_user_wa ``` Esta función: - Crea el usuario si no existe - Consulta el estado actual del usuario - Devuelve `out_state` --- # Router de Estados Según el valor de `out_state`, el flujo dirige al usuario a la etapa correspondiente. | Estado | Acción | | ----------------- | ---------------------------------- | | CONSENT_PRIVACY | Solicitar aceptación de privacidad | | CONSENT_MARKETING | Solicitar consentimiento marketing | | ASK_NAME | Solicitar nombre completo | | ASK_ID | Solicitar identificación | | ASK_EMAIL | Solicitar correo electrónico | | ASK_LOCATION | Solicitar ubicación | | ASK_CODE | Solicitar código del producto | | MENU_AFTER_CODE | Mostrar menú posterior | | DONE | Finalizar flujo | --- # Consentimientos ## Consentimiento de Privacidad El usuario puede responder: - `SI` - `NO` ### Comportamiento - `SI` → continúa el flujo - `NO` → se detiene el avance ### RPC utilizada ```sql set_consent_privacy_wa ``` --- ## Consentimiento de Marketing El usuario puede responder: - `SI` - `NO` ### Comportamiento - `SI` → opt-in marketing - `NO` → opt-out marketing ### RPC utilizada ```sql set_consent_marketing_wa ``` --- # Captura de Datos ## Nombre ### Validaciones - Mínimo 6 caracteres - Debe contener al menos 2 palabras - Solo letras permitidas ### RPC ```sql set_name_wa ``` --- ## Identificación ### Validaciones - Campo obligatorio - No vacío ### RPC ```sql set_id_wa ``` --- ## Email ### Opciones permitidas - Correo válido - `NO` para omitir ### Validación Se utiliza validación mediante regex para verificar formato email. ### RPC ```sql set_email_wa ``` --- ## Ubicación ### Validación - Debe pertenecer a una lista cerrada de departamentos ### RPC ```sql set_location_wa ``` --- # Registro de Códigos ## Formato del Código El sistema valida códigos con la siguiente estructura: - 4 números - 1 letra - 3 números - marcador (`C`, `S`, `M`, `T`) - 1 número ### Ejemplo ```txt 1234A567C9 ``` --- ## Registro del Código ### RPC utilizada ```sql register_lot_code ``` --- ## Posibles Respuestas | Respuesta | Descripción | | --------------------- | ----------------------------------------- | | ❌ Código inválido | Formato incorrecto | | ⚠️ Código duplicado | Código ya registrado | | 🚫 Límite diario | Usuario alcanzó límite | | 🚫 Bloqueo por fraude | Detección antifraude | | 🎉 Código exitoso | Registro correcto y generación de cupones | --- # Menú Posterior al Registro Después de registrar un código, el usuario puede elegir: 1. Seguir ingresando códigos 2. Salir ## Opción 1 El estado cambia a: ```txt ASK_CODE ``` ## Opción 2 El estado cambia a: ```txt DONE ``` --- # Reinicio del Flujo Si el usuario envía alguno de estos mensajes: - `hola` - `buenas` - `hello` El sistema reinicia el flujo mediante: ```sql restart_wa ``` --- # Tipos de Mensajes El flujo soporta: - Texto simple - Botones interactivos - Listas interactivas --- # API Utilizada - WhatsApp Cloud API --- # Características Técnicas - Arquitectura basada en estados - Integración con Supabase mediante RPC - Manejo intensivo de nodos `Code` - Normalización de texto y caracteres - Sistema antifraude - Validaciones avanzadas - Manejo de errores --- # Estructura del Proyecto ```txt Base de datos Supabase/ ├── Base de datos Postgre Presto.txt ├── Triggers.png └── pg-dump-postgres1-1776492006.dmp Flujo n8n/ ├── Flujo WhatsApp.docx └── Flujo con WSP.json ```