Mettre en place l'API Tin Can pour prendre en charge le contenu Articulate

Dernière mise à jour de l’article Nov 09, 2016

Cet article s'applique à :

Storyline, Studio 360, Studio '13, Rise

Mettez en œuvre les fonctionnalités de l'API Tin Can (également appelée Experience API) décrites sur cette page pour que le contenu Articulate soit entièrement pris en charge dans votre plateforme de formation en ligne (LMS).

Afficher les spécifications complètes de l’API Tin CAN.

Types d'activités

Le contenu Articulate envoie un rapport sur les types d'activités décrits dans le tableau ci-dessous. Veuillez prendre note des valeurs prévues pour l'identifiant principal de l'activité (défini dans l'objet context.contextActivities).

Types d'activités

Description

Identifiant principal

module

Identifie une seule diapositive au sein d'un module.

L'identifiant principal sera toujours l'identifiant du module.

cmi.interaction

Une question notée ou d'enquête.

L'identifiant principal est l'identifiant de l'objectif auquel l'interaction correspond.

objectif

Le contenu Articulate regroupe des interactions au moyen de diapositives de révision. La diapositive de révision est définie grâce à un objectif Tin Can. Un module peut comporter un ou plusieurs objectifs. Une diapositive de révision peut également regrouper plusieurs diapositives de révision.

L'identifiant principal est soit l'identifiant du module soit l'identifiant de l'objectif dont il dépend.

module

Le module Articulate.

L'identifiant du module sera toujours l'identifiant principal.

Verbes

L'API Tin Can prévoit l'utilisation de verbes pour décrire l'activité de l'utilisateur. Vous trouverez ci-dessous une liste des verbes employés dans le contenu Articulate, ainsi que leur signification.

Verbes

Types d'activités

Description

essayé

Module

Indique à la plateforme de formation en ligne que le module a commencé.

vue

Module

Envoyé lorsqu'une diapositive a été vue.

réponse donnée

cmi.interaction

Indique que l'utilisateur a répondu à une question dans une enquête ou une question notée.

terminé

module, objectif

Utilisé lorsqu'un module ou objectif est terminé ou atteint et que le critère d'achèvement est basé sur le nombre de diapositives consultées ou sur la fin d'une enquête.

réussi

module, objectif

Indique à la plateforme de formation en ligne que le module ou l'objectif est terminé ou atteint et que l'utilisateur a obtenu le score minimum pour réussir le quiz. Ce verbe est uniquement utilisé lorsque le critère d'achèvement repose sur des questions notées.

échec

module, objectif

Indique à la plateforme de formation en ligne que le module ou l'objectif est terminé ou atteint et que l'utilisateur n'a pas atteint le score minimum pour réussir l'examen. Ce verbe est uniquement utilisé lorsque le critère d'achèvement repose sur des questions notées.

Métadonnées des activités

L'API Tin Can permet de définir une activité directement au sein du fichier tincan.xml ou d'une déclaration. Articulate définit les activités dans les deux.

Lorsque vous publiez une déclaration à l'extrémité de l'URL Tin Can, celle-ci se réfère aux objets définis dans le fichier tincan.xml par identifiant. Le fichier tincan.xml contient également des définitions pour les choix, l'échelle, la source, la cible et les étapes pour le type de cmi.interaction correspondant. Vous trouverez le fichier xsd décrivant le format du fichier tincan.xml sur : http://projecttincan.com/tincan.xsd.

Lancer du contenu public

Vous devez lancer le contenu Articulate en suivant la méthode décrite dans le document Comment intégrer un LRS Tin Can dans une plateforme de formation en ligne. Le contenu Articulate peut être hébergé au sein même de la plateforme ou sur un site externe. Par défaut, le fichier tincan.xml publié sera configuré pour être lancé localement. Pour lancer le contenu Articulate, utilisez la page définie dans la balise de lancement de l'activité du module :

<activity id="61XkSYC1ht2_course_id" type="course">

<name lang="und">Titre du module</name>

<description lang="und">Description du module</description>

<launch lang="und">story.html</launch>

</activity>

Vous devez ajouter une chaîne de requête à l'URL contenant les informations requises pour assurer le suivi du module. Les valeurs requises comprennent l’extrémité de l’URL Tin Can (endpoint), le jeton d’autorisation (auth) et les informations sur l’apprenant (actor). La chaîne de requête doit également inclure l’identifiant de l’activité (activity_id) et l'enregistrement (registration) si la mise en œuvre de la plateforme de formation en ligne exige ces valeurs lorsqu'elle reçoit des requêtes du contenu. Vous trouverez ci-dessous un exemple de lien de lancement. Des sauts de lignes ont été ajoutés et l'encodage URL a été supprimé afin de faciliter la lecture :

