Saltar al contenido principal

Servicio "Componente IA Externo" (Web Services)

Tipo: servicio externo de Web Services (configuración de administración, sin código) Alcance: 3 — Agente IA Se aplica en: Paso 3/3 del despliegue, bloque 5

Propósito​

Dar al agente IA (cuya interfaz conversacional es el Drawer IA) acceso de solo lectura al contexto del estudiante — matriculaciones, entregas, calificaciones, progreso, finalización — más la capacidad de enviarle mensajes, todo vía REST con token. El agente nunca consulta tablas mdl_* directamente.

Cómo consume el agente​

Todas las consultas van al mismo endpoint:

POST https://<host-del-campus>/webservice/rest/server.php
wstoken=<token>
wsfunction=<nombre_funcion>
moodlewsrestformat=json
...parámetros propios de la función

El modelo es pull: los Web Services de Moodle no emiten eventos hacia afuera (el core no tiene webhooks salientes), por lo que el agente consulta periódicamente y aplica sus reglas sobre la respuesta. El disparo push (event-driven, latencia cero) requiere la capa custom del plugin con observadores de eventos, definida en ADR-001; las funciones y reglas del agente no cambian entre un modelo y otro.

Configuración del servicio​

Creado en Administración del sitio → Servidor → Servicios web → Servicios externos (/admin/settings.php?section=externalservices), nombre "Componente IA Externo", con estas funciones autorizadas:

FunciónDa acceso a
core_webservice_get_site_infoValidación del token, info del sitio y funciones disponibles
core_user_get_users_by_fieldPerfil del usuario, incluido lastaccess
core_enrol_get_users_coursesCursos del usuario con progress, startdate, lastaccess
core_enrol_get_enrolled_usersMatriculados de un curso con roles y lastcourseaccess
core_course_get_courses_by_fieldDatos de un curso por id/shortname/categoría
core_course_search_coursesCatálogo de cursos visibles
core_course_get_contentsSecciones y actividades del curso (estructura de módulos)
core_completion_get_activities_completion_statusEstado de completitud por actividad
core_completion_get_course_completion_statusFinalización del curso (requiere criterios configurados)
gradereport_user_get_grade_itemsÍtems de calificación con graderaw/grademax
local_pccntr8203403_iacontext_get_activity_contextContexto plano de actividades por estudiante: nombre, sección (nombre, id y número), tipo, instance, enlace, estado, nota, nota máxima y fecha límite ya unidos por cmid, más la completitud del curso y el último acceso del estudiante (contrato). En Pruebas: dada de alta en el servicio y alcanzable con el token. Pendiente la cuenta de servicio no administradora
core_message_send_instant_messagesEnvío de mensajes a usuarios (la acción del agente)
core_badges_get_user_badgesInsignias otorgadas a un usuario
mod_assign_get_assignmentsTareas de un curso
mod_assign_get_submissionsEntregas de las tareas con status y timemodified
mod_quiz_get_user_quiz_attemptsIntentos de quiz de un usuario

mod_quiz_get_user_attempts está deprecada en Moodle 5.1 (el selector de funciones no la sugiere); su reemplazo es mod_quiz_get_user_quiz_attempts.

Token​

"Token Componente IA Externo", administrado en /admin/webservice/tokens.php y asociado a una cuenta de servicio dedicada. El valor del token no se versiona ni se documenta: se entrega por canal seguro al operador del agente.

Parámetro de ambiente

La cuenta concreta y su rol son un dato de cada ambiente. En Certificación debe definirlos el MEN antes de ejecutar el paso 3 del despliegue. La cuenta de servicio usada en Pruebas no se traslada.

Permisos del usuario de servicio​

La cuenta de servicio necesita un rol dentro de los cursos que va a consultar; con una cuenta sin matricular, varias de las funciones anteriores fallan por capacidades.

RequisitoLo exige
local/pccntr8203403_dashboard:viewstudentpanelLa función custom get_student_panel. Se define sin arquetipos, así que no la hereda ningún rol estándar: hay que asignarla explícitamente al rol de la cuenta de servicio
moodle/course:viewget_student_panel y get_activity_context validan el contexto del llamador en cada curso consultado
local/pccntr8203403_iacontext:viewcontextLa función custom get_activity_context. También sin arquetipos: hay que asignarla explícitamente al rol de la cuenta de servicio
moodle/course:viewparticipantscore_enrol_get_enrolled_users
mod/assign:view (y mod/assign:grade para entregas ajenas)mod_assign_get_assignments / mod_assign_get_submissions
moodle/site:sendmessagecore_message_send_instant_messages — incluida por defecto en Usuario autenticado; requiere además la mensajería del sitio habilitada
Matrícula de la cuenta de servicio

La rutina de configuración del despliegue no toca matrículas (no crea ni modifica contenido pedagógico). Matricular la cuenta de servicio en los cursos que el agente deba consultar es un paso a cargo del MEN, posterior a la rutina.

