Messages d'erreur courants de l'API Google Classroom

Cette page décrit certains messages d'erreur et problèmes courants de l'API Google Classroom, ainsi que les actions possibles pour les types d'erreurs suivants :

HTTP 400 : FAILED_PRECONDITION

Un FAILED_PRECONDITION est renvoyé lorsque l'utilisateur tente une action qui ne peut pas être autorisée, soit parce qu'il a atteint une limite ou un état d'application, tel que CourseNotModifiable. Pour résoudre un problème FAILED_PRECONDITION, demandez à l'utilisateur d'effectuer une action, puis réessayez. Dans certains cas, vous pouvez également utiliser d'autres points de terminaison pour corriger l'état au nom de l'utilisateur.

AttachmentNotVisible

AttachmentNotVisible indique qu'une ou plusieurs pièces jointes spécifiées ne sont pas visibles par l'utilisateur, ne sont pas du type demandé ou n'existent pas. Par exemple, cette erreur s'affiche pour les éléments Drive qui n'ont pas été partagés avec l'utilisateur.

Action possible : Décrivez la cause de l'échec et suggérez à l'utilisateur de vérifier à nouveau les identifiants qu'il a inclus, tels que les ID de fichiers Drive. Assurez-vous également que l'utilisateur dispose des autorisations appropriées pour afficher la pièce jointe.

CannotRemoveCourseFolderOwner

CannotRemoveCourseFolderOwner indique que le propriétaire du dossier Drive du cours ne peut pas être supprimé.

Action possible : Décrivez la cause de l'échec et suggérez à l'utilisateur de transférer la propriété du dossier Drive du cours à un autre utilisateur, puis de réessayer.

CannotRemoveCourseOwner

CannotRemoveCourseOwner indique que le propriétaire du cours ne peut pas être supprimé.

Action possible : Décrivez la cause de l'échec et suggérez que le propriétaire du cours ne peut pas être supprimé. Dans la plupart des cas, l'utilisateur tente de se supprimer lui-même, ce qui n'est pas autorisé.

CannotRemoveCourseOwnerTransferIncomplete

CannotRemoveCourseOwnerTransferIncomplete indique que le propriétaire du cours ne peut pas être supprimé, car le transfert de propriété de ce cours est toujours en cours.

Action possible : Décrivez la cause de l'échec et suggérez à l'utilisateur d'attendre quelques instants que l'action asynchrone de transfert de propriété du cours soit terminée, puis de réessayer.

CannotRemoveTeacherWithNoCourseOwner

CannotRemoveTeacherWithNoCourseOwner indique qu'un enseignant ne peut pas être supprimé d'un cours sans propriétaire.

Action possible : Décrivez la cause de l'échec et suggérez que l'enseignant ne peut pas être supprimé. Dans la plupart des cas, le compte utilisateur du propriétaire du cours a été supprimé, ce qui a entraîné un état de cours non valide.

CourseMemberLimitReached

CourseMemberLimitReached indique que l'action tentée dépasserait le nombre maximal de membres autorisés pour le cours. Ce code est généralement renvoyé par students.create(). Pour en savoir plus, consultez la section "Limites de taille des classes" de l'article du centre d'aide Inviter des élèves dans une classe.

Action possible : Décrivez la cause de l'échec et suggérez à l'utilisateur de supprimer les membres inutiles du cours.

CourseNotModifiable

CourseNotModifiable indique que le cours concerné est dans un état qui ne permet pas de modifier ses propriétés (à l'exception de l'état du cours lui-même).

Action possible : Invitez l'utilisateur à modifier l'état du cours pour le rendre modifiable. Pour modifier l'état, utilisez courses.patch(). L'état du cours peut être modifié dans une requête qui modifie d'autres propriétés.

CourseTeacherLimitReached

CourseTeacherLimitReached indique que l'action demandée dépasserait le nombre maximal d'enseignants autorisés pour le cours. Ce code est généralement renvoyé par la méthode teachers.create(). Pour en savoir plus, consultez la section "Limites de taille des cours" de l'article du Centre d'aide Ajouter un enseignant adjoint à un cours.

Action possible : Décrivez la cause de l'échec et suggérez à l'utilisateur de supprimer les enseignants de cours inutiles. Si cela s'applique à votre application, vous pouvez utiliser la méthode teachers.delete() pour gérer les listes d'enseignants au nom de l'utilisateur.

CourseTitleCannotContainUrl

CourseTitleCannotContainUrl indique que l'action demandée n'est pas autorisée, car elle ajouterait une URL au titre du cours. Les formats d'URL ne sont pas acceptés dans les titres de cours.

