Thông báo lỗi thường gặp về API Google Lớp học

Trang này mô tả một số thông báo lỗi, vấn đề thường gặp và các việc có thể làm đối với các loại lỗi sau đây của Google Classroom API:

HTTP 400: FAILED_PRECONDITION

FAILED_PRECONDITION sẽ được trả về khi người dùng cố gắng thực hiện một hành động không được phép, có thể là do người dùng đã đạt đến giới hạn hoặc trạng thái ứng dụng, chẳng hạn như CourseNotModifiable. Để khắc phục FAILED_PRECONDITION, hãy hướng dẫn người dùng thực hiện một hành động nào đó rồi thử lại. Hoặc trong một số trường hợp, bạn có thể sử dụng các điểm cuối thay thế để sửa trạng thái thay cho người dùng.

AttachmentNotVisible

AttachmentNotVisible cho biết một hoặc nhiều tệp đính kèm được chỉ định không hiển thị cho người dùng, không thuộc loại được yêu cầu hoặc không tồn tại. Ví dụ: các mục trên Drive chưa được chia sẻ với người dùng sẽ trả về lỗi này.

Việc cần làm: Mô tả nguyên nhân gây ra lỗi và đề nghị người dùng kiểm tra lại các giá trị nhận dạng mà họ đã thêm, chẳng hạn như mã nhận dạng tệp trên Drive. Ngoài ra, hãy đảm bảo người dùng có quyền thích hợp để xem tệp đính kèm.

CannotRemoveCourseFolderOwner

CannotRemoveCourseFolderOwner cho biết bạn không thể xoá chủ sở hữu thư mục khoá học trên Drive.

Hành động có thể thực hiện: Mô tả nguyên nhân gây ra lỗi và đề xuất người dùng chuyển quyền sở hữu thư mục Drive của khoá học cho một người dùng khác rồi thử lại.

CannotRemoveCourseOwner

CannotRemoveCourseOwner cho biết bạn không thể xoá chủ sở hữu khoá học.

Hành động có thể thực hiện: Mô tả nguyên nhân gây ra lỗi và đề xuất rằng chủ sở hữu khoá học có thể không bị xoá. Trong hầu hết trường hợp, người dùng đang cố gắng tự xoá mình khỏi nhóm và điều này không được phép.

CannotRemoveCourseOwnerTransferIncomplete

CannotRemoveCourseOwnerTransferIncomplete cho biết bạn không thể xoá chủ sở hữu khoá học vì quá trình chuyển quyền sở hữu lớp học này vẫn đang diễn ra.

Hành động có thể thực hiện: Mô tả nguyên nhân gây ra lỗi và đề xuất người dùng đợi vài phút để hoàn tất hành động không đồng bộ chuyển quyền sở hữu lớp học, sau đó thử lại.

CannotRemoveTeacherWithNoCourseOwner

CannotRemoveTeacherWithNoCourseOwner cho biết giáo viên không thể bị xoá khỏi khoá học không có chủ sở hữu.

Hành động có thể thực hiện: Mô tả nguyên nhân gây ra lỗi và đề xuất rằng giáo viên có thể không bị xoá. Trong hầu hết các trường hợp, tài khoản người dùng của chủ sở hữu khoá học đã bị xoá, dẫn đến trạng thái khoá học không hợp lệ.

CourseMemberLimitReached

CourseMemberLimitReached cho biết rằng thao tác bạn đang cố gắng thực hiện sẽ vượt quá số lượng thành viên tối đa được phép trong khoá học. Mã này thường do students.create() trả về. Để biết thêm thông tin, hãy tham khảo phần "Giới hạn về quy mô lớp học" trong bài viết Mời học viên tham gia lớp học trên trung tâm trợ giúp.

Hành động có thể thực hiện: Mô tả nguyên nhân gây ra lỗi và đề xuất người dùng xoá những thành viên không cần thiết trong khoá học

CourseNotModifiable

CourseNotModifiable cho biết rằng khoá học có liên quan đang ở trạng thái không cho phép sửa đổi các thuộc tính của khoá học (ngoài trạng thái của khoá học).

Hành động có thể thực hiện: Nhắc người dùng thay đổi khoá học thành trạng thái khoá học có thể sửa đổi. Để thay đổi trạng thái, hãy sử dụng courses.patch(). Bạn có thể thay đổi trạng thái khoá học trong yêu cầu thay đổi các thuộc tính khác.

CourseTeacherLimitReached

CourseTeacherLimitReached cho biết rằng thao tác được yêu cầu sẽ vượt quá số lượng giáo viên tối đa được phép của khoá học. Mã này thường được trả về theo phương thức teachers.create(). Để biết thêm thông tin, hãy tham khảo phần "Giới hạn về quy mô lớp học" trong bài viết Thêm người cùng dạy vào lớp học trên trung tâm trợ giúp.

