El Importador — migración
El Importador · v2 3 de agosto de 2026 · 22:15 Jhon Diego · La Paz

Migracióndel bot de Jhon

Reemplazo del bot de n8n —164 nodos, un prompt de 39.660 caracteres— por un agente en código con base de datos real. El bot actual sigue trabajando sin tocarse durante toda la migración. Esta página se actualiza a medida que avanza.

252autos cargados
85temas
3.035clientes
−88%prompt
24tests en verde
22filas frenadas
18preguntas a Jhon
El corazón

Los anuncios: de un sí/no que se vence, a saber qué vio la persona

Ocho de cada diez clientes llegan tocando un anuncio. Si el bot no entiende de dónde viene la persona, no sirve nada de lo demás.

Revisé 2.500 ejecuciones reales del n8n para ver qué manda Meta cuando alguien toca un aviso de Facebook o Instagram. Manda mucho más de lo que el bot está usando hoy.

Lo que llega de MetaQué se hace hoyQué se hace ahora
Id del avisoSe tiraQueda guardado: se sabe cuál aviso
Titular del avisoSe tiraSe guarda
Texto completo del avisoSe tiraSe le pasa al bot: sabe qué le prometieron
Imagen del avisoSe tiraSe guarda
Id del clickSe tiraPermite saber qué aviso trae ventas y cuál solo curiosos
Que vino de un anuncioSí/no en Redis, se vence a las 24 hNo se vence nunca

Ese vencimiento de 24 h es la razón por la que el bot “olvida” a mitad de una charla larga que la persona venía de publicidad.

Probado con un anuncio de verdad de Jhon

El aviso decía “¡SEMANA DE CAMIONETAS EN EE. UU.! Cuatro hermosas camionetas entran a remate…”. Con eso, lo que le llega al bot antes de contestar es:

ESTA PERSONA LLEGÓ TOCANDO UN ANUNCIO. Ya sabés de dónde viene: no se lo preguntes.
El anuncio decía: "¡SEMANA DE CAMIONETAS EN EE. UU.! Cuatro hermosas camionetas
entran a remate la próxima en Copart..."
Arrancá por lo que ese anuncio ofrecía. Si el anuncio hablaba de un tipo de
vehículo, mostrá esos.

Si el aviso hablaba de camionetas, el bot no arranca ofreciendo sedanes ni preguntando “¿qué buscás?”. Ya lo sabe.

El corazón

Las fotos: no es que se migren mal, es que no existen

Antes de decidir cómo mandar fotos fui a ver qué guarda Jhon hoy. Medido sobre el catálogo real, las 252 filas:

Lo que hay hoyMedido
Columna IMAGEN REF.4 filas de 252 tienen algo — y son links a la página de la subasta, no fotos
Columna VIDEO REF.0 filas de 252
Nodos del bot que mandan una foto0 de 164

El cliente hoy no puede recibir una sola imagen. Copiar esas dos columnas al sistema nuevo habría sido copiar el vacío.

Lo primero que ya se manda solo

Cada anuncio viene con su propia imagen: la que el cliente acaba de ver en Facebook o Instagram. Esa foto ahora se guarda sola, sin que Jhon haga nada.

Y se baja en el momento, porque el link de Meta vence: el del aviso de camionetas caducaba a los 3 días. Guardar el link habría sido guardar un link muerto.

Se guarda una vez por aviso, no una por cliente: se compara la huella del archivo. Aunque mil personas toquen el mismo anuncio, en el disco hay una sola foto.

Lo que sigue: que Jhon cargue las fotos de cada auto sin pelearse con nada, y que el aviso quede atado a los vehículos que muestra.

Cómo está armado

Dónde viven el prompt y las reglas

En n8n todo vivía adentro de los nodos: un prompt de 39.660 caracteres que cargaba las 85 respuestas de Jhon, las reglas y los ejemplos, más 7 nodos-candado repartidos por el lienzo.

Acá cada cosa tiene un solo lugar, y está separado lo que toca Jhon de lo que toco yo.

QuéDónde viveQuién lo cambia
Cómo hablaLas reglas de conducta, 4.633 caracteres en totalEl programador
Las 85 respuestas de JhonTabla temas, en la baseJhon, desde el panel
Los 5 números del precioTabla parametrosJhon, desde el panel
El catálogo de autosTabla autosJhon, desde el panel
Qué puede hacer el botLas herramientas: buscar auto, cotizar, agendar, consultar tema, anotar dudaEl programador
Los candadosUna cadena que revisa cada respuesta antes de mandarlaEl programador
La cuenta del precioUn solo archivo. Ningún otro lugar suma plataEl programador
Por qué el prompt bajó 88%

El prompt ya no lleva las respuestas adentro. Lleva un índice: 85 títulos en 3.394 caracteres. Cuando el cliente pregunta algo, el bot pide el texto de ese tema y no de los otros 84.

Jhon corrige una respuesta en el panel y cambia al instante, sin tocar el prompt ni reiniciar nada.

índice de temas    3.394 caracteres para 85 temas
prompt completo    4.633 caracteres
el de n8n         39.660 caracteres
                     −88%

