đŠ CrĂ©er son export xAPI pour LRS
Le format xAPI (Experience API, anciennement Tin Can API) permet un suivi beaucoup plus fin que le SCORM : au lieu de remonter juste un statut et un score à un LMS, votre export envoie des "statements" (relevés d'activité) directement à un LRS (Learning Record Store), avec ou sans LMS autour.
Définition du format xAPI
Un statement xAPI se lit comme une phrase acteur - verbe - objet, envoyĂ©e par requĂȘte HTTP au LRS :
- Acteur : qui a réalisé l'action (email ou identifiant de l'apprenant)
- Verbe : l'action réalisée (ex : initialized, completed, passed, progressed)
- Objet : l'activité concernée (votre module Celestory)
- Résultat (optionnel) : score, réussite, progression, durée...
Caractéristiques du format xAPI
- Peut fonctionner sans LMS : votre export peut envoyer ses statements directement Ă un LRS autonome (Learning Locker, Watershed, SCORM Cloud LRS...)
- Suivi granulaire : chaque interaction peut ĂȘtre remontĂ©e, pas seulement un score final comme en SCORM
- Ne définit aucune rÚgle de complétion automatique : c'est vous qui décidez quand chaque statement est envoyé
- â ïž Contrairement au SCORM (communication avec la fenĂȘtre parente), xAPI envoie de vraies requĂȘtes rĂ©seau : le LRS doit autoriser le CORS depuis l'origine de votre export, sous peine d'erreurs silencieuses (vĂ©rifiez la console)
Ressource d'exemple
Le placement des blocs dans le graphe suit exactement la mĂȘme logique que le tuto SCORM : reprenez le graphe d'exemple SCORM (https://creator.celestory.io/project/phHUew7e6) et remplacez les blocs SCORM par les blocs xAPI ci-dessous, aux mĂȘmes emplacements (dĂ©but, Ă©tapes intermĂ©diaires, fin).
Note importante : Seuls les blocs commençant par xAPI sont Ă rajouter oĂč vous le souhaitez dans votre graphe.
Ătape 1 : Ajouter les blocs Javascript
Bloc 1 : xAPI - Configuration
window.XAPI = {
endpoint: "https://VOTRE-LRS.exemple.com/xapi/",
auth: "Basic VOTRE_CLE_EN_BASE64",
actor: {
objectType: "Agent",
name: "Joueur Celestory",
mbox: "mailto:joueur@exemple.com"
},
activityId: "https://votredomaine.com/activities/nom-du-module"
};
Récupérez l'endpoint et la clé d'authentification auprÚs de votre LRS (ou de votre LMS, si le LRS y est intégré). Si votre export est lancé depuis un LMS compatible Tin Can Launch, vous pouvez remplacer ces valeurs fixes par une lecture des paramÚtres transmis dans l'URL au lancement plutÎt que de les coder en dur.
Bloc 2 : xAPI - Fonction d'envoi + Initialize
function xAPI_sendStatement(verbId, verbDisplay, resultObj) {
const statement = {
actor: window.XAPI.actor,
verb: {
id: verbId,
display: { "fr-FR": verbDisplay }
},
object: {
id: window.XAPI.activityId,
objectType: "Activity"
}
};
â
if (resultObj) {
statement.result = resultObj;
}
â
fetch(window.XAPI.endpoint + "statements", {
method: "POST",
headers: {
"Authorization": window.XAPI.auth,
"Content-Type": "application/json",
"X-Experience-API-Version": "1.0.3"
},
body: JSON.stringify(statement)
}).then(() => console.log("xAPI : statement envoyé -", verbDisplay))
.catch(error => console.log("xAPI erreur envoi", error));
}
â
xAPI_sendStatement("http://adlnet.gov/expapi/verbs/initialized", "initialisé");
Le verbId (en anglais, normalisé par l'ADL) est ce qui compte pour l'interopérabilité. Le verbDisplay n'est qu'un libellé lisible dans le LRS, vous pouvez le traduire librement.
Bloc 3 : xAPI - Step
const step = 70;
â
xAPI_sendStatement(
"http://adlnet.gov/expapi/verbs/progressed",
"progression",
{
extensions: {
"http://id.tincanapi.com/extension/progress": step
}
}
);
Vous pouvez rajouter autant d'étapes que vous le souhaitez en dupliquant ce bloc avec différents pourcentages (ex : 10%, 50%, 70%), comme pour les steps SCORM.
Bloc 4 : xAPI - Complete
const scorePercent = 100;
â
xAPI_sendStatement(
"http://adlnet.gov/expapi/verbs/completed",
"complété",
{
score: {
scaled: scorePercent / 100,
raw: scorePercent,
min: 0,
max: 100
},
completion: true,
success: true
}
);
Bloc 5 : xAPI - Finish Session
xAPI_sendStatement("http://adlnet.gov/expapi/verbs/terminated", "clÎturé");
console.log("xAPI : session terminée");
Ătape 2 : Exporter le projet
Exportez votre projet au format Web ou PWA.
Ătape 3 : (optionnel) Ajouter un fichier tincan.xml
Certains LMS/LRS exigent un package Tin Can plutĂŽt qu'un simple lien direct. Dans ce cas, ajoutez un fichier tincan.xml Ă la racine de votre export :
<?xml version="1.0" encoding="utf-8"?>
<tincan xmlns="http://projecttincan.com/tincan.xsd">
<activities>
<activity id="https://votredomaine.com/activities/nom-du-module" type="http://adlnet.gov/expapi/activities/module">
<name>Nom du module</name>
<description lang="fr-FR">Description de votre module Celestory</description>
<launch lang="fr-FR">index.html</launch>
</activity>
</activities>
</tincan>
Ătape 4 : Compresser et tester
Si un package est exigé, compressez votre dossier en ZIP (comme pour le SCORM). Si votre LRS reçoit les statements directement en HTTP, vous pouvez déployer le contenu Web tel quel (ex : export Lien Direct ou HTML5).
Pour tester, vous pouvez utiliser un site comme https://app.cloud.scorm.com/sc/user/Home (compatible Tin Can/xAPI) ou consulter directement le flux de statements reçus dans le tableau de bord de votre LRS.
Mis Ă jour le : 02/07/2026
Merci !
