Lic. Carlos Enrique Loria Beeche.
1. Idea inicial de GepetoChat
GepetoChat nace como una propuesta sencilla en su concepto, pero poderosa en sus posibilidades: convertir WhatsApp en una puerta de entrada práctica a la inteligencia artificial.
La idea no es crear otra aplicación de chat ni pedirle al usuario que aprenda una herramienta nueva. Al contrario, GepetoChat busca aprovechar el canal que muchas personas ya usan todos los días —WhatsApp— y conectarlo con una arquitectura propia basada en WAHA, ASP.NET Core, SQL Server y OpenAI.
A partir de esa base, el sistema podrá ofrecer asistentes, amistades virtuales o perfiles especializados capaces de conversar, recordar contexto, validar permisos, procesar adjuntos y registrar el consumo real de la API para mantener control técnico y económico.
La intención de este documento es explicar el diseño inicial de GepetoChat, dejar constancia de las principales decisiones técnicas y servir como guía para continuar el desarrollo de forma ordenada, ya sea como proyecto personal, familiar, académico o de aprendizaje para estudiantes de programación.

2. Nombre del proyecto
El proyecto se llamará:
GepetoChat
El nombre GepetoChat identifica la plataforma general. Los personajes, asistentes o canales conversacionales serán configuraciones dentro de la plataforma, no proyectos separados.
Esto permite que el sistema crezca en el futuro con distintos canales, perfiles, números de WhatsApp, modelos de inteligencia artificial y formas de interacción sin tener que rediseñar la arquitectura principal.
3. Idea general del sistema
La idea central es que una persona escriba por WhatsApp a un número determinado, y que ese mensaje sea recibido por WAHA. Luego, WAHA enviará el mensaje a una API propia desarrollada en ASP.NET Core. La API consultará la base de datos, verificará permisos, elegirá el personaje o perfil correspondiente, llamará a OpenAI y devolverá una respuesta por WhatsApp.
El flujo general será:
Usuario de WhatsApp
↓
Número de WhatsApp conectado a WAHA
↓
WAHA
↓
GepetoChat.Api
↓
SQL Server / GepetoChatDb
↓
OpenAI API
↓
Respuesta
↓
WAHA
↓
WhatsApp
WAHA será solamente el puente con WhatsApp. La memoria, permisos, personalidad, costos, planes y reglas estarán en la API y en SQL Server.
La frase que resume la arquitectura es:
WAHA transporta. GepetoChat.Api decide. SQL Server recuerda. OpenAI responde.
4. Números telefónicos definidos inicialmente
Actualmente se definieron tres números iniciales:
- CARLOS — Carlos Loria — +506 8381-1199 — Administrativo.
- PERLE — Perlita — +506 6111-9674 — Amistad virtual.
- GEPETO — Gepeto — +506 6037-7072 — Asistente general, reflexivo y técnico.
El número personal de Carlos se contempla como canal administrativo. Los otros dos números corresponden a canales conversacionales disponibles para usuarios previamente autorizados.
5. Personajes iniciales
5.1 Perlita
Perlita será una amistad virtual de tono cálido, elegante y privado. Su acceso estará restringido a usuarios preseleccionados y autorizados manualmente.
Este canal requiere control de acceso:
- El usuario debe estar registrado.
- El usuario debe estar autorizado.
- El usuario debe tener un plan o autorización vigente.
- El usuario debe estar autorizado específicamente para este canal.
La intención es ofrecer una experiencia conversacional privada, cuidada y controlada, con reglas claras de acceso y uso responsable.
5.2 Gepeto
Gepeto será un asistente-amigo general. Su modo inicial será reflexivo, prudente y empático. No se presentará como médico, terapeuta ni sustituto profesional, pero podrá acompañar al usuario, ayudarlo a ordenar ideas y hacer preguntas útiles.
Además, Gepeto podrá tener un perfil técnico-documental para usos futuros, por ejemplo:
- Analizar imágenes.
- Documentar mercadería dañada.
- Ayudar con inventarios.
- Resumir documentos.
- Organizar evidencias.
- Proponer reportes estructurados.
La arquitectura distingue entre personaje y perfil. Esto permite que un mismo personaje tenga distintos modos de funcionamiento.
Nota sobre menores de edad y autorización responsable
Por precaución, GepetoChat no está pensado inicialmente como una herramienta abierta para niños o menores de edad. La plataforma se diseñará primero para usuarios preseleccionados, identificados por su número de WhatsApp y autorizados manualmente.
En caso de que en el futuro se permita el uso por parte de un niño, niña o adolescente, deberá ser siempre bajo autorización y supervisión de sus padres o responsables legales. Esta regla busca proteger al menor, ordenar el uso de la herramienta y dejar claro que el sistema no sustituye el acompañamiento humano, familiar, educativo o profesional.
La prioridad será mantener un entorno controlado, trazable y responsable, evitando que usuarios no autorizados accedan a conversaciones o funciones que no les correspondan.
6. Principales decisiones de arquitectura
6.1 SQL Server como centro de control
Se decidió utilizar SQL Server como base de datos principal. La base se llama:
GepetoChatDb
La API será responsable de consultar y actualizar esta base. WAHA no tendrá memoria propia ni control de permisos.
6.2 Identidad basada en WhatsApp
Por ahora no se manejarán correos electrónicos. La identidad principal del usuario será su número de WhatsApp.
UsuariosApp.TelefonoWhatsApp
Esto simplifica la primera versión, porque el usuario interactúa exclusivamente por WhatsApp. Más adelante se podría agregar correo electrónico si se necesitara facturación, login web, recuperación de cuenta o panel administrativo más formal.
6.3 Planes gratuitos, de pago y cortesía
Se diseñó una estructura de planes. Los tipos de plan definidos son:
- Gratuito
- Pago
- Promocional
- Cortesía
También se definieron planes iniciales:
- GRATIS
- P3D — Pago 3 días
- P7D — Pago 7 días
- PMES — Pago mensual
- PSEM — Pago semestral
- PANUAL — Pago anual
- CPL — Cortesía plena
El plan gratuito será indefinido, pero limitado. No tendrá audio, imágenes, documentos ni acceso a canales especiales. Tendrá pocos mensajes diarios.
Los planes de pago y cortesía podrán habilitar funciones más completas, incluyendo audio, imágenes, documentos, memoria extendida y acceso a canales especiales, según las autorizaciones correspondientes.
6.4 Audio
Para audio se decidió usar OpenAI para transcripción, no procesamiento local, al menos en la etapa inicial.
La referencia inicial de costo será:
$0.006 por minuto de audio transcrito
Se definió además una regla operativa importante:
Audios máximos de 2 minutos.
Esto ayuda a controlar costos, almacenamiento y tiempos de procesamiento.
6.5 Imágenes
Para imágenes se decidió no guardar la foto original en alta resolución. La API deberá optimizar la imagen antes de almacenarla o procesarla.
La política definida es:
- Optimizar antes de guardar.
- No guardar la imagen original 4K.
- Guardar solo la imagen optimizada.
- Usar la imagen optimizada para análisis con OpenAI.
6.6 Adjuntos en SQL Server
Se decidió guardar los adjuntos en SQL Server utilizando un campo binario:
Contenido VARBINARY(MAX)
No se usará el tipo antiguo image. Tampoco se usará nvarchar(max) para archivos binarios. La regla será:
Texto largo: VARCHAR(MAX) Archivos: VARBINARY(MAX)
Por lo tanto, imágenes, audios y documentos podrán guardarse en una sola tabla de adjuntos, usando metadatos para distinguir el tipo de archivo.
7. Base de datos creada hasta ahora
Hasta este momento se han creado las siguientes tablas:
Catálogos
- Idiomas
- TiposMensaje
- RolesMensaje
- TiposPlan
- TiposCanalWhatsApp
- ModelosIA
Configuración del sistema
- Planes
- Personajes
- PerfilesPersonaje
- CanalesWhatsApp
Usuarios y permisos
- UsuariosApp
- UsuariosPersonajes
- SuscripcionesUsuarios
Operación conversacional
- Conversaciones
- Mensajes
- MensajesAdjuntos
- UsoApi
La base ya tiene una estructura bastante completa para iniciar el desarrollo de la API.

