Andrea: antes y después
Antes = la v3 que responde hoy. Después = la v4 que corre en sombra desde el 17-set. Detalle: bot/MAPA-ANTES-DESPUES.md y bot/PLAN-SOMBRA-2026-09-18.md.
Antes: un cerebro, tags como memoria, nueve relojes
lo que produjo los 31 casos de la bitácora
flowchart TB
P[Paciente escribe por WhatsApp] --> GHL[GHL recibe y dispara el webhook]
GHL --> F1
subgraph F1["✅ Andrea · 1 · Bot (98 nodos)"]
direction TB
G[Guardia, debounce 15 s, lock 90 s] --> CTX[Armar contexto: 49k caracteres de regex\nadivina costo dicho, ubicación, viaje, pago, urgencia]
CTX --> IA[Andrea AI Agent · gpt-4o-mini\nprompt de 6,600 palabras y 45 prohibiciones\nprecios, horarios y reglas como prosa]
IA --> LD[Leer decisión: 56k caracteres\npoda repetidos, pega CTA, agrega la virtual\nREESCRIBE lo que dijo el modelo]
LD --> CP[Compuerta: 17k caracteres\nveta el handoff y REEMPLAZA el mensaje]
CP --> ENV[Enviar WhatsApp]
ENV --> TG[Poner tags según intención]
ENV --> HO[Handoff: tarjeta a Caliente + tarea]
end
subgraph IG["✅ Instagram · 1 · Bot social (copia del flujo 1, se desincroniza)"]
IGB[mismo cerebro, versión del 11-ago]
end
subgraph CRONS["Nueve crons que mueven tarjetas y mandan toques leyendo GHL de a 100"]
C3[3 · Rescate 30 min / 3 h / 6 h]
C8[8 · Enfriar 48 h ↔ reactivar]
C11[11 · Higiene TTL, sella pausas, 50/día]
C12[12 · Recontactar 24 h, recordatorio 6 h]
C14[14 · Cola de Prospección: encola, nadie envía]
C15[15 · Toques 48 h, día 7, día 30]
C10[10 · Detectar citas en el chat]
C16[16 · Foto diaria: guarda 600 de 1,121]
C9[9 · Reporte diario]
end
TG --> TAGS[(Tags de GHL = la memoria del bot\n6 flujos escriben, nadie verifica)]
TAGS --> CTX
TAGS --> C3
TAGS --> C8
TAGS --> C12
TAGS --> C14
TAGS --> C15
HO --> PIPE[(Tablero de GHL)]
PIPE --> C8
PIPE --> C11
PIPE --> C12
C3 -. toque por WhatsApp .-> P
C12 -. recordatorio .-> P
classDef dolor fill:#FCEBEB,stroke:#A32D2D,color:#501313
class CTX,LD,CP,TAGS,C14,C16,IGB dolor
Rueda del mouse o dos dedos para acercar; arrastrar para moverse; doble clic para volver a ajustar.
Después: estado como dato, dos decisiones, un Vigía
lo que cambia de fondo
flowchart TB
P[Paciente escribe por WhatsApp o Instagram] --> GHL[GHL dispara el webhook]
GHL --> LEC
subgraph LEC["Lector (corre en cada turno)"]
L1[Arma el hilo completo\npaciente, Andrea, Recepción, con hora] --> L2[Modelo lee TODA la conversación\ndevuelve JSON: tratamiento, precio dado, aceptó,\nse despidió, ubicación, fecha en que vuelve, caso, anuncio]
L2 --> L3[Valida en código\nestado + siguiente paso + tags que no cuadran]
end
L3 --> EST[(conversacion_estado\nuna fila por lead: la memoria)]
EST --> ORQ
subgraph ORQ["🌘 Andrea v4 · Orquestador (código)"]
direction TB
D1[Decisión 1 · atención\ncarril según el estado, nunca por regex] --> H[Hechos del carril\nfila del catálogo, la promo, el horario, lo ya dicho]
H --> RED[Redactor del carril\nprompt de 200 palabras en positivo]
RED --> FIL{Filtro\ncifras fuera de tabla, repetidos,\nlargo, Jennifer, ubicación, estética}
FIL -- pasa --> OK[Mensaje]
FIL -- no pasa --> REP[Reparar una vez] --> FIL2{Filtro 2} -- no pasa --> TF[Texto fijo del carril]
FIL2 -- pasa --> OK
D2[Decisión 2 · movimiento\netapa propuesta, tarea propuesta, pausa hasta]
D3[Tags del turno\n+ los proactivos del diccionario\n− los operativos que el paciente invalidó]
end
OK --> EJ
D2 --> EJ
D3 --> EJ
subgraph EJ["Ejecutor (el único que escribe)"]
E1[Enviar] --> E2[Escribir estado] --> E3[Tags] --> E4[Tarjeta y tarea] --> E5[Auditoría con carril y lectura]
end
E1 -. hoy en sombra: solo registra .-> P
subgraph VIG["🌘 Andrea v4 · Vigía (un cron por hora, reemplaza a los nueve)"]
V1[Lee las filas de estado\ny las tarjetas por etapa, paginadas] --> V2[Aplica la tabla de cadencias\n30 min, 3 h, 6 h, 24 h, 48 h, 7 d, 30 d, pausa]
V2 --> V3[Toques, movimientos y conciliación de tags]
end
EST --> V1
subgraph TAB["Tablas: lo que se cambia sin tocar n8n"]
T1[(orquestador_carriles\n15 carriles: prompt, hechos, filtro, acciones)]
T2[(bot_catalogo · bot_datos_operativos · promociones)]
T3[(bot_tags\ndiccionario con dueño y reglas proactivas)]
T4[(vigia_cadencias)]
T5[(bot_modelos\nqué modelo usa el Lector, el Redactor, el Reparador)]
end
T1 -.-> D1
T2 -.-> H
T3 -.-> D3
T4 -.-> V2
T5 -.-> L2
T5 -.-> RED
EST --> PAN[Panel · Sombra\nv3 contra v4, etapa, tareas, tags, revisión con nombre]
EJ --> PAN
V3 --> PAN
classDef nuevo fill:#E1F5EE,stroke:#0F6E56,color:#04342C
class L2,EST,D1,D2,D3,FIL,V2,T3,T5 nuevo
Rueda del mouse o dos dedos para acercar; arrastrar para moverse; doble clic para volver a ajustar.
Qué cambia, punto por punto
| Antes (v3) | Después (v4) | |
|---|---|---|
| Memoria del lead | 40 tags de GHL escritos por 6 flujos | una fila por lead (conversacion_estado) + tags espejo con dueño |
| Cómo sabe qué quiere el paciente | regex sobre el último mensaje (49k caracteres) | un modelo lee toda la conversación y devuelve datos |
| Precios, horarios, reglas | prosa en un prompt de 6,600 palabras | tablas (catálogo, datos operativos, promociones) |
| El mensaje | un prompt para todo + poda y CTA pegados después | 15 carriles con prompt corto; filtro que bloquea y repara una vez |
| Etapa y tarea | mezcladas con la respuesta | decisión aparte, con regla escrita, visible en el panel |
| Tags | por intención, al azar de cada flujo | proactivos por regla del diccionario, + y − por turno, conciliados |
| Toques y movimientos | 9 crons con limit=100 | 1 Vigía sobre la fila de estado, cadencia en tabla, paginado |
| copia del flujo que se desincroniza | mismo orquestador, canal = instagram | |
| Modelo | fijo en el nodo | bot_modelos: por pieza, editable desde el panel |
| Qué ve la clínica | la bitácora de errores | cada turno: v3 contra v4, lectura, etapa, tareas, tags, revisión con nombre |