http://my.lms.com/TCActivityProvider/story.html

?endpoint=http://my.lms.com/lrs/endpoint/

&auth=Basic OjFjMGY4NTYxNzUwOGI4YWY0NjFkNzU5MWUxMzE1ZGQ1

&actor={"name": ["Prénom Nom"], "mbox": ["mailto:firstlast@mycompany.com"]}

&activity_id=61XkSYC1ht2_course_id

&registration=760e3480-ba55-4991-94b0-01820dbd23a2

Un lien de lancement avec encodage correct de l'URL est présenté ci-dessous (sauts de lignes ajoutés pour une lecture plus facile) :

http://my.lms.com/TCActivityProvider/story.html

?endpoint=http%3A%2F%2Fmy.lms.com%2Flrs%2Fendpoint%2F

&auth=Basic OjFjMGY4NTYxNzUwOGI4YWY0NjFkNzU5MWUxMzE1ZGQ1

&actor=%7B%22name%22%3A%20%5B%22First%20Last%22%5D%2C%20%22mbox
%22%3A%20%5B%22mailto%3Afirstlast%40mycompany.com%22%5D%7D

&activity_id=61XkSYC1ht2_course_id

&registration=760e3480-ba55-4991-94b0-01820dbd23a2

De plus, vous pouvez ajouter des paramètres personnalisés à la chaîne de requête du lien de lancement. Tous les paramètres supplémentaires seront renvoyés en écho lorsque le contenu envoie les déclarations à la plateforme de formation en ligne.

Lancer du contenu privé

Articulate Mobile Player prend en charge la lecture de contenu privé lorsque celui-ci est lancé selon la méthode décrite dans le document Accéder à du contenu privé avec Tin Can. Lorsque vous lancez du contenu privé, la plateforme de formation en ligne doit construire l'URL de lancement telle que décrite dans la section Lancer du contenu public, mais avec deux paramètres supplémentaires : content_endpoint et content_token. Si l'URL de lancement définit un content_token (jeton de contenu), Articulate Mobile Player enverra une requête vers les ressources du contenu directement à partir de l'extrémité de l'URL du contenu, par rapport au chemin de la page de lancement. Si un jeton de contenu est spécifié, sans l'extrémité de l'URL du contenu (content endpoint), alors l'extrémité de l'URL de l'API Tin Can sera utilisée avec le suffixe « content/ » comme extrémité de l'URL de contenu.

Par exemple, pour l'extrémité de l'URL de contenu suivante :

http://my.lms.com/TCActivityProvider/content_endpoint/

et le jeton de contenu suivant :

b50607fb-956e-429f-b89e-388c43dbbbcf

la requête pour le fichier data.swf situé dans le dossier story_content serait la suivante :

http://my.lms.com/TCActivityProvider/content_endpoint/story_content/data.swf?content_token=b50607fb-956e-429f-b89e-388c43dbbbcf

Lorsqu'une page est demandée de cette façon, après avoir validé la requête grâce au jeton du contenu, le serveur devrait soit émettre une redirection 301 vers l'URL où se situe le contenu, soit traiter les requêtes GET, HEAD et OPTIONS selon la spécification HTTP 1.1. Aucun modèle d'authentification ne doit être appliqué à l'extrémité de l'URL du contenu autre que la validation du jeton du contenu.

Communication

Le contenu Articulate enverra des déclarations vers l'extrémité de l'URL Tin Can comme cela est décrit dans la section Requêtes entre domaines dans Internet Explorer dans l'API Tin CAN. En résumé, pour l'extrémité de l'URL suivante : http://mycompany.com/TCAPI/endpoint/, toutes les déclarations seront publiées dans http://mycompany.com/TCAPI/endpoint/statements?method=PUT. Tous les en-têtes requis seront ajoutés aux données de la requête en tant que paramètres de formulaire délimités par des « & ». Le contenu JSON sera également encodé et intégré dans un paramètre appelé « content ». Toutes les déclarations seront envoyées de cette façon quel que soit le navigateur ou la plateforme.

Le contenu Articulate prend en charge la reprise du contenu à l'endroit où l'utilisateur s'était arrêté. Pour stocker et récupérer les données sur l'état, des requêtes doivent être publiées dans http://mycompany.com/TCAPI/endpoint/activities/state?method=[MÉTHODE DE REQUÊTE]. La valeur de [MÉTHODE DE REQUÊTE] sera remplacée par GET lors de la récupération des données sur l'état et par PUT lors du stockage de ces données. Les en-têtes et le contenu seront envoyés comme décrit plus haut. Pour plus d'informations sur le stockage et la récupération des données sur l'état, veuillez vous reporter à la section État dans l'API Tin CAN.