8. Diferencia entre tablas principales
UsuariosApp
Guarda las personas reales que pueden interactuar con el sistema. La identificación principal es el teléfono de WhatsApp.
CanalesWhatsApp
Guarda los números de WhatsApp conectados al sistema, como Perlita, Gepeto o el número administrativo de Carlos.
Personajes
Define la identidad general de un personaje, por ejemplo Perlita o Gepeto.
PerfilesPersonaje
Define modos internos de un personaje. Por ejemplo, Gepeto puede tener un perfil reflexivo y otro técnico-documental.
Conversaciones
Representa el hilo de diálogo entre un usuario, un personaje y un canal de WhatsApp.
Mensajes
Guarda cada mensaje de una conversación, ya sea del usuario, del asistente, del sistema o de una herramienta.
MensajesAdjuntos
Guarda los archivos asociados a mensajes: imágenes, audios y documentos. El contenido se guarda en SQL Server como VARBINARY(MAX).
UsoApi
Guarda el consumo técnico de OpenAI: modelo usado, tokens, minutos de audio, costos estimados y relación con usuario, personaje, mensaje o adjunto.
Esta tabla será clave para evaluar si el proyecto es económicamente viable.
9. OpenAI y costos
El proyecto usará la API de OpenAI, no la sesión normal de ChatGPT. Los créditos de API se administran desde OpenAI Platform.
Actualmente se identificó que existe un saldo de API cargado y que la recarga automática está desactivada, lo cual es correcto para un prototipo controlado.
La intención inicial es probar con pocos usuarios autorizados, registrar el consumo real y analizar si el costo por conversación es razonable.
La tabla UsoApi será el instrumento principal para medir:
- Consumo por usuario.
- Consumo por personaje.
- Consumo por modelo.
- Consumo por canal de WhatsApp.
- Consumo por audio.
- Consumo por imagen.
- Costo estimado total.
10. Flujo previsto de un mensaje

