LTI AGS
Gérer le gradebook, envoyer des notes, synchroniser les résultats
LTI 1.3 définit le socle : sécuriser les échanges et identifier les utilisateurs. LTI Advantage va plus loin en ajoutant des services qui permettent une intégration plus profonde entre l’outil et le LMS. Cet article détaille le premier de ces services : Assignment and Grade Services (AGS).
L’AGS permet à un outil externe d’interagir avec le gradebook du LMS — créer des colonnes de notes, envoyer les résultats des apprenants, et récupérer les notes telles que le LMS les a enregistrées.
Tous les appels AGS sont sécurisés via le Security Framework OAuth 2.0 décrit dans l’article sur la sécurité LTI1.3.
Assignment and Grade Services (AGS)
La plupart des LMS proposent un gradebook c’est-à-dire un endroit où sont centralisées toutes les notes de tous les apprenants. Il peut être par cours, dans ce cas le gradebook présente les notes de toutes les activités du cours. Lorsqu’un outil externe propose du contenu tel qu’un QCM, il doit pouvoir envoyer les résultats des apprenants vers ce gradebook.
C’est ce que propose l’AGS :
- un service pour créer et gérer les lineitems, c’est-à-dire les colonnes du gradebook, ce service se nomme
lineitem service - un service pour envoyer les scores, c’est-à-dire envoyer les résultats d’évaluation, ce service se nomme
Score Service - un service pour récupérer les Résultats. (Results Service)
Voici le gradebook d’un cours dans Moodle, on voit que pour chaque activité (devoir, quizz, etc.) il y a une colonne correspondante dans le gradebook. L’AGS permet à un outil externe de créer ces colonnes et d’envoyer les notes des apprenants pour chacune de ces colonnes.

Pour en savoir plus, vous pouvez lire la documentation de Moodle ici ou celle de Canvas ici.
claim AGS
La spécification 1EdTech propose d’ajouter cette iri au message LTI Launch https://purl.imsglobal.org/spec/lti-ags/claim/endpoint.
Par exemple si l’administrateur a autorisé l’outil à utiliser l’AGS,

l’id token devient
{ "nonce": "32d5072797ec4703a23433996f85c3ea61b3e5ff30f311f18c518cb87ec90090", "iat": 1775395730, "exp": 1775395790, "iss": "http://localhost", "aud": "Sfc6HFnwHAx4Tuv", "https://purl.imsglobal.org/spec/lti/claim/deployment_id": "1", "https://purl.imsglobal.org/spec/lti/claim/target_link_uri": "http://localhost:8000/lti/launch/", "sub": "2", "https://purl.imsglobal.org/spec/lti/claim/lis": { "person_sourcedid": "", "course_section_sourcedid": "" }, "https://purl.imsglobal.org/spec/lti/claim/roles": [ "http://purl.imsglobal.org/vocab/lis/v2/institution/person#Administrator", "http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor", "http://purl.imsglobal.org/vocab/lis/v2/system/person#Administrator" ], "https://purl.imsglobal.org/spec/lti/claim/context": { "id": "2", "label": "pyLTI", "title": "PYTHON LTI", "type": [ "CourseSection" ] }, "https://purl.imsglobal.org/spec/lti/claim/message_type": "LtiResourceLinkRequest", "https://purl.imsglobal.org/spec/lti/claim/resource_link": { "title": "Hello Django LTI", "description": "", "id": "1" }, "given_name": "Admin", "family_name": "Utilisateur", "name": "Admin Utilisateur", "https://purl.imsglobal.org/spec/lti/claim/ext": { "user_username": "admin", "lms": "moodle-2" }, "email": "admin@localhost.fr", "https://purl.imsglobal.org/spec/lti/claim/launch_presentation": { "locale": "fr", "document_target": "frame", "return_url": "http://localhost/mod/lti/return.php?course=2&launch_container=5&instanceid=1&sesskey=M4moqhsjEQ" }, "https://purl.imsglobal.org/spec/lti/claim/tool_platform": { "product_family_code": "moodle", "version": "2025100603.11", "guid": "aa85caf65877b6e8f2e5cfd314c9805e", "name": "local", "description": "localhost" }, "https://purl.imsglobal.org/spec/lti/claim/version": "1.3.0", "https://purl.imsglobal.org/spec/lti/claim/custom": { "niveau": "Terminale", "debut_cours": "2026-04-03T23:00:00+00:00", "fin_cours": "2027-04-03T23:00:00+00:00" }, "https://purl.imsglobal.org/spec/lti-ags/claim/endpoint": { "scope": [ "https://purl.imsglobal.org/spec/lti-ags/scope/lineitem.readonly", "https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly", "https://purl.imsglobal.org/spec/lti-ags/scope/score" ], "lineitems": "http://localhost/mod/lti/services.php/2/lineitems?type_id=1" }}On constate alors qu’a été ajouté
"https://purl.imsglobal.org/spec/lti-ags/claim/endpoint": { "scope": [ "https://purl.imsglobal.org/spec/lti-ags/scope/lineitem.readonly", "https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly", "https://purl.imsglobal.org/spec/lti-ags/scope/score" ], "lineitems": "http://localhost/mod/lti/services.php/2/lineitems?type_id=1" }Il y a deux propriétés importantes à noter dans cette section :
-
scope : Il s’agit d’un tableau de chaînes qui définit les autorisations accordées à l’outil. Dans cet exemple, l’outil a la permission de lire les éléments de ligne, les résultats. L”outil peut aussi envoyer des scores, c’est-à-dire des notes brutes. Ces scopes déterminent les actions que l’outil peut effectuer sur les données du gradebook du LMS. Par exemple, si l’outil a le scope
lineitem.readonly, il peut lire les éléments de ligne, mais ne peut pas les modifier. Si l’outil a le scopeScore, il peut envoyer des scores (notes) pour les étudiants. -
lineitems : C’est l’URL proposée par le LMS, qui permet à l’outil d’accéder aux éléments de ligne spécifiques pour le cours. Cela permet à l’outil de récupérer les notes des étudiants dans le gradebook du LMS. c’est la collection de toutes les colonnes du gradebook pour ce cours. L’outil peut y lister ou créer des colonnes.
Si l’enseignant autorise à son tour l’outil à utiliser l’AGS dans Moodle, la propriété lineitem est ajoutée. Cette propriété est ajoutée dès qu’une colonne spécifique du gradebook est associée à l’activité LTI.