Exemples de métadonnées et de déclarations par type de question

Vous trouverez ci-dessous des exemples de définitions d'activités situées dans le fichier publié tincan.xml d'Articulate. À la suite de chaque description d'activité se trouve un exemple de déclaration JSON qui serait publié à la suite de l'extrémité de l'URL Tin Can pour l'activité définie au-dessus. Vous trouverez le projet publié utilisé pour ces exemples ici.

Choix multiples

Métadonnées

<activity id="5jIOVMY3lI7.a05ae619-d0e3-4755-9cf0-c944c8861581" type="cmi.interaction">

<name lang="und">Quelle est la troisième planète la plus proche du Soleil ?</name>

<description lang="und">Quelle est la troisième planète la plus proche du Soleil ?</description>

<interactionType>choix</interactionType>

<correctResponsePatterns>

<correctResponsePattern>choice_5uToT0BW3SC</correctResponsePattern>

</correctResponsePatterns>

<choices>

<component>

<id>choice_5uToT0BW3SC</id>

<description lang="und">Terre</description>

</component>

<component>

<id>choice_5uBsa57TorE</id>

<description lang="und">Vénus</description>

</component>

<component>

<id>choice_6Ft1rxqy1KK</id>

<description lang="und">Mars</description>

</component>

</choices>

</activity>

Déclaration JSON

{

"result":{

"success":true,

"response":"choice_5uToT0BW3SC",

"score":{

"raw":10

}

},

"context":{

"contextActivities":{

"grouping":{

"id":"6X9uS05rLUb_course_id"

},

"parent":{

"id":"5cv16q9HG8Q"

}

},

"registration":"cd471f87-a842-4929-87e9-fde6a5360b8b"

},

"actor":{

"objectType":"Person",

"mbox":[

"mailto:myname@mycompany.com"

],

"name":[

"MyFirstName MyLastName"

]

},

"verb":"answered",

"object":{

"id":"5jIOVMY3lI7.a05ae619-d0e3-4755-9cf0-c944c8861581"

}

}

 

Réponses multiples

Métadonnées

<activity id="6Uo7vTiQ6UT.675caf81-6862-461d-b401-76a9f043435a" type="cmi.interaction">

<name lang="und">Sélectionnez parmi la liste de planètes ci-dessous.</name>

<description lang="und">Sélectionnez parmi la liste de planètes ci-dessous.</description>

<interactionType>choix</interactionType>

<correctResponsePatterns>

<correctResponsePattern>choice_5hmqro1qC5O</correctResponsePattern>

<correctResponsePattern>choice_6biJYtcdOoK</correctResponsePattern>

</correctResponsePatterns>

<choices>

<component>

<id>choice_5hmqro1qC5O</id>

<description lang="und">Mars</description>

</component>

<component>

<id>choice_6biJYtcdOoK</id>

<description lang="und">Terre</description>

</component>

<component>

<id>choice_6dt2QgKPjtn</id>

<description lang="und">Soleil</description>

</component>

<component>

<id>choice_61GvRlVaXIj</id>

<description lang="und">Lune</description>

</component>

</choices>

</activity>

Déclaration JSON

{

"result":{

"success":true,

"response":"choice_5hmqro1qC5O[,]choice_6biJYtcdOoK",

"score":{

"raw":10

}

},

"context":{

"contextActivities":{

"grouping":{

"id":"6X9uS05rLUb_course_id"

},

"parent":{

"id":"5cv16q9HG8Q"

}

},

"registration":"cd471f87-a842-4929-87e9-fde6a5360b8b"

},

"actor":{

"objectType":"Person",

"mbox":[

"mailto:myname@mycompany.com"

],

"name":[

"MyFirstName MyLastName"

]

},

"verb":"answered",

"object":{

"id":"6Uo7vTiQ6UT.675caf81-6862-461d-b401-76a9f043435a"

}

}

Texte à trous

Métadonnées

<activity id="6cRKIhEssyA.d7911223-2749-424f-bee8-e241f458bff3" type="cmi.interaction">

<name lang="und">Comment s'appelle la planète où nous vivons ?</name>

<description lang="und">Comment s'appelle la planète où nous vivons ?</description>

<interactionType>fill-in</interactionType>

</activity>

