Распространенные сообщения об ошибках API Google Classroom

На этой странице описаны некоторые распространенные сообщения об ошибках, проблемы и возможные действия для следующих типов ошибок в Google Classroom API:

HTTP 400: FAILED_PRECONDITION

Ошибка FAILED_PRECONDITION возвращается, когда пользователь пытается выполнить действие, которое не разрешено, либо из-за превышения лимита, либо из-за состояния приложения, например, CourseNotModifiable . Чтобы исправить ошибку FAILED_PRECONDITION , предложите пользователю выполнить какое-либо действие, а затем повторите попытку. Или, в некоторых случаях, вы можете использовать альтернативные конечные точки для исправления состояния от имени пользователя.

AttachmentNotVisible

AttachmentNotVisible указывает на то, что одно или несколько указанных вложений либо не видны пользователю, либо не соответствуют запрошенному типу, либо не существуют. Например, для элементов Google Диска, которые не были предоставлены пользователю в общий доступ, будет возвращена эта ошибка.

Возможные действия : Опишите причину сбоя и предложите пользователю перепроверить указанные идентификаторы, например, идентификаторы файлов Google Drive. Также убедитесь, что у пользователя есть необходимые права доступа для просмотра вложения.

CannotRemoveCourseFolderOwner

CannotRemoveCourseFolderOwner указывает на то, что владельца папки курса на Google Диске удалить невозможно.

Возможные действия : Опишите причину сбоя и предложите пользователю передать права доступа к папке курса на Google Диске другому пользователю и повторить попытку.

CannotRemoveCourseOwner

CannotRemoveCourseOwner указывает на то, что владельца курса нельзя удалить.

Возможные действия : Опишите причину сбоя и предложите не удалять владельца курса. В большинстве случаев пользователь пытается удалить себя самостоятельно, что недопустимо.

CannotRemoveCourseOwnerTransferIncomplete

CannotRemoveCourseOwnerTransferIncomplete означает, что владельца курса нельзя удалить, поскольку передача прав собственности на этот курс все еще находится в процессе.

Возможный вариант действий : Опишите причину сбоя и предложите пользователю подождать несколько минут, пока завершится асинхронная операция передачи прав собственности на класс, а затем повторить попытку.

CannotRemoveTeacherWithNoCourseOwner

CannotRemoveTeacherWithNoCourseOwner указывает на то, что преподавателя нельзя удалить из курса, у которого нет владельца.

Возможные действия : Опишите причину сбоя и предложите не удалять преподавателя. В большинстве случаев, причиной некорректного состояния курса стало удаление учетной записи владельца курса.

Достигнут лимит участников курса

CourseMemberLimitReached указывает на то, что попытка выполнения действия превысит максимально допустимое количество участников курса. Этот код обычно возвращается функцией students.create() Для получения дополнительной информации обратитесь к разделу «Ограничения размера класса» в статье справочного центра «Приглашение студентов в ваш класс ».

Возможные действия : Опишите причину сбоя и предложите пользователю удалить ненужные элементы курса.

КурсНеизменяемый

CourseNotModifiable означает, что соответствующий курс находится в состоянии, которое не позволяет изменять его свойства (за исключением самого состояния курса).

Возможное действие : Предложить пользователю изменить состояние курса на изменяемое . Для изменения состояния используйте courses.patch() . Состояние курса можно изменить в запросе, который изменяет другие свойства.

Достигнут лимит преподавателей курса

CourseTeacherLimitReached указывает на то, что запрошенное действие превысит максимально допустимое количество преподавателей курса. Этот код обычно возвращается методом teachers.create() . Для получения дополнительной информации обратитесь к разделу «Ограничения размера класса» в статье справочного центра «Добавление сопреподавателя в класс» .

Возможные действия : Опишите причину сбоя и предложите пользователю удалить ненужных преподавателей курса. Если это применимо к вашему приложению, вы можете использовать метод teachers.delete() для управления списками преподавателей от имени пользователя.

CourseTitleCannotContainUrl

CourseTitleCannotContainUrl означает, что запрошенное действие не разрешено, поскольку оно приведет к добавлению URL-адреса в название курса. Шаблоны URL-адресов в названиях курсов не поддерживаются.

Возможный вариант действий : Опишите причину ошибки и предложите пользователю удалить шаблон URL-адреса из поля title . URL-адреса разрешены в поле description .

Достигнут лимит тем курса

CourseTopicLimitReached указывает на то, что запрошенное действие превысит максимально допустимое количество тем в курсе. Этот код обычно возвращается методом courses.topics.create() .

Возможные действия : Опишите причину сбоя и предложите пользователю удалить ненужные темы. Если это применимо к вашему приложению, вы можете использовать метод courses.topics.delete() для управления темами от имени пользователя.

EmptyAssignees

