Add README.md for WhatsApp promotion system documentation
This commit is contained in:
@@ -0,0 +1,337 @@
|
|||||||
|
# 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
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user