বাহ্যিক সংযুক্তি & প্রবেশ করা

এটি ক্লাসরুম অ্যাড-অন ওয়াকথ্রু সিরিজের সপ্তম পর্ব।

এই নির্দেশিকায়, আপনি গুগল ক্লাসরুমের বাইরে থেকে অ্যাড-অন অ্যাটাচমেন্ট তৈরি করার জন্য একটি ওয়েব অ্যাপ্লিকেশনে বিশেষ বৈশিষ্ট্য যোগ করবেন। আপনার ব্যবহারকারীদের আপনার বিদ্যমান পণ্য বা ওয়েবসাইট থেকে অ্যাড-অন অ্যাটাচমেন্ট তৈরি করার সুযোগ দিতে এই বৈশিষ্ট্যটি ব্যবহার করুন। এটি CourseWork ইন্টিগ্রেশনের জন্যও একটি চমৎকার সংযোজন, কারণ এর মাধ্যমে আপনি ব্যবহারকারীদের কাজের ধারা পরিবর্তন না করেই তাদেরকে আপনার অ্যাড-অনের উন্নত ইউজার এক্সপেরিয়েন্সের দিকে পরিচালিত করতে পারেন। প্রস্তাবিত প্রক্রিয়াটি আমাদের 'ক্লাসরুমের বাইরে অ্যাটাচমেন্ট তৈরি করুন' নির্দেশিকা পৃষ্ঠায় উপস্থাপন করা হয়েছে।

আপনি আপনার অ্যাড-অনে এমন বৈশিষ্ট্যও যোগ করতে পারেন , যার মাধ্যমে প্রোগ্রাম্যাটিকভাবে অ্যাড-অন অ্যাটাচমেন্টসহ কোনো অ্যাসাইনমেন্ট পরিবর্তন করা যায় । অ্যাসাইনমেন্টটি যিনিই তৈরি করে থাকুন না কেন, আপনি আপনার অ্যাড-অন অ্যাটাচমেন্টযুক্ত যেকোনো অ্যাসাইনমেন্ট পরিবর্তন করতে পারবেন। কোনো শিক্ষার্থী একটি অ্যাক্টিভিটি সম্পন্ন করার পর অ্যাসাইনমেন্ট জমা দেওয়ার জন্য এটি বিশেষভাবে উপযোগী; এর মাধ্যমে শিক্ষককে জানানো যায় যে নির্ধারিত কাজগুলো সম্পন্ন হয়েছে এবং শিক্ষার্থীর কাজটি পর্যালোচনার জন্য প্রস্তুত।

আপনি আপনার অ্যাড-অনের চূড়ান্ত সংস্করণটি সম্প্রসারিত করেন যা কন্টেন্ট-টাইপ বা অ্যাক্টিভিটি-টাইপ অ্যাটাচমেন্ট সমর্থন করে। এই নির্দেশিকায় কন্টেন্ট-টাইপ অ্যাটাচমেন্ট ব্যবহার করা হয়েছে।

অ্যাসাইনমেন্ট ম্যানেজমেন্ট 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 কনসেন্ট স্ক্রিন এবং আপনার সার্ভার কোডের স্কোপের তালিকায় এই স্কোপটি যোগ করুন।

পাইথন

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

ক্লাসরুমে একটি অ্যাসাইনমেন্ট তৈরি করুন

একটি নন-আইফ্রেমড ওয়েব পেজে বাটন যোগ করুন

এই ওয়াকথ্রুতে বর্ণিত কার্যপ্রণালীটি একজন ব্যবহারকারীকে গুগল-বহির্ভূত কোনো পণ্য থেকে গুগল ক্লাসরুম অ্যাসাইনমেন্ট এবং অ্যাটাচমেন্ট তৈরি করার সুযোগ দেয়। বাস্তবে, এটি সম্ভবত আপনার বিদ্যমান ওয়েবসাইট বা অ্যাপ্লিকেশন। এই উদাহরণের জন্য, আপনাকে একটি বাহ্যিক সাইট হিসেবে কাজ করার জন্য একটি নকল ওয়েব পেজ তৈরি করতে হবে। আপনার এমন একটি বাটন বা লিঙ্কের প্রয়োজন হবে, যেটি ক্লিক করলে একটি নতুন রুট খুলবে এবং একটি নতুন অ্যাসাইনমেন্ট তৈরি করার জন্য প্রস্তাবিত 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_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")