Déclaration JSON

{

"result":{

"success":true,

"response":"Terre",

"score":{

"raw":10

}

},

"context":{

"contextActivities":{

"grouping":{

"id":"6X9uS05rLUb_course_id"

},

"parent":{

"id":"5cv16q9HG8Q"

}

},

"registration":"cd471f87-a842-4929-87e9-fde6a5360b8b"

},

"actor":{

"objectType":"Person",

"mbox":[

"mailto:myname@mycompany.com"

],

"name":[

"MyFirstName MyLastName"

]

},

"verb":"answered",

"object":{

"id":"6cRKIhEssyA.d7911223-2749-424f-bee8-e241f458bff3"

}

}

 

Appariement

Métadonnées

<activity id="5cgcNZPuHSe.a7450fa0-c56b-4bbf-8716-30e987a55d4d" type="cmi.interaction">

<name lang="und">Reliez les planètes à leur description.</name>

<description lang="und">Reliez les planètes à leur description.</description>

<interactionType>appariement</interactionType>

<correctResponsePatterns>

<correctResponsePattern>statement_6MoQIzOkywp[.]choice_6dxw50J12qb</correctResponsePattern>

<correctResponsePattern>statement_6X5pMavJIqb[.]choice_5bjMcpSQbu1</correctResponsePattern>

<correctResponsePattern>statement_5rBWGPPX93B[.]choice_6JkGvbQYq5y</correctResponsePattern>

</correctResponsePatterns>

<source>

<component>

<id>statement_6MoQIzOkywp</id>

<description lang="und">La planète où nous vivons</description>

</component>

<component>

<id>statement_6X5pMavJIqb</id>

<description lang="und">La planète la plus proche de la Terre</description>

</component>

<component>

<id>statement_5rBWGPPX93B</id>

<description lang="und">La planète la plus proche du Soleil</description>

</component>

</source>

<target>

<component>

<id>choice_6dxw50J12qb</id>

<description lang="und">Terre</description>

</component>

<component>

<id>choice_5bjMcpSQbu1</id>

<description lang="und">Mars</description>

</component>

<component>

<id>choice_6JkGvbQYq5y</id>

<description lang="und">Mercure</description>

</component>

</target>

</activity>

 

Déclaration JSON

{

"result":{

"success":true,

"response":"statement_6MoQIzOkywp[.]choice_6dxw50J12qb[,]statement_6X5pMavJIqb[.]
choice_5bjMcpSQbu1[,]statement_5rBWGPPX93B[.]choice_6JkGvbQYq5y",

"score":{

"raw":10

}

},

"context":{

"contextActivities":{

"grouping":{

"id":"6X9uS05rLUb_course_id"

},

"parent":{

"id":"5cv16q9HG8Q"

}

},

"registration":"cd471f87-a842-4929-87e9-fde6a5360b8b"

},

"actor":{

"objectType":"Person",

"mbox":[

"mailto:myname@mycompany.com"

],

"name":[

"MyFirstName MyLastName"

]

},

"verb":"answered",

"object":{

"id":"5cgcNZPuHSe.a7450fa0-c56b-4bbf-8716-30e987a55d4d"

}

}

 

Séquence

Métadonnées

<activity id="6hoSx7vtpP4.6b284974-20f5-4f92-bf8b-12634c643277" type="cmi.interaction">

<name lang="und">Ordonnez les planètes, de la plus proche du Soleil à la plus éloignée.</name>

<description lang="und">Ordonnez les planètes, de la plus proche du Soleil à la plus éloignée.</description>

<interactionType>séquençage</interactionType>

<correctResponsePatterns>

<correctResponsePattern>choice_6P5Ewtr0AV5</correctResponsePattern>

<correctResponsePattern>choice_5dmhLA2lvHz</correctResponsePattern>

<correctResponsePattern>choice_61dfQpOlbpv</correctResponsePattern>

<correctResponsePattern>choice_64Or8QRyNqJ</correctResponsePattern>

<correctResponsePattern>choice_5rvv1NAWm35</correctResponsePattern>

<correctResponsePattern>choice_5ah0Ia79vPz</correctResponsePattern>

<correctResponsePattern>choice_5l5S2DnWezC</correctResponsePattern>

<correctResponsePattern>choice_6ahaFxsHDaf</correctResponsePattern>

</correctResponsePatterns>

<choices>

<component>

<id>choice_6P5Ewtr0AV5</id>

<description lang="und">Mercure</description>

</component>

<component>

<id>choice_5dmhLA2lvHz</id>

<description lang="und">Vénus</description>

