สร้างและจัดการครูและนักเรียน

บทบาทนักเรียนและครูใน Google Classroom แสดงถึงบทบาทของผู้ใช้ในหลักสูตร คุณกำหนดให้ผู้ใช้เป็นครูในหลักสูตรหนึ่งและเป็นนักเรียนในอีกหลักสูตรหนึ่งได้ การกำหนด "นักเรียน" หรือ "ครู" แสดงถึงชุด สิทธิ์สำหรับผู้ใช้รายใดรายหนึ่งในหลักสูตรใดหลักสูตรหนึ่ง

นักเรียน/นักศึกษา

Student ทรัพยากรแสดงถึงผู้ใช้ที่ลงทะเบียนเป็นนักเรียน/นักศึกษา

ในหลักสูตรที่เฉพาะเจาะจง นักเรียน/นักศึกษาจะได้รับอนุญาตให้ดูรายละเอียดหลักสูตรและครูของหลักสูตรนั้น

ครู

Teacher ทรัพยากรแสดงถึงผู้ใช้ที่สอนหลักสูตรใดหลักสูตรหนึ่ง ครูมีสิทธิ์ดูและเปลี่ยนรายละเอียดหลักสูตร ดูครู และนักเรียน รวมถึงจัดการครูและนักเรียนเพิ่มเติม แต่ละหลักสูตรจะมีครูหลักหรือเจ้าของหลักสูตร ซึ่งเป็นครูที่จัดการการตั้งค่าได้ เช่น การโอนการเป็นเจ้าของหลักสูตร

ระบบจะระบุตัวตนของนักเรียนและครูโดยใช้รหัสที่ไม่ซ้ำกันหรืออีเมลของผู้ใช้ตามที่แสดงผลโดย Directory API ผู้ใช้ปัจจุบันยังอ้างอิงถึงรหัสของตนเองได้โดยใช้คำย่อ "me"

สิทธิ์การจัดการโดยตรงโดยใช้ Classroom API

ผู้ดูแลระบบ นักเรียน และครูจะมีสิทธิ์ที่แตกต่างกันเมื่อเพิ่มหรือนำผู้ใช้ออกจากหลักสูตรโดยตรงโดยใช้ Classroom API

ผู้ดูแลระบบ

ผู้ดูแลระบบโดเมนได้รับอนุญาตให้ข้ามขั้นตอนการเชิญและเพิ่มนักเรียนและครูลงในหลักสูตรได้โดยตรง หากมีคุณสมบัติตรงตามเงื่อนไขต่อไปนี้

  • ผู้ใช้ที่เพิ่มเป็นส่วนหนึ่งของโดเมนของผู้ดูแลระบบ
  • ครูผู้สอนหลักหรือเจ้าของหลักสูตรอยู่ในโดเมนของผู้ดูแลระบบ

สำหรับผู้ใช้หรือหลักสูตรที่อยู่นอกโดเมนของผู้ดูแลระบบ แอปพลิเคชันต้อง ขอความยินยอมจากผู้ใช้โดยการส่งคำเชิญด้วยวิธี invitations.create

นักเรียน/นักศึกษา

นักเรียนสามารถลงทะเบียนเรียนหลักสูตรได้ด้วยตนเองโดยการเรียกใช้ students.create และระบุ enrollmentCode ของหลักสูตร enrollmentCode เป็นตัวระบุที่ไม่ซ้ำกันสำหรับหลักสูตรที่รวมอยู่ในทรัพยากร Course ในเว็บแอปพลิเคชัน Classroom enrollmentCode จะอยู่ในแท็บฟอรัมและหน้า รายละเอียดหลักสูตร

ครู

ครูจะเพิ่มผู้ใช้ลงในหลักสูตรโดยตรงไม่ได้ และต้องใช้วิธี invitations.create เพื่อเชิญนักเรียนและครูคนอื่นๆ เข้าร่วมหลักสูตร

ตารางต่อไปนี้จะอธิบายว่าผู้ใช้รายใดได้รับอนุญาตให้ส่งคำขอไปยังเมธอด create และ delete สำหรับทรัพยากร Teacher และ Student

