المرفقات الخارجية والاستلام

هذه هي الجولة التفصيلية السابعة في إضافات Classroom. لسلسلة الجولات التفصيلية.

في هذه الجولة التفصيلية، يمكنك إضافة سلوك إلى تطبيق ويب من أجل إنشاء إضافة المرفقات من خارج Google Classroom استخدم هذا السلوك للسماح إنشاء مستخدِمين لمرفقات الإضافات من منتجك أو موقعك الإلكتروني الحالي هذا هو هي أيضًا إضافة رائعة إلى عملية دمج CourseWork لأنّك توجّه العملاء الحاليين الزيارات إلى تجربة المستخدم المحسّنة التي تقدّمها إضافتك بدون تغيير تدفقها. يتم عرض العملية المقترحة في قسم إنشاء مرفقات خارج صفحة دليل Classroom.

يمكنك أيضًا إضافة سلوك إلى الإضافة من أجل تعديل مهمة دراسية باستخدام إضافة. المرفقات آليًا. يمكنك تعديل أي مهمة: مرفقات الإضافات، بغض النظر عن المستخدم الذي أنشأ المهمة. هذا هو تسليم المهام الدراسية بعد إكمال الطالب النشاط، مع إرسال إشارة إلى المعلم بأن المهام الموكلة قد اكتملت عمل الطالب جاهزًا للمراجعة.

يمكنك توسيع الإصدار النهائي من الإضافة التي تتوافق مع نوع المحتوى أو المرفقات من نوع النشاط يتم استخدام المرفق الخاص بنوع المحتوى في هذا الدليل.

إضافة نطاق OAuth لإدارة المهمة

تأكَّد من أنّ طلبك يطلب النطاقات التالية:

  • https://www.googleapis.com/auth/classroom.addons.teacher
  • https://www.googleapis.com/auth/classroom.addons.student
  • https://www.googleapis.com/auth/classroom.coursework.students

لم تكن هناك حاجة إلى نطاق classroom.coursework.students في السابق، التي يتم استخدامها لإنشاء أو تعديل CourseWork مهمة. إضافة هذا النطاق إلى القوائم الخاصة بمشروعك على السحابة الإلكترونية حزمة تطوير البرامج (SDK) في Google Workspace Marketplace وشاشة موافقة OAuth رمز الخادم.

Python

  SCOPES = [
    "https://www.googleapis.com/auth/classroom.addons.teacher",
    "https://www.googleapis.com/auth/classroom.addons.student",
    "https://www.googleapis.com/auth/classroom.coursework.students",
  ]

إنشاء مهمة في Classroom

إضافة أزرار إلى صفحة ويب ليست ضمن iframe

يتيح التدفق الموضح في هذه الجولة التفصيلية للمستخدم إنشاء المهام والمرفقات في Google Classroom من منتج غير تابع لشركة Google ضِمن من المحتمل أن يكون هذا هو موقعك الإلكتروني أو تطبيقك الحالي. في هذا المثال، تحتاج إلى إنشاء صفحة ويب وهمية لتكون بمثابة موقع خارجي. تحتاج إلى زر أو رابط يؤدي، عند النقر عليه، إلى فتح مسار جديد يؤدي إلى تنفيذ الخطوات CourseWork تدفق لإنشاء مهمة جديدة.

كما ستحتاج أيضًا إلى إضافة زر أو رابط للسماح للمستخدم بتسجيل الدخول في حال: لم يكن لديك واحدة بالفعل. ستحتاج إلى بيانات اعتماد المستخدم لإجراء تطلب البيانات من واجهة برمجة التطبيقات، لذا عليهم إكمال عملية تأكيد الاتصال ببروتوكول OAuth 2.0. الاطلاع على معلومات تسجيل الدخول جولة تفصيلية للحصول على إرشادات محددة.

Python

يعدّل مثال Python المقدَّم مسار /index الذي تم تقديمه. في الخطوة التفصيلية الأولى.

<!-- /webapp/templates/index.html -->
<a href="clear-credentials.html">Logout</a>
<a href="start-auth-flow.html">Login</a>

