Saltar al contenido

M-016 · FICHA DE MUESTRA · SEPARATA

Chatbot de agendamiento clínico por WhatsApp

Bot conversacional que automatiza el agendamiento de primeras citas de psicología por WhatsApp, integrado en tiempo real con el ERP clínico de una fundación de salud — validación de pacientes, agenda real, confirmación, consulta y cancelación.

ESTADO
En desarrollo
AÑO
2026
COMPOSICIÓN
Woztell · Power Automate · API REST · PowerShell · Python

Abstract

Una fundación que ofrece atención psicológica necesitaba que sus pacientes agendaran la primera cita por WhatsApp sin intervención manual: validar documento y autorización de la EPS, mostrar convenios y sedes, ofrecer fechas y horarios reales, confirmar la cita en el sistema clínico y permitir consultarla o cancelarla después. Todo reflejado de inmediato en el ERP que usa el equipo clínico.

Arquitectura

El paciente conversa con un árbol de decisión en Woztell (WhatsApp Cloud API); cada acción dispara un flujo de Power Automate que consulta o escribe en el ERP clínico a través de su API y le responde al paciente directamente por WhatsApp. La llamada inicial es asíncrona: la conversación solo avanza porque el backend devuelve un botón cuyo payload dispara el siguiente nodo del árbol. Ese contrato doble — cada payload del backend necesita su trigger en el árbol, y viceversa — es lo que mantiene viva la conversación, y es exactamente la clase de acople que se rompe en producción sin que ningún log lo grite.

El flujo completo: consentimiento → documento → validación contra el ERP → autorización EPS (contra un Excel en SharePoint) → convenio → sede (solo las que tienen agenda real) → fecha → hora → confirmación → cita creada. El bot prioriza al profesional de la última cita atendida para dar continuidad terapéutica.

Ingeniería del propio proceso

Los dos “programas” reales del bot son artefactos JSON de 80–150 KB que se importan en consolas de terceros — no código convencional. En vez de editarlos a mano: un pipeline de generación idempotente en PowerShell que parte de una instantánea limpia, aplica un parche auto-validado y reserializa el artefacto en el formato exacto de cada plataforma. Un verificador de ~35 aserciones corre tras cada cambio y comprueba, entre otras cosas, que cada payload emitido tenga su trigger correspondiente en el árbol. Luego: despliegue directo por API a ambas plataformas (autenticación con msal en Python) y un patrón blue-green para publicar versiones del árbol sin cortar el servicio.

Retos técnicos resueltos

  • Datos invisibles en el ERP: el conector solo exponía un subconjunto de las agendas reales (evidenciado con una campaña reproducible de 51 pruebas). Se rediseñó el flujo para agendar por disponibilidad real en vez de catálogo de profesionales.
  • Estado en el motor conversacional: las variables del contexto transitorio no sobreviven entre nodos; toda la escritura migró al store persistido.
  • Gotchas del Workflow Definition Language: filter() no existe, e if() evalúa ambas ramas — un json() sobre una respuesta no garantizada revienta el flujo aunque esté en la rama “que no debería ejecutarse”.
  • Fallas silenciosas de esquema: metadatos extra en un arreglo de botones hacían que WhatsApp rechazara el mensaje completo sin aviso.
  • Zona horaria: una ventana de consulta en UTC crudo hacía “saltar” el listado de citas al día siguiente desde cierta hora local.

Resultados

En pruebas activas contra el ERP de producción en canal de pruebas de WhatsApp. Las limitaciones con origen en el ERP están escaladas al proveedor con evidencia reproducible. Proyecto privado: el código no es público.