Adjuntos externos y entrega

Esta es la séptima explicación en los complementos de Classroom .

En esta explicación, agregarás comportamiento a una aplicación web para crear un complemento archivos adjuntos desde fuera de Google Classroom. Usa este comportamiento para que tus los usuarios pueden crear archivos adjuntos de complementos desde su producto o sitio web existentes. Este es También es una gran adición a una integración de CourseWork porque diriges tráfico a la experiencia del usuario mejorada que ofrece tu complemento sin cambiar su flujo. El proceso sugerido se presenta en Crear archivos adjuntos fuera de la página de la guía de Classroom.

También puedes agregar un comportamiento a tu complemento para modificar una tarea con un complemento. de forma programática. Puedes modificar cualquier asignación que tenga uno de los archivos adjuntos de complementos, sin importar quién haya creado la tarea. Este es especialmente útil para entregar las tareas después de que un estudiante ha completado una actividad, lo que le indica al profesor que las tareas asignadas están completas y que el trabajo del estudiante está listo para su revisión.

Extiende la versión final de tu complemento que admite content-type o archivos adjuntos de tipo de actividad. En esta guía, se usa el archivo adjunto de tipo de contenido.

Agrega el permiso de OAuth para la administración de tareas

Asegúrate de que tu aplicación solicite los siguientes alcances:

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

El permiso classroom.coursework.students no era necesario anteriormente y, que se usa para crear o modificar asignaciones CourseWork. Agregar este permiso a las listas de permisos en la API de Cloud SDK de Google Workspace Marketplace, la pantalla de consentimiento de OAuth y tu el código del servidor.

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",
  ]

Cómo crear una tarea en Classroom

Cómo agregar botones a una página web sin iframe

El flujo descrito en esta explicación permite que un usuario cree Tareas y archivos adjuntos de Google Classroom desde un producto que no es de Google. En es probable que este sea tu sitio web o tu aplicación existente. En este ejemplo, debes crear una página web simulada para que actúe como sitio externo. Necesitas un botón o un vínculo que, al hacer clic en él, abre una nueva ruta que realiza los pasos CourseWork para crear una tarea nueva.

También deberás agregar un botón o vínculo para permitir que el usuario acceda si todavía no tienen uno. Necesitarás credenciales de usuario para realizar las siguientes solicitudes a la API, por lo que deben completar el protocolo de enlace de OAuth 2.0. Consulta la página de inicio de sesión explicación para obtener orientación específica.

Python

El ejemplo proporcionado de Python modifica la ruta /index que se introdujo. en el primer paso de la explicación.

<!-- /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>

Agrega una plantilla HTML para representar un destino en tu sitio web. Esta página representará el contenido que se adjuntará a tu CourseWork asignación.

<!-- /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>

Crea un nuevo archivo de módulo de Python para controlar las rutas relacionadas con CourseWork. En el ejemplo que proporcionamos, es coursework_routes.py. Agrega lo siguiente tres rutas; ten en cuenta que completarás algunos de los contenidos más adelante.

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

Cómo verificar la elegibilidad de un usuario para crear complementos

Existen varios requisitos previos que un usuario debe cumplir para poder crear los archivos adjuntos de complementos en su nombre. Para tu comodidad, Google proporciona la Método courses.checkAddOnCreationEligibility para determinar si un usuario cumpla con estos requisitos previos. Un usuario que cumple con los requisitos previos se conoce como un usuario apto.

Agrega la verificación de elegibilidad a la implementación de la ruta de creación de CourseWork. Luego, prueba el campo isCreateAttachmentEligible en la respuesta. Apto usuarios, sigue la lógica para crear una asignación con un complemento adjunto. De lo contrario, crea un Vínculo Material. Deberás saber el ID del curso en en la que el usuario desea crear una tarea. Por lo general, le pedirás al usuario para especificar qué curso usar. Para simplificar, usamos un valor hard-coded en este ejemplo.

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.

Cómo crear una tarea con un archivo adjunto de complemento para los usuarios aptos

Si el usuario es apto para crear archivos adjuntos de complementos, haga lo siguiente:

  1. Envía una solicitud a la API para crear una asignación courseWork en Google Classroom sin archivos adjuntos
  2. Extrae el id de la asignación recién creada.
  3. Crea un nuevo CourseWork AddOnAttachment.
  4. Enviar una solicitud para crear un archivo adjunto de complemento en el nuevo archivo adjunto tarea en 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()
  )

Si el usuario no es apto para crear archivos adjuntos de complementos, crea un vínculo. Material, en cambio, haz lo siguiente:

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

Cómo modificar una tarea ya creada

Puedes acceder a los servicios de Google Classroom, modificarlos, entregarlos, reclamarlos o devolverlos elemento de novedades que tenga al menos uno de los archivos adjuntos de tu complemento, sin importar quién creó el elemento de la secuencia. Los elementos de las novedades pueden ser Announcement o CourseWork asignación o CourseWorkMaterial.

Para demostrarlo, agregarás una ruta para modificar un elemento de flujo determinado. Usar esta para verificar que puedes acceder a los elementos de las novedades que creaste y modificarlos con la API y que creó un profesor a través de la IU de Google Classroom.

Agrega un vínculo o botón más a la página web que editaste por primera vez en en esta explicación. Se debería abrir una ruta nueva para modificar un CourseWork. asignación.

Python

El ejemplo de Python proporcionado modifica la ruta /index que se modificó. anteriormente en esta explicación.

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

Crea una ruta nueva para administrar las rutas relacionadas con CourseWork. Este se encuentra en coursework_routes.py en el ejemplo proporcionado.

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

Prueba el complemento

Para evitar complicaciones, los ejemplos proporcionados usan cursos hard-coded y identificadores de asignaciones. Puedes obtener estos identificadores si haces solicitudes con credenciales de profesor para los métodos get y list de courses y courseWork. También se devuelven en la respuesta cuando se crea courseWork tareas.

Ejecuta tu servidor. Luego, navega a tu página de índice y accede como usuario profesor. sin un modelo de Teaching & Licencias Learning o Plus. Puedes activar o desactivar un estado de la licencia del usuario de tu dominio de prueba Consola del administrador. Haz clic en Crear una tarea de CourseWork. Luego, abre la IU de Google Classroom y verifica que la tarea tenga una Se creó el archivo adjunto de Material del vínculo. El archivo adjunto debe mostrar el título de la página web vinculada y una URL.

Probar la creación de archivos adjuntos de complementos

Regresa a la página de índice y accede como usuario profesor con un curso de enseñanza de Google Workspace for Education &amp; Licencias Learning o Plus. Haz clic en el botón Create a CourseWork Assignment luego, abre la IU de Google Classroom y verifica que una tarea con se creó un archivo adjunto del complemento. El archivo adjunto debe mostrar el nombre de tu del complemento y el título especificado en tu código.

Modificación de una tarea de prueba

Regresa a la página de índice y asegúrate de que accediste como usuario profesor con un curso de enseñanza y Licencias Learning o Plus. Haz clic en el botón Modify a CourseWork Tarea y, luego, regresa a la IU de Google Classroom y verifica que se modificó el título de la tarea.

¡Felicitaciones! Completaste la serie de explicaciones.