</component>

<component>

<id>choice_61dfQpOlbpv</id>

<description lang="und">Terre</description>

</component>

<component>

<id>choice_64Or8QRyNqJ</id>

<description lang="und">Mars</description>

</component>

<component>

<id>choice_5rvv1NAWm35</id>

<description lang="und">Jupiter</description>

</component>

<component>

<id>choice_5ah0Ia79vPz</id>

<description lang="und">Saturne</description>

</component>

<component>

<id>choice_5l5S2DnWezC</id>

<description lang="und">Uranus</description>

</component>

<component>

<id>choice_6ahaFxsHDaf</id>

<description lang="und">Neptune</description>

</component>

</choices>

</activity>

 

Déclaration JSON

{

"result":{

"success":true,

"response":"choice_6P5Ewtr0AV5[,]choice_5dmhLA2lvHz[,]choice_61dfQpOlbpv[,]choice_64Or8QRyNqJ[,]
choice_5rvv1NAWm35[,]choice_5ah0Ia79vPz[,]choice_5l5S2DnWezC[,]choice_6ahaFxsHDaf",

"score":{

"raw":10

}

},

"context":{

"contextActivities":{

"grouping":{

"id":"6X9uS05rLUb_course_id"

},

"parent":{

"id":"5cv16q9HG8Q"

}

},

"registration":"cd471f87-a842-4929-87e9-fde6a5360b8b"

},

"actor":{

"objectType":"Person",

"mbox":[

"mailto:myname@mycompany.com"

],

"name":[

"MyFirstName MyLastName"

]

},

"verb":"answered",

"object":{

"id":"6hoSx7vtpP4.6b284974-20f5-4f92-bf8b-12634c643277"

}

}

 

Numérique

Métadonnées

<activity id="5wgwpXGIaWk.8fbebd0a-0127-4a10-809e-6e3b40fd91e7" type="cmi.interaction">

<name lang="und">Combien de planètes composent notre système solaire ? (sans compter Pluton)</name>

<description lang="und">Combien de planètes composent notre système solaire ? (sans compter Pluton)</description>

<interactionType>numérique</interactionType>

</activity>

 

Déclaration JSON

{

"result":{

"success":true,

"response":"8",

"score":{

"raw":10

}

},

"context":{

"contextActivities":{

"grouping":{

"id":"6X9uS05rLUb_course_id"

},

"parent":{

"id":"5cv16q9HG8Q"

}

},

"registration":"cd471f87-a842-4929-87e9-fde6a5360b8b"

},

"actor":{

"objectType":"Person",

"mbox":[

"mailto:myname@mycompany.com"

],

"name":[

"MyFirstName MyLastName"

]

},

"verb":"answered",

"object":{

"id":"5wgwpXGIaWk.8fbebd0a-0127-4a10-809e-6e3b40fd91e7"

}

}

 

Likert

Métadonnées

<activity id="5mAuWE6HMJX.86ebc142-18dd-4d75-af5f-269f604cfbd2.Statement_5xDTWOL4BBj" type="cmi.interaction">

<name lang="und">J'aimerais que Pluton soit toujours considérée comme une planète.</name>

<description lang="und">J'aimerais que Pluton soit toujours considérée comme une planète.</description>

<interactionType>likert</interactionType>

<scale>

<component>

<id>6A0s985rUF4</id>

<description lang="und">Pas du tout d'accord</description>

</component>

<component>

<id>6msxh59uUS7</id>

<description lang="und">Pas d'accord</description>

</component>

<component>

<id>5dEzjq4qsKb</id>

<description lang="und">Neutre</description>

</component>

<component>

<id>6HssioR0LFv</id>

<description lang="und">D'accord</description>

</component>

<component>

<id>5xzbluTE5WB</id>

<description lang="und">Tout à fait d'accord</description>

</component>

</scale>

</activity>

 

Déclaration JSON

{

"result":{

"response":"5dEzjq4qsKb"

},

"context":{

"contextActivities":{

"grouping":{

"id":"6X9uS05rLUb_course_id"

},

"parent":{

"id":"5cv16q9HG8Q"

}

},

"registration":"cd471f87-a842-4929-87e9-fde6a5360b8b"

},

"actor":{

"objectType":"Person",

"mbox":[

"mailto:myname@mycompany.com"

],

"name":[

"MyFirstName MyLastName"

]

},

"verb":"answered",

"object":{

"id":"5mAuWE6HMJX.86ebc142-18dd-4d75-af5f-269f604cfbd2.Statement_5xDTWOL4BBj"

}

}