"https://purl.imsglobal.org/spec/lti-ags/claim/endpoint": { "scope": [ "https://purl.imsglobal.org/spec/lti-ags/scope/lineitem", "https://purl.imsglobal.org/spec/lti-ags/scope/lineitem.readonly", "https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly", "https://purl.imsglobal.org/spec/lti-ags/scope/score" ], "lineitems": "http://localhost/mod/lti/services.php/2/lineitems?type_id=1", "lineitem": "http://localhost/mod/lti/services.php/2/lineitems/2/lineitem?type_id=1" }lineitem est l’URL d’une colonne spécifique du gradebook, c’est-à-dire d’un élément de ligne. L’outil peut y accéder pour récupérer ou modifier les notes des étudiants pour cette colonne spécifique.
Pour manipuler des lineitems ou des lineitem l’outil doit envoyer une requête HTTP avec un header d’autorisation contenant un token d’accès (access token) obtenu via le protocole OAuth 2.0. Le token d’accès doit inclure les scopes appropriés pour les actions que l’outil souhaite effectuer sur les lineitems ou lineitem. Les méthodes HTTP autorisées dépendent des scopes accordés à l’outil.
Lorsque le scope contient readonly, l’outil ne peut effectuer que des requêtes de type GET. Si readonly n’est pas présent, l’outil peut effectuer des requêtes de type POST, PUT et DELETE selon les besoins.
Par exemple pour les scopes concernant les lineitems :
| Scope | Méthode HTTP |
|---|---|
https://purl.imsglobal.org/spec/lti-ags/scope/lineitem.readonly | GET |
https://purl.imsglobal.org/spec/lti-ags/scope/lineitem | POST |
https://purl.imsglobal.org/spec/lti-ags/scope/lineitem | PUT |
https://purl.imsglobal.org/spec/lti-ags/scope/lineitem | DELETE |
Pour avoir plus d’informations sur les requêtes à effectuer 1EdTech met a disposition une documentation au format OpenAPI avec Swagger ui , disponible ici.
Pour plus de détails sur chaque requête la spécification est disponible ici
Manipuler des colonnes du gradebook
1EdTech propose un service pour manipuler les colonnes du gradebook, c’est-à-dire les lineitems. L’outil peut créer une nouvelle colonne dans le gradebook en envoyant une requête POST sur l’URL de lineitems avec les informations de la colonne à créer. Ce qui peut être pratique quand un outil propose plusieurs évaluations distinctes pour une seule activité LTI.
Par exemple :
Un outil de langue avec une seule activité LTI mais plusieurs compétences évaluées séparément :
- Colonne “Expression écrite”
- Colonne “Expression orale”
- Colonne “Grammaire”
L’URL pour créer une colonne se trouve toujours dans l’id token cette fois c’est l’URL lineitems qui doit être utilisée. Dans le token présenté dans la section modèle de données on trouve l’URL suivante :
lineitems": "http://localhost/mod/lti/services.php/2/lineitems?type_id=1Pour créer une nouvelle colonne :
POST http://localhost/mod/lti/services.php/2/lineitems?type_id=1Content-Type: application/vnd.ims.lis.v2.lineitem+json
{ "label": "Expression écrite", "scoreMaximum": 100, "resourceId": "1", "tag": "écrit"}- label : C’est le nom de la colonne, ce paramètre est obligatoire
- scoreMaximum : définit le barème de l’évaluation, il permet au LMS de replacer la note dans son contexte. Sans lui, un 15 ne veut rien dire. La note sera donc comprise entre 0 et cette valeur.
- resourceId : C’est l’identifiant de la ressource interne à l’outil, par exemple l’identifiant de l’exercice. Lorsque l’on souhaitera récupérer les colonnes du gradebook il sera possible de filtrer par ce paramètre.
- tag : c’est une étiquette permettant d’ajouter une information sur une ou plusieurs colonnes. Dans l’exemple ci-dessus d’un outil d’apprentissage des langues on pourrait avoir le tag
partielpour les colonnes Compréhension écrite, Expression orale, Grammaire, l’outil peut ajouter une colonne supplémentairetotalavec le taggrade.
Exemple :
POST http://localhost/mod/lti/services.php/2/lineitems?type_id=1Content-Type: application/vnd.ims.lis.v2.lineitem+json
{ "label": "Compréhension écrite", "scoreMaximum": 30, "resourceId": "1", "tag": "partiel"}POST http://localhost/mod/lti/services.php/2/lineitems?type_id=1Content-Type: application/vnd.ims.lis.v2.lineitem+json
{ "label": "Expression orale", "scoreMaximum": 40, "resourceId": "1", "tag": "partiel"}POST http://localhost/mod/lti/services.php/2/lineitems?type_id=1Content-Type: application/vnd.ims.lis.v2.lineitem+json
{ "label": "Grammaire", "scoreMaximum": 30, "resourceId": "1", "tag": "partiel"}POST http://localhost/mod/lti/services.php/2/lineitems?type_id=1Content-Type: application/vnd.ims.lis.v2.lineitem+json
{ "label": "Total", "scoreMaximum": 100, "resourceId": "1", "tag": "grade"}Cela signifie que l’outil d’apprentissage des langues propose un détail de correction ainsi qu’une note finale.
- L’expression orale compte pour 40% de la note finale
- la compréhension écrite compte pour 30% de la note finale
- La Grammaire compte pour 30% de la note finale
- Le total est une note sur 100.
Il est également possible de faire le lien entre les colonnes du gradebook et les activités LTI. Par exemple, si l’outil propose plusieurs activités LTI pour un même cours, il peut créer une colonne de gradebook pour chaque activité. Le paramètre resourceLinkId rattache une colonne à une activité LTI précise du cours — celle dont l’identifiant est transmis dans le JWT de launch via resource_link.id. C’est utile pour que le LMS sache quelle colonne appartient à quelle activité, et pour que la colonne soit automatiquement nettoyée si l’activité est supprimée.
Récupérer les colonnes du gradebook
GET http://localhost/mod/lti/services.php/2/lineitems?type_id=1Authorization: Bearer <access_token>Accept: application/vnd.ims.lis.v2.lineitemcontainer+jsonLe LMS renvoie :
[ { "id": "http://localhost/mod/lti/services.php/2/lineitems/2/lineitem?type_id=1", "label": "Expression écrite", "scoreMaximum": 100, "resourceId": "1", "tag": "écrit", "resourceLinkId": "1"
}, { "id": "http://localhost/mod/lti/services.php/2/lineitems/3/lineitem?type_id=1", "label": "Expression orale", "scoreMaximum": 40, "resourceId": "1", "tag": "partiel", "resourceLinkId": "1" }, { "id": "http://localhost/mod/lti/services.php/2/lineitems/4/lineitem?type_id=1", "label": "Grammaire", "scoreMaximum": 30, "resourceId": "1", "tag": "partiel", "resourceLinkId": "1" }, { "id": "http://localhost/mod/lti/services.php/2/lineitems/5/lineitem?type_id=1", "label": "Total", "scoreMaximum": 100, "resourceId": "1", "tag": "grade", "resourceLinkId": "1" } ]Score service
Dans cette partie nous allons voir comment envoyer un score au LMS, soit après avoir créé une colonne supplémentaire à l’aide de lineitems soit en utilisant une colonne existante via lineitem.
Un score est plus complexe qu’une simple valeur numérique. En effet, si l’outil envoie seulement une note alors le LMS peut ne pas être en mesure de l’interpréter correctement. Que signifie avoir eu 18 à un devoir ? Si le devoir est noté sur 20 alors 18 correspond à une très bonne note, mais si le devoir est noté sur 100 alors 18 correspond à une note très faible. C’est pour cela que le service de score permet d’envoyer des informations supplémentaires telles que la note maximale, le progrès de l’activité et d’autres propriétés permettant de contextualiser la note.
modèle de données
1EdTech propose les propriétés suivantes pour le service de score :
{ "timestamp": "2023-03-15T12:00:00Z", "scoreGiven": 15, "scoreMaximum": 20, "comment" : "Très bon travail !", "activityProgress": "Completed", "userId": "12345", "gradingProgress": "FullyGraded", "scoringUserId": "4567890", "submission": { "submittedAt": "2023-03-15T12:00:00Z", "startedAt": "2023-03-15T12:00:00Z" }}timestamp: La date et l’heure à laquelle la note a été attribuéescoreGiven(optionnel) : La note obtenue par l’apprenantscoreMaximum(Obligatoire siscoreGivenest présent) : La note maximale possible pour l’évaluationcomment(optionnel) : Un commentaire facultatif sur la noteactivityProgress(optionnel) : Cette propriété décrit ce que l’apprenant a fait dans l’activité, indépendamment de toute note. Cette propriété ne peut prendre que les suivantes :- Initialized : l’activité a été créée côté outil, mais l’apprenant ne l’a pas encore ouverte
- Started : l’apprenant a ouvert l’activité
- InProgress : L’apprenant est en train de travailler sur l’activité
- Submitted : l’apprenant a soumis l’activité, il attend une correction
- Completed : l’apprenant a terminé l’activité. Bien que l’activité soit terminée, la notation peut ne pas être terminée. Par exemple, un devoir peut être terminé, mais en attente de correction par l’enseignant.
userId(obligatoire) : L’identifiant de l’utilisateur ayant reçu la notegradingProgress(optionnel) : l’état d’avancement de la notation pour cette note. Cette propriété ne peut prendre que les suivantes :- NotReady: l’activité n’est pas encore prête à être notée
- Pending : une note a été calculée, mais l’outil la traite encore en interne avant de l’envoyer définitivement
- PendingManual : L’activité nécessite une correction manuelle par un enseignant le LMS ne doit pas encore afficher de note finale
- Failed : la tentative de notation a échoué, le LMS doit ignorer cette note
- FullyGraded : la note a été entièrement attribuée et est maintenant finale, le LMS peut afficher la note dans le
gradebook
scoringUserId(optionnel) : L’identifiant de l’utilisateur ayant attribué la notesubmission(optionnel) : Métadonnées sur la tentative de l’apprenant. Contient deux propriétés :startedAt: La date et l’heure à laquelle l’apprenant a commencé à travailler sur l’activitésubmittedAt: La date et l’heure à laquelle l’apprenant a soumis son travail
activityProgress et gradingProgress fonctionnent ensemble et donne du sens sur les interactions de l’apprenant avec l’activité.
| Situation | activityProgress | gradingProgress |
|---|---|---|
| L’apprenant commence le quizz | Started | NotReady |
| L’apprenant soumet, correction auto en cours | Submitted | Pending |
| Correction auto terminée, note affichable | Completed | FullyGraded |
| L’apprenant soumet un devoir à corriger manuellement | Submitted | PendingManual |
| L’enseignant a corrigé le devoir | Completed | FullyGraded |
LTI offre ici un début de solution pour envoyer des traces d’apprentissage. En effet, grâce à la propriété activityProgress l’outil peut envoyer des informations sur l’avancement de l’activité. Par exemple, un outil de lecture de vidéo peut envoyer une trace lorsque l’apprenant commence à regarder la vidéo (Started), lorsqu’il regarde la moitié de la vidéo (InProgress) et lorsqu’il termine de regarder la vidéo (Completed). Ces traces d’apprentissage peuvent ensuite être utilisées par certains LMS pour suivre l’engagement des apprenants avec le contenu et pour fournir des analyses sur les activités d’apprentissage. C’est moins complet que des standards tels que XAPI ou Caliper mais c’est un début pour permettre aux outils d’envoyer des données d’engagement au LMS.
Envoi du score
Nous avons vu précédemment que lorsqu’un administrateur autorise un outil à envoyer des scores, des propriétés supplémentaires étaient envoyées dans l’id token dont cet exemple :
"https://purl.imsglobal.org/spec/lti-ags/claim/endpoint": { "scope": [ "https://purl.imsglobal.org/spec/lti-ags/scope/lineitem", "https://purl.imsglobal.org/spec/lti-ags/scope/lineitem.readonly", "https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly", "https://purl.imsglobal.org/spec/lti-ags/scope/score" ], "lineitems": "http://localhost/mod/lti/services.php/2/lineitems?type_id=1", "lineitem": "http://localhost/mod/lti/services.php/2/lineitems/2/lineitem?type_id=1" }on voit que le LMS renvoie une URL pour lineitem et une url pour lineitems. L’outil peut choisir d’envoyer le score sur une colonne spécifique du gradebook en utilisant l’URL de lineitem ou peut utiliser lineitems pour créer une nouvelle colonne (donc un nouveau lineitem) puis envoyer un score sur le lineitem correspondant.
Le scope https://purl.imsglobal.org/spec/lti-ags/scope/score doit être présent. Le scope score permet uniquement l’envoi de scores via des requêtes POST. Il n’est donc pas permis à un outil de lire (HTTP GET) un score depuis le LMS.
Le score s’envoie via un POST sur l’URL du lineitem suivi de /scores, voici un exemple complet de requête pour envoyer un score de 15/20 à l’apprenant avec l’id 2 pour le lineitem d’id 2 :
curl -X POST "http://localhost/mod/lti/services.php/2/lineitems/2/lineitem/scores?type_id=1" \ -H "Authorization: Bearer 3fb6d0814e527e96ec6d9d8b68f19c0f" \ -H "Content-Type: application/vnd.ims.lis.v1.score+json" \ -H "Accept: application/vnd.ims.lis.v1.score+json" \ -d '{ "timestamp": "2026-05-20T18:42:31.320Z", "scoreGiven": 15, "scoreMaximum": 20, "comment": "Très bon travail !", "activityProgress": "Completed", "gradingProgress": "FullyGraded", "userId": "5" }'Le content-type est un peu particulier, car il doit être au format application/vnd.ims.lis.v1.score+json.
on obtient :