Hành động có thể thực hiện: Mô tả nguyên nhân gây ra lỗi và đề xuất người dùng xoá những giáo viên không cần thiết trong khoá học. Nếu có thể áp dụng cho ứng dụng của bạn, bạn có thể sử dụng phương thức teachers.delete() để quản lý danh sách giáo viên thay cho người dùng.

CourseTitleCannotContainUrl

CourseTitleCannotContainUrl cho biết bạn không được phép thực hiện thao tác yêu cầu vì thao tác đó sẽ đưa một URL vào tiêu đề khoá học. Các mẫu URL không được hỗ trợ trong tiêu đề khoá học.

Hành động có thể thực hiện: Mô tả nguyên nhân dẫn đến lỗi và đề xuất người dùng xoá mẫu URL khỏi trường title. Bạn được phép sử dụng URL trong trường description.

CourseTopicLimitReached

CourseTopicLimitReached cho biết thao tác được yêu cầu sẽ vượt quá số lượng chủ đề tối đa được phép trong một khoá học. Mã này thường được phương thức courses.topics.create() trả về.

Hành động có thể thực hiện: Mô tả nguyên nhân gây ra lỗi và đề xuất người dùng xoá các chủ đề không cần thiết. Nếu có thể áp dụng cho ứng dụng của bạn, bạn có thể dùng phương thức courses.topics.delete() để quản lý các chủ đề thay cho người dùng.

EmptyAssignees

EmptyAssignees cho biết rằng thao tác được yêu cầu sẽ xoá tất cả người được giao khỏi tài liệu môn học tương ứng. Không hỗ trợ bài tập trên lớp không có người được giao.

Hành động có thể thực hiện: Mô tả nguyên nhân gây ra lỗi và đề xuất rằng chủ sở hữu khoá học không thể xoá tất cả người được giao.

InactiveCourseOwner

InactiveCourseOwner cho biết bạn không được phép thực hiện hành động đã yêu cầu vì tài khoản của chủ sở hữu khoá học đã bị xoá. Quản trị viên của chủ sở hữu khoá học cần khôi phục tài khoản của chủ sở hữu khoá học trước khi thực hiện hành động được yêu cầu.

Hành động có thể thực hiện: Mô tả nguyên nhân dẫn đến lỗi và đề xuất quản trị viên khôi phục tài khoản của chủ sở hữu khoá học trước khi thử lại thao tác.

IneligibleOwner

IneligibleOwner cho biết bạn không thể thêm người dùng làm chủ sở hữu của khoá học vì người dùng đó không phải là người cùng dạy.

Việc nên làm: Mô tả nguyên nhân dẫn đến lỗi. Nếu người dùng yêu cầu không phải là quản trị viên, hãy đề nghị họ gửi lời mời cho người dùng đó làm giáo viên trong khoá học trước khi cập nhật chủ sở hữu. Nếu người dùng yêu cầu là quản trị viên, hãy đề xuất họ thêm người dùng đó làm người cùng dạy của khoá học trước.

ListCoursesStudentAndTeacherFilter

ListCoursesStudentAndTeacherFilter xảy ra khi thực hiện yêu cầu courses.list() với cả hai trường teacherIdstudentId đều được điền sẵn. Bạn chỉ có thể đặt một trong các trường này trong một yêu cầu duy nhất.

Bạn vẫn có thể lấy danh sách các khoá học có người dùng là học viên và giáo viên cụ thể bằng cách đưa ra 2 yêu cầu riêng biệt. Trước tiên, hãy truy xuất các khoá học của người dùng là giáo viên bằng cách đưa ra yêu cầu courses.list() với trường teacherId được điền sẵn, sau đó đưa ra một yêu cầu courses.list() khác với trường studentId được điền sẵn. Tính toán giao điểm của các kết quả để có được danh sách các khoá học trùng khớp giữa cả hai người dùng.

PendingInvitationExists

PendingInvitationExists cho biết ai đó đã được mời làm chủ sở hữu khoá học. Lỗi này xảy ra trong quá trình chuyển quyền sở hữu khoá học khi một yêu cầu chuyển đã được bắt đầu trước đó nhưng chưa được chủ sở hữu mới chấp nhận.

UserCannotOwnCourse

UserCannotOwnCourse cho biết bạn không thể thêm người dùng làm chủ sở hữu của khoá học.

