Saltar al contenido principal

Instructivo para el desarrollador del servicio IA — Panel "Ver mi avance"

Novedad (2026-07-22, ambiente de Pruebas). El servicio "Componente IA Externo" incorpora una función nueva: local_pccntr8203403_dashboard_get_student_panel. En una sola llamada devuelve el mismo panel de progreso que el estudiante ve en la modal "Ver mi avance": avance general, desempeño, actividades pendientes, racha, avance por módulos, últimas calificaciones y alertas académicas — calculado por la misma lógica que usa la plataforma. Ya no hace falta combinar funciones core para reconstruir estas métricas.

Cómo pedir los datos

Mismo endpoint y mismo token de siempre:

curl -X POST "https://campusvirtual.metaversodenegocios.com/webservice/rest/server.php" \
-d "wstoken=<TOKEN>" \
-d "wsfunction=local_pccntr8203403_dashboard_get_student_panel" \
-d "moodlewsrestformat=json" \
-d "userid=4" \
-d "courseid=2"
ParámetroValor
useridId Moodle del estudiante — el mismo moodle_user_id que ya reciben en el payload del tutor (v1/campus/tutor)
courseidOpcional. Id del curso. Con 0 (u omitido) responde todos los cursos activos del estudiante

Respuesta (abreviada)

{
"userid": 4,
"firstname": "Karina",
"fullname": "Estudiante (Karina) Pruebas",
"generatedat": 1784679108, // unix timestamp de generación
"courses": [{
"courseid": 2,
"coursename": "EVALUAR PARA AVANZAR – CONTENIDOS",
"progress": { "available": true, "pct": 5, "completed": 2, "total": 40,
"courseavgpct": 5.7, "state": "atencion" },
"grade": { "value5": null, "courseavg5": null, "state": null }, // escala 0–5
"pending": { "count": 38, "state": "bien" },
"streak": { "days": 0, "courseavg": 0, "state": "bien" }, // días consecutivos
"modules": [
{ "name": "STS Lenguaje", "sectionnum": 1, "pct": 0,
"complete": false, "completed": 0, "total": 8 }
],
"recentgrades": [
{ "name": "Quiz final M1", "grade5": 4.2, "date": 1784500000 } // máx. 3, recientes primero
],
"alerts": [
{ "code": "inactivity", "level": "critico", "motivational": false }
]
}]
}

Diccionario rápido

  • state: posición del estudiante frente al promedio de su curso: excelente | bien | atencion | riesgo. null = no calculable.
  • null en cualquier valor = sin datos aún (p. ej. sin calificaciones, o curso sin seguimiento de finalización → progress.available: false).
  • alerts: Moodle entrega solo el código y el nivel (leve | critico); la redacción del mensaje al estudiante la define el agente. motivational: true = alerta positiva (felicitar, no advertir).
Código de alertaSignifica
progress_delayRetraso frente al cronograma del curso
inactivityDías sin ingresar al curso
low_performancePromedio bajo (escala 0–5)
performance_dropÚltimas notas en descenso
irregular_paceIngresa pero no avanza
modules_behindMódulos que ya debería tener completos
dropout_riskRiesgo de abandono (indicador compuesto)
low_participationSin participación en foros/comentarios
pending_evalEvaluaciones (quizzes) sin intentar
positive_streakRacha positiva — motivacional
high_performanceSobre el promedio del curso — motivacional
due_soonEntrega próxima a vencer (hoy nunca dispara: plataforma sin fechas límite)

Notas y errores comunes

  • Modelo pull: consultar bajo demanda o periódicamente. Sugerido: no más de una consulta por estudiante/curso cada pocos minutos (los promedios de curso ya van cacheados en la plataforma).
  • La racha vía API solo cuenta días con actividad real (en la web "hoy" siempre cuenta porque el estudiante está navegando; aquí no).
  • invalidtoken → token vencido o mal copiado.
  • required_capability_exception / "Curso o actividad no accesible" → a la cuenta del token le falta permiso; reportar al administrador del campus.
  • usernotenrolled → el userid no está matriculado en ese courseid.