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

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Zasób dla opiekuna reprezentuje użytkownika, na przykład rodzica, który otrzymuje informacje o zajęciach i zadaniach ucznia. Aby zostać opiekunem, użytkownik, który zazwyczaj nie korzysta z domeny Classroom, musi otrzymać zaproszenie za pomocą 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 zaakceptować zaproszenie, co powoduje utworzenie zasobu opiekuna i wskazanie stanu Guardian ze stanem COMPLETED. Zaproszenie może też zostać COMPLETED, jeśli wygaśnie lub jeśli autoryzowany użytkownik go anuluje (np. przy użyciu metody PatchGuardianInvitation). Relację z opiekunem może też rozłączyć opiekun, nauczyciel lub administrator Classroom, używając interfejsu Classroom lub metody DeleteGuardian.

Kto może zarządzać opiekunami

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

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

Zakresy

Dostępne są 3 zakresy, które umożliwiają zarządzanie opiekunami:

Typowe działania

W tej sekcji opisano niektóre typowe działania wykonywane przez opiekunów przy użyciu interfejsu Google Classroom API.

Utwórz zaproszenie dla opiekuna

Poniższy przykład pokazuje, jak utworzyć zaproszenie opiekuna przy użyciu metody userProfiles.guardianInvitations.create():

Java

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

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 ten zawiera przypisany przez serwer identyfikator, który może służyć do odwołania do opiekuna.

Anulowanie zaproszenia dla opiekuna

Poniższy przykład pokazuje, jak anulować zaproszenie przy użyciu metody userProfiles.guardianInvitations.patch():

Java

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

Aby wyświetlić listę wszystkich zaproszeń wysłanych dla konkretnego ucznia, użyj metody userProfiles.guardianInvitations.list():

Java

classroom/snippets/src/main/java/ListGuardianInvitesByStudent.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 zwracane jest tylko PENDING zaproszeń. Jako administrator domeny możesz też pobierać zaproszenia w stanie COMPLETED, podając parametr stan.

Wyświetlanie listy aktywnych opiekunów

Jeśli chcesz sprawdzić, którzy użytkownicy są opiekunami danego ucznia, możesz użyć metody userProfiles.guardians.list(). Aktywni opiekunowie to opiekunowie, którzy przyjęli zaproszenie.

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

Opiekuna możesz też usunąć z ucznia za pomocą 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()