ผู้ดูแลระบบ ครู นักศึกษา
CreateTeacher ✔️ ✖️ ✖️
DeleteTeacher ✔️ ✔️ ✖️
CreateStudent ✔️ ✖️ ✔️ 1
DeleteStudent ✔️ ✔️ ✔️ 2

1 นักเรียนนักศึกษาจะเพิ่มตัวเองลงในหลักสูตรได้เท่านั้น

2 นักเรียนจะลบตัวเองออกจากหลักสูตรได้เท่านั้น

จัดการครู

ผู้ดูแลระบบโดเมนสามารถเพิ่มครูในโดเมนของตนลงในหลักสูตรได้โดยตรง ด้วย teachers.create ดังที่แสดงในตัวอย่างต่อไปนี้

.NET

classroom/snippets/ClassroomSnippets/AddTeacher.cs
using Google.Apis.Auth.OAuth2;
using Google.Apis.Classroom.v1;
using Google.Apis.Classroom.v1.Data;
using Google.Apis.Services;
using System;
using System.Net;
using Google;

namespace ClassroomSnippets
{
    // Class to demonstrate the use of Classroom Create Teacher API
    public class AddTeacher
    {
       /// <summary>
       /// Add teacher to the Course
       /// </summary>
       /// <param name="courseId"></param>
       /// <param name="teacherEmail"></param>
       /// <returns></returns>
        public static Teacher ClassroomAddTeacher( string courseId,
                 string teacherEmail)
         {
             try 
             {
                 /* Load pre-authorized user credentials from the environment.
                  TODO(developer) - See https://developers.google.com/identity for 
                  guides on implementing OAuth2 for your application. */
                 GoogleCredential credential = GoogleCredential.GetApplicationDefault()
                     .CreateScoped(ClassroomService.Scope.ClassroomRosters);

                 // Create Classroom API service.
                 var service = new ClassroomService(new BaseClientService.Initializer
                 {
                     HttpClientInitializer = credential,
                     ApplicationName = "Classroom API Snippet"
                 });

                 var teacher = new Teacher
                 {
                     UserId = teacherEmail
                 };
                 // Add the teacher to the course.
                 teacher = service.Courses.Teachers.Create(teacher, courseId).Execute();
                     Console.WriteLine(
                         "User '{0}' was added as a teacher to the course with ID '{1}'.\n",
                         teacher.Profile.Name.FullName, courseId);
                     return teacher;
             }
             catch (Exception e)
             {
                 // TODO(developer) - handle error appropriately
                 if (e is AggregateException)
                 {
                     Console.WriteLine("Credential Not found");
                 }
                 else if (e is GoogleApiException)
                 {
                     Console.WriteLine("Failed to Add the teacher. Error message: {0}", e.Message);
                 }
                 else
                 {
                     throw;
                 }
             }

             return null;
         }


    }

}

Java

classroom/snippets/src/main/java/AddTeacher.java
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.googleapis.json.GoogleJsonError;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.classroom.Classroom;
import com.google.api.services.classroom.ClassroomScopes;
import com.google.api.services.classroom.model.Teacher;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Arrays;

/* Class to demonstrate the use of Classroom Add Teacher API */
public class AddTeacher {

  /* Scopes required by this API call. If modifying these scopes, delete your previously saved
  tokens/ folder. */
  static ArrayList<String> SCOPES =
      new ArrayList<>(Arrays.asList(ClassroomScopes.CLASSROOM_ROSTERS));

  /**
   * Add teacher to a specific course.
   *
   * @param courseId - Id of the course.
   * @param teacherEmail - Email address of the teacher.
   * @return newly created teacher
   * @throws IOException - if credentials file not found.
   * @throws GeneralSecurityException - if a new instance of NetHttpTransport was not created.
   */
  public static Teacher addTeacher(String courseId, String teacherEmail)
      throws GeneralSecurityException, IOException {

    // Create the classroom API client.
    final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
    Classroom service =
        new Classroom.Builder(
                HTTP_TRANSPORT,
                GsonFactory.getDefaultInstance(),
                ClassroomCredentials.getCredentials(HTTP_TRANSPORT, SCOPES))
            .setApplicationName("Classroom samples")
            .build();

    Teacher teacher = new Teacher().setUserId(teacherEmail);
    try {
      // Add a teacher to a specified course
      teacher = service.courses().teachers().create(courseId, teacher).execute();
      // Prints the course id with the teacher name
      System.out.printf(
          "User '%s' was added as a teacher to the course with ID '%s'.\n",
          teacher.getProfile().getName().getFullName(), courseId);
    } catch (GoogleJsonResponseException e) {
      // TODO(developer) - handle error appropriately
      GoogleJsonError error = e.getDetails();
      if (error.getCode() == 409) {
        System.out.printf("User '%s' is already a member of this course.\n", teacherEmail);
      } else if (error.getCode() == 403) {
        System.out.println("The caller does not have permission.\n");
      } else {
        throw e;
      }
    }
    return teacher;
  }
}

