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

זהו המדריך השביעי בסדרת המדריכים שלנו על תוספים ל-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.

מפעילים את השרת, עוברים לדף האינדקס ונכנסים לחשבון של מורה בלי רישיון Teaching & Learning או Plus של Google Workspace for Education. אפשר להחליף את סטטוס הרישיון של משתמש במסוף 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. לוחצים על הלחצן שינוי מטלה, חוזרים לממשק המשתמש של Google Classroom ומוודאים שהשם של המטלה השתנה.

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