← Volver a proyectos

Proyecto

AgendaBot Pro

SaaS multi-tenant que permite a los pacientes agendar, reagendar y cancelar citas completamente desde WhatsApp —sin apps adicionales— para el mercado mexicano/LATAM. Impulsado por un agente de IA (GPT con function calling) con guardrails deterministas, WhatsApp Cloud API, cobros con Stripe y facturación electrónica (CFDI).

En producción Producto propio — en producción Fundador e Ingeniero (Full Stack — Producto, IA, Backend, Infraestructura) Resumen público

Producto propio, en producción y operado en solitario. SaaS multi-tenant que maneja datos de clientes y pacientes; los detalles de implementación se resumen a alto nivel.

Stack

Angular 21TypeScriptTailwind CSSNode.jsExpressFirebase HostingFirestoreFirebase AuthCloud FunctionsOpenAI GPT-4o (function calling)WhatsApp Cloud APIStripeFacturapi (CFDI)ResendGCPGitHub Actions

Impacto

  • Los pacientes agendan, reagendan y cancelan 24/7 completamente dentro de WhatsApp —sin instalar apps— reduciendo la carga de recepción/teléfono para clínicas y profesionales independientes.
  • El negocio puede conectar el número de WhatsApp que ya usa, en vez de pedirle a sus pacientes que se aprendan uno nuevo — la razón más común por la que este tipo de producto se abandona durante el alta.
  • Agente de IA sobre GPT con function calling donde el modelo NUNCA escribe en la base de datos: solo invoca tools definidas en el backend, manteniendo cada cita correcta, auditable y segura.
  • Capa de confirmación determinista fuera del LLM: los recordatorios de 1 hora amarran los IDs de cita, así una respuesta o un botón confirman la cita exacta — eliminando los 'confirmado' falsos.
  • Monetización por uso con cobro medido de Stripe, facturando solo las citas completadas por ciclo de suscripción.
  • Facturación electrónica mexicana (CFDI) nativa: los pacientes se autofacturan desde WhatsApp o un portal público, con credenciales encriptadas por organización.
  • Multi-tenant desde el día uno — un solo modelo de datos sirve a profesionales independientes y clínicas con varios médicos, con aislamiento de inquilino forzado en el servidor.

Lo que hice

  • Diseñé un agente de IA sobre GPT con function calling: el modelo solo llama tools tipadas, ejecutadas en el servidor contra Firestore — el LLM nunca toca la base de datos.
  • Construí flujos interactivos de WhatsApp — pickers de servicio/profesional/fecha/hora y botones quick-reply de plantilla con payload dinámico por mensaje.
  • Implementé un estado de slot-filling a prueba de truncamiento e historial acotado para que el bot deje de repreguntar y sobreviva conversaciones largas.
  • Blindé los webhooks: verificación de firma de Meta y Stripe sobre el raw body, más deduplicación por messageId con escrituras atómicas en Firestore.
  • Automaticé el sync de plantillas de WhatsApp a Meta vía Graph API con ediciones no destructivas (evitando el cooldown de eliminación de nombres de Meta).
  • Auth multi-tenant con custom claims de Firebase + middleware de tenant que acota cada query; feature flags actualizados solo desde webhooks de Stripe.
  • Jobs programados para recordatorios dentro de la ventana gratuita de 24h de Meta, detección de no-shows y reportes diarios.
  • Panel de super-admin con analítica de costo/margen por organización y monitoreo de conversaciones en vivo; CI/CD con GitHub Actions y un gate de tests que bloquea el deploy.
  • La lista de espera ofrece los huecos liberados durante 30 minutos y la compresión de agenda propone horarios más juntos, pero ninguna mueve jamás a un paciente sin un sí explícito por WhatsApp: el cambio lo hace el toque, no el algoritmo.

Arquitectura

  • Monorepo de dos capas: SPA Angular 17 (Firebase Hosting) + Node/Express en Cloud Functions v2; el frontend nunca accede a Firestore directamente — todo pasa por el backend.
  • Webhook de WhatsApp Cloud API → middleware de auth + tenant → agente de IA (GPT con function calling), o un Flow Engine hardcodeado cuando la IA está desactivada.
  • GPT llama tools tipadas; el backend las ejecuta contra Firestore y devuelve el resultado — el modelo nunca escribe.
  • Los webhooks de Stripe controlan el plan y los feature flags; cobro medido sobre citas completadas por ciclo de suscripción.
  • Facturapi para timbrado de CFDI con llaves encriptadas por organización; portal público de facturación + flujo dentro de WhatsApp.
  • Jobs programados (Cloud Scheduler / onSchedule): recordatorios, detección de no-shows, reportes y compresión de datos.

Etiquetas

SaaSWhatsAppAI AgentsLLMsMulti-tenantStripeFirebaseLATAMFull Stack