PHP

classroom/snippets/src/ClassroomAddTeacher.php
<?php
use Google\Client;
use Google\Service\Classroom;
use Google\Service\Classroom\Teacher;
use Google\service\Exception;

function addTeacher($courseId, $teacherEmail)
{
    /* Load pre-authorized user credentials from the environment.
    TODO (developer) - See https://developers.google.com/identity for
     guides on implementing OAuth2 for your application. */
    $client = new Client();
    $client->useApplicationDefaultCredentials();
    $client->addScope("https://www.googleapis.com/auth/classroom.profile.photos");
    $service = new Classroom($client);
    $teacher = new Teacher([
        'userId' => $teacherEmail
    ]);
    try {
        //  calling create teacher
        $teacher = $service->courses_teachers->create($courseId, $teacher);
        printf("User '%s' was added as a teacher to the course with ID '%s'.\n",
            $teacher->profile->name->fullName, $courseId);
    } catch (Exception $e) {
        if ($e->getCode() == 409) {
            printf("User '%s' is already a member of this course.\n", $teacherEmail);
        } else {
            throw $e;
        }
    }
    return $teacher;
}

Python

classroom/snippets/classroom_add_teacher.py
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def classroom_add_teacher(course_id):
  """
  Adds a teacher to a course with specific course_id.
  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity
  for guides on implementing OAuth2 for the application.
  """
  creds, _ = google.auth.default()
  # pylint: disable=maybe-no-member
  service = build("classroom", "v1", credentials=creds)

  teacher_email = "gduser1@workspacesamples.dev"
  teacher = {"userId": teacher_email}

  try:
    teachers = service.courses().teachers()
    teacher = teachers.create(courseId=course_id, body=teacher).execute()
    print(
        "User %s was added as a teacher to the course with ID %s"
        % (teacher.get("profile").get("name").get("fullName"), course_id)
    )
  except HttpError as error:
    print('User "{%s}" is already a member of this course.' % teacher_email)
    return error
  return teachers


if __name__ == "__main__":
  # Put the course_id of course for which Teacher needs to be added.
  classroom_add_teacher(453686957652)

ครูร่วมสอนสามารถนำครูคนอื่นๆ ออกจากหลักสูตรได้โดยใช้เมธอด teachers.delete การดำเนินการนี้จะนำครูที่ระบุออกจากหลักสูตรเท่านั้น และจะไม่ส่งผลต่อการมอบหมายงานในหลักสูตรอื่นๆ หรือโปรไฟล์ผู้ใช้ของครู

จัดการเจ้าของหลักสูตร

ผู้ดูแลระบบโดเมนสามารถโอนการเป็นเจ้าของหลักสูตรระหว่างครูได้ ดูรายละเอียดสำคัญได้ที่ส่วนอัปเดตเจ้าของหลักสูตร

จัดการนักเรียน/นักศึกษา

ผู้ดูแลระบบโดเมนสามารถเพิ่มนักเรียนภายในโดเมนได้โดยตรงด้วยวิธี students.create หากนักเรียนเพิ่มตัวเองลงในหลักสูตรโดยตรง จะต้องระบุ enrollmentCode

.NET

classroom/snippets/ClassroomSnippets/AddStudent.cs
using Google.Apis.Auth.OAuth2;
using Google.Apis.Classroom.v1;
using Google.Apis.Classroom.v1.Data;
using Google.Apis.Services;
using System;
using System.Net;
using Google;

