管理监护人

监护人资源代表接收学生课程和作业相关信息的用户(例如家长)。监护人通常不是学生的 Google 课堂网域成员,必须通过其电子邮件地址受邀才能成为监护人。

此邀请会创建一个状态为 PENDINGGuardianInvitation 资源。然后,用户会收到一封提示其接受邀请的电子邮件。如果电子邮件地址未与 Google 账号相关联,系统会提示用户在接受邀请之前创建一个。

当邀请的状态为 PENDING 时,用户可以接受邀请,这会创建一个 Guardian 资源并将 GuardianInvitation 标记为状态 COMPLETED。如果邀请已过期,或者已获授权的用户取消了邀请(例如,使用 PatchGuardianInvitation 方法),邀请也可能会变为 COMPLETED。监护人、Google 课堂教师或管理员也可以使用 Google 课堂界面或 DeleteGuardian 方法解除监护人关系。

谁可以管理监护人

下表介绍了可针对家长执行的操作(具体取决于当前已通过身份验证的用户类型):

按用户类型显示的与家长相关的 ACL 表

范围

您可以通过以下三种范围管理家长:

常用操作

本部分介绍了您可能希望使用 Google Classroom API 执行的一些常见家长操作。

创建家长邀请

以下示例展示了如何使用 userProfiles.guardianInvitations.create() 方法创建监护人邀请:

JavaPython
classroom/snippets/src/main/java/CreateGuardianInvitation.java
GuardianInvitation guardianInvitation = null;

/* Create a GuardianInvitation object with state set to PENDING. See
https://developers.google.com/classroom/reference/rest/v1/userProfiles.guardianInvitations#guardianinvitationstate
for other possible states of guardian invitations. */

GuardianInvitation content =
   
new GuardianInvitation()
       
.setStudentId(studentId)
       
.setInvitedEmailAddress(guardianEmail)
       
.setState("PENDING");
try {
  guardianInvitation
=
      service
.userProfiles().guardianInvitations().create(studentId, content).execute();

 
System.out.printf("Invitation created: %s\n", guardianInvitation.getInvitationId());
} catch (GoogleJsonResponseException e) {
 
// TODO (developer) - handle error appropriately
 
GoogleJsonError error = e.getDetails();
 
if (error.getCode() == 404) {
   
System.out.printf("There is no record of studentId: %s", studentId);
 
} else {
   
throw e;
 
}
} catch (Exception e) {
 
throw e;
}
return guardianInvitation;
guardianInvitation = {
 
'invitedEmailAddress': 'guardian@gmail.com',
}
guardianInvitation
= service.userProfiles().guardianInvitations().create(
                      studentId
='student@mydomain.edu',
                          body
=guardianInvitation).execute()
print("Invitation created with id: {0}".format(guardianInvitation.get('invitationId')))

结果包含服务器分配的标识符,可用于引用 GuardianInvitation。

取消家长邀请

如需取消邀请,请调用 userProfiles.guardianInvitations.patch() 方法,将邀请的状态从 PENDING 修改为 COMPLETE。请注意,这是目前移除邀请的唯一方法。

JavaPython
classroom/snippets/src/main/java/CancelGuardianInvitation.java
GuardianInvitation guardianInvitation = null;

try {
 
/* Change the state of the GuardianInvitation from PENDING to COMPLETE. See
  https://developers.google.com/classroom/reference/rest/v1/userProfiles.guardianInvitations#guardianinvitationstate
  for other possible states of guardian invitations. */

 
GuardianInvitation content =
      service
.userProfiles().guardianInvitations().get(studentId, invitationId).execute();
  content
.setState("COMPLETE");

  guardianInvitation
=
      service
         
.userProfiles()
         
.guardianInvitations()
         
.patch(studentId, invitationId, content)
         
.set("updateMask", "state")
         
.execute();

 
System.out.printf(
     
"Invitation (%s) state set to %s\n.",
      guardianInvitation
.getInvitationId(), guardianInvitation.getState());
} catch (GoogleJsonResponseException e) {
 
// TODO (developer) - handle error appropriately
 
GoogleJsonError error = e.getDetails();
 
if (error.getCode() == 404) {
   
System.out.printf(
       
"There is no record of studentId (%s) or invitationId (%s).", studentId, invitationId);
 
} else {
   
throw e;
 
}
} catch (Exception e) {
 
throw e;
}
return guardianInvitation;
guardian_invite = {
     
'state': 'COMPLETE'
}
guardianInvitation
= service.userProfiles().guardianInvitations().patch(
  studentId
='student@mydomain.edu',
  invitationId
=1234, # Replace with the invitation ID of the invitation you want to cancel
  updateMask
='state',
  body
=guardianInvitation).execute()

列出特定学生的邀请

您可以使用 userProfiles.guardianInvitations.list() 方法获取已向特定学生发送的所有邀请的列表:

