Czy Twoi użytkownicy korzystają z Classroom w Google Meet? Zapoznaj się z krótkim przewodnikiem po Apps Script dotyczącym sprawdzania obecności uczniów w kursach Google Meet.

Zarządzanie opiekunami

Zasób dla opiekuna reprezentuje użytkownika, na przykład rodzica, który otrzymuje informacje o kursach i zadaniach ucznia. Opiekun, który zazwyczaj nie jest członkiem domeny ucznia, musi zostać zaproszony przy użyciu swojego adresu e-mail.

To zaproszenie tworzy zasób opiekuna ze stanem PENDING. Następnie użytkownik otrzymuje 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 utworzenie konta przed zaakceptowaniem zaproszenia.

Zaproszenie ma stan PENDING, ale użytkownik może przyjąć zaproszenie, co spowoduje utworzenie zasobu Guardian i oznaczenie zaproszenia użytkownika Guardian stanem COMPLETED. Zaproszenie może też zostać COMPLETED, jeśli wygasa lub gdy upoważniony użytkownik anuluje zaproszenie (na przykład za pomocą metody PatchGuardianInvitation). Powiązanie z opiekunem może również zostać przerwane przez opiekuna, nauczyciela Classroom lub administratora za pomocą interfejsu Classroom lub metody DeleteGuardian.

Kto może zarządzać opiekunami

W tabeli poniżej opisano działania, które można wykonywać w odniesieniu do opiekunów w zależności od typu uwierzytelniania użytkownika:

Tabela list kontroli dostępu związanych z opiekunami według typu użytkownika

Zakresy

Są 3 zakresy zarządzania opiekunami:

Typowe działania

W tej sekcji opisano niektóre typowe czynności wykonywane przez opiekunów przy użyciu interfejsu Google Classroom API.

Tworzenie zaproszenia do roli opiekuna

Poniższy przykład pokazuje, jak utworzyć zaproszenie opiekuna za pomocą metody userProfiles.guardianInvitations.create():

Java

classroom/snippets/src/main/java/CreateGuardianInvitation.java (tylko w języku angielskim)
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;

Python

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órego można użyć do odwołania do opiekuna.

Anulowanie zaproszenia dla opiekuna

Aby anulować zaproszenie, zmień jego stan z PENDING na COMPLETE, wywołując metodę userProfiles.guardianInvitations.patch(). Obecnie jest to jedyny sposób, aby usunąć zaproszenie.

Java

classroom/snippets/src/main/java/CancelGuardianInvite.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;

Python

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ń do konkretnego ucznia

Możesz wyświetlić listę wszystkich zaproszeń, które zostały wysłane do określonego ucznia przy użyciu metody userProfiles.guardianInvitations.list():

Java

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;

Python

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 zwracanych jest tylko PENDING zaproszeń. Jako administrator domeny możesz też pobierać zaproszenia w stanie COMPLETED, podając parametr state.

Wyświetlenie listy aktywnych opiekunów

Aby określić, którzy użytkownicy są aktywnymi opiekunami konkretnego ucznia, możesz użyć metody userProfiles.guardians.list(). Aktywni opiekunowie to opiekunowie, którzy przyjęli zaproszenie w e-mailu.

Java

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;

Python

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

Usuń opiekunów

Możesz też usunąć opiekuna ucznia. Aby to zrobić, użyj metody userProfiles.guardians.delete():

Java

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);
  }
}

Python

service.userProfiles().guardians().delete(studentId='student@mydomain.edu',
                                        guardianId='guardian@gmail.com').execute()