namespace ClassroomSnippets
{
    // Class to demonstrate the use of Classroom Create Student API
    public class AddStudent
    {
        public static Student ClassroomAddStudent(string courseId, string enrollmentCode)
        {
            try
            {
                /* Load pre-authorized user credentials from the environment.
                 TODO(developer) - See https://developers.google.com/identity for 
                 guides on implementing OAuth2 for your application. */
                GoogleCredential credential = GoogleCredential.GetApplicationDefault()
                    .CreateScoped(ClassroomService.Scope.ClassroomRosters);
                var service = new ClassroomService(new BaseClientService.Initializer
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Classroom API .NET Quickstart"
                });

                var student = new Student
                {
                    UserId = "me"
                };

                var request = service.Courses.Students.Create(student, courseId);
                request.EnrollmentCode = enrollmentCode;
                student = request.Execute();
                Console.WriteLine(
                    "User '{0}' was enrolled  as a student in the course with ID '{1}'.\n",
                    student.Profile.Name.FullName, courseId);
            }
            catch (Exception e)
            {
                // TODO(developer) - handle error appropriately
                if (e is AggregateException)
                {
                    Console.WriteLine("Credential Not found");
                }
                else if (e is GoogleApiException)
                {
                    Console.WriteLine("Failed to Add the Student. Error message: {0}", e.Message);
                }
                else
                {
                    throw;
                }
            }

            return null;
        }
    }

}

Java

classroom/snippets/src/main/java/AddStudent.java
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.googleapis.json.GoogleJsonError;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.classroom.Classroom;
import com.google.api.services.classroom.ClassroomScopes;
import com.google.api.services.classroom.model.Student;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Arrays;

/* Class to demonstrate the use of Classroom Add Student API */
public class AddStudent {

  /* Scopes required by this API call. If modifying these scopes, delete your previously saved
  tokens/ folder. */
  static ArrayList<String> SCOPES =
      new ArrayList<>(Arrays.asList(ClassroomScopes.CLASSROOM_ROSTERS));

  /**
   * Add a student in a specified course.
   *
   * @param courseId - Id of the course.
   * @param enrollmentCode - Code of the course to enroll.
   * @return newly added student
   * @throws IOException - if credentials file not found.
   * @throws GeneralSecurityException - if a new instance of NetHttpTransport was not created.
   */
  public static Student addStudent(String courseId, String enrollmentCode, String studentId)
      throws GeneralSecurityException, IOException {

    // Create the classroom API client.
    final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
    Classroom service =
        new Classroom.Builder(
                HTTP_TRANSPORT,
                GsonFactory.getDefaultInstance(),
                ClassroomCredentials.getCredentials(HTTP_TRANSPORT, SCOPES))
            .setApplicationName("Classroom samples")
            .build();

    Student student = new Student().setUserId(studentId);
    try {
      // Enrolling a student to a specified course
      student =
          service
              .courses()
              .students()
              .create(courseId, student)
              .setEnrollmentCode(enrollmentCode)
              .execute();
      // Prints the course id with the Student name
      System.out.printf(
          "User '%s' was enrolled as a student in the course with ID '%s'.\n",
          student.getProfile().getName().getFullName(), courseId);
    } catch (GoogleJsonResponseException e) {
      // TODO(developer) - handle error appropriately
      GoogleJsonError error = e.getDetails();
      if (error.getCode() == 409) {
        System.out.println("You are already a member of this course.");
      } else if (error.getCode() == 403) {
        System.out.println("The caller does not have permission.\n");
      } else {
        throw e;
      }
    }
    return student;
  }
}

PHP

classroom/snippets/src/ClassroomAddStudent.php
<?php
use Google\Client;
use Google\Service\Classroom;
use Google\Service\Classroom\Student;
use Google\Service\Exception;

