automatizagr / LAB← LaboratorioDescargar workflow ↧
Guía compartible: arquitectura, pruebas, conexión a n8n y prioridades del negocio. Sin claves ni datos de clientes reales.

AutomatizaGr — laboratorio y guía para colaboradores

Revisión: 25 de octubre de 2026. Este paquete permite probar el motor de AutomatizaGr Bar sin llamadas a Twilio ni a OpenAI. La web reproduce la experiencia de conversación de WhatsApp con chats de cliente y dueño, mensajes, botones, tarjetas, adjuntos de prueba, notas de voz, estado y registro de decisiones.

Dirección directa de Cloudflare Pages: https://automatizagr-lab.pages.dev. Publicada mediante Wrangler, sin Sites. Se verificó su certificado de Let's Encrypt, HTTP 200, nueve escenarios y el ciclo de reserva conectando a otra IP de Cloudflare con el nombre de servidor y la validación TLS normales. La resolución DNS habitual todavía no funciona desde la red de desarrollo; el ajuste local del PC y la prueba del móvil se documentan por separado. No se presenta esta prueba con IP alternativa como validación de acceso desde todas las redes.

El usuario ha pedido expresamente no usar Sites. Las direcciones chatgpt.site descritas más abajo son históricas y no son la publicación preferida. No tienen sus secretos de n8n compartidos automáticamente con Pages.

Qué se ha recuperado y qué falta verificar

Se localizaron seis snapshots de workflows n8n, el motor JavaScript original, sus versiones v10.4 a v10.6, scripts de plantillas Twilio y pruebas anteriores. Proceden del trabajo local de junio de 2026. La versión de motor más alta localizada es v10.6. El snapshot de workflow denominado v10.4-current contiene 19 nodos y carga el motor desde una fuente externa. Estos números describen componentes diferentes: no prueban qué versión está ejecutándose hoy.

La instancia histórica dejó de estar disponible. La cuenta actual de n8n Cloud se comprobó después de iniciar sesión: era nueva, sin workflows ni backups disponibles. Se importó y publicó la reconstrucción Sandbox v10.6 SIN Twilio. Esto recupera la lógica local para pruebas; no demuestra haber recuperado cambios posteriores de la antigua instancia.

Estado verificado de la conexión

Ampliación de Canal: la pestaña Canal añade ventana de 24 horas por destinatario, envíos de texto o una plantilla ficticia, seis estados de entrega, reintentos e inyección de callbacks JSON. Pasan 21 pruebas automatizadas. Cloudflare aceptó esta ampliación en el Worker directo automatizagr-whatsapp-lab; el acceso a su URL workers.dev da timeout desde esta red y sus secretos de n8n aún no están configurados. La comprobación visual de estos controles también está pendiente porque el uso del navegador está desactivado en la cuenta actual. La dirección de Sites sigue en la versión anterior: la cuenta nueva de Codex no tiene acceso a ese proyecto. Las comprobaciones públicas de n8n que siguen corresponden al sitio de Sites.

El sitio público ejecuta tanto el motor en Cloudflare como el sandbox de n8n Cloud. En modo n8n pasaron nueve escenarios desde el navegador y el ciclo web → Cloudflare → webhook n8n → web: solicitud, confirmación del cliente, reserva pendiente, aprobación del dueño y aviso al cliente correcto. No se conectan Twilio, OpenAI ni hojas reales. Las ejecuciones de n8n sí cuentan para su plan.

Para probarlo, abre Configuración, elige Webhook n8n de sandbox, introduce la clave del laboratorio y guarda. La clave se conserva solo en memoria y hay que introducirla otra vez al recargar. Es distinta de cualquier clave de Twilio o de acceso MCP. El modo demo está disponible sin clave.

Codex está autorizado por OAuth en el servidor MCP de n8n, con lectura, edición y ejecución de workflows y consulta de resultados. Solo el sandbox está habilitado y la incorporación automática de nuevos workflows está desactivada. La autenticación está verificada; falta comprobar una llamada MCP después de reiniciar Codex para cargar sus herramientas. La prueba del webhook anterior es independiente de MCP.

