Tabla de Contenidos
Preguntas externas de otros sistemas
Este es el caso mas general, en el que hay una aplicación externa que es capaz de presentar una pregunta o una actividad al alumno y devolver a Siette mediante un enlace el resultado de la evaluación. Siette asimila esta respuesta a un ítem interno, que no se llega a mostrar nunca al usuario y que traduce la respuesta del sistema externo en un valor de respuesta propio de Siette. Se entenderá mejor viendo varios ejemplos:
Se pueden diferenciar dos casos en el uso de ítem externos:
- Ítems externos completamente independientes, cuando el sistema externo no tiene nada que ver con Siette, y no se puede modificar su funcionamiento porque no se dispone de acceso al código
- Ítems externos de desarrollo conjunto, en donde el ítem externo puede adaptarse a un mínimo protocolo para el paso de parámetros en uno y otro sentido (de Siette al sistema externo y del sistema externo a Siette).
Ítems externos completamente independientes
Ejemplo 1
Supongamos que se quiere integrar en Siette una pregunta desarrollada en Genially, un sistema que esta pensado principalmente para desarrollo de presentaciones, pero que tambien incluye la posibilidad de realizar rudimentarias preguntas de tipo multiple opción, eso si, con una interfaz atractiva.
Lo primero que habría que hacer es desarrollar la pregunta usando el editor de Genially. En este caso nos limitamos a crear una presentación de una sola página a partir de una de las plantillas del sistema.
Se edita la pregunta y a cada una de las opciones de respuesta se le asigna una interactividad, consistente en un enlace a Siette.
En concreto, el enlace será siempre a la página de Siette que recoge la respuesta externa, a la que se añade un parámetro answer
que contendrá la respuesta final del alumno:
https://www.siette.org/siette/generador/RespuestaExterna?answer=Danubio
Habrá que repetir esta operación para cada una de las respuestas de la pregunta. Nótese que el parámetro answer
no tiene porque coincidir exactamente con el texto de la respuesta de la pregunta, es simplemente un valor indicativo de la respuesta.
Genially proporciona un enlace para presentar la pregunta, en este caso:
https://view.genial.ly/60d6e3f761dbed0dd1bd1f1f/interactive-content-rio-mas-caudaloso-de-europa
A continuación, para este ítem externo habrá que crear un ítem base en Siette, que acepte las posibles respuestas que mandará el ítem externo. Dado el tipo de ítem, en este caso se creará un ítem de multiple opción y respuesta única, asignándole las tres posibles cadenas que devuelve el parámetro answer
a cada una de las opciones de respuesta, en la pestaña Contenido:
y añadiendo la URL de la llamada en la pestaña Avanzado, indicando que la llamada se hace directamente usando el método GET
.
con lo que al guardar el ítem en el previsualizador se muestra el item base de esta forma:
Todo aparenta un ítem normal, pero la interactividad del previsualizador está desactivada y al pulsar el botón Evaluar
se realiza la llamada al ítem externo
Mediante la interacción con el ítem externo, suponiendo que el alumno pulsa la opción El Danubio
, se efectuará una llamada a la página de RespuestaExterna
de Siette pasándole como valor Danubio
. Siete recoge esta respuesta, determina que corresponde a la opción Danubio
y presenta el resultado del item base como si se tratase de cualquier otro ítem interno.
El proceso funciona de la misma manera cuando el alumno está haciendo un test. Las preguntas externas pueden combinarse libremente con preguntas internas. Todos los criterios de selección, adaptación, etc funciona sobre el item base de la misma manera que con todos los demás ítems.
Ejemplo 2
El caso anterior es muy simple, se ha hecho así a propósito para mostrar cómo funciona el mecanismo de ítem externos. Evidentemente no se justifica la creación de un ítem externo cuando podría realizarse de forma muy similar en Siette. En este ejemplo, mostramos un caso algo mas elaborado, en donde el ítem externo hace 5 preguntas sobre la geografía de Europa, mediante sucesivos enlaces se van contabilizando el número de aciertos:
Finalmente en las últimas páginas (aparentemente todas iguales), se redirige la respuesta a Siette indicando mediante el parámetro answer
el número de aciertos:
https://www.siette.org/siette/generador/RespuestaExterna?answer=4
En este caso el item base es un ítem de respuesta libre, que usa el patrón de Correspondencia, y que tiene 6 patrones, una por cada uno de los valores que tomará el parámetro answer
. Al ítem base se le ha asignado una puntuación manual de 5 puntos, y a cada una de los patrones, se le ha asignado un valor de crédito parcial usando el editor intermedio, de manera que si la respuesta externa devuelve 2, se asignen 2 puntos, pero si devuelve 4, se asignen 4 puntos, etc.
Cuando el ítem externo termina, al devolver al control a Siette, la respuesta contenida en el parámetro answer
se comprueba contra los patrones establecidos en Siette usando el mismo algoritmo que se usa cuando la respuesta viene dada desde el interfaz interno.
Implementación de ítem externos para Siette
En los casos en los que se desarrollen items con la idea de usarlos como ítem externos de Siette, se han establecido algunas pautas a seguir en el paso de parámetros tanto en la llamada de Siette como en el retorno de parámetros. Estas convenciones facilitan la comunicación entre Siette y el ítem externo y permiten usar el protocolo HTTP POST.
Llamada de Siette al ítem externo
Cuando Siette llama a un ítem externo por defecto le pasa los siguientes parámetros:
method
, si la llamada al ítem externo se hará con el protocolo GET o POST, por defecto POSTurl
, url de Siette a la que el ítem externo debe devolver la respuesta del alumno. Normalmente este valor es fijo:https://www.siette.org/siette/generador/RespuestaExterna
En el caso de que la llamada se haga por el método GET, Siette llamará directamente a la dirección que se le haya indicado. Solo en el caso de que la llamada se haga mediante el método POST, añadirá los siguientes parámetros en la llamada:
answer
, este parámetro contiene el nombre del campo que debe usarse como parámetro de respuesta, por defecto el valoranswer
.username
, nombre del usuario a quien se propone la pregunta.useremail
, correo electrónico del usuario al que se le propone la pregunta.titulo
, titulo del ítem base.enunciado
, enunciado del ítem base.
Adicionalmente, Siette añadirá a los anteriores todos los que el usuario haya indicado en el campo Parámetros de la URL. Este campo deberá estar formateado siguiendo unas reglas simples, ya que en él se escribirán todos los parámetros adicionales, por ejemplo:
idioma=english tiempoLimite=60
enviará dos parámetros más.
Parámetros de vuelta del ítem externo
Cuando el ítem externo devuelve la llamada a Siette, usando la url
que recibió, se espera que incluya los siguientes parámetros:
label
, nombre del parámetro que contendrá la respuesta, por defectoanswer
answer
, (u otro nombre cualquiera indicado por el parámetrolabel
), contiene la cadena de texto con la respuesta del alumno.
La llamada del ítem externo a Siette puede hacerse indistintamente mediante los protocolos GET o POST.
Ejemplo 3
Como ejemplo de un ítem externo se ha desarrollado una presentación diferente mediante una página en JSP que se ha subido al directorio auxiliar de la asignatura.
La página, que usa su propio estilo para el texto, la disposición de los elementos, la imagen de fondo y los botones, mediante un archivo CSS. Recibe tres parámetros: answer
que le indica como debe llamarse el campo con el que enviará la respuesta; url
, que es la dirección a la que se enviará la respuesta; y idioma
que indica si debe presentar el texto en español o inglés.
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset='UTF-8"> <meta name="Author" content="Ricardo Conejo"> <title>External question</title> <link rel="stylesheet" type="text/css" href="estilos.css"/> <% String url = request.getParameter("url"); String respuesta = request.getParameter("answer");; String idioma = request.getParameter("idioma"); if (idioma==null || idioma.equals("")) idioma = "spanish"; %> </head> <body> <form name="form_siette" ACTION="<%= url %>" METHOD="POST"> <div class='centered' > <h1><%= idioma.equals("english")?"What is the biggest country of Europe?":"¿Cual es, en extensión, el pais mas grande de Europa ?" %></h1> <label class="container"> <%= idioma.equals("english")?"France":"Francia" %> <input type="radio" name="<%= respuesta %>" value="<%= idioma.equals("english")?"France":"Francia" %>"> <span class="checkmark"></span> </label> <label class="container"> <%= idioma.equals("english")?"Spain":"España" %> <input type="radio" name="<%= respuesta %>" value="<%= idioma.equals("english")?"Spain":"España" %>"> <span class="checkmark"></span> </label> <label class="container"> <%= idioma.equals("english")?"Rusia":"Russia" %> <input type="radio" name="<%= respuesta %>" value="<%= idioma.equals("english")?"Russia":"Rusia" %>"> <span class="checkmark"></span> </label> <label class="container"> <%= idioma.equals("english")?"Germany":"Alemania" %> <input type="radio" name="<%= respuesta %>" value="<%= idioma.equals("english")?"Germany":"Alemania" %>"> <span class="checkmark"></span> </label> <label class="container"> <%= idioma.equals("english")?"China":"China" %> <input type="radio" name="<%= respuesta %>" value="<%= idioma.equals("english")?"China":"China" %>"> <span class="checkmark"></span> </label> <label class="container"> <%= idioma.equals("english")?"Poland":"Polonia" %> <input type="radio" name="<%= respuesta %>" value="<%= idioma.equals("english")?"Poland":"Polonia" %>"> <span class="checkmark"></span> </label> <input type="submit" class='btn' name="enviar" value="<%= idioma.equals("english")?"Send answer":"Enviar respuesta" %>"> </div> </form> </body> </html>
El texto de esta página web puede editarse aparte o subirse al directorio auxiliar mediante el Gestión de archivos en donde tambien deben situarse los ficheros que use esta página, como estilos.css
o europa.png
Una vez creado el ítem, es necesario definir en Siette un item base, (en realidad dos, uno en español y otro en inglès). en este caso con las mismos textos de respuesta correspondientes a los nombres de los paises, y en la pestaña Avanzado, indicar que es un ítem externo al cuál se llama por el método POST, y que por tanto recibirá los parámetros generales, y además un parámetro más correspondiente al valor que se ha puesto en el campo Parámetros de la URL correspondiente al idioma
.
Si todo va bien, el previsualizador mostrará el ítem externo:
y tras responder en él, la respuesta llegará de vuelta a Siette que la mostrará la corrección de la respuesta recibida como si se hubiera respondido directamente al ítem base.
Limitaciones
Los ítems externos deben mostrarse uno a uno. No es posible utilizar testlets en los que se muestran en una misma pantalla varios ítems. La única solución posible es que el ítem externo en realidad sea un testlet, aunque la respuesta debe corresponder a un solo ítem base. Esto si que es posible utilizando items compuestos como item base.
Por el momento no se ha diseñado ninguna interfaz para presentar el ítem externo como interfaz que muestre la respuesta y la corrección. Téngase en cuenta que en muchos casos no se muestra la respuesta o la corrección al alumno hasta el final de la sesión por lo que en este caso se mostrarían todas las respuestas simultáneamente lo que podría ser un problema con los ítems externos.
Por otra parte, los ítem externos podrían mostrar la corrección tras presentar el ítem y obtener la respuesta del alumo, simplemente tendrían que enviar la respuesta después de mostrar la corrección.