function enrollAsStudent($courseId,$enrollmentCode)
{
    /* Load pre-authorized user credentials from the environment.
    TODO (developer) - See https://developers.google.com/identity for
     guides on implementing OAuth2 for your application. */
    $client = new Client();
    $client->useApplicationDefaultCredentials();
    $client->addScope("https://www.googleapis.com/auth/classroom.profile.emails");
    $service = new Classroom($client);
    $student = new Student([
        'userId' => 'me'
    ]);
    $params = [
        'enrollmentCode' => $enrollmentCode
    ];
    try {
        $student = $service->courses_students->create($courseId, $student, $params);
        printf("User '%s' was enrolled  as a student in the course with ID '%s'.\n",
            $student->profile->name->fullName, $courseId);
    } catch (Exception $e) {
        if ($e->getCode() == 409) {
            print "You are already a member of this course.\n";
        } else {
            throw $e;
        }
    }
    return $student;
}

Python

classroom/snippets/classroom_add_student.py
import os

from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError

SCOPES = ["https://www.googleapis.com/auth/classroom.coursework.students"]


def classroom_add_student_new(course_id):
  """
  Adds a student to a course, the teacher has access to.
  The file token.json stores the user's access and refresh tokens, and is
  created automatically when the authorization flow completes for the first
  time.
  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity for
   guides on implementing OAuth2 for the application.
  """

  creds = None
  # The file token.json stores the user's access and refresh tokens, and is
  # created automatically when the authorization flow completes for the first
  # time.
  if os.path.exists("token.json"):
    creds = Credentials.from_authorized_user_file("token.json", SCOPES)
  # If there are no (valid) credentials available, let the user log in.
  if not creds or not creds.valid:
    if creds and creds.expired and creds.refresh_token:
      creds.refresh(Request())
    else:
      flow = InstalledAppFlow.from_client_secrets_file(
          "credentials.json", SCOPES
      )
      creds = flow.run_local_server(port=0)
    # Save the credentials for the next run
    with open("token.json", "w", encoding="utf8") as token:
      token.write(creds.to_json())

  enrollment_code = "abc-def"
  student = {"userId": "gduser1@workspacesamples.dev"}
  try:
    service = build("classroom", "v1", credentials=creds)
    student = (
        service.courses()
        .students()
        .create(
            courseId=course_id, enrollmentCode=enrollment_code, body=student
        )
        .execute()
    )
    print(
        '''User {%s} was enrolled as a student in
                   the course with ID "{%s}"'''
        % (student.get("profile").get("name").get("fullName"), course_id)
    )
    return student
  except HttpError as error:
    print(error)
    return error


if __name__ == "__main__":
  # Put the course_id of course for which student needs to be added.
  classroom_add_student_new(478800920837)

การนำนักเรียนออกจากหลักสูตรโดยใช้เมธอด students.delete จะนำนักเรียนออกจากหลักสูตรที่ระบุเท่านั้น และไม่ส่งผลต่อการลงทะเบียนในหลักสูตรอื่นๆ หรือโปรไฟล์ผู้ใช้ของนักเรียน

ดึงข้อมูลหลักสูตรของผู้ใช้

หากต้องการดึงข้อมูลรายชื่อหลักสูตรสำหรับนักเรียนหรือครู ให้เรียกใช้ courses.list และระบุ studentId หรือ teacherId ของผู้ใช้ที่เกี่ยวข้อง

คุณตั้งค่าทั้ง studentId และ teacherId ในcourses.list() คำขอเดียวไม่ได้ หากต้องการดึงรายการหลักสูตรที่ครูและนักเรียน/นักศึกษา ที่เฉพาะเจาะจงลงทะเบียนไว้ ให้ส่งcourses.list()คำขอแยกต่างหากสำหรับผู้ใช้แต่ละราย จากนั้นค้นหา อินเทอร์เซกชันของผลลัพธ์ทั้ง 2 ชุด

เรียกข้อมูลโปรไฟล์ของผู้ใช้

หากต้องการดึงข้อมูลโปรไฟล์ของผู้ใช้ รวมถึงรหัสและชื่อ ให้เรียกใช้ userProfiles.get โดยใช้รหัส อีเมล หรือ "me" สำหรับ ผู้ใช้ที่ส่งคำขอ หากต้องการดึงข้อมูลฟิลด์ emailAddress คุณต้องรวมขอบเขต classroom.profile.emails

id ที่แสดงผลจะสอดคล้องกับทรัพยากรผู้ใช้ Directory API ที่มีstudentId หรือ teacherId ที่ตรงกัน