在 Google 课堂之外创建附件

本指南介绍了如何在网站或应用中创建插件附件。这些互动方式类似于使用 CourseWork API 端点创建作业。实现此历程,让用户能够通过您的网站或应用创建插件附件。

工作流

概括来讲,附件创建过程遵循以下顺序:

  1. 教师用户打开您的网站或应用,选择一段要分配给学生的内容。
  2. 检查用户是否可以创建插件附件
  3. 如果用户无法创建插件附件,请创建 CourseWork 作业,并将所选内容的网址作为链接资料。
  4. 如果用户可以创建插件附件,请执行以下操作:
    1. 创建作业。
    2. 创建链接到所选内容的插件附件,并将其与新分配相关联。
  5. 通知教师该作业已成功创建。

以下各部分介绍了每项操作。

检查用户是否可以创建插件附件

您可以代表符合条件的用户创建插件附件。符合条件的用户是指您正尝试在其中创建 CourseWork 作业的课程中的教师,并且已获得教与学或教育 Plus 版 Google Workspace 教育版许可。

首先,确定用户是否可以在给定的 Course 中创建插件。向 courses.checkAddOnCreationEligibility 端点发出请求,包括课程 ID。

Python

eligibility_response = (
  classroom_service.courses()
  .checkAddOnCreationEligibility(courseId=course_id)
  .execute()
)
is_create_attachment_eligible = (
  eligibility_response.get('isCreateAttachmentEligible')
)
print(f'User eligibility for course {eligibility_response.get("courseId")}'
      f': {is_create_attachment_eligible}.')

如果用户符合条件,响应会包含设置为 true 的布尔值 isCreateAttachmentEligible。如果用户不符合条件,响应将不会返回 isCreateAttachmentEligible 布尔值。

根据用户的资格条件进行路由

资格条件决定了您是否可以为用户创建插件附件。

用户不符合条件

如果用户无法创建插件附件,请创建新的 CourseWork 分配,并将用户选择的内容网址用作 Link

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.
    'maxPoints': 100,
    'materials': [
      {'link': {'url': my_content_url}}
    ]
  }

  assignment = (
    service.courses()
    .courseWork()
    .create(courseId=course_id, body=coursework)
    .execute()
  )

  print(
    f'Link Material assignment created with ID: {assignment.get("id")}'
  )

响应包含所请求课程中的作业(附加了内容)。用户可以点击 Link,在新标签页中打开网站中的内容。

包含链接资料的 CourseWork 作业草稿

图 1. 教师视图,包含包含链接资料的 CourseWork 作业草稿。

符合条件的用户

如果用户可以创建插件附件,请执行以下操作。

  1. 创建一项不包含任何附件的新“CourseWork”作业。
  2. 创建插件附件。

Python

if is_create_attachment_eligible:
  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.
    'maxPoints': 100,
  }

  assignment = (
    classroom_service.courses()
    .courseWork()
    .create(courseId=course_id, body=coursework)
    .execute()
  )

  print(
    f'Empty assignment created with ID: {assignment.get("id")}'
  )

  attachment = {
    'teacherViewUri': {'uri': teacher_view_url},
    'studentViewUri': {'uri': student_view_url},
    'studentWorkReviewUri': {'uri': grade_student_work_url},
    'title': f'Test Attachment {test_label}',
  }

  add_on_attachment = (
    service.courses()
    .courseWork()
    .addOnAttachments()
    .create(
      courseId=course_id,
      itemId=assignment.get("id"),  # ID of the new assignment.
      body=attachment,
    )
    .execute()
  )

  print(
    f'Add-on attachment created with ID: {add_on_attachment.get("id")}'
  )

该插件在 Google 课堂中显示为附件卡片。请求中指定的网址在每个 View 的相应 iframe 中打开。