<br>

<a href="create-coursework-assignment.html">Create a CourseWork Assignment</a>

أضِف نموذج HTML لتمثيل وجهة في موقعك الإلكتروني. هذه الصفحة المحتوى الذي سيتم إرفاقه بـ CourseWork مهمة معينة.

<!-- /webapp/templates/example-coursework-assignment.html -->
<h1>CourseWork assignment loaded!</h1>
<p>You've loaded a CourseWork assignment! It was created from an external web page.</p>

أنشئ ملفًا جديدًا لوحدة Python للتعامل مع المسارات المتعلقة بـ CourseWork. هذا هو coursework_routes.py في المثال المقدّم. إضافة ما يلي ثلاثة مسارات؛ سوف تملأ بعض المحتويات لاحقًا.

# /webapp/coursework_routes.py
@app.route("/create-coursework-assignment")
def create_coursework_assignment():
  """
  Completes the assignment creation flow.
  """

  # Check that the user is signed in. If not, perform the OAuth 2.0
  # authorization flow.
  credentials = get_credentials()

  if not credentials:
    return start_auth_flow("coursework_assignment_callback")

  # Construct the Google Classroom service.
  classroom_service = get_classroom_service()

  pass  # To be completed later.

@app.route("/example-coursework-assignment/<assignment_type>")
def example_coursework_assignment(assignment_type):
  """
  Renders the "example-coursework-assignment.html" template.
  """
  return flask.render_template(
      "example-coursework-assignment.html", assignment_type=assignment_type
  )

@app.route("/coursework-assignment-callback")
def coursework_assignment_callback():
  """
  Completes the OAuth 2.0 handshake and stores credentials in the session.
  This is identical to the callback introduced in the sign-in walkthrough,
  but redirects the user to the index page instead of the attachment
  discovery page.
  """
  flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
      CLIENT_SECRETS_FILE,
      scopes=SCOPES,
      state=flask.session["state"],
      redirect_uri=flask.url_for("coursework_assignment_callback", _external=True),
  )

  flow.fetch_token(authorization_response=flask.request.url)

  credentials = flow.credentials
  flask.session["credentials"] = session_credentials_to_dict(
      credentials
  )

  # Close the current window and redirect the user to the index page.
  return flask.render_template("close-me.html", redirect_destination="index")

التحقّق من أهلية المستخدم لإنشاء إضافة

هناك العديد من المتطلبات الأساسية التي يجب على المستخدم استيفاؤها قبل إنشاء المرفقات والإضافات نيابةً عنهم. ولتسهيل الأمر، توفر Google courses.checkAddOnCreationEligibility لتحديد ما إذا كان المستخدم يلبي هذه المتطلبات الأساسية. يُشار إلى المستخدم الذي يستوفي المتطلبات الأساسية أن يكون مستخدمًا مؤهلاً

أضِف التحقّق من الأهلية إلى عملية تنفيذ مسار الإنشاء "CourseWork". اختبِر بعد ذلك الحقل isCreateAttachmentEligible في الردّ. لعناصر مؤهَّلة للمستخدمين، يجب اتّباع المنطق لإنشاء مهمة دراسية المرفق. أو يمكنك إنشاء رابط المادّة: يجب معرفة رقم تعريف الدورة التدريبية في التي يريد المستخدم إنشاء واجب لها. عادةً، سيُطلب من المستخدم لتحديد الدورة التدريبية التي يجب استخدامها. للتبسيط، نستخدم قيمة غير قابلة للتغيير في البرنامج هذا المثال.

Python

# /webapp/coursework_routes.py
@app.route("/create-coursework-assignment")
def create_coursework_assignment():
  """
  Completes the assignment creation flow.
  """
  # ... Check that the user is signed in and get the Classroom service ...

  # The ID of the course to which the assignment will be added.
  course_id = 1234567890  # TODO(developer) Replace with an actual course ID.

  # Check whether the user can create add-on attachments.
  eligibility_response = (
      classroom_service.courses()
      .checkAddOnCreationEligibility(courseId=course_id)
      .execute()
  )
  is_create_attachment_eligible = eligibility_response.get("isCreateAttachmentEligible")

  if is_create_attachment_eligible:
    # See the "Create an assignment with add-on attachment for eligible users" section for implementation.
  if not is_create_attachment_eligible:
    # See the "Create a Link Material" section for implementation.

