توضّح هذه الصفحة بعض رسائل الخطأ والمشاكل الشائعة في 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 إلى أنّه لا يمكن إضافة المستخدم كمالك للدورة التدريبية لأنّه ليس مدرّسًا مشاركًا.
الإجراء المحتمَل: يجب وصف سبب تعذُّر التنفيذ. إذا لم يكن المستخدم الذي يقدّم الطلب مشرفًا، اقترح عليه أن يرسل أولاً دعوة إلى المستخدم ليصبح معلّمًا في الدورة التدريبية قبل تعديل المالك. إذا كان المستخدم الذي يقدّم الطلب مشرفًا، ننصحه أولاً بإضافة المستخدم كمعلّم مشارك في الدورة التدريبية.
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. بالنسبة إلى المتصلين الذين لديهم ترخيص Google Workspace for Education Fundamentals، لا يمكن إضافة حسابات خارج Google Workspace for Education أو دعوتها مباشرةً إلى دورة تدريبية.
الإجراء المحتمل: صف سبب الخطأ واقترح على المتصل أحد الخيارات التالية:
- اقترح على المتصل مشاركة رابط دعوة إلى الدورة أو رمز صف يدويًا. يُرجى العِلم أنّ ذلك يتطلب من المشرف ضبط إعدادات الدعوات من خارج النطاق. اطّلِع على دعوة الطلاب إلى صفك لمعرفة المزيد.
- اقترح على المتصل الترقية إلى ترخيص Google Workspace for Education مدفوع، لأنّ هذا القيد ينطبق فقط على ترخيص Fundamentals.
ClassroomApiDisabled
يشير الرمز ClassroomApiDisabled إلى أنّ المستخدم الذي يرسل الطلب ليس لديه إذن بالوصول إلى واجهة برمجة التطبيقات Classroom API.
الإجراء المحتمل: توجيه المستخدم إلى التعليمات حول تفعيل إذن الوصول إلى بيانات Classroom يُرجى الاطّلاع أيضًا على ClassroomDisabled، لأنّ المستخدم قد يستخدم الحساب الخاطئ.
ClassroomDisabled
يشير الرمز ClassroomDisabled إلى أنّ المستخدم الذي يقدّم الطلب ليس لديه إذن بالوصول إلى Classroom.
الإجراء المحتمل: توجيه المستخدم إلى التعليمات حول تفعيل إذن الوصول إلى Classroom قد يكون المستخدم يستعمل الحساب الخاطئ، لذا يمكنك أيضًا تقديم رابط إلى مقالة استخدام حسابات متعددة ليتمكّن المستخدم من اختيار الحساب الصحيح.
ExpiredAddOnToken
يشير الرمز ExpiredAddOnToken إلى أنّ الرمز المميز للإضافة المستخدَم لإجراء طلبات إلى واجهة برمجة التطبيقات قد انتهت صلاحيته.
الإجراء المحتمل: اطلب من المستخدم إعادة تحميل الصفحة أو تسجيل الدخول إلى الإضافة مرة أخرى حتى تتمكّن من الحصول على مَعلمة طلب البحث الجديدة addOnToken من عنوان URL للطلب.
InvalidAddOnToken
تشير الحالة InvalidAddOnToken إلى أنّ رمز الإضافة الذي تم تمريره في الطلب غير مصرح له بإنشاء مرفق إضافة في المهمة.
الإجراء المحتمل: يمكن أن يظهر هذا الخطأ إذا سجّل المستخدم الدخول إلى الإضافة باستخدام حساب مختلف عن الحساب المستخدَم في Classroom. اطلب من المستخدم تسجيل الخروج من جميع الحسابات الأخرى في المتصفّح أو فتح Classroom في نافذة تصفّح متخفي في Chrome.
ProjectPermissionDenied
يشير الرمز ProjectPermissionDenied إلى أنّ الطلب حاول تعديل مورد مرتبط بمشروع مختلف في Developer Console.
الإجراء المحتمل: يجب الإشارة إلى أنّ تطبيقك لا يمكنه تقديم الطلب المقصود. لا يمكن إجراء هذا التغيير إلا من خلال مشروع Developer Console الخاص بمعرّف عميل OAuth الذي أنشأ المورد.
UserIneligibleToUpdateGradingPeriodSettings
يشير الرمز UserIneligibleToUpdateGradingPeriodSettings إلى أنّ الطلب حاول تعديل إعدادات فترة التقييم في دورة تدريبية لا يملك فيها المستخدم الذي أرسل الطلب أو مالك الدورة التدريبية ترخيص Google Workspace for Education المناسب، أو أنّ المستخدم الذي أرسل الطلب ليس معلّمًا في الدورة التدريبية أو مشرف نطاق.
الإجراء المحتمل: يجب الإشارة إلى أنّ تطبيقك لا يمكنه تقديم الطلب المقصود لتعديل إعدادات فترة التقييم بسبب حالة الترخيص أو دور الدورة التدريبية. يمكن منح التراخيص في "وحدة تحكّم المشرف في Google".
HTTP 429: RESOURCE_EXHAUSTED
يتم عرض الرمز RESOURCE_EXHAUSTED عندما لا يُسمح بالإجراء المطلوب
لأنّ بعض الموارد، مثل الحصة أو سعة الخادم، قد استُنفدت. تحدث هذه الأنواع من أخطاء الطلبات عادةً لأنّ تطبيقك قدّم حملاً زائدًا.
لتجنُّب تجاوز هذه الحدود وزيادة موثوقية تطبيقك، استخدِم آليات إعادة المحاولة. تشمل آليات إعادة المحاولة الصالحة ما يلي:
استخدِم خوارزمية الرقود الأسي الثنائي المختصرة لإعادة محاولة إرسال الطلب وتحقيق الحد الأقصى من معدل نقل البيانات للطلبات في البيئات المتزامنة.
لتجنُّب حدوث تعارضات، ننصحك باستخدام خوارزمية الرقود الأسي الثنائي المختصر مع التشويش. يمكن أن يساعد إدخال التشويش في إنجاح طلباتك بشكل أسرع من خلال إدخال تأخير عشوائي يؤدي إلى توزيع الارتفاعات المفاجئة في الطلبات.
إذا عرض تطبيقك أخطاء RESOURCE_EXHAUSTED بسبب قيود الحصة، أرسِل طلبًا لزيادة الحصة. لمزيد من المعلومات، يُرجى الرجوع إلى مقالة مركز المساعدة حول
حصص Monitor API.
UserCourseJoinRateLimitReached
يشير الرمز UserCourseJoinRateLimitReached إلى أنّ المستخدم قد انضمّ إلى الحد الأقصى المسموح به من الدورات التدريبية في يوم واحد. لمزيد من المعلومات، يُرجى الرجوع إلى قسم "دعوات المجموعة وحجمها" في مقالة فهم سياسات "مجموعات Google" وحدودها في مركز المساعدة.
الإجراء المحتمل: اشرح سبب الخطأ واقترح على المستخدم الانتظار لمدة يوم واحد قبل الانضمام إلى الدورة التدريبية.
HTTP 500: INTERNAL
يشير الرمز INTERNAL إلى حدوث خطأ غير متوقّع أثناء معالجة الطلب. يمكن أيضًا حلّ أخطاء طلبات INTERNAL في كثير من الأحيان باستخدام التراجع الدليلي لإعادة محاولة الطلب. إذا استمر ظهور الخطأ INTERNAL، يمكن الإبلاغ عنه من خلال تسجيل خطأ في أداة تتبُّع المشاكل العامة في Classroom API.