קבצים מצורפים חיצוניים והגשה

זהו המדריך השביעי בסדרת המדריכים שלנו על תוספים ל-Classroom.

בהדרכה המפורטת הזו, מוסיפים התנהגות לאפליקציית אינטרנט כדי ליצור קבצים מצורפים של תוספים מחוץ ל-Google Classroom. תוכלו להשתמש בהתנהגות הזו כדי לאפשר למשתמשים ליצור קבצים מצורפים של תוספים מהמוצר או מהאתר הקיים שלכם. זו גם תוספת נהדרת לשילוב עם CourseWork, כי כך תוכלו לנתב את התנועה הקיימת לחוויית המשתמש המשופרת שמציע התוסף שלכם, בלי לשנות את התהליך. התהליך המוצע מופיע בדף המדריך יצירת קבצים מצורפים מחוץ ל-Classroom.

אפשר גם להוסיף התנהגות לתוסף כדי לשנות מטא-נתונים של מטלות עם קבצים מצורפים של תוספים באופן פרוגרמטי. אתם יכולים לשנות כל מטלה שכוללת אחד מהקבצים המצורפים של התוספים שלכם, ללא קשר למי שיצר את המטלה. התכונה הזו שימושית במיוחד כשרוצים להגיש מטלות אחרי שהתלמידים השלימו פעילות, כדי לסמן למורה שהמשימות הושלמו והעבודה של התלמידים מוכנה לבדיקה.

אתם מרחיבים את הגרסה הסופית של התוסף כך שתתמוך בקבצים מסוג תוכן או בקבצים מסוג פעילות. במדריך הזה נעשה שימוש בקובץ מצורף מסוג content-type.

הוספת היקף ההרשאות ל-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, במסך ההסכמה של OAuth ובקוד השרת של פרויקט Cloud.

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 המוצע ליצירת מטלה חדשה.

אם עדיין אין לכם לחצן, תצטרכו להוסיף לחצן או קישור כדי לאפשר למשתמש להיכנס. כדי לשלוח את בקשות ה-API הבאות, תצטרכו את פרטי הכניסה של המשתמש, ולכן הוא יצטרך להשלים את לחיצת היד של 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_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 בתגובה. למשתמשים שעומדים בדרישות, אפשר לפעול בהתאם ללוגיקה כדי ליצור מטלה עם קובץ מצורף של תוסף. אחרת, יוצרים חומר קישור. תצטרכו לדעת מה המזהה של הקורס שבו המשתמש רוצה ליצור מטלה. בדרך כלל, תצטרכו לבקש מהמשתמש לציין באיזה קורס להשתמש. כדי לפשט את הדברים, בדוגמה הזו אנחנו משתמשים בערך מקודד מראש.

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

  # 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 חדשה.
  4. שולחים בקשה ליצירת קובץ מצורף של תוסף למטלה החדשה שנוצרה ב-Google Classroom.

Python

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

אם המשתמש לא עומד בדרישות ליצירת קבצים מצורפים של תוספים, צריך ליצור במקום זאת תוכן קישורי. לשם כך:

Python

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

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 &Learning או Plus. אפשר להחליף את סטטוס הרישיון של משתמש במסוף Admin של הדומיין לבדיקה.לוחצים על הלחצן Create a CourseWork Assignment (יצירת מטלה בקורס), פותחים את ממשק המשתמש של Google Classroom ומוודאים שנוצרה מטלה עם קובץ מצורף מסוג קישור. בקובץ המצורף צריכה להופיע כותרת דף האינטרנט המקושר וכתובת URL.

בדיקה של יצירת קובץ מצורף של תוסף

חוזרים לדף הבית ונכנסים לחשבון של מורה עם רישיון Google Workspace for Education Teaching & Learning או Plus. לוחצים על הלחצן Create a CourseWork Assignment, פותחים את ממשק המשתמש של Google Classroom ומוודאים שנוצרה מטלה עם קובץ מצורף של תוסף. הקובץ המצורף אמור להציג את השם של אפליקציית התוסף ואת הכותרת שצוינה בקוד.

שינוי מטלה לבדיקה

חוזרים לדף הבית ומקפידים להיכנס כמשתמש מורה עם רישיון Teaching and Learning או Plus. לוחצים על הלחצן Modify a CourseWork מטלה, חוזרים לממשק המשתמש של Google Classroom ומוודאים ששם המטלה השתנה.

מעולה! השלמת את סדרת ההדרכה המפורטת.