Action possible : Décrivez la cause de l'échec et suggérez à l'utilisateur de supprimer le modèle d'URL du champ title. Les URL sont autorisées dans le champ description.

CourseTopicLimitReached

CourseTopicLimitReached indique que l'action demandée dépasserait le nombre maximal de thèmes autorisés dans un cours. Ce code est généralement renvoyé par la méthode courses.topics.create().

Action possible : Décrivez la cause de l'échec et suggérez à l'utilisateur de supprimer les thèmes inutiles. Si cela s'applique à votre application, vous pouvez utiliser la méthode courses.topics.delete() pour gérer les thèmes au nom de l'utilisateur.

EmptyAssignees

EmptyAssignees indique que l'action demandée supprimerait tous les élèves attribués au devoir correspondant. Les devoirs sans élèves attribués ne sont pas acceptés.

Action possible : décrivez la cause de l'échec et suggérez que le propriétaire du cours ne peut pas supprimer tous les élèves.

InactiveCourseOwner

InactiveCourseOwner indique que l'action demandée n'est pas autorisée, car le compte du propriétaire du cours a été supprimé. L'administrateur du propriétaire du cours doit restaurer le compte du propriétaire du cours avant d'effectuer l'action demandée.

Action possible : Décrivez la cause de l'échec et suggérez à l'administrateur de restaurer le compte du propriétaire du cours avant de réessayer l'opération.

IneligibleOwner

IneligibleOwner indique que l'utilisateur ne peut pas être ajouté en tant que propriétaire du cours, car il n'est pas un enseignant adjoint.

Action possible : Décrivez la cause de l'échec. Si l'utilisateur qui envoie la demande n'est pas un administrateur, suggérez-lui d'envoyer d'abord à l'utilisateur une invitation à devenir enseignant dans le cours avant de modifier le propriétaire. Si l'utilisateur qui envoie la demande est un administrateur, suggérez-lui d'abord d'ajouter l'utilisateur en tant qu'enseignant invité du cours.

PendingInvitationExists

PendingInvitationExists : indique qu'une personne a déjà été invitée à devenir propriétaire du cours. Cette erreur se produit lors du transfert de propriété d'un cours lorsqu'un transfert a déjà été lancé, mais n'a pas encore été accepté par le nouveau propriétaire.

UserCannotOwnCourse

UserCannotOwnCourse indique que l'utilisateur ne peut pas être ajouté en tant que propriétaire du cours.

Action possible : décrivez la cause de l'échec et suggérez que le cours ne peut pas être créé avec l'utilisateur en tant que propriétaire du cours. Un utilisateur non administrateur peut voir cette erreur s'il tente de créer un cours avec un autre utilisateur que lui-même comme propriétaire. L'administrateur qui demande l'utilisateur peut voir cette erreur si le compte utilisateur spécifié comme propriétaire n'existe pas ou si l'utilisateur ne se trouve pas dans son domaine.

UserGroupsMembershipLimitReached

UserGroupsMembershipLimitReached indique que l'utilisateur est déjà membre du nombre maximal de groupes autorisés et qu'il ne peut pas rejoindre d'autres cours. Ce code est généralement renvoyé par students.create() ou teachers.create(). Pour en savoir plus, consultez la section "Limites de taille des classes" de l'article du Centre d'aide Inviter des élèves dans une classe.

Action possible : Décrivez la cause de l'échec et suggérez à l'utilisateur de quitter les cours auxquels il ne participe pas. L'utilisateur peut envisager de créer un compte supplémentaire s'il doit participer à d'autres cours. Si cela s'applique à votre application, vous pouvez utiliser students.create() ou teachers.delete() pour gérer les listes au nom de l'utilisateur.

HTTP 403 : PERMISSION_DENIED

Toutes les méthodes de l'API Classroom peuvent renvoyer une erreur PERMISSION_DENIED (HTTP 403) si un utilisateur final ne remplit pas les conditions préalables pour y accéder. Le message accompagnant l'erreur contient un message d'erreur pour vous aider à identifier la cause et à indiquer aux utilisateurs les mesures à prendre.

Les sections suivantes décrivent les messages d'erreur courants de l'API Classroom.

CannotDirectAddUser

CannotDirectAddUser indique qu'un utilisateur ne peut pas être ajouté directement au cours. Ce code s'affiche lorsqu'un administrateur de domaine tente d'ajouter un utilisateur à un cours et que cet utilisateur n'a pas d'adresse e-mail ou n'appartient pas au domaine.

Action possible : Décrivez la cause de l'échec et suggérez à l'administrateur du domaine de vérifier que le compte utilisateur existe et qu'il se trouve dans le domaine de l'administrateur du cours.