Demo: respuesta que obtiene el agente por trigger​

Correspondencia entre los triggers de la matriz del requerimiento y la respuesta JSON que el agente obtiene del servicio. Los JSON marcados como verificado son respuestas reales del ambiente de Pruebas, recortadas a los campos que usa la regla; los marcados como forma documentada muestran la estructura definida por el core para escenarios aún no provocables en Pruebas.

Evento_TriggerFunción core MoodleRespuesta JSON (demo)Regla del agente
user_enrolment_createdcore_enrol_get_enrolled_usersverificado: [{"id":4,"fullname":"Estudiante (Karina) Pruebas","lastcourseaccess":1781126110,"roles":[{"shortname":"student"}]}]Diff de matriculados entre corridas; el nuevo recibe la bienvenida
assessable_submittedmod_assign_get_submissions (+ mod_assign_get_assignments)verificado: {"assignments":[{"assignmentid":26,"submissions":[{"userid":4,"status":"new","timemodified":1779306200}]}]}Entregas con status nuevo desde la última corrida (ver límite sobre "new" abajo)
course_completedcore_completion_get_course_completion_statusforma documentada: {"completionstatus":{"completed":true,"completions":[{"complete":true,"timecompleted":...}]}}completed == true dispara la sugerencia de ruta
status_change_inactivecore_user_get_users_by_fieldverificado: [{"id":4,"fullname":"Estudiante (Karina) Pruebas","lastaccess":1781126110}]ahora − lastaccess > 5 días notifica al tutor
grade_updated_lowgradereport_user_get_grade_itemsverificado: {"usergrades":[{"gradeitems":[{"itemname":"INTRODUCCIÓN","graderaw":null,"grademax":100}]}]}graderaw / grademax < 0.60 dispara el refuerzo
slow_progress_earlycore_enrol_get_users_coursesverificado: [{"id":3,"progress":6.82,"startdate":1652763600,"lastaccess":1781126110}]progress < 20 y ahora − startdate > 7 días
milestone_reachedcore_completion_get_activities_completion_status (+ core_course_get_contents)verificado: {"statuses":[{"cmid":45,"state":1,"timecompleted":1780667948},{"cmid":52,"modname":"assign","state":0}]}Todas las actividades del módulo con state = 1; el badge lo otorga Moodle por criterios nativos
external_search_failcore_message_send_instant_messages (es la acción; el trigger nace en el propio agente)forma documentada: [{"msgid":57,"useridto":4,"text":"...foro de dudas...","errormessage":null}]Búsqueda sin resultados en el agente sugiere el foro
dropout_risk_highcompuesto: core_enrol_get_users_courses + gradereport_user_get_grade_items + core_user_get_users_by_fieldlo construye el agente: {"alumnos_en_riesgo":[{"userid":4,"progress":6.82,"dias_inactivo":1,"nivel_riesgo":"alto"}]}Heurística sobre inactividad + progreso + notas; reporte al docente
content_gapmod_quiz_get_user_quiz_attempts (+ mod_quiz_get_attempt_review)verificado (sin intentos): {"attempts":[],"warnings":[]}Requiere desarrollo custom: las estadísticas por pregunta no se exponen por WS nativo
Estadísticas para el chatbot del adminfunción externa custom del plugin (ADR-001)propuesto: {"resumen":{"cursos":2,"estudiantes_activos":1,"en_riesgo":1}}Requiere la capa de datos custom del Alcance 3

Prerrequisitos y límites detectados​

  • Entregas en status: "new": cuando una tarea no exige presionar "Enviar tarea", la entrega del estudiante queda en status: "new" en vez de "submitted". La regla de assessable_submitted debe definir con el cliente si new + timemodified reciente cuenta como entrega.
  • course_completed requiere criterios: si el curso no tiene criterios de finalización configurados, core_completion_get_course_completion_status responde el error nocriteriaset. Configurar los criterios del curso es prerrequisito de ese trigger.
  • Sin WS nativo para estadísticas agregadas: content_gap (fallos por pregunta de quiz) y las estadísticas del chatbot del admin no tienen función nativa; los cubre la capa custom de funciones externas del Alcance 3 (ADR-001).

Drawer IA​

La interfaz conversacional del agente se denomina Drawer IA y corresponde al elemento Aside - NavigationDrawer (AI Assistant Chat Panel) del diseño en Figma. Su documentacion detallada esta en la ficha del Drawer IA.

Función custom del panel "Ver mi avance"​

El plugin local_pccntr8203403_dashboard (v1.2.0) expone local_pccntr8203403_dashboard_get_student_panel, que entrega en una sola llamada el dataset completo de la modal "Ver mi avance" (avance, desempeño, pendientes, racha, módulos, últimas notas y alertas de 12 tipos) — datos que las funciones core no pueden reconstruir (racha y alertas usan logs y lógica propia). Instructivo para el operador del agente: Consumo del panel del estudiante.

Relacionados​