Hành động có thể thực hiện: Mô tả nguyên nhân gây ra lỗi và đề xuất rằng không thể tạo khoá học khi người dùng là chủ sở hữu khoá học. Người dùng không phải là quản trị viên có thể gặp phải lỗi này nếu họ cố gắng tạo một khoá học mà chủ sở hữu là một người dùng khác chứ không phải họ. Quản trị viên yêu cầu người dùng có thể thấy lỗi này nếu tài khoản người dùng được chỉ định làm chủ sở hữu không tồn tại hoặc người dùng không thuộc miền của họ.

UserGroupsMembershipLimitReached

UserGroupsMembershipLimitReached cho biết người dùng đã là thành viên của số lượng nhóm tối đa được phép và không thể tham gia bất kỳ khoá học nào. Mã này thường được students.create() hoặc teachers.create() trả về. Để biết thêm thông tin, hãy tham khảo phần "Giới hạn về quy mô lớp học" trong bài viết Mời học viên tham gia lớp học trên trung tâm trợ giúp.

Hành động có thể thực hiện: Mô tả nguyên nhân gây ra lỗi và đề nghị người dùng rời khỏi mọi khoá học mà họ không tham gia. Người dùng có thể cân nhắc việc tạo thêm tài khoản nếu cần tham gia nhiều khoá học hơn. Nếu có thể áp dụng cho ứng dụng của bạn, bạn có thể sử dụng students.create() hoặc teachers.delete() để quản lý danh sách thay cho người dùng.

HTTP 403: PERMISSION_DENIED

Tất cả các phương thức của Classroom API đều có thể trả về lỗi PERMISSION_DENIED (HTTP 403) nếu người dùng cuối không đáp ứng các điều kiện tiên quyết để truy cập. Thông báo đi kèm với lỗi chứa một thông báo lỗi để giúp bạn xác định nguyên nhân và hướng dẫn người dùng thực hiện hành động thích hợp.

Các phần sau đây mô tả các thông báo lỗi thường gặp của Classroom API.

CannotDirectAddUser

CannotDirectAddUser cho biết người dùng không thể được thêm trực tiếp vào khoá học. Mã này xuất hiện khi quản trị viên miền cố gắng thêm một người dùng vào khoá học và người dùng đó không có địa chỉ email hoặc không thuộc miền.

Hành động có thể thực hiện: Mô tả nguyên nhân gây ra lỗi và đề xuất rằng quản trị viên miền kiểm tra để đảm bảo tài khoản người dùng tồn tại và nằm trong miền của quản trị viên khoá học.

CannotInviteUserInUntrustedDomain

CannotInviteUserInUntrustedDomain cho biết người dùng được mời hoặc được tạo không nằm trong cùng một miền hoặc miền đáng tin cậy của người gọi. Đối với người gọi có giấy phép Google Workspace for Education Fundamentals, người dùng không đáng tin cậy bên ngoài miền không thể được thêm hoặc mời trực tiếp vào một khoá học.

Hành động có thể thực hiện: Mô tả nguyên nhân gây ra lỗi và đề xuất người gọi cân nhắc một trong các lựa chọn sau:

  • Thêm miền của cả người gọi và người nhận vào danh sách miền đáng tin cậy của nhau rồi thử lại.
  • Đề nghị người gọi tự chia sẻ đường liên kết của lời mời tham gia khoá học hoặc mã lớp. Xin lưu ý rằng quản trị viên phải định cấu hình lời mời bên ngoài miền. Hãy xem bài viết Mời học viên tham gia lớp học để tìm hiểu thêm.
  • Đề xuất người gọi nâng cấp lên giấy phép Google Workspace for Education có tính phí, vì giới hạn này chỉ áp dụng cho giấy phép Fundamentals.

ClassroomApiDisabled

ClassroomApiDisabled cho biết người dùng yêu cầu không có quyền truy cập vào API Lớp học.

Hành động có thể thực hiện: Hướng dẫn người dùng cách bật quyền truy cập vào dữ liệu Lớp học. Bạn cũng có thể xem ClassroomDisabled vì người dùng có thể đang sử dụng tài khoản không chính xác.

ClassroomDisabled

ClassroomDisabled cho biết người dùng yêu cầu không có quyền truy cập vào Lớp học.

Hành động có thể thực hiện: Hướng dẫn người dùng cách bật quyền truy cập vào Lớp học. Người dùng cũng có thể đang sử dụng sai tài khoản, vì vậy, bạn cũng có thể cung cấp một đường liên kết đến bài viết sử dụng nhiều tài khoản để người dùng có thể chọn tài khoản chính xác.

ExpiredAddOnToken

ExpiredAddOnToken cho biết mã thông báo tiện ích bổ sung đang được dùng để thực hiện các lệnh gọi đến API đã hết hạn.