إنشاء مهمة مع إرفاق إضافة للمستخدمين المؤهَّلين

إذا كان المستخدم مؤهَّلاً لإنشاء مرفقات الإضافات، عليك إجراء ما يلي:

  1. إرسال طلب بيانات من واجهة برمجة التطبيقات لإنشاء مهمة courseWork في Google Classroom بدون مرفقات.
  2. استخرِج id للمهمة الجديدة التي تم إنشاؤها.
  3. يمكنك إنشاء CourseWork AddOnAttachment جديد.
  4. إرسال طلب لإنشاء مرفق إضافة على الملف الذي تم إنشاؤه حديثًا مهمة دراسية في Google Classroom.

Python

# /webapp/coursework_routes.py
if is_create_attachment_eligible:
  # Create an assignment.
  coursework = {
      "title": "My CourseWork Assignment with Add-on Attachment",
      "description": "Created using the Classroom CourseWork API.",
      "workType": "ASSIGNMENT",
      "state": "DRAFT",  # Set to 'PUBLISHED' to assign to students.
  }

  # Issue a request to create the assignment.
  create_assignment_response = (
      classroom_service.courses()
      .courseWork()
      .create(courseId=course_id, body=coursework)
      .execute()
  )

  # Create an add-on attachment that links to the selected content and
  # associate it with the new assignment.
  content_url = flask.url_for(
      "example_coursework_assignment",
      assignment_type="add-on-attachment",
      _scheme="https",
      _external=True,
  )

  # Construct an AddOnAttachment instance.
  attachment = {
      "teacherViewUri": {"uri": content_url},
      "studentViewUri": {"uri": content_url},
      "title": f'Test Attachment for Assignment {create_assignment_response.get("id")}',
  }

  # Issue a request to create the attachment.
  add_on_attachment_response = (
      classroom_service.courses()
      .courseWork()
      .addOnAttachments()
      .create(
          courseId=course_id,
          itemId=create_assignment_response.get("id"),  # ID of the new assignment.
          body=attachment,
      )
      .execute()
  )

إذا كان المستخدم غير مؤهَّل لإنشاء مرفقات الإضافات، يمكنك إنشاء رابط. بدلاً من ذلك، يمكنك تنفيذ ما يلي:

Python

if not is_create_attachment_eligible:
    coursework = {
        "title": "My CourseWork Assignment with Link Material",
        "description": "Created using the Classroom CourseWork API.",
        "workType": "ASSIGNMENT",
        "state": "DRAFT",  # Set to 'PUBLISHED' to assign to students.
        # Specify the URL for your content as a Link Material.
        "materials": [
            {
                "link": {
                    "url": flask.url_for(
                        "example_coursework_assignment",
                        assignment_type="link-material",
                        _scheme="https",
                        _external=True,
                    )
                }
            }
        ],
    }

    # Issue a request to create the assignment.
    assignment_response = (
        classroom_service.courses()
        .courseWork()
        .create(courseId=course_id, body=coursework)
        .execute()
    )

تعديل مهمة سبق أن تم إنشاؤها

يمكنك الوصول إلى أي صف من Google Classroom أو تعديله أو تسليمه أو استرداده أو إرجاعه. عنصر ساحة المشاركات الذي يتضمن مرفقًا واحدًا على الأقل من مرفقات الإضافات، بغض النظر عن المستخدم إنشاء عنصر البث. عناصر ساحة المشاركات هي أي Announcement وCourseWork أو CourseWorkMaterial.

لتوضيح ذلك، عليك إضافة مسار لتعديل عنصر معيّن للبث. استخدام هذه المسودة طريقة للتحقق من إمكانية الوصول إلى عناصر البث التي أنشأتها وتعديلها باستخدام واجهة برمجة التطبيقات والتي أنشأها معلِّم من خلال واجهة مستخدم Google Classroom.