Cómo funciona el bot existente

El producto inicial es un asistente para bares. Responde horarios, cocina, terraza y mascotas; consulta carta, precios, alérgenos, etiquetas de dieta y eventos; prepara reservas y deriva consultas al equipo. El dueño puede gestionar disponibilidad y aprobar o cancelar solicitudes por conversación.

Probar entregas y restricciones del canal

En la versión local actual, abre Canal en el panel del laboratorio. La regla de ventana de 24 horas está desactivada al empezar para conservar el comportamiento anterior. Al activarla, el texto libre del bar solo se entrega cuando ese destinatario ha enviado una entrada durante las últimas 24 horas. Cada cliente y el dueño tienen ventanas independientes. Una entrada normal reabre la ventana; una plantilla saliente no la abre. El botón «Simular entrada del cliente» solo abre la ventana y deja una nota: no ejecuta el bot.

Selecciona el resultado de los próximos envíos: en cola, enviado, entregado, leído, fallo de envío o no entregado. Solo los mensajes entregados o leídos aparecen como respuestas del bar en el chat. Los pendientes y fallidos permanecen en Canal con su petición y callbacks sintéticos. El estado de la reserva se conserva aunque falle el aviso. Así puedes reproducir una aprobación correcta con una notificación fallida, sin confundir guardar una reserva con entregar un mensaje.

Para probar el cierre de ventana, activa la regla, pulsa «Cerrar ventana de este chat» e intenta un aviso de texto del bar. El laboratorio genera el error simulado 63016. «Reenviar como plantilla» crea otro intento con ContentSid ficticio, ContentVariables y referencia al intento anterior; no vuelve a ejecutar el motor ni crea otra reserva. La plantilla «aviso_bar» es un fixture de pruebas, no una plantilla aprobada en una cuenta real de Meta.

Cada intento permite inyectar un callback JSON con MessageSid y MessageStatus. Los duplicados no vuelven a entregar el mensaje y los estados antiguos no hacen retroceder una entrega confirmada. Los callbacks se aplican y exportan en el navegador; no se envían a un endpoint n8n ni constituyen una prueba de un consumidor de callbacks de producción. El resultado de entrega seleccionado es global para los siguientes intentos de esta sesión. No se simulan todas las políticas del proveedor, aprobación real de plantillas, consentimiento ni calidad del remitente.

Referencias del comportamiento emulado: ventana de conversación ↗, error 63016 ↗ y estados y callbacks ↗.

El flujo Twilio de 19 nodos encontrado tiene este recorrido:

El motor devuelve, entre otros, intent, reply, notifyOwner, ownerMessage, sheetAction, reservationId, reservation, replyTo, menuCard, menuOverview y actionButtons. Esas propiedades permiten separar la decisión del transporte y renderizar la misma lógica en el laboratorio.

Estados y reservas

La memoria incluye barFull, capacity, conversations, reservations y nextReservationNumber. Por defecto el aforo es 40. La reserva mínima se lee del contexto, con valor de respaldo de seis personas.

La conversación pasa por recogida de datos → confirm_reservation → await_owner_confirmation. El bot pide fecha, hora, comensales y nombre. El cliente responde CONFIRMAR RESERVA antes de que se genere una solicitud pendiente. Entonces se asigna un ID como R0001 y se avisa al dueño. La solicitud no debe presentarse como aprobada hasta recibir CONFIRMAR R0001 desde el responsable.

El motor admite expresiones como «mañana», días de la semana, «a las nueve y media» y números escritos. La v10.6 usa Europe/Madrid para interpretar fechas de reserva. Repetir la confirmación mientras la solicitud está pendiente no crea otra reserva en la misma sesión.

Comandos del responsable

MensajeResultado previsto
LLENOMarca el bar lleno y deriva nuevas solicitudes para revisión.
LIBREVuelve a permitir solicitudes.
AFORO 40Cambia el aforo utilizado por el motor.
RESERVASMuestra las reservas de la memoria del motor.
HOYFiltra las reservas de hoy; requiere revisar la zona horaria indicada más abajo.
CONFIRMAR R0001Cambia el estado y prepara una respuesta al cliente correspondiente.
CANCELAR R0001Cancela y prepara el aviso al cliente.
ACEPTAR RESERVAAcepta la última pendiente encontrada en memoria.