Moodle affiche 75 % dans le gradebook, car dans l’activité j’ai spécifié accepter les notes en tant que point et que la note maximum c’est 80. Le LMS fait un calcul pour convertir la note en pourcentage : (15/20) * 100 = 75 %. C’est donc le LMS qui décide comment interpréter la note envoyée par l’outil et comment l’afficher dans le gradebook.

L’outil considère que c’est un très bon travail, mais si l’enseignant ou l’administrateur du LMS décide que pour valider cette activité il faut atteindre 18/20, l’apprenant verra l’activité comme échouée.
Si j’envoie ce type de requête :
curl -X POST "http://localhost/mod/lti/services.php/2/lineitems/5/lineitem/scores?type_id=2" \\ -H "Authorization: Bearer 830658bfd7ffb2eec9c20f706a6e675d" \ -H "Content-Type: application/vnd.ims.lis.v1.score+json" \ -H "Accept: application/vnd.ims.lis.v1.score+json" \ -d '{ "timestamp": "2026-05-20T19:48:35.320Z", "activityProgress": "InProgress", "gradingProgress": "NotReady", "userId": "5" }'Rien ne s’affiche sur Moodle, mais Canvas affiche que l’activité est en cours et que la notation n’est pas encore prête. Tous les LMS ne gèrent pas forcément les propriétés activityProgress et gradingProgress, mais c’est un bon moyen pour l’outil d’envoyer des informations sur l’avancement de l’activité et de la notation au LMS.
Le Score Service se complète avec le Submission Review Message, une spec complémentaire qui permet à l’enseignant de lancer l’outil directement depuis le gradebook pour corriger une soumission PendingManual. Ce mécanisme est détaillé dans un article dédié.
Result service
Dans la section précédente, nous avons vu que c’est l’outil qui envoie le score. Cependant, le LMS doit avoir le contrôle de ce score, car ça reste lui qui gère les résultats des apprenants. Le LMS peut décider d’accepter ou de rejeter le score envoyé par l’outil, et il peut également mettre à jour le score ultérieurement si nécessaire.
Prenons l’exemple d’un apprenant qui travaille sur un devoir d’anglais, l’outil envoie un score de 15/20 pour ce devoir. Cependant, l’enseignant peut ne pas être d’accord avec ce score et décider de le modifier. Par exemple, après avoir pris connaissance du devoir, l’enseignant peut estimer que les erreurs de l’apprenant sont sur des questions non abordées à son cours. Il peut alors décider de ne pas prendre en compte ces erreurs et de mettre à jour le score à 18/20. Il y a donc un déphasage : l’outil conserve 15/20 dans sa base de données alors que le LMS, source de vérité, affiche 18/20 à l’apprenant.
Pour résoudre ce problème, 1EdTech propose un service de résultats (Result service) qui permet à l’outil de récupérer les résultats des apprenants depuis le LMS. L’outil peut ainsi synchroniser sa base de données avec les notes réelles du LMS et éviter les problèmes de déphasage.
Modèle de données
{ "id": "http://localhost/mod/lti/services.php/2/lineitems/2/lineitem/results/2", "scoreOf": "http://localhost/mod/lti/services.php/2/lineitems/2/lineitem?type_id=1", "userId": "2", "resultScore": 15, "resultMaximum": 20, "comment": "Très bon travail !"}id: URL unique du résultat, assignée par le LMSscoreOf: URL du lineitem auquel ce résultat est associéuserId: L’identifiant de l’apprenant — correspond ausubdu JWT de launchresultScore: La note telle que le LMS l’a enregistréeresultMaximum: La note maximale telle que le LMS l’a enregistréecomment(optionnel) : Le commentaire associé à la note
Récupération des résultats
L’URL du service résulte directement de l’URL du lineitem il suffit d’ajouter /results :
GET http://localhost/mod/lti/services.php/2/lineitems/2/lineitem/results?type_id=1Authorization: Bearer <access_token>Accept: application/vnd.ims.lis.v2.resultcontainer+jsonLe LMS retourne un tableau de résultats, un par apprenant ayant un score enregistré.
on obtient un tableau de résultats, un par apprenant ayant un score enregistré pour ce lineitem.
[ { "id": "http://localhost/mod/lti/services.php/2/lineitems/2/lineitem/results?type_id=1&user_id=5", "userId": "5", "resultScore": 75, "resultMaximum": 100, "comment": "Très bon travail !", "scoreOf": "http://localhost/mod/lti/services.php/2/lineitems/2/lineitem?type_id=1", "timestamp": "2026-05-20T19:42:31+01:00" }]Ici on peut voir qu’il n’y a qu’un seul résultat, car il n’y a qu’un seul apprenant ayant un score enregistré pour ce lineitem.
On remarque que l’outil a envoyé 15/20 mais le LMS retourne 75/100. C’est Moodle qui a converti selon son propre barème. C’est précisément ce déphasage que le Result service permet de détecter.
Pour filtrer sur un seul apprenant, on ajoute le paramètre user_id :
GET http://localhost/mod/lti/services.php/2/lineitems/2/lineitem/results?type_id=1&user_id=2Authorization: Bearer <access_token>Accept: application/vnd.ims.lis.v2.resultcontainer+jsonPour plus de détails la spécification est disponible ici.
Conclusion
Noter un devoir, un exercice et intégrer cette note de manière synchronisée dans le gradebook du LMS est une fonctionnalité clé pour les outils d’apprentissage. LTI AGS offre un cadre standardisé pour permettre aux outils d’envoyer des notes, de créer des colonnes dans le gradebook et de récupérer les résultats tels que le LMS les a enregistrés. Il est important de noter que le LMS reste la source de vérité pour les notes des apprenants, et que l’outil doit se synchroniser avec le LMS pour éviter les problèmes de déphasage. AGS permet également d’envoyer des informations sur l’avancement de l’activité et de la notation, ce qui peut être utile pour suivre l’engagement des apprenants avec le contenu.