একজন ব্যবহারকারীর অ্যাটাচমেন্ট তৈরির যোগ্যতা যাচাই করুন।

ব্যবহারকারীর পক্ষ থেকে অ্যাড-অন অ্যাটাচমেন্ট তৈরি করার আগে, ব্যবহারকারীকে কয়েকটি পূর্বশর্ত পূরণ করতে হয়। সুবিধার জন্য, কোনো ব্যবহারকারী এই পূর্বশর্তগুলো পূরণ করেন কিনা তা নির্ধারণ করতে গুগল userProfiles.checkUserCapability মেথডটি প্রদান করে। যে ব্যবহারকারী পূর্বশর্তগুলো পূরণ করেন, তাকে যোগ্য ব্যবহারকারী (eligible user) বলা হয়।

CourseWork তৈরির রুট ইমপ্লিমেন্টেশনে যোগ্যতা যাচাইয়ের ব্যবস্থাটি যোগ করুন। এরপর রেসপন্সে allowed ফিল্ডটি পরীক্ষা করুন। যোগ্য ব্যবহারকারীদের জন্য, অ্যাড-অন অ্যাটাচমেন্ট সহ একটি অ্যাসাইনমেন্ট তৈরির লজিক অনুসরণ করুন। অন্যথায়, একটি লিঙ্ক মেটেরিয়াল তৈরি করুন। ব্যবহারকারী যে কোর্সে অ্যাসাইনমেন্ট তৈরি করতে চান, সেই কোর্সের আইডি আপনার জানা প্রয়োজন হবে। সাধারণত, কোন কোর্সটি ব্যবহার করতে হবে তা নির্দিষ্ট করার জন্য আপনি ব্যবহারকারীকে জিজ্ঞাসা করবেন। সরলতার জন্য, এই উদাহরণে আমরা একটি হার্ড-কোডেড ভ্যালু ব্যবহার করেছি।

পাইথন

# /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. গুগল ক্লাসরুমে কোনো সংযুক্তি ছাড়া একটি courseWork অ্যাসাইনমেন্ট তৈরি করতে একটি এপিআই অনুরোধ পাঠান।
  2. নতুন তৈরি করা অ্যাসাইনমেন্টের id বের করুন।
  3. একটি নতুন কোর্সওয়ার্ক AddOnAttachment তৈরি করুন।
  4. গুগল ক্লাসরুমে নতুন তৈরি করা অ্যাসাইনমেন্টে একটি অ্যাড-অন অ্যাটাচমেন্ট যোগ করার জন্য অনুরোধ পাঠান।

পাইথন

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

ইতিমধ্যে তৈরি করা একটি অ্যাসাইনমেন্ট পরিবর্তন করুন

স্ট্রিম আইটেমটি কে তৈরি করেছে তা নির্বিশেষে, আপনি এমন যেকোনো গুগল ক্লাসরুম স্ট্রিম আইটেম অ্যাক্সেস, পরিবর্তন, জমা, পুনরুদ্ধার বা ফেরত দিতে পারবেন, যেটিতে আপনার অন্তত একটি অ্যাড-অন অ্যাটাচমেন্ট রয়েছে। স্ট্রিম আইটেমগুলো হলো যেকোনো Announcement , CourseWork assignment, বা CourseWorkMaterial

এটি দেখানোর জন্য, আপনি একটি নির্দিষ্ট স্ট্রিম আইটেম পরিবর্তন করার জন্য একটি রুট যোগ করবেন। আপনার দ্বারা এপিআই (API) ব্যবহার করে তৈরি করা এবং কোনো শিক্ষকের দ্বারা গুগল ক্লাসরুম ইউআই (UI) এর মাধ্যমে তৈরি করা স্ট্রিম আইটেমগুলো আপনি অ্যাক্সেস ও পরিবর্তন করতে পারেন কিনা, তা যাচাই করতে এই পদ্ধতিটি ব্যবহার করুন।