EmptyAssignees указывает, что запрошенное действие удалит всех назначенных студентов из соответствующего курса. Курсы без назначенных студентов не поддерживаются.

Возможные действия : Опишите причину сбоя и предложите владельцу курса исключить всех назначенных участников.

InactiveCourseOwner

InactiveCourseOwner указывает, что запрошенное действие не разрешено, поскольку учетная запись владельца курса удалена. Администратору владельца курса необходимо восстановить учетную запись владельца курса, прежде чем предпринимать запрошенное действие.

Возможные действия : Опишите причину сбоя и предложите администратору восстановить учетную запись владельца курса, прежде чем повторять операцию.

НеправомочныйВладелец

IneligibleOwner указывает на то, что пользователя нельзя добавить в качестве владельца курса, поскольку он не является сопреподавателем.

Возможные действия : Опишите причину сбоя. Если пользователь, отправивший запрос, не является администратором, предложите ему сначала отправить пользователю приглашение стать преподавателем курса, прежде чем обновлять информацию о владельце. Если пользователь, отправивший запрос, является администратором, предложите ему сначала добавить пользователя в качестве сопреподавателя курса.

ListCoursesStudentAndTeacherFilter

Ошибка ListCoursesStudentAndTeacherFilter возникает при выполнении запроса courses.list() если заполнены поля teacherId и studentId . В одном запросе можно задать значение только для одного из этих полей.

Вы по-прежнему можете получить список курсов с конкретными пользователями — студентами и преподавателями — выполнив два отдельных запроса. Сначала получите курсы пользователя-преподавателя, отправив запрос courses.list() с заполненным полем teacherId , а затем отправьте еще один запрос courses.list() с заполненным полем studentId . Вычислите пересечение результатов, чтобы получить список курсов, которые соответствуют обоим пользователям.

Ожидающее приглашение существует

PendingInvitationExists указывает на то, что кто-то уже получил приглашение стать владельцем курса. Эта ошибка возникает во время передачи прав собственности на курс, когда передача была начата ранее, но еще не была принята новым владельцем.

Пользователь не может владеть курсом

UserCannotOwnCourse указывает на то, что пользователя невозможно добавить в качестве владельца курса.

Возможные действия : Опишите причину сбоя и предположите, что курс невозможно создать, указав пользователя в качестве владельца. Пользователь, не являющийся администратором, может увидеть эту ошибку, если попытается создать курс, указав в качестве владельца пользователя, отличного от себя. Пользователь-администратор может увидеть эту ошибку, если указанная в качестве владельца учетная запись пользователя не существует или пользователь не входит в его домен.

Достигнут лимит членства в группах пользователей

UserGroupsMembershipLimitReached указывает на то, что пользователь уже является членом максимально допустимого количества групп и не может присоединиться ни к одному курсу. Этот код обычно возвращается методами students.create() или teachers.create() . Для получения дополнительной информации обратитесь к разделу «Ограничения размера класса» в статье справочного центра «Приглашение студентов в класс ».

Возможные действия : Опишите причину сбоя и предложите пользователю покинуть те курсы, в которых он не участвует. Пользователь может рассмотреть возможность создания дополнительной учетной записи, если ему необходимо участвовать в большем количестве курсов. Если это применимо к вашему приложению, вы можете использовать students.create() или teachers.delete() для управления списками учащихся от имени пользователя.

HTTP 403: PERMISSION_DENIED

Все методы Classroom API могут возвращать ошибку PERMISSION_DENIED (HTTP 403), если конечный пользователь не соответствует предварительным условиям для доступа. Сообщение об ошибке содержит пояснение , которое поможет вам определить причину и направить пользователей к соответствующим действиям.

В следующих разделах описаны распространенные сообщения об ошибках API Classroom.

CannotDirectAddUser

Код CannotDirectAddUser указывает на невозможность прямого добавления пользователя в курс. Эта ошибка возникает, когда администратор домена пытается добавить пользователя в курс, а у этого пользователя либо отсутствует адрес электронной почты, либо он не принадлежит к домену.

Возможные действия : Опишите причину сбоя и предложите администратору домена проверить, существует ли учетная запись пользователя и находится ли она в домене администратора курса.

Невозможно пригласить пользователя в недоверенный домен.

CannotInviteUserInUntrustedDomain указывает на то, что приглашаемый или создаваемый пользователь не находится в том же домене, что и вызывающий пользователь, или не является его доверенным доменом . Для пользователей с лицензией Google Workspace for Education Fundamentals , не являющиеся доверенными пользователями из других доменов, не могут быть напрямую добавлены или приглашены на курс.