JavaPython
classroom/snippets/src/main/java/ListGuardianInvitationsByStudent.java
List<GuardianInvitation> guardianInvitations = new ArrayList<>();
String pageToken = null;

try {
 
do {
   
ListGuardianInvitationsResponse response =
        service
           
.userProfiles()
           
.guardianInvitations()
           
.list(studentId)
           
.setPageToken(pageToken)
           
.execute();

   
/* Ensure that the response is not null before retrieving data from it to avoid errors. */
   
if (response.getGuardianInvitations() != null) {
      guardianInvitations
.addAll(response.getGuardianInvitations());
      pageToken
= response.getNextPageToken();
   
}
 
} while (pageToken != null);

 
if (guardianInvitations.isEmpty()) {
   
System.out.println("No guardian invitations found.");
 
} else {
   
for (GuardianInvitation invitation : guardianInvitations) {
     
System.out.printf("Guardian invitation id: %s\n", invitation.getInvitationId());
   
}
 
}
} catch (GoogleJsonResponseException e) {
 
GoogleJsonError error = e.getDetails();
 
if (error.getCode() == 404) {
   
System.out.printf("There is no record of studentId (%s).", studentId);
 
} else {
   
throw e;
 
}
} catch (Exception e) {
 
throw e;
}
return guardianInvitations;
guardian_invites = []
page_token
= None

while True:
    response
= service.userProfiles().guardianInvitations().list(
                                      studentId
='student@mydomain.edu').execute()
    guardian_invites
.extend(response.get('guardian_invites', []))
    page_token
= response.get('nextPageToken', None)
   
if not page_token:
       
break

if not courses:
   
print('No guardians invited for this {0}.'.format(response.get('studentId')))
else:
   
print('Guardian Invite:')
   
for guardian in guardian_invites:
       
print('An invite was sent to '.format(guardian.get('id'),
                                              guardian
.get('guardianId')))

默认情况下,系统只会返回 PENDING 邀请。作为网域管理员,您还可以通过提供 states 参数来检索处于 COMPLETED 状态的邀请。

列出活跃的监护人

如果您想确定哪些用户是特定学生的有效监护人,可以使用 userProfiles.guardians.list() 方法。“活跃家长”是指已接受电子邮件邀请的家长。

JavaPython
classroom/snippets/src/main/java/ListGuardians.java
List<Guardian> guardians = new ArrayList<>();
String pageToken = null;

try {
 
do {
   
ListGuardiansResponse response =
        service
.userProfiles().guardians().list(studentId).setPageToken(pageToken).execute();

   
/* Ensure that the response is not null before retrieving data from it to avoid errors. */
   
if (response.getGuardians() != null) {
      guardians
.addAll(response.getGuardians());
      pageToken
= response.getNextPageToken();
   
}
 
} while (pageToken != null);

 
if (guardians.isEmpty()) {
   
System.out.println("No guardians found.");
 
} else {
   
for (Guardian guardian : guardians) {
     
System.out.printf(
         
"Guardian name: %s, guardian id: %s, guardian email: %s\n",
          guardian
.getGuardianProfile().getName().getFullName(),
          guardian
.getGuardianId(),
          guardian
.getInvitedEmailAddress());
   
}
 
}

} catch (GoogleJsonResponseException e) {
 
GoogleJsonError error = e.getDetails();
 
if (error.getCode() == 404) {
   
System.out.printf("There is no record of studentId (%s).", studentId);
 
} else {
   
throw e;
 
}
} catch (Exception e) {
 
throw e;
}
return guardians;
guardian_invites = []
page_token
= None

while True:
    response
= service.userProfiles().guardians().list(studentId='student@mydomain.edu').execute()
    guardian_invites
.extend(response.get('guardian_invites', []))
    page_token
= response.get('nextPageToken', None)
   
if not page_token:
       
break

if not courses:
   
print('No guardians invited for this {0}.'.format(response.get('studentId')))
else:
   
print('Guardian Invite:')
   
for guardian in guardian_invites:
       
print('An invite was sent to '.format(guardian.get('id'),
                                              guardian
.get('guardianId')))

移除监护人

您还可以使用 userProfiles.guardians.delete() 方法为学生移除监护人:

JavaPython
classroom/snippets/src/main/java/DeleteGuardian.java
try {
  service
.userProfiles().guardians().delete(studentId, guardianId).execute();
 
System.out.printf("The guardian with id %s was deleted.\n", guardianId);
} catch (GoogleJsonResponseException e) {
 
GoogleJsonError error = e.getDetails();
 
if (error.getCode() == 404) {
   
System.out.printf("There is no record of guardianId (%s).", guardianId);
 
}
}
service.userProfiles().guardians().delete(studentId='student@mydomain.edu',
                                        guardianId
='guardian@gmail.com').execute()