El reto
Una institución de educación superior norteamericana tenía Panopto para la captura de clases y Canvas LMS para la impartición de cursos, pero nada que los conectara a escala. Cada período, un equipo de diseño instruccional dedicaba unas 600 horas al mismo ciclo manual: confirmar que una grabación había terminado, encontrar la carpeta correcta de Panopto, nombrar bien la grabación, configurar subtítulos y acceso, publicar un enlace en el módulo correcto de Canvas y luego perseguir las clases que no se habían grabado en absoluto.
Los modos de fallo eran frustrantes y predecibles. Grabaciones publicadas en la sección equivocada. Subtítulos retrasados días. Aulas a final de semestre con dispositivos de captura averiados que nadie notaba hasta que los estudiantes se quejaban. Y sin rastro de auditoría: cuando un estudiante preguntaba "¿por qué faltaba la clase del jueves pasado?", nadie podía dar una respuesta segura. La institución quería recuperar las 600 horas del equipo, detectar los fallos en el momento en que ocurrían y contar con un sistema capaz de escalar al doble del número actual de aulas sin aumentar la plantilla.
Nuestra solución
Construimos una capa de orquestación integral en Python y FastAPI que escucha los eventos de cursos de Canvas y los eventos de grabación de Panopto, los une mediante un modelo de catálogo local que conoce cursos, secciones, aulas e instructores, y ejecuta automáticamente todo el flujo de publicación.
El catálogo local es la idea clave. En lugar de hacerle a Canvas y a Panopto las mismas preguntas una y otra vez, mantenemos un pequeño catálogo autorizado en PostgreSQL con cursos, secciones, asignaciones de aula a sección, titularidad de instructor por sección y las reglas de publicación que ha elegido cada departamento. Los Canvas Live Events y los webhooks de Panopto actualizan el catálogo casi en tiempo real; un servicio de orquestación FastAPI ejecuta luego cada acción posterior: archivar la grabación en la carpeta correcta de Panopto, solicitar subtítulos, establecer el acceso según la lista de cada sección, publicar la clase en el módulo correcto de Canvas y escribir un evento de auditoría estructurado en cada paso.
El filtrado inteligente detecta los fallos que antes eran invisibles. Si una clase programada no tiene grabación 15 minutos después de terminar, el sistema avisa al equipo de soporte instruccional y abre un incidente con seguimiento. Si los subtítulos siguen sin estar tras la ventana del SLA, escala. Cada acción de publicación — con éxito o no — se registra con quién, qué, cuándo, por qué y los eventos de origen que la desencadenaron, de modo que la pregunta "¿por qué faltaba el jueves pasado?" ahora tiene respuesta en 30 segundos.
- Catálogo local de cursos, secciones, aulas, instructores y reglas de publicación por departamento
- Ingesta de Canvas Live Events + webhooks de Panopto mediante un receptor con patrón inbox
- Máquina de estados idempotente por grabación: detectada → archivada → subtitulada → publicada → auditada
- Detección inteligente de grabaciones faltantes con SLA de 15 minutos y creación de incidentes con seguimiento
- Monitoreo del SLA de subtítulos con escalado automático cuando se incumple la ventana
- Control de acceso por sección según la lista de alumnos, aplicado a carpetas de Panopto y publicaciones de Canvas
- Herramienta de reproducción para volver a ejecutar de extremo a extremo el flujo de publicación de cualquier grabación histórica
- Registro de auditoría estructurado que responde '¿por qué falta esta clase?' en 30 segundos
- Interfaz de administración para que el equipo de diseño instruccional edite las reglas de publicación sin un ingeniero