En el laboratorio la identidad del dueño es ficticia. Esta selección existe para pruebas; no es un sistema de autenticación de responsables para producción.

Google Sheets

Las pestañas documentadas son Carta_precio, Eventos_Futbol, Logistica_Normas, Reservas_activas, Hoja_de_hoy y Chat_Status.

La carta aporta producto, categoría, precio, descripción, alérgenos, etiquetas Friendly y posibles imágenes. Los eventos aportan fecha, hora, partido y pantallas. Las normas contienen horario, cocina, mínimo y otras condiciones. El modelo propuesto de reservas incluye ID, nombre, teléfono, fecha, hora, comensales, estado, canal y marcas temporales.

Hay una diferencia entre el diseño documentado y el snapshot revisado: las escrituras encontradas usan seis columnas y añaden el ID dentro del texto de Estado. Además, Append Reservation Status Change usa append: crea una fila de estado nueva en vez de actualizar la fila original. No debe asumirse que Hoja_de_hoy y Chat_Status estén sincronizadas solo por existir en el diseño.

Uso del laboratorio

El modo predeterminado ejecuta en Cloudflare una adaptación mínima del motor original v10.6. Se conservaron sus reglas; se sustituyeron los identificadores personales y los enlaces históricos por datos ficticios. Las limitaciones del motor se mantienen visibles para poder detectarlas.

Los adjuntos se previsualizan localmente. Las notas de voz pueden grabarse con permiso del navegador. Se envía al motor una entrada sintética sin Body con el tipo de archivo y una URL ficticia; los bytes del archivo permanecen en el navegador. El normalizador recuperado descarta esa entrada. El laboratorio lo informa como nota de sistema, sin inventar una respuesta del bot. Los archivos no se mandan a Twilio ni se transcriben. Los checks pasan por envío, lectura simulada o error; no prueban estados de entrega en WhatsApp.

La aplicación permite responder, copiar, reaccionar, editar y eliminar mensajes de la vista. Editar o eliminar no revierte una reserva ya ejecutada: esas acciones son del historial de prueba. Exportar una sesión puede incluir los mensajes y datos que hayas escrito; utiliza datos ficticios al compartirla.

Este laboratorio no reproduce el protocolo de WhatsApp, su cifrado de extremo a extremo, llamadas, sincronización de dispositivos, revisión de plantillas, ventana de atención ni restricciones del proveedor. Para esas funciones hace falta una validación posterior en el canal oficial. Tampoco representa una certificación de equivalencia visual o funcional completa con WhatsApp.

Webhooks y TwiML sin credenciales de Twilio

En Probar → Inyectar webhook Twilio puedes editar los campos ficticios From, To, Body, ProfileName, MessageSid, NumMedia, ButtonText y ButtonPayload. El laboratorio reproduce la normalización observada en el snapshot original: usa Body, From y ProfileName. No añade soporte a ButtonPayload que el workflow recuperado no tenía. Una pulsación de botón debe producir un Body interpretable; ButtonPayload sin Body se descarta.

Cada ejecución conserva en Registro el payload de entrada, la normalización, la decisión y un XML TwiML de referencia con destinatarios y texto. Puedes exportar las trazas JSON para reproducir un caso. Las tarjetas y botones de la web son una previsualización; el snapshot de 19 nodos encontrado enviaba TwiML de texto. No debe asumirse que ver una tarjeta aquí demuestre que esa plantilla existe o funciona en la cuenta de Twilio.

La API acepta también { "payload": { "From": "whatsapp:+34600000001", "Body": "Quiero ver la carta" }, "state": ... }. Si hay payload, sus campos son la entrada autoritativa de la simulación. No se transmiten credenciales de Twilio ni se valida una firma Twilio real: se está probando el adaptador de mensajes, no autenticando tráfico del canal oficial.

Conectar el sandbox a n8n sin Twilio

