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

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.