הודעות שגיאה נפוצות ב-Google Classroom API

בדף הזה מפורטות כמה הודעות שגיאה נפוצות, בעיות ופעולות אפשריות ב-Google Classroom API לסוגי השגיאות הבאים:

‫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 מציין שאי אפשר להוסיף את המשתמש כבעלים של הקורס כי הוא לא מוגדר כמורה שותף.

פעולה אפשרית: מתארים את הסיבה לכשל. אם המשתמש ששולח את הבקשה הוא לא אדמין, מציעים לו לשלוח קודם למשתמש הזמנה להיות מורה בקורס לפני עדכון הבעלים. אם המשתמש ששולח את הבקשה הוא אדמין, מציעים לו קודם להוסיף את המשתמש כחבר צוות ההוראה בקורס.

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 מציין שאי אפשר להוסיף משתמש ישירות לקורס. השגיאה הזו מתרחשת כשמנהל דומיין מנסה להוסיף משתמש לקורס, אבל למשתמש אין כתובת אימייל או שהוא לא שייך לדומיין.

פעולה אפשרית: מתארים את הסיבה לכישלון ומציעים לאדמין של הדומיין לבדוק שחשבון המשתמש קיים ושייך לדומיין של האדמין של הקורס.

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) כדי לנסות שוב את הבקשה ולמקסם את קצב העברת הנתונים של הבקשות בסביבות מקבילות.

  • כדי להימנע מהתנגשויות, מומלץ להשתמש בהשהיה מעריכית קטועה לפני ניסיון חוזר (truncated exponential backoff) עם תוספת של רעידות. הוספת ג'יטר יכולה לעזור לבקשות שלכם להצליח מהר יותר, כי היא מוסיפה עיכוב אקראי שמפזר את העליות הפתאומיות במספר הבקשות.

אם האפליקציה מחזירה שגיאות RESOURCE_EXHAUSTED בגלל מגבלות מכסה, צריך לשלוח בקשה להגדלת המכסה. מידע נוסף זמין במאמר במרכז העזרה בנושא מעקב אחרי מכסות של API.

UserCourseJoinRateLimitReached

UserCourseJoinRateLimitReached מציין שהמשתמש כבר הצטרף למספר המקסימלי של קורסים שמותר להצטרף אליהם ביום אחד. מידע נוסף זמין בקטע 'הזמנות לקבוצה וגודל הקבוצה' במאמר הסבר על כללי המדיניות והמגבלות בקבוצות Google במרכז העזרה.

פעולה אפשרית: לציין את הסיבה לכישלון ולהציע למשתמש להמתין יום אחד לפני ההצטרפות לקורס.

HTTP 500: INTERNAL

INTERNAL מציין שקרתה שגיאה לא צפויה במהלך עיבוד הבקשה. בנוסף, לעיתים קרובות אפשר לפתור שגיאות בבקשות מסוג INTERNAL באמצעות השהיה מעריכית לפני ניסיון חוזר (exponential backoff) כדי לנסות שוב את הבקשה. אם שגיאת INTERNAL נמשכת, אפשר לדווח עליה באמצעות הגשת באג בכלי הציבורי למעקב אחרי בעיות ב-Classroom API.