Los candados también cambiaron de forma. En n8n eran nodos sueltos, y el orden dependía de dónde estaban puestos en la pantalla. Acá son una sola cadena, siempre en el mismo orden, con 24 pruebas que se corren solas y fallan si alguien rompe una.

Estado

Dónde está la migración

  1. 01 Leer las hojas y auditarlas Listo Se leen desde las ejecuciones de n8n: sin credenciales de Google y sin tocar ni una hoja de Jhon.
  2. 02 Esquema de la base Listo 9 tablas. Diseñado contra los datos reales, no contra la forma de la planilla.
  3. 03 Cargar los datos Listo Corre entero de nuevo cuando se quiera. Lo que no encaja, lo rechaza y lo nombra.
  4. 04 El agente y sus herramientas Listo Las cinco herramientas andan contra la base. Falta enchufarle el modelo: necesita la clave de OpenAI.
  5. 05 Detector de anuncios Pendiente La prioridad de David: casi todos los clientes entran por publicidad.
  6. 06 Imagen de la cotización Pendiente Se dibuja y se manda. Sin escribir en ninguna fila, sin Apps Script.
  7. 07 Todo corriendo en el VPS Listo Postgres, Redis y el panel levantados junto a n8n, que siguió respondiendo. 2.074 MB libres de 3.915, más 2 GB de swap nuevos.
  8. 08 Fase espejo y cambio Pendiente Los dos bots escuchan; el nuevo solo anota lo que habría contestado. Volver atrás es repuntar Dualhook.
Hallazgo · 3 de agosto

Cinco columnas de la cotización no eran datos

La hoja PRECIOS tiene once columnas de plata que Jhon mantiene fila por fila. Medidas contra las 252 filas reales, cinco de ellas no aportan información: son una fórmula, tres constantes y un tipo de cambio.

Las 11 columnas, medidas
ColumnaQué resultó serEvidenciaVeredicto
4%El 4% de PRECIO, exacto252/252fórmula
DOCSiempre 7001 valorconstante
GRÚASiempre 1.2001 valorconstante
COM.Siempre 5001 valorconstante
GARANTIA BSGARANTIA DLS × 12,15252/252tipo de cambio
PRECIO$ EEUU + FEE251/252suma
TOTALSuma de los 7 componentes252/252suma
$ EEUULo que salió en la subasta252 filasdato
FEELo que cobra la subasta91 valoresdato
FLETESegún puerto y destino5 valoresdato
POLIZASegún el auto154 valoresdato

Las cinco pasaron a una sola fila de parámetros y el total se calcula. Recalculadas las 252 cotizaciones desde los cuatro datos que quedan, 251 dan idénticas al centavo — y la que no, es un error real de la hoja.

Son 1.260 celdas que Jhon deja de mantener a mano. Y cambiar el tipo de cambio, que hoy son 252 ediciones con riesgo de saltear una en silencio, pasa a ser un campo.

Requiere respuesta

Lo que la base frenó

Nada de esto se arregló solo. Son cosas que hoy entran a la planilla sin que nadie se entere; acá chocan contra el esquema y quedan a la vista.

Un Mercedes cotizado $2.704 por debajo Jhon decide

N52, Mercedes Benz CLA 250 4MATIC 2026. Su celda PRECIO dice 20.000 cuando $ EEUU + FEE dan 22.600: es la única fila de 252 donde no cierra. Hoy el bot lo cotiza en $41.000; siguiendo la regla de las otras 251 serían $43.704. Quedó cargado pero desactivado: el bot no lo ofrece hasta que Jhon confirme cuál precio vale.

21 clientes en un estado que nadie definió Jhon decide

Dicen CLIENTE JHON, y ninguno de los 164 nodos del bot actual conoce ese estado. La base los rechazó en vez de tragarlos.

18 preguntas del negocio sin responder

PREG. NEGOCIO de la 30 a la 47: los bloques completos de CONTRATO y de CITAS. La 39 resuelve una contradicción viva —la hoja dice 08:30 a 19:00 y el bot agenda de 9:00 a 18:00— y la 44 hoy está decidida por omisión: el bot cierra citas solo, sin que nadie lo haya autorizado.

El catálogo tiene tres columnas libres

El bot lee el rango A5:Z500. Son 26 columnas y hay 23 usadas. La columna 27 no se lee: el catálogo simplemente sale incompleto, sin ningún error.

No se copia la forma

Qué se trae y qué se deja

Copiar la planilla tal cual sería mudar el problema de lugar. Cada columna existe como existe porque una celda no puede hacer otra cosa — no porque el negocio funcione así.