El flujo previsto será:
1. Usuario escribe a un número de WhatsApp. 2. WAHA recibe el mensaje. 3. WAHA llama al webhook de GepetoChat.Api. 4. La API identifica el canal WhatsApp. 5. La API identifica el teléfono del usuario. 6. La API busca al usuario en UsuariosApp. 7. La API verifica si está autorizado. 8. La API identifica el personaje y perfil predeterminado del canal. 9. La API verifica si el usuario puede usar ese personaje. 10. La API revisa plan, límites, autorizaciones y permisos. 11. La API crea o localiza una conversación activa. 12. La API guarda el mensaje entrante. 13. Si hay adjunto, lo procesa y lo guarda. 14. La API arma el contexto para OpenAI. 15. OpenAI genera respuesta o transcripción/análisis. 16. La API guarda la respuesta. 17. La API registra el consumo en UsoApi. 18. La API envía la respuesta a WAHA. 19. WAHA responde al usuario por WhatsApp.
11. Lo que sigue
El siguiente paso no debería ser seguir creando tablas sin descanso. Lo que sigue es:
- Revisar visualmente el diagrama completo de la base.
- Verificar que las llaves foráneas estén correctas.
- Documentar los scripts SQL principales.
- Crear el proyecto GepetoChat.Api en Visual Studio.
- Configurar conexión a SQL Server.
- Crear un endpoint de prueba.
- Crear un endpoint simple para probar OpenAI.
- Crear la lógica de validación de usuario por teléfono.
- Crear la lógica de conversación básica de texto.
- Después conectar WAHA.
La primera versión no debe intentar resolver todo. Debe iniciar con:
- Un solo WAHA.
- Un solo personaje activo.
- Usuarios preseleccionados.
- Solo texto al inicio.
- Registro de uso en base de datos.
12. Conclusión de esta etapa
El proyecto GepetoChat ya tiene una arquitectura clara:
WhatsApp + WAHA + ASP.NET Core API + SQL Server + OpenAI
La base de datos ya contempla usuarios, planes, personajes, perfiles, canales, conversaciones, mensajes, adjuntos y consumo de API.
La decisión más importante de esta etapa fue no correr a programar todavía, sino pensar bien la estructura. Esto permitirá que el sistema sea más ordenado, medible y escalable.
La prioridad ahora es conservar la claridad del diseño, documentar el avance y continuar el desarrollo en una próxima sesión con energía y orden.
Carlos Enrique Loría Beeche
Documento de diseño — GepetoChat
