رسائل الخطأ الشائعة في 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() لإدارة قوائم المعلّمين نيابةً عن المستخدم.

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 إلى أنّ صلاحية الرمز المميز الخاص بالإضافة والمستخدَم لإجراء طلبات إلى واجهة برمجة التطبيقات قد انتهت.

الإجراء المحتمل: اطلب من المستخدم إعادة تحميل الصفحة أو تسجيل الدخول إلى الإضافة مرة أخرى حتى تتمكّن من الحصول على مَعلمة طلب البحث الجديدة 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.