בדף הזה מפורטות כמה הודעות שגיאה נפוצות, בעיות ופעולות אפשריות ב-Google Classroom API לסוגי השגיאות הבאים:
- HTTP 400:
FAILED_PRECONDITION - HTTP 403:
PERMISSION_DENIED - HTTP 429:
RESOURCE_EXHAUSTED - HTTP 500:
INTERNAL
HTTP 400: FAILED_PRECONDITION
השגיאה FAILED_PRECONDITION מוחזרת כשהמשתמש מנסה לבצע פעולה שלא ניתן לאשר, כי הוא הגיע למגבלה או למצב של אפליקציה, כמו CourseNotModifiable. כדי לפתור שגיאה מסוג FAILED_PRECONDITION, צריך להנחות את המשתמש לבצע פעולה מסוימת ואז לנסות שוב. לחלופין, במקרים מסוימים, אפשר להשתמש בנקודות קצה חלופיות כדי לתקן את המצב בשם המשתמש.
AttachmentNotVisible
AttachmentNotVisible מציין שאחד או יותר מהקבצים המצורפים שצוינו לא גלויים למשתמש, לא מהסוג המבוקש או לא קיימים. לדוגמה, אם מנסים לגשת לפריטים ב-Drive שלא שותפו עם המשתמש, תופיע השגיאה הזו.
פעולה אפשרית: מתארים את הגורם לכישלון ומציעים למשתמש לבדוק מחדש את המזהים שהוא כלל, כמו מזהי קבצים ב-Drive. בנוסף, צריך לוודא שלמשתמש יש את ההרשאות המתאימות לצפייה בקובץ המצורף.
CannotRemoveCourseFolderOwner
CannotRemoveCourseFolderOwner מציין שלא ניתן להסיר את הבעלים של תיקיית הקורס ב-Drive.
פעולה אפשרית: מתארים את הסיבה לכישלון ומציעים למשתמש להעביר את הבעלות על תיקיית הקורס ב-Drive למשתמש אחר ולנסות שוב.
CannotRemoveCourseOwner
CannotRemoveCourseOwner מציין שאולי אי אפשר להסיר את בעלי הקורס.
פעולה אפשרית: מתארים את הסיבה לכשל ומציעים שלא להסיר את הבעלים של הקורס. ברוב המקרים, המשתמש מנסה להסיר את עצמו, וזה אסור.
CannotRemoveCourseOwnerTransferIncomplete
CannotRemoveCourseOwnerTransferIncomplete מציין שאולי אי אפשר להסיר את הבעלים של הקורס כי העברת הבעלות על הכיתה הזו עדיין בתהליך.
פעולה אפשרית: מתארים את הגורם לכישלון ומציעים למשתמש להמתין כמה רגעים עד להשלמת הפעולה האסינכרונית של העברת הבעלות על הכיתה, ואז לנסות שוב.
CannotRemoveTeacherWithNoCourseOwner
הסמל CannotRemoveTeacherWithNoCourseOwner מציין שאולי אי אפשר להסיר מורה מקורס ללא בעלים.
פעולה אפשרית: מתארים את הסיבה לכשל ומציעים לא להסיר את המורה. ברוב המקרים, חשבון המשתמש של בעל הקורס נמחק, ולכן מצב הקורס לא תקין.
CourseMemberLimitReached
CourseMemberLimitReached מציין שהפעולה שניסיתם לבצע תחרוג מהמספר המקסימלי של משתתפים בקורס. הקוד הזה מוחזר בדרך כלל על ידי
students.create()
מידע נוסף זמין בקטע 'מגבלות על גודל הכיתה' במאמר הזמנת תלמידים לכיתה במרכז העזרה.
פעולה אפשרית: תיאור של הגורם לכישלון והצעה למשתמש להסיר חברים מיותרים מהקורס
CourseNotModifiable
CourseNotModifiable מציין שהקורס הרלוונטי נמצא במצב שלא מאפשר לשנות את המאפיינים שלו (מלבד מצב הקורס עצמו).
פעולה אפשרית: מציגים למשתמש הנחיה לשנות את הקורס למצב קורס שניתן לשינוי. כדי לשנות את המצב, משתמשים בפקודה courses.patch(). אפשר לשנות את מצב הקורס בבקשה שמשנה מאפיינים אחרים.
CourseTeacherLimitReached
CourseTeacherLimitReached מציין שהפעולה המבוקשת תחרוג מהמספר המקסימלי המותר של מורים בקורס. הקוד הזה מוחזר בדרך כלל על ידי השיטה teachers.create(). מידע נוסף זמין בקטע 'מגבלות על גודל הכיתה' במאמר הוספת מורה נוסף לכיתה במרכז העזרה.
פעולה אפשרית: מתארים את הסיבה לכישלון ומציעים למשתמש להסיר מורים מיותרים מהקורס. אם זה רלוונטי לאפליקציה שלכם, אתם יכולים להשתמש בשיטה teachers.delete() כדי לנהל את רשימות התלמידים בשם המשתמש.
CourseTitleCannotContainUrl
CourseTitleCannotContainUrl מציין שהפעולה המבוקשת לא מותרת כי היא תוסיף כתובת URL לשם הקורס. אין תמיכה בתבניות של כתובות URL בכותרות של קורסים.
פעולה אפשרית: מתארים את הסיבה לכשל ומציעים למשתמש להסיר את תבנית כתובת ה-URL מהשדה title. מותר להשתמש בכתובות ה-URL האלה בשדה description.
CourseTopicLimitReached
הערך CourseTopicLimitReached מציין שהפעולה המבוקשת תחרוג מהמספר המקסימלי המותר של נושאים בקורס. הקוד הזה מוחזר בדרך כלל על ידי השיטה courses.topics.create().
פעולה אפשרית: מתארים את הסיבה לכישלון ומציעים למשתמש להסיר נושאים מיותרים. אם השיטה הזו רלוונטית לאפליקציה שלכם, תוכלו להשתמש בשיטה
courses.topics.delete()
כדי לנהל נושאים בשם המשתמש.
EmptyAssignees
EmptyAssignees מציין שהפעולה המבוקשת תסיר את כל הנמענים ממטלת הלימודים המתאימה. אין תמיכה במטלות ללא הקצאת תלמידים.
פעולה אפשרית: מתארים את הסיבה לכישלון ומציעים לבעלים של הקורס שלא ניתן להסיר את כל הנמענים.
InactiveCourseOwner
הסמל InactiveCourseOwner מציין שהפעולה המבוקשת לא מותרת כי החשבון של בעל הקורס נמחק. האדמין של בעל הקורס צריך לשחזר את החשבון של בעל הקורס לפני שיבצע את הפעולה המבוקשת.
פעולה אפשרית: מתארים את הסיבה לכשל ומציעים לאדמין לשחזר את החשבון של בעלי הקורס לפני שמנסים שוב לבצע את הפעולה.
IneligibleOwner
IneligibleOwner מציין שאי אפשר להוסיף את המשתמש כבעלים של הקורס כי הוא לא מוגדר כמורה שותף.
פעולה אפשרית: מתארים את הסיבה לכישלון. אם המשתמש ששולח את הבקשה הוא לא אדמין, מציעים לו קודם לשלוח למשתמש הזמנה להיות מורה בקורס לפני עדכון הבעלים. אם המשתמש ששולח את הבקשה הוא אדמין, מציעים לו קודם להוסיף את המשתמש כחבר צוות ההוראה בקורס.
ListCoursesStudentAndTeacherFilter
השגיאה ListCoursesStudentAndTeacherFilter מתרחשת כשמבצעים בקשת courses.list() עם השדות teacherId ו-studentId שניהם מאוכלסים. אפשר להגדיר רק אחד מהשדות האלה בכל בקשה.
עדיין אפשר לקבל רשימה של קורסים עם משתמשים ספציפיים של תלמידים ומורים על ידי שליחת שתי בקשות נפרדות. קודם כל, מאחזרים את הקורסים של המורה על ידי שליחת בקשת courses.list() עם השדה teacherId מאוכלס, ואז שולחים בקשת courses.list() נוספת עם השדה studentId מאוכלס.
מחשבים את החיתוך של התוצאות כדי לקבל את רשימת הקורסים שתואמים לשני המשתמשים.
PendingInvitationExists
PendingInvitationExists מציין שמישהו כבר הוזמן לקבל בעלות על הקורס. השגיאה הזו מתרחשת במהלך העברת בעלות על קורס, אם העברה כבר התחילה אבל הבעלים החדשים עדיין לא אישרו אותה.
UserCannotOwnCourse
UserCannotOwnCourse מציין שאי אפשר להוסיף את המשתמש כבעלים של הקורס.
פעולה אפשרית: תיאור של הגורם לכישלון והצעה שלא ניתן ליצור את הקורס עם המשתמש כבעלים של הקורס. משתמש שאינו אדמין עשוי לראות את השגיאה הזו אם הוא מנסה ליצור קורס עם משתמש אחר ולא עם עצמו כבעלים. אדמין שמבקש גישה לחשבון משתמש עשוי לראות את השגיאה הזו אם חשבון המשתמש שצוין כבעלים לא קיים או אם המשתמש לא נמצא בדומיין שלו.
UserGroupsMembershipLimitReached
UserGroupsMembershipLimitReached מציין שהמשתמש כבר חבר במספר המקסימלי של קבוצות שמותר להצטרף אליהן, ולכן הוא לא יכול להצטרף לקורסים. הקוד הזה מוחזר בדרך כלל על ידי students.create() או teachers.create().
מידע נוסף מופיע בקטע 'מגבלות על גודל הכיתה' במאמר במרכז העזרה בנושא הזמנת תלמידים לכיתה.
פעולה אפשרית: מתארים את הסיבה לכישלון ומציעים למשתמש לצאת מכל הקורסים שהוא לא משתתף בהם. אם המשתמש רוצה להשתתף בקורסים נוספים, הוא יכול ליצור חשבון נוסף. אם זה רלוונטי לאפליקציה שלכם, אתם יכולים להשתמש ב-students.create() או ב-teachers.delete() כדי לנהל את רשימות המשתתפים בשם המשתמש.
HTTP 403: PERMISSION_DENIED
כל השיטות של Classroom API עשויות להחזיר שגיאה PERMISSION_DENIED (HTTP 403) אם משתמש קצה לא עומד בדרישות המוקדמות לגישה. ההודעה שמצורפת לשגיאה מכילה הודעת שגיאה שתעזור לכם לזהות את הסיבה לשגיאה ולהנחות את המשתמשים לבצע את הפעולה המתאימה.
בקטעים הבאים מתוארות הודעות שגיאה נפוצות ב-Classroom API.
CannotDirectAddUser
CannotDirectAddUser מציין שאי אפשר להוסיף משתמש ישירות לקורס. הקוד הזה מופיע כשמנהל דומיין מנסה להוסיף משתמש לקורס, אבל למשתמש אין כתובת אימייל או שהוא לא שייך לדומיין.
פעולה אפשרית: מתארים את הסיבה לכישלון ומציעים לאדמין של הדומיין לבדוק שחשבון המשתמש קיים ושייך לדומיין של האדמין של הקורס.
CannotInviteUserInUntrustedDomain
השגיאה CannotInviteUserInUntrustedDomain מציינת שהמשתמש שמוזמן או נוצר לא נמצא באותו דומיין של היישות הקוראת, או בדומיין מהימן שלה. למשתמשים עם רישיון ל-Google Workspace for Education Fundamentals, אי אפשר להוסיף או להזמין ישירות משתמשים מחוץ לדומיין שלא נחשבים מהימנים לקורס.
פעולה אפשרית: מתארים את הסיבה לכישלון ומציעים למתקשר לבחור באחת מהאפשרויות הבאות:
- צריך לכלול את הדומיינים של המשתמשים המתקשרים והמקבלים ברשימת הדומיינים המהימנים של כל אחד מהם ולנסות שוב.
- מציעים למתקשר לשתף ידנית קישור להזמנה לקורס או קוד כיתה. שימו לב: כדי לעשות את זה, אדמין צריך להגדיר הזמנות מחוץ לדומיין. מידע נוסף זמין במאמר הזמנת תלמידים לכיתה.
- מציעים למתקשר לשדרג לרישיון בתשלום של Google Workspace for Education, כי המגבלה חלה רק על רישיון Fundamentals.
ClassroomApiDisabled
ClassroomApiDisabled מציין שלמשתמש ששלח את הבקשה אין גישה ל-Classroom API.
פעולה אפשרית: מפנים את המשתמש להוראות בנושא הפעלת גישה לנתונים ב-Classroom. אפשר גם לעיין בערך ClassroomDisabled, כי יכול להיות שהמשתמש משתמש בחשבון הלא נכון.
ClassroomDisabled
ClassroomDisabled מציין שלמשתמש ששלח את הבקשה אין גישה ל-Classroom.
פעולה אפשרית: צריך להפנות את המשתמש להוראות בנושא הפעלת הגישה ל-Classroom. יכול להיות שהמשתמש משתמש בחשבון הלא נכון, ולכן כדאי לספק לו גם קישור למאמר בנושא שימוש בכמה חשבונות כדי שיוכל לבחור את החשבון הנכון.
ExpiredAddOnToken
ExpiredAddOnToken מציין שתוקף האסימון של התוסף שמשמש לשליחת קריאות ל-API פג.
פעולה אפשרית: מבקשים מהמשתמש לרענן את הדף או להיכנס שוב לתוסף כדי שתוכלו לקבל את פרמטר השאילתה addOnToken החדש מכתובת ה-URL של הבקשה.
InvalidAddOnToken
InvalidAddOnToken מציין שאסימון התוסף שהועבר בבקשה לא מורשה ליצור קובץ מצורף של תוסף במטלה.
פעולה אפשרית: השגיאה הזו יכולה להופיע אם המשתמש נכנס לתוסף עם חשבון שונה מהחשבון ב-Classroom. מנחים את המשתמש לצאת מכל החשבונות האחרים בדפדפן או לפתוח את Classroom בחלון פרטי ב-Chrome.
ProjectPermissionDenied
ProjectPermissionDenied מציין שהבקשה ניסתה לשנות משאב שמשויך לפרויקט אחר ב-Developer Console.
פעולה אפשרית: מציינים שהאפליקציה לא יכולה לשלוח את הבקשה המיועדת. רק פרויקט ב-Developer Console עם מזהה לקוח OAuth שיצר את המשאב יכול לבצע את הפעולה הזו.
UserIneligibleToUpdateGradingPeriodSettings
UserIneligibleToUpdateGradingPeriodSettings מציין שהבקשה ניסתה לשנות את ההגדרות של תקופת מתן הציונים בקורס שבו למשתמש ששלח את הבקשה או לבעלים של הקורס אין רישיון מתאים ל-Google Workspace for Education, או שהמשתמש ששלח את הבקשה הוא לא מורה בקורס או אדמין בדומיין.
פעולה אפשרית: מציינים שהאפליקציה לא יכולה לשלוח את הבקשה המיועדת לעדכון ההגדרות של תקופת מתן הציונים בגלל הרישיון או סטטוס התפקיד בקורס. אפשר להקצות רישיונות במסוף Google Admin.
HTTP 429: RESOURCE_EXHAUSTED
הקוד RESOURCE_EXHAUSTED מוחזר כשהפעולה המבוקשת לא מותרת כי נגמר המשאב, כמו מכסת נפח או קיבולת השרת. שגיאות מהסוג הזה בבקשות מתרחשות בדרך כלל כי האפליקציה שלך יצרה עומס מוגזם.
כדי להימנע מהפעלת המגבלות האלה ולשפר את המהימנות של האפליקציה, כדאי להשתמש במנגנוני ניסיון חוזר. מנגנוני ניסיון חוזר תקינים כוללים:
כדאי להשתמש בהשהיה מעריכית קטועה לפני ניסיון חוזר כדי לנסות שוב את הבקשה ולמקסם את התפוקה של הבקשות בסביבות בו-זמניות.
כדי להימנע מהתנגשויות, כדאי להשתמש בהשהיה מעריכית קטועה לפני ניסיון חוזר (truncated exponential backoff) עם תוספת של רעידות. הוספת ג'יטר יכולה לעזור לבקשות שלכם להצליח מהר יותר, כי היא מוסיפה עיכוב אקראי שמפזר את העליות החדות במספר הבקשות.
אם האפליקציה מחזירה שגיאות RESOURCE_EXHAUSTED בגלל מגבלות מכסה, צריך לשלוח בקשה להגדלת המכסה. מידע נוסף זמין במאמר במרכז העזרה בנושא מעקב אחרי מכסות API.
UserCourseJoinRateLimitReached
UserCourseJoinRateLimitReached מציין שהמשתמש כבר הצטרף למספר המקסימלי של קורסים שמותר להצטרף אליהם ביום אחד. מידע נוסף זמין בקטע 'הזמנות לקבוצה וגודל הקבוצה' במאמר הסבר על כללי המדיניות והמגבלות בקבוצות Google במרכז העזרה.
פעולה אפשרית: מתארים את הגורם לכישלון ומציעים למשתמש להמתין יום אחד לפני ההצטרפות לקורס.
HTTP 500: INTERNAL
INTERNAL מציין שקרתה שגיאה לא צפויה במהלך עיבוד הבקשה. בנוסף, לעיתים קרובות אפשר לפתור שגיאות בבקשות מסוג INTERNAL באמצעות השהיה מעריכית לפני ניסיון חוזר (exponential backoff) כדי לנסות שוב את הבקשה. אם שגיאת INTERNAL נמשכת, אפשר לדווח עליה באמצעות הגשת באג בכלי הציבורי למעקב אחרי בעיות ב-Classroom API.