La planilla de hoy, y en qué se convierte
En la hojaSe convierte enPor qué
IMAGEN REF.
VIDEO REF.
→ archivos que el bot manda Están vacías en las 252 filas. Una celda solo guarda un link, y un link no se le manda al cliente como foto. Jhon arrastra el archivo al panel y el bot lo envía.
Cotización en la fila 3 → una fila por cotización Todas las cotizaciones se escriben en la misma fila y se pisan. De ahí salieron cinco nodos de turno y una ventana de hasta 146 s donde dos clientes se cruzan los datos. Deja de existir, y queda historial.
MARCA · MODELO · PRECIO
en la hoja CLIENTES
→ sus cotizaciones La planilla guarda un solo interés por cliente: si vuelve y pregunta por otro auto, borra el anterior. Lo que había se conserva; de acá en más cada consulta queda con su fecha.
Tipo de vehículo
(no existe como columna)
→ una columna Hoy vive en un mapa de código duplicado en dos lugares, más seis nodos que lo adivinan con IA. Con la columna, Jhon lo corrige él mismo y los seis nodos sobran.
Estados en texto libre → lista cerrada Hoy hay que comparar por pedazos de palabra para sobrevivir al masculino y al femenino. Ahora la base rechaza lo que no está en la lista — así aparecieron los 21.
Fechas 31/7/2026
horas 3:00:00 p.m.
→ fecha y hora reales Sheets devuelve lo que se ve, no lo que se escribió. Con tipos reales, ordenar y comparar deja de ser adivinanza.
Recordatorios: barrido
cada 5 minutos
→ un aviso por cita 288 barridos por día de la hoja entera, hoy apagado. Cada cita agenda su propio recordatorio, a la hora exacta.
El bot · 3 de agosto

Siete candados entran, tres salen

El bot de hoy corrige lo que dice el modelo con siete nodos encadenados al final. Portarlos tal cual sería mudar el problema: cuatro de ellos existen para tapar algo que en el diseño nuevo ya no puede pasar.

Los 7 candados de n8n, uno por uno
CandadoQué pasa con élPor qué
Precio → desaparece El modelo ya no escribe números de plata. Escribe {{precio:17}} y el código pone el valor de la base. No queda nada que corregir después.
Cita y Saludo → desaparece Si es el primer mensaje lo dice la base, no el modelo. Y el horario lo rechaza la herramienta, no una regla del prompt.
Anuncio → desaparece "Vino por anuncio" es una columna. Deja de ser una llave que vence a las 24 horas en medio de una conversación.
Reparación → pasa a ser un tema Es información del negocio, no una corrección de estilo. Vive con los otros 84 temas y la trae una herramienta.
Estilo → queda Sigue siendo sobre cómo habla, que es lo único que todavía decide el modelo.
Promesas → queda Bloquea plazos, garantías y ofrecimientos que Jhon no confirmó. Las cuatro preguntas que este candado tapa siguen sin respuesta.
Tercera persona → queda El bot es Jhon. Nunca "le consulto a Jhon".

Los tres que quedan son funciones con 24 tests en verde, con casos reales: un precio escrito a mano se bloquea, un año no se confunde con un precio, y una frase que ya está bien no se toca.

El prompt pasó de 39.660 a 4.722 caracteres

Un 88% menos, y con todo el negocio adentro: los 85 temas viajan solo por su nombre —3.394 caracteres— y el texto lo trae una herramienta cuando hace falta. Lo que queda en el prompt es únicamente conducta: cómo habla y qué no puede prometer.

Medido

Lo que tarda ahora

Cincuenta corridas de cada consulta contra la base ya cargada, con los 252 autos y los 3.035 clientes adentro.

Consultas contra la base cargada
ConsultaMedianap90Máximo
Buscar auto por tipo y presupuesto1,64 ms2,66 ms18,29 ms
Buscar auto por modelo1,13 ms1,68 ms4,31 ms
Traer los números para cotizar0,60 ms1,34 ms2,43 ms
Consultar un tema del negocio0,33 ms0,75 ms2,34 ms
Buscar un cliente por teléfono0,60 ms1,32 ms4,43 ms

Para ser justos con la comparación: traer los números de una cotización tarda 0,60 ms, pero hoy eso además implica escribir en la hoja, esperar y exportar —11,7 s de mediana, 140 s el peor caso—. Lo que desaparece es el viaje a Google. El dibujo de la imagen todavía no está escrito ni medido.

El otro número que importa: todo el conocimiento del negocio ocupa 3.325 caracteres en el prompt. Son los 85 temas listados por nombre; el texto lo trae una herramienta cuando hace falta. Hoy ese conocimiento viaja entero, en un prompt de 39.660 caracteres, en cada una de las cuatro llamadas al modelo por mensaje.

Sigue

Lo próximo

  1. La clave de OpenAI en el archivo .env Le toca a David Es el único paso que falta para verlo conversando. Con eso cada respuesta muestra abajo lo que costó.
  2. Crear la cuenta del panel Le toca a David panel.srv1860957.hstgr.cloud — no hay ninguna cuenta todavía. La primera que se cree es la dueña, y después invita a Jhon como editor.
  3. Fotos de verdad, no links En eso Hoy la hoja tiene columnas IMAGEN REF. y VIDEO REF. con links pegados. El cliente recibe un link. Ahora recibe la foto.
  4. Atar cada anuncio a sus autos En eso Que Jhon marque desde el panel qué vehículos salen en cada aviso. Así el que toca "semana de camionetas" ve esas camionetas, con foto, en el primer mensaje.
  5. Mandarle las 18 preguntas a Jhon Depende de Jhon Ya están redactadas y listas para copiar a WhatsApp.