Se incluye n8n/automatizagr-sandbox-v10.6.json. Tiene cuatro nodos: nota, Webhook, motor y Respond to Webhook. No contiene nodos de Twilio, OpenAI ni Google Sheets. El estado entra en la petición y vuelve en la respuesta; no toca la memoria ni las reservas de producción.

Para la dirección pública de Sites, configura esos mismos valores como variables de entorno protegidas del Site mediante la herramienta de configuración de Sites; los secretos de un Worker de tu cuenta personal no se copian automáticamente al Site. El modo n8n seguirá devolviendo un aviso de configuración hasta que estén presentes y el workflow de sandbox esté activo.

La web informa explícitamente si n8n no está configurado; no cambia silenciosamente al modo demo. Usar n8n Cloud puede consumir ejecuciones del plan, aunque no haya ninguna llamada a Twilio ni a OpenAI.

Contrato de petición: objeto JSON con text, from, state, y opcionalmente context, now y clientName. Contrato de respuesta: decision, state, messages, engineVersion, mode y contadores de llamadas. El servidor acepta hasta 150 000 caracteres de JSON y mensajes de hasta 4000 caracteres. Para probar múltiples clientes se comparte el estado de la sesión del laboratorio y se cambia from.

Recuperar el workflow original más reciente

La cuenta propietaria debe entrar en la consola de n8n Cloud ↗. Una vez dentro, utiliza Open instance para inspeccionar proyectos y workflows. Busca AutomatizaGr Bar / Twilio WhatsApp Assistant y compara fecha de actualización y código del motor; el nombre del workflow por sí solo no garantiza que sea el más reciente.

Si la instancia no puede abrirse, entra en Export, selecciona la fecha de backup más reciente disponible y descarga los workflows. Conserva ese archivo sin modificar antes de hacer cambios. Importa una copia para revisión, vuelve a asociar las credenciales necesarias y comprueba los webhooks antes de activarla. La exportación de workflows no equivale a una copia utilizable de todas las credenciales ni de todo el historial.

No puede asegurarse desde un 404 si la instancia fue suspendida, eliminada o cambió. n8n documenta límites de conservación de backups: la disponibilidad concreta debe verificarse en la cuenta. Si no hay backups, las copias locales de junio permiten reconstruir la lógica, pero no demostrar cambios posteriores que no estuvieran exportados.

Problemas observados y trabajo técnico pendiente

PrioridadEvidencia encontradaCambio propuesto y criterio de aceptación
P0El Cloud actual contiene la reconstrucción de pruebas; no el último export histórico.Localizar un backup histórico con el propietario o soporte y comparar cambios antes de sustituir la base recuperada.
P0Los cambios de estado se añaden como filas nuevas.ID estable y actualización por ID; una reserva debe tener un estado vigente inequívoco.
P0Reservas y conversaciones viven en static data de n8n.Persistencia transaccional, aislamiento por negocio, idempotencia por mensaje y bloqueo de cupos. Dos ejecuciones simultáneas no deben aceptar el último cupo dos veces.
P0El motor permite datos de respaldo si no lee la carta.En producción, fallo explícito o caché validada; no presentar precios o alérgenos ficticios como datos del bar.
P0El aforo suma personas de todo un día.Definir mesas, turnos y duración; calcular disponibilidad por franja, no solo por fecha.
P1El selector de hoja usa expresiones más estrechas que el motor.Compartir clasificación y probar plurales, dietas y cambios de intención durante reservas.
P1Fechas explícitas se construyen sin comprobar el calendario completo.Rechazar días inexistentes, fechas pasadas y horas fuera del horario operativo del negocio.
P1HOY del dueño usa fecha UTC y eventos usan fecha local del proceso.Aplicar Europe/Madrid de forma uniforme y probar medianoche y cambios de horario.
P1Las normas de terraza y mascotas tienen respuestas codificadas y horario de reserva 08:00–23:30.Llevar todas las condiciones a configuración por negocio y resolver discrepancias con el horario de apertura.
P1El workflow carga y ejecuta código remoto con caché.Empaquetar una versión revisada e inmutable; registrar versión desplegada y mecanismo de reversión.
P1La aprobación del dueño actualiza la reserva pero conserva await_owner_confirmation en la conversación.Cerrar o actualizar la conversación al aprobar/cancelar; repetir CONFIRMAR RESERVA no debe informar que una reserva aprobada sigue pendiente.
P1El flujo de texto ignora multimedia.Definir tratamiento de voz/fotos/documentos y derivación explícita; añadir transcripción solo si el negocio la necesita.
P1Las ramas de respuesta y escritura salen de la misma decisión.Comprobar fallos parciales: no avisar de una reserva guardada si falla la escritura; reintentos sin duplicados.
P2Los tests históricos dependen de hojas y versiones concretas.Fixtures ficticios versionados y pruebas del contrato entre motor, canal y almacenamiento.

