پیوست های خارجی & نوبت در

این هفتمین بررسی از مجموعه مروری بر افزونه‌های 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 استفاده می‌شود. این محدوده را به فهرست دامنه‌های موجود در Google Workspace Marketplace SDK پروژه Cloud خود، صفحه رضایت OAuth و کد سرور خود اضافه کنید.

پایتون

  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 ایجاد کنید

دکمه ها را به یک صفحه وب بدون iframed اضافه کنید

جریانی که در این توضیح توضیح داده شده است به کاربر امکان می‌دهد تکالیف و پیوست‌های Google Classroom را از یک محصول غیر Google ایجاد کند. در عمل این احتمالاً وب سایت یا برنامه موجود شماست. برای این مثال، شما باید یک صفحه وب ساختگی ایجاد کنید تا به عنوان یک سایت خارجی عمل کند. شما به دکمه یا پیوندی نیاز دارید که با کلیک روی آن، مسیر جدیدی باز شود که جریان CourseWork پیشنهادی را برای ایجاد یک تکلیف جدید انجام دهد.

همچنین باید دکمه یا پیوندی اضافه کنید تا به کاربر اجازه ورود به سیستم را بدهد اگر قبلاً آن را ندارید. برای انجام درخواست های بعدی API به اعتبار کاربری نیاز دارید، بنابراین آنها باید دست دادن OAuth 2.0 را تکمیل کنند. برای راهنمایی خاص ، راهنمای ورود به سیستم را ببینید.

پایتون

مثال پایتون ارائه شده مسیر /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>

یک فایل ماژول پایتون جدید برای مدیریت مسیرهای مربوط به 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 روش userProfiles.checkUserCapability را برای تعیین اینکه آیا کاربر این پیش نیازها را برآورده می کند ارائه می دهد. کاربری که دارای پیش نیاز باشد، کاربر واجد شرایط نامیده می شود.

بررسی واجد شرایط بودن را به پیاده سازی مسیر ایجاد CourseWork اضافه کنید. سپس فیلد allowed را در پاسخ تست کنید. برای کاربران واجد شرایط، منطق را دنبال کنید تا یک تکلیف با پیوست افزودنی ایجاد کنید. در غیر این صورت، یک Link Material ایجاد کنید. شما باید شناسه دوره ای را بدانید که کاربر می خواهد در آن یک تکلیف ایجاد کند. معمولاً از کاربر می‌خواهید که مشخص کند از کدام دوره استفاده کند. برای سادگی، در این مثال از یک مقدار سخت کد شده استفاده می کنیم.

پایتون

# /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 ...

  # Check whether the user can create add-on attachments.
  eligibility_response = (
      classroom_service.userProfiles()
      .checkUserCapability(
        userId="me",
        capability="CREATE_ADD_ON_ATTACHMENT",
        # The previewVersion is necessary while the method is available in the
        # Workspace Developer Preview Program.
        previewVersion="V1_20240930_PREVIEW",
      ).execute()
  )
  is_create_attachment_eligible = eligibility_response.get("allowed")

  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. یک درخواست API برای ایجاد یک تکلیف courseWork در Google Classroom بدون پیوست ارسال کنید.
  2. id تکلیف تازه ایجاد شده را استخراج کنید.
  3. یک AddOnAttachment CourseWork جدید بسازید.
  4. درخواستی برای ایجاد یک پیوست افزودنی در تکلیف جدید ایجاد شده در Google Classroom ارسال کنید.

پایتون

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

# /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()
  )

اگر کاربر واجد شرایط ایجاد پیوست‌های افزودنی نیست ، در عوض با انجام کارهای زیر، یک ماده پیوند ایجاد کنید:

پایتون

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

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 .

برای نشان دادن این موضوع، یک مسیر برای اصلاح یک مورد جریان داده شده اضافه می‌کنید. از این روش برای تأیید اینکه می‌توانید به موارد جریانی که توسط شما با استفاده از API ایجاد شده و توسط یک معلم از طریق رابط کاربری Google Classroom ایجاد شده است دسترسی داشته باشید و آن‌ها را تغییر دهید.

یک پیوند یا دکمه دیگر به صفحه وبی که برای اولین بار در این راهنما ویرایش کردید اضافه کنید. باید مسیر جدیدی را برای اصلاح یک تکلیف CourseWork باز کند.

پایتون

مثال ارائه شده پایتون مسیر /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 & Learning یا Plus وارد شوید. می‌توانید وضعیت مجوز کاربر را از کنسول مدیریت دامنه آزمایشی خود تغییر دهید. روی دکمه Create a CourseWork Assignment کلیک کنید ، سپس رابط کاربری Google Classroom را باز کنید و تأیید کنید که یک تکلیف با پیوست ماده پیوند ایجاد شده است. پیوست باید عنوان صفحه وب مرتبط و یک URL را نشان دهد.

ایجاد پیوست افزودنی را آزمایش کنید

به صفحه فهرست بازگردید و به عنوان کاربر معلم با مجوز Google Workspace for Education Teaching & Learning یا Plus وارد شوید. روی دکمه Create a CourseWork Assignment کلیک کنید، سپس Google Classroom UI را باز کنید و بررسی کنید که یک تکلیف با یک پیوست افزودنی ایجاد شده است. پیوست باید نام برنامه افزودنی و عنوان مشخص شده در کد شما را نشان دهد.

اصلاح تکلیف آزمون

به صفحه فهرست بازگردید و مطمئن شوید که به عنوان یک کاربر معلم با مجوز Teaching & Learning یا Plus وارد سیستم شده اید. روی دکمه Modify a CourseWork Assignment کلیک کنید، سپس به رابط کاربری Google Classroom برگردید و بررسی کنید که عنوان تکلیف تغییر کرده است.

تبریک می گویم! شما مجموعه راهنما را تکمیل کردید.