Saltar al contenido principal

Drawer IA (Asistente Pedagogico)

Ficha tecnica
  • Impacto -- Tema: Override standard_after_main_region_html() en core_renderer, plantilla aitutor_drawer.mustache, modulo AMD aitutor.js, SCSS .aitutor-*, override de embedded.mustache (SCORM player)
  • Impacto -- Plugin: Funcion externa send_message en local_pccntr8203403_aitutor (proxy al servicio externo)
  • Requisito: Definicion de alcance integracion IA-Moodle (docx) . Figma: 19561-5832 . Estado: Implementado

Proposito

Panel lateral de chat que permite al estudiante conversar con un tutor IA directamente desde cualquier pagina de curso o actividad de Moodle. El tutor recibe automaticamente el contexto academico del estudiante (curso, actividad, seccion, progreso, datos SCORM) para generar respuestas pedagogicas contextualizadas.

Funcionalidades

  • Boton flotante ("launcher") con avatar del tutor, visible en todas las paginas de curso.
  • Panel lateral (drawer) con area de mensajes, indicador de escritura animado y campo de entrada.
  • Enriquecimiento automatico del contexto: nombre del curso, actividad actual (nombre y tipo), seccion, porcentaje de completacion.
  • Lectura de datos SCORM CMI cuando el drawer se usa dentro del reproductor SCORM (compatibilidad con SCORM 1.2 y SCORM 2004).
  • Respuestas del tutor en HTML enriquecido (sanitizado por HTMLPurifier de Moodle).
  • Rate limiting configurable por usuario.
  • Accesibilidad: aria-label, aria-expanded, aria-hidden, role="log", aria-live="polite", cierre con tecla Escape.

Donde aparece

El drawer se inyecta en todas las paginas que cumplen estas condiciones:

  1. El usuario esta autenticado y no es invitado.
  2. La pagina pertenece a un curso (no es la pagina del sitio).
  3. El usuario tiene la capacidad local/pccntr8203403_aitutor:use en el contexto del curso.
  4. El plugin local_pccntr8203403_aitutor esta configurado (URL del servidor y token no vacios).

Para paginas con layout estandar (columns2, drawers), la inyeccion se realiza via standard_after_main_region_html(). Para el reproductor SCORM (layout embedded), se usa un override del template theme_boost/embedded.mustache.

Arquitectura

El drawer es un componente repartido entre theme_cdigital (presentacion) y local_pccntr8203403_aitutor (logica y comunicacion con el servicio externo). Esta separacion sigue el patron establecido por ADR-002 y su justificacion especifica se documenta en ADR-003.

Flujo de una interaccion

  1. El estudiante escribe un mensaje y presiona Enviar (o Enter).
  2. El modulo AMD aitutor.js captura el texto, lee los datos SCORM si aplica, y hace una llamada AJAX a local_pccntr8203403_aitutor_send_message.
  3. El plugin PHP enriquece el contexto (nombre de actividad, tipo, seccion, progreso) y envia un POST cURL al servicio externo con el payload completo.
  4. El servicio externo responde con reply_html.
  5. El plugin sanitiza el HTML con clean_text() y lo retorna al navegador.
  6. El modulo AMD renderiza la respuesta como burbuja del bot con innerHTML.

Archivos del tema involucrados

ArchivoFuncion
classes/output/core_renderer.phpOverride de standard_after_main_region_html(): evalua condiciones de visibilidad, construye el contexto y renderiza la plantilla
templates/aitutor_drawer.mustacheMarkup del launcher, panel, area de mensajes, campo de entrada
templates/theme_boost/embedded.mustacheOverride del layout embedded (SCORM player) que incluye el drawer
amd/src/aitutor.jsLogica del cliente: toggle open/close, envio de mensajes, render de respuestas, lectura de SCORM CMI
scss/preset/cdigital.scssEstilos del drawer (seccion .aitutor-*)
pix/aitutor/avatar.pngAvatar del tutor (48x48 en launcher, 54x54 en header del drawer)
pix/aitutor/icon-send.svgIcono del boton de envio
lang/{en,es}/theme_cdigital.phpSin cadenas propias; las cadenas del drawer provienen de local_pccntr8203403_aitutor

Dependencias

  • Plugin local_pccntr8203403_aitutor (funcion externa send_message).
  • Servicio externo de tutoria IA configurado y accesible.
  • Capacidad local/pccntr8203403_aitutor:use otorgada al usuario.

Historial de cambios

Ver CHANGELOG.md en la raiz del sitio de documentacion.