এই নির্দেশিকায় আপনি প্রথমে যে ওয়েব পেজটি সম্পাদনা করেছিলেন , তাতে আরও একটি লিঙ্ক বা বাটন যোগ করুন। এটি একটি CourseWork অ্যাসাইনমেন্ট পরিবর্তন করার জন্য একটি নতুন পথ খুলবে।

পাইথন

প্রদত্ত পাইথন উদাহরণটি /index রুটটিকে পরিবর্তন করে, যা এই ওয়াকথ্রু-এর শুরুতে পরিবর্তন করা হয়েছিল।

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

কোর্সওয়ার্ক-সম্পর্কিত রুটগুলো পরিচালনা করার জন্য একটি নতুন রুট তৈরি করুন। আমাদের দেওয়া উদাহরণে এটি 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()
)

অ্যাড-অনটি পরীক্ষা করুন

বিষয়টি সহজ রাখার জন্য, প্রদত্ত উদাহরণগুলিতে হার্ড-কোডেড কোর্স এবং অ্যাসাইনমেন্ট আইডেন্টিফায়ার ব্যবহার করা হয়েছে। শিক্ষকের ক্রেডেনশিয়াল ব্যবহার করে courses এবং courseWork রিসোর্সের getlist মেথডে রিকোয়েস্ট পাঠানোর মাধ্যমে আপনি এই আইডেন্টিফায়ারগুলো পেতে পারেন। courseWork অ্যাসাইনমেন্ট তৈরি করার সময় রেসপন্সেও এগুলো ফেরত আসে।

আপনার সার্ভারটি চালু করুন, তারপর আপনার ইনডেক্স পেজে যান এবং Google Workspace for Education Teaching & Learning বা Plus লাইসেন্স ছাড়া একজন শিক্ষক ব্যবহারকারী হিসেবে সাইন ইন করুন। আপনি আপনার টেস্ট ডোমেইনের অ্যাডমিন কনসোল থেকে একজন ব্যবহারকারীর লাইসেন্সের অবস্থা পরিবর্তন করতে পারেন । 'Create a CourseWork Assignment' বোতামে ক্লিক করুন, তারপর Google Classroom UI খুলুন এবং যাচাই করুন যে একটি 'Link Material' অ্যাটাচমেন্ট সহ একটি অ্যাসাইনমেন্ট তৈরি হয়েছে। অ্যাটাচমেন্টটিতে লিঙ্ক করা ওয়েব পেজের শিরোনাম এবং একটি URL দেখানো উচিত।

অ্যাড-অন সংযুক্তি তৈরির পরীক্ষা

ইনডেক্স পেজে ফিরে যান এবং Google Workspace for Education Teaching & Learning বা Plus লাইসেন্স সহ একজন শিক্ষক ব্যবহারকারী হিসেবে সাইন ইন করুন। 'Create a CourseWork Assignment' বোতামে ক্লিক করুন, তারপর Google Classroom UI খুলুন এবং যাচাই করুন যে একটি অ্যাড-অন অ্যাটাচমেন্ট সহ একটি অ্যাসাইনমেন্ট তৈরি হয়েছে। অ্যাটাচমেন্টটিতে আপনার অ্যাড-অন অ্যাপ্লিকেশনের নাম এবং আপনার কোডে নির্দিষ্ট করা শিরোনামটি দেখানো উচিত।

পরীক্ষার অ্যাসাইনমেন্ট পরিবর্তন

ইনডেক্স পেজে ফিরে যান এবং নিশ্চিত করুন যে আপনি টিচিং অ্যান্ড লার্নিং বা প্লাস লাইসেন্স সহ একজন শিক্ষক ব্যবহারকারী হিসেবে সাইন ইন করেছেন। ‘Modify a CourseWork Assignment’ বোতামে ক্লিক করুন, তারপর Google Classroom UI-তে ফিরে যান এবং যাচাই করুন যে অ্যাসাইনমেন্টের শিরোনামটি পরিবর্তিত হয়েছে।

অভিনন্দন! আপনি ওয়াকথ্রু সিরিজটি সম্পন্ন করেছেন।