إضافة رابط أو زر آخر إلى صفحة الويب التي عدّلتها أول مرة فيها هذه الجولة التفصيلية. من المفترض أن يتم فتح مسار جديد لتعديل CourseWork. مهمة معينة.

Python

يعدِّل مثال Python المقدَّم مسار /index الذي تم تعديله. في وقت سابق من هذه الجولة التفصيلية.

<!-- /webapp/templates/index.html -->
<a href="modify-coursework-assignment.html">Create a CourseWork Assignment</a>

إنشاء مسار جديد للتعامل مع المسارات المتعلقة بـ CourseWork. هذا في ملف coursework_routes.py في المثال المقدّم.

# Check that the user is signed in.
credentials = get_credentials()

if not credentials:
  return start_auth_flow("coursework_assignment_callback")

# Get the Google Classroom service.
classroom_service = get_classroom_service()

# The ID of the course to which the assignment will be added.
# Ordinarily, you'll prompt the user to specify which course to use. For
# simplicity, we use a hard-coded value in this example.
course_id = 1234567890  # TODO(developer) Replace with an actual course ID.
assignment_id = 1234567890  # TODO(developer) Replace with an actual assignment ID.

# Retrieve details about the CourseWork assignment.
get_coursework_response = (
    classroom_service.courses()
    .courseWork()
    .get(courseId=course_id, id=assignment_id)
    .execute()
)

# Alter the current title.
assignment_title = f"{get_coursework_response.get('title')} (Modified by API request)"

# Issue a request to modify the assignment.
modify_coursework_response = (
    classroom_service.courses()
    .courseWork()
    .patch(
        courseId=course_id,
        id=assignment_id,
        updateMask="title",
        body={"title": assignment_title},
    )
    .execute()
)

اختبار الإضافة

لتبسيط الأمور، تستخدم الأمثلة المقدمة دورات تدريبية غير قابلة للتغيير محددات التعيينات. يمكنك الحصول على هذه المعرّفات من خلال تقديم طلبات باستخدام بيانات اعتماد المعلِّمين إلى الطريقتَين get وlist من courses courseWork مرجع ويتم عرضها أيضًا في الرد عند الإنشاء مهمتان (courseWork)

شغِّل الخادم، ثم انتقِل إلى صفحة الفهرس وسجِّل الدخول كمستخدم كمعلّم. بدون استخدام الإصدار Google Workspace for Education Teaching and Learning Upgrade ترخيص التعلّم أو ترخيص Plus. يمكنك تبديل حالة ترخيص المستخدم من صفحة النطاق التجريبي وحدة تحكّم المشرف. انقر على إنشاء مهمة CourseWork. ثم فتح واجهة مستخدم Google Classroom والتحقق من أن إحدى المهام الدراسية باستخدام تم إنشاء مرفق مادة الرابط. يجب أن يعرض المرفق عنوان صفحة الويب المرتبطة وعنوان URL.

اختبار إنشاء مرفقات الإضافة

ارجِع إلى صفحة الفهرس وسجِّل الدخول بصفتك معلّمًا باستخدام Google Workspace for Education Teaching &amp; ترخيص التعلّم أو ترخيص Plus. انقر على إنشاء مهمة CourseWork ثم فتح واجهة مستخدم Google Classroom والتحقق من أن إحدى المهام الدراسية مع تم إنشاء مرفق إضافة. يجب أن يعرض المرفق اسم وتطبيق الإضافة والعنوان المحدد في التعليمات البرمجية.

اختبار تعديل المهمة

ارجع إلى صفحة الفهرس وتأكَّد من تسجيل الدخول كمستخدم معلّم. من خلال قسم التدريس ترخيص التعلّم أو ترخيص Plus. انقر على زر تعديل CourseWork مهمة، ثم الرجوع إلى واجهة مستخدم Google Classroom والتأكّد من تغيير عنوان المهمة الدراسية.

تهانينا! لقد أكملت سلسلة الجولات التفصيلية.