Zarządzanie opiekunami

Zasoby opiekuna reprezentują użytkownika, np. rodzica, który otrzymuje informacje o zajęciach i pracach ucznia. Opiekun, który zazwyczaj nie należy do domeny Classroom ucznia, musi zostać zaproszony za pomocą adresu e-mail, aby stać się opiekunem.

To zaproszenie tworzy zasobnik GuardianInvitation ze stanem PENDING. Użytkownik otrzyma e-maila z prośbą o zaakceptowanie zaproszenia. Jeśli adres e-mail nie jest powiązany z kontem Google, użytkownik zostanie poproszony o jego utworzenie przed zaakceptowaniem zaproszenia.

Gdy zaproszenie ma stan PENDING, użytkownik może je zaakceptować, co spowoduje utworzenie zasobu opiekuna i oznaczy zaproszenie opiekuna stanem COMPLETED. Zaproszenie może też stać się COMPLETED, jeśli wygaśnie lub jeśli upoważniony użytkownik je anuluje (na przykład za pomocą metody PatchGuardianInvitation). Relacja opiekuna może zostać również zerwana przez opiekuna, nauczyciela w Classroom lub administratora za pomocą interfejsu użytkownika Classroom lub metody DeleteGuardian.

Kto może zarządzać opiekunami

W tabeli poniżej opisaliśmy czynności, które można wykonywać w przypadku opiekunów w zależności od typu uwierzytelnionego użytkownika:

Tabela uprawnień związanych z opiekunem według typu użytkownika

Zakresy

Do zarządzania opiekunami służą 3 zakresy:

Typowe działania

W tej sekcji opisano niektóre typowe działania, które rodzice mogą wykonywać za pomocą interfejsu Google Classroom API.

Tworzenie zaproszenia dla rodzica lub opiekuna

Ten przykład pokazuje, jak utworzyć zaproszenie dla rodzica za pomocą metody 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')))

Wynik zawiera przypisany przez serwer identyfikator, który może służyć do odwoływania się do GuardianInvitation.

Anulowanie zaproszenia opiekuna

Aby anulować zaproszenie, zmień jego stan z PENDING na COMPLETE, wywołując metodę userProfiles.guardianInvitations.patch(). Pamiętaj, że jest to obecnie jedyny sposób na usunięcie zaproszenia.

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

Wyświetlanie listy zaproszeń dla konkretnego ucznia

Listę wszystkich zaproszeń wysłanych do konkretnego studenta możesz pobrać, korzystając z metody 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')))

Domyślnie zwracane są tylko zaproszenia PENDING. Jako administrator domeny możesz też pobrać zaproszenia o stanie COMPLETED, podając parametr states.

Lista aktywnych opiekunów

Jeśli chcesz określić, którzy użytkownicy są aktywnymi opiekunami danego ucznia, możesz użyć metody userProfiles.guardians.list(). Aktywni opiekunowie to opiekunowie, którzy zaakceptowali e-maila z zaproszeniem.

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')))

Usuwanie opiekunów

Możesz też usunąć opiekuna ucznia, korzystając z metody 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()