ClassroomApiDisabled

ClassroomApiDisabled indique que l'utilisateur qui effectue la requête n'a pas accès à l'API Classroom.

Action possible : Dirigez l'utilisateur vers les instructions sur l'activation de l'accès aux données Classroom. Consultez également ClassroomDisabled, car l'utilisateur peut utiliser le mauvais compte.

ClassroomDisabled

ClassroomDisabled indique que l'utilisateur qui envoie la requête n'a pas accès à Classroom.

Action possible : Dirigez l'utilisateur vers les instructions sur l'activation de l'accès à Classroom. Il est également possible que l'utilisateur utilise le mauvais compte. Vous pouvez donc lui fournir un lien vers la page Utiliser plusieurs comptes afin qu'il puisse sélectionner le bon compte.

ExpiredAddOnToken

ExpiredAddOnToken indique que le jeton de module complémentaire utilisé pour effectuer des appels à l'API a expiré.

Action possible : Invitez l'utilisateur à actualiser la page ou à se reconnecter au module complémentaire pour que vous puissiez obtenir le nouveau paramètre de requête addOnToken à partir de l'URL de la requête.

InvalidAddOnToken

InvalidAddOnToken indique que le jeton de module complémentaire transmis dans une requête n'est pas autorisé à créer une pièce jointe de module complémentaire dans le devoir.

Action possible : cette erreur peut se produire si l'utilisateur se connecte au module complémentaire avec un compte différent de celui utilisé dans Classroom. Demandez à l'utilisateur de se déconnecter de tous les autres comptes dans le navigateur ou d'ouvrir Classroom dans une fenêtre de navigation privée Chrome.

ProjectPermissionDenied

ProjectPermissionDenied indique que la requête a tenté de modifier une ressource associée à un autre projet de la console Developer.

Action possible : indiquez que votre application ne peut pas effectuer la requête prévue. Elle ne peut être effectuée que par le projet de la console de développement de l'ID client OAuth qui a créé la ressource.

UserIneligibleToUpdateGradingPeriodSettings

UserIneligibleToUpdateGradingPeriodSettings indique que la requête a tenté de modifier les paramètres de la période de notation dans un cours pour lequel l'utilisateur ou le propriétaire du cours ne dispose pas de la licence Google Workspace for Education appropriée, ou que l'utilisateur n'est pas un enseignant du cours ni un administrateur du domaine.

Action possible : indiquez que votre application ne peut pas effectuer la demande prévue pour mettre à jour les paramètres de la période de notation en raison de l'état de la licence ou du rôle dans le cours. Les licences peuvent être attribuées dans la console d'administration Google.

HTTP 429 : RESOURCE_EXHAUSTED

Le code RESOURCE_EXHAUSTED est renvoyé lorsque l'action demandée n'est pas autorisée, car une ressource (quota ou capacité du serveur, par exemple) est épuisée. Ces types d'erreurs de requête se produisent généralement parce que votre application a généré une charge excessive.

Pour éviter de déclencher ces limites et améliorer la fiabilité de votre application, utilisez des mécanismes de nouvelle tentative. Voici quelques exemples de mécanismes de réessai valides :

  • Utilisez un intervalle exponentiel tronqué entre les tentatives pour relancer la requête et maximiser le débit des requêtes dans les environnements avec simultanéité.

  • Pour éviter les collisions, envisagez d'utiliser un intervalle exponentiel tronqué entre les tentatives avec une gigue. L'introduction d'un jitter peut aider vos requêtes à aboutir plus rapidement en introduisant un délai aléatoire qui répartit les pics de requêtes.

Si votre application renvoie des erreurs RESOURCE_EXHAUSTED en raison de limites de quota, demandez une augmentation de quota. Pour en savoir plus, consultez l'article du centre d'aide Surveiller les quotas de l'API.

UserCourseJoinRateLimitReached

UserCourseJoinRateLimitReached indique que l'utilisateur a déjà rejoint le nombre maximal de cours autorisés en une journée. Pour en savoir plus, consultez la section "Invitations et taille des groupes" de l'article du centre d'aide Comprendre les règles et les limites applicables aux groupes.

Action possible : décrivez la cause de l'échec et suggérez à l'utilisateur d'attendre un jour avant de rejoindre le cours.

HTTP 500 : INTERNAL

INTERNAL indique qu'une erreur inattendue s'est produite lors du traitement de la demande. Les erreurs de requête INTERNAL peuvent également souvent être résolues en utilisant un intervalle exponentiel entre les tentatives pour relancer la requête. Si une erreur INTERNAL persiste, vous pouvez la signaler en créant un bug dans l'outil public de suivi des problèmes de l'API Classroom.