Возможные действия : Опишите причину сбоя и предложите звонившему рассмотреть один из следующих вариантов:

  • Добавьте домены как вызывающего, так и принимающего пользователей в списки доверенных доменов друг друга и повторите попытку.
  • Предложите звонящему вручную поделиться ссылкой-приглашением на курс или кодом класса. Обратите внимание, что для этого требуется настройка приглашений извне домена администратором. Подробнее см. раздел «Приглашение студентов на ваш курс» .
  • Предложите звонящему перейти на платную лицензию Google Workspace for Education , поскольку ограничение распространяется только на базовую лицензию.

ClassroomApiDisabled

ClassroomApiDisabled указывает на то, что пользователь, отправивший запрос, не имеет доступа к Classroom API.

Возможные действия : Направьте пользователя к инструкциям по включению доступа к данным Classroom . Также см. ClassroomDisabled , поскольку пользователь может использовать неправильную учетную запись.

ClassroomDisabled

ClassroomDisabled указывает на то, что у пользователя, отправившего запрос, нет доступа к Classroom.

Возможные действия : Направьте пользователя к инструкциям по включению доступа к Classroom . Пользователь также может использовать неправильную учетную запись, поэтому вы можете предоставить ссылку на использование нескольких учетных записей , чтобы пользователь мог выбрать правильную.

ExpiredAddOnToken

ExpiredAddOnToken указывает на то, что срок действия токена дополнения, используемого для вызовов API, истек.

Возможное действие : Предложите пользователю обновить страницу или снова войти в дополнение, чтобы получить новый параметр запроса addOnToken из URL-адреса запроса.

InvalidAddOnToken

InvalidAddOnToken указывает на то, что токен дополнения, переданный в запросе, не авторизован для создания дополнительного вложения к заданию.

Возможные действия : Эта ошибка может возникнуть, если пользователь входит в надстройку с учетной записью, отличной от учетной записи в Classroom. Посоветуйте пользователю либо выйти из всех других учетных записей в браузере, либо открыть Classroom в режиме инкогнито в окне Chrome.

ПроектОтказано в доступе

ProjectPermissionDenied свидетельствует о том, что запрос пытался изменить ресурс, связанный с другим проектом в консоли разработчика.

Возможное действие : Укажите, что ваше приложение не может выполнить необходимый запрос. Он может быть выполнен только проектом консоли разработчика, принадлежащим клиенту OAuth с идентификатором , создавшему ресурс.

Усеринелигиблетоупдатеградингпериодсеттингс

UserIneligibleToUpdateGradingPeriodSettings указывает на то, что запрос пытался изменить настройки периодов оценивания в курсе, где у пользователя, отправившего запрос, или владельца курса отсутствует соответствующая лицензия Google Workspace for Education, или пользователь, отправивший запрос, не является преподавателем курса или администратором домена.

Возможный вариант действий : Укажите, что ваше приложение не может выполнить необходимый запрос на обновление настроек периода выставления оценок из-за статуса лицензирования или роли в курсе. Лицензии можно назначить в консоли администратора Google.

HTTP 429: RESOURCE_EXHAUSTED

Ошибка RESOURCE_EXHAUSTED возвращается, когда запрошенное действие не разрешено из-за исчерпания каких-либо ресурсов, таких как квота или мощность сервера. Такие ошибки запросов обычно возникают из-за чрезмерной нагрузки на ваше приложение.

Чтобы избежать превышения этих лимитов и повысить надежность вашего приложения, используйте механизмы повторных попыток. Допустимые механизмы повторных попыток включают:

  • Используйте усеченную экспоненциальную задержку для повторной отправки запроса и максимизации пропускной способности запросов в средах с параллельным выполнением.

  • Чтобы избежать коллизий, рассмотрите возможность использования усеченной экспоненциальной задержки с учетом дрожания (jitter). Введение дрожания может ускорить обработку запросов, создавая случайную задержку, которая распределяет пики запросов.

Если ваше приложение возвращает ошибки RESOURCE_EXHAUSTED из-за ограничений квоты, отправьте запрос на увеличение квоты. Для получения дополнительной информации обратитесь к статье в справочном центре по квотам API мониторинга .

UserCourseJoinRateLimitReached

UserCourseJoinRateLimitReached указывает на то, что пользователь уже присоединился к максимально допустимому количеству курсов за один день. Для получения дополнительной информации обратитесь к разделу «Приглашения в группы и их размер» в статье справочного центра «Понимание политики и ограничений групп ».

Возможный вариант действий : Опишите причину сбоя и предложите пользователю подождать один день, прежде чем присоединиться к курсу.

HTTP 500: INTERNAL

INTERNAL указывает на то, что при обработке запроса возникла непредвиденная ошибка. Ошибки запросов INTERNAL также часто можно устранить, используя экспоненциальную задержку для повторной попытки запроса. Если ошибка INTERNAL сохраняется, о ней можно сообщить, создав сообщение об ошибке в общедоступном трекере проблем Classroom API .