Hành động có thể thực hiện: Nhắc người dùng làm mới trang hoặc đăng nhập lại vào tiện ích bổ sung để bạn có thể lấy tham số truy vấn addOnToken mới từ URL yêu cầu.

InvalidAddOnToken

InvalidAddOnToken cho biết mã thông báo tiện ích bổ sung được truyền trong một yêu cầu không được phép tạo tệp đính kèm của tiện ích bổ sung cho bài tập.

Hành động có thể thực hiện: Lỗi này có thể xảy ra nếu người dùng đăng nhập vào tiện ích bổ sung bằng một tài khoản khác với tài khoản trong Lớp học. Hướng dẫn người dùng đăng xuất khỏi tất cả các tài khoản khác trong trình duyệt hoặc mở Classroom trong cửa sổ ẩn danh của Chrome.

ProjectPermissionDenied

ProjectPermissionDenied cho biết yêu cầu đã cố gắng sửa đổi một tài nguyên được liên kết với một dự án Developer Console khác.

Hành động có thể thực hiện: Cho biết rằng ứng dụng của bạn không thể thực hiện yêu cầu dự kiến. Chỉ dự án Developer Console của mã ứng dụng khách OAuth đã tạo tài nguyên mới có thể thực hiện thao tác này.

UserIneligibleToUpdateGradingPeriodSettings

UserIneligibleToUpdateGradingPeriodSettings cho biết rằng yêu cầu đã cố gắng sửa đổi chế độ cài đặt giai đoạn chấm điểm trong một khoá học mà người dùng yêu cầu hoặc chủ sở hữu khoá học không có giấy phép Google Workspace for Education phù hợp, hoặc người dùng yêu cầu không phải là giáo viên khoá học hay quản trị viên miền.

Hành động có thể thực hiện: Cho biết rằng ứng dụng của bạn không thể đưa ra yêu cầu dự kiến để cập nhật chế độ cài đặt giai đoạn chấm điểm do trạng thái cấp phép hoặc vai trò của khoá học. Bạn có thể cấp giấy phép trong Bảng điều khiển dành cho quản trị viên của Google.

HTTP 429: RESOURCE_EXHAUSTED

RESOURCE_EXHAUSTED được trả về khi hành động được yêu cầu không được phép vì một số tài nguyên (chẳng hạn như hạn mức hoặc dung lượng máy chủ) đã hết. Những loại lỗi yêu cầu này thường xảy ra do ứng dụng của bạn tạo ra tải quá mức.

Để tránh kích hoạt những giới hạn này và tăng độ tin cậy của ứng dụng, hãy sử dụng cơ chế thử lại. Các cơ chế thử lại hợp lệ bao gồm:

  • Sử dụng thuật toán thời gian đợi luỹ thừa bị cắt để thử lại yêu cầu và tối đa hoá thông lượng yêu cầu trong các môi trường đồng thời.

  • Để tránh xung đột, hãy cân nhắc sử dụng thuật toán thời gian đợi luỹ thừa bị cắt bớt có độ trễ. Việc giới thiệu độ trễ ngẫu nhiên có thể giúp các yêu cầu của bạn thành công nhanh hơn bằng cách giới thiệu độ trễ ngẫu nhiên giúp trải đều các yêu cầu tăng đột biến.

Nếu ứng dụng của bạn trả về lỗi RESOURCE_EXHAUSTED do hạn mức, hãy gửi yêu cầu tăng hạn mức. Để biết thêm thông tin, hãy tham khảo bài viết Theo dõi hạn mức API trên trung tâm trợ giúp.

UserCourseJoinRateLimitReached

UserCourseJoinRateLimitReached cho biết người dùng đã tham gia số lượng khoá học tối đa được phép trong một ngày. Để biết thêm thông tin, hãy tham khảo phần "Lời mời và quy mô của nhóm" trong bài viết Tìm hiểu các chính sách và hạn mức của Google Groups trên trung tâm trợ giúp.

Hành động có thể thực hiện: Mô tả nguyên nhân gây ra lỗi và đề xuất người dùng đợi một ngày trước khi tham gia khoá học.

HTTP 500: INTERNAL

INTERNAL cho biết đã xảy ra lỗi ngoài dự kiến trong khi xử lý yêu cầu. Bạn cũng có thể giải quyết các lỗi yêu cầu INTERNAL bằng cách sử dụng thuật toán thời gian đợi luỹ thừa để thử lại yêu cầu. Nếu lỗi INTERNAL vẫn tiếp diễn, bạn có thể báo cáo bằng cách gửi lỗi trên công cụ theo dõi lỗi công khai của API Lớp học.