También debe revisarse en la copia recuperada la validación de origen del webhook de Twilio, los permisos de las credenciales y si los IDs de plantilla corresponden a la cuenta activa. Son verificaciones pendientes; no se han comprobado en el sistema vivo.

Siguiente etapa del negocio

Propuesta de trabajo, pendiente de validar con vuestro equipo:

Reparto útil: una persona para workflows n8n y persistencia; otra para motor y pruebas; otra para onboarding, datos del negocio y validación con el responsable. Antes de prometer producción, completar el ciclo mensaje → reserva → aprobación → persistencia → notificación y las pruebas de error.

Desarrollo local

Espacio independiente de la cuenta de Codex

El repositorio privado del proyecto es arayey/automatizagr ↗. En este ordenador puedes abrir esta misma carpeta desde cualquier cuenta de Codex. En otro ordenador, inicia sesión en GitHub con una cuenta autorizada al repositorio y clónalo:

git clone https://github.com/arayey/automatizagr.git
cd automatizagr
npm install
npm test
npm run dev

Abre la carpeta clonada como proyecto, o Automatizagr.code-workspace en un editor compatible. Cada colaborador necesita acceso GitHub propio; el repositorio no concede acceso a Cloudflare ni a n8n. Para el modo n8n local, copia .dev.vars.example a .dev.vars y configura los valores fuera de Git. No necesitas esos valores para el modo demo.

La sesión Cloudflare de Wrangler en este ordenador es independiente de Codex y permite gestionar el Worker existente. En otro ordenador se autoriza con el acceso Cloudflare correspondiente. La URL de Sites sigue vinculada a su cuenta y espacio de trabajo originales; no se transfiere al clonar este repositorio.

Requisitos: Node.js y una cuenta de Cloudflare con Wrangler autorizado. No hace falta una API key de OpenAI.

npm install
npm run prepare:n8n
npm test
npm run dev

Para desplegar: npx wrangler whoami y npm run deploy. Revisa wrangler.jsonc y usa tu cuenta cuando otro colaborador despliegue su propia copia. El hosting tiene sus propios límites; cero llamadas a Twilio no significa hosting o ejecuciones ilimitados.

Archivos: src/engine.js es el motor adaptado; src/sandbox.js define fixtures y contrato; src/protocol.js implementa los sobres sintéticos y TwiML; src/worker.js sirve la API y el puente opcional; public/ contiene la interfaz; scripts/build-n8n.js genera el workflow aislado; tests/ verifica reservas, roles ficticios, aislamiento, aforo, fechas, normalización, XML y errores de API.

La carpeta hermana automatizagr-public-site conserva la fuente exacta publicada mediante Sites y su identidad en .openai/hosting.json. Su build.mjs empaqueta el motor y los assets en un Worker autónomo. El script de sincronización se conserva como referencia histórica, pero se retiró del build habitual a petición del usuario. La publicación actual se realiza directamente con Wrangler en Cloudflare; no utilizar Sites para las siguientes actualizaciones.

Fuentes y límites de verificación

La auditoría del motor se basa en los archivos originales locales. Se verificó por separado la cuenta nueva y la ejecución de su sandbox publicado. Pasaron quince pruebas automatizadas del paquete, nueve comprobaciones del navegador en modo n8n y el ciclo de reserva por el puente público. Estas pruebas no demuestran equivalencia completa con WhatsApp ni validan el canal comercial de producción.