Naprawianie błędów i ponowne aktywowanie subskrypcji Google Workspace

Z tego artykułu dowiesz się, jak ponownie aktywować zawieszoną subskrypcję Google Workspace przez naprawienie lub rozwiązywanie problemów oraz wywołanie metody subscriptions.reactivate().

Subskrypcje Google Workspace są zawieszane, gdy błąd uniemożliwia im odbieranie zdarzeń. Na przykład subskrypcja jest zawieszona, gdy nie można znaleźć zasobu docelowego lub punktu końcowego powiadomienia. Po naprawieniu błędów związanych z subskrypcją możesz ją ponownie aktywować, aby znów otrzymywać zdarzenia.

Informacje o zawieszonej subskrypcji możesz uzyskać na te sposoby:

  • Aplikacja otrzyma zdarzenie cyklu życia dotyczące zawieszenia. Jeśli subskrypcja została zawieszona z powodu błędu w jej punkcie końcowym, możesz nie otrzymać zdarzenia cyklu życia.
  • Aby sprawdzić, czy pole state subskrypcji ma wartość SUSPENDED, użyj metody subscriptions.get() lub subscriptions.list().
  • Otrzymasz powiadomienie o nieudanej próbie dostarczenia powiadomienia do punktu końcowego. Więcej informacji o monitorowaniu błędów dostawy do tematów Google Cloud Pub/Sub znajdziesz w artykule Zarządzanie błędami wiadomości.

W przypadku reaktywowanych subskrypcji zachowana jest pierwotna data ważności. Aby przedłużyć czas ważności subskrypcji, zapoznaj się z artykułem Aktualizowanie lub odnawianie subskrypcji.

Google Apps Script

  • projekt Apps Script:
    • Zamiast domyślnego projektu utworzonego automatycznie przez Apps Script użyj swojego projektu Google Cloud.
    • W przypadku wszystkich zakresów dodanych w celu skonfigurowania ekranu zgody OAuth musisz też dodać zakresy do pliku appsscript.json w projekcie Apps Script. Na przykład:
    • "oauthScopes": [
        "https://www.googleapis.com/auth/chat.messages.readonly"
      ]
          
    • Włącz usługę zaawansowaną Google Workspace Events.

Python

  • Python 3.6 lub nowszy
  • Narzędzie do zarządzania pakietami pip
  • najnowsze biblioteki klienta Google dla Pythona; Aby je zainstalować lub zaktualizować, uruchom to polecenie w interfejsie wiersza poleceń:
      pip3 install --upgrade google-api-python-client google-auth-oauthlib
      

Identyfikowanie i usuwanie błędów

Aby zidentyfikować błąd subskrypcji, sprawdź pole suspensionReason. To pole znajdziesz, gdy otrzymasz zdarzenie cyklu życia dotyczące zawieszenia, lub gdy za pomocą metody subscriptions.get() przejrzysz wszystkie pola subskrypcji.

W tabeli poniżej znajdziesz możliwe błędy dotyczące subskrypcji oraz, w miarę możliwości, jak je naprawić. Jeśli nie możesz naprawić błędu, usuń subskrypcję lub poczekaj, aż wygaśnie. Interfejs Events API w Google Workspace automatycznie usuwa wygasłe subskrypcje.

Błąd Opis Sposoby rozwiązania problemu

USER_SCOPE_REVOKED

Użytkownik autoryzujący cofnął uprawnienia co najmniej jednego zakresu OAuth, który jest wymagany do korzystania z subskrypcji. Uzyskaj kolejny token dostępu. Szczegółowe informacje znajdziesz w artykule Uzyskiwanie tokena dostępu z serwera autoryzacji Google.

RESOURCE_DELETED

Zasób docelowy subskrypcji został usunięty. Jeśli zasób został przywrócony, wywołaj metodę reactivate(). W przeciwnym razie nie musisz nic robić, ponieważ nie możesz ponownie aktywować subskrypcji bez pierwotnego zasobu docelowego.

USER_AUTHORIZATION_FAILURE

Autoryzujący użytkownik nie ma już dostępu do zasobu subskrypcji. Nie musisz nic robić. Nie możesz ponownie aktywować subskrypcji, ponieważ użytkownik, który ją autoryzował, nie ma dostępu do zasobu docelowego.

ENDPOINT_PERMISSION_DENIED

Aplikacja Google Workspace nie ma dostępu do dostarczania zdarzeń do punktu końcowego powiadomień. Przyznaj dostęp do konta usługi aplikacji Google Workspace, która dostarcza zdarzenia.

W przypadku zdarzeń Google Chat konto usługi to chat-api-push@system.gserviceaccount.com. W przypadku wydarzeń w Google Meet konto usługi to meet-api-event-push@system.gserviceaccount.com.

W przypadku tematów Pub/Sub przypisz do konta usługi rolę Publikujący w Pub/Sub (roles/pubsub.publisher) ).

ENDPOINT_NOT_FOUND

Punkt końcowy powiadomienia nie istnieje lub nie można go znaleźć. Sprawdź, czy punkt końcowy jest nadal aktywny i działa. Aby rozwiązać problemy z tematami usługi Pub/Sub, zapoznaj się z dokumentacją dotyczącą rozwiązywania problemów.

ENDPOINT_RESOURCE_EXHAUSTED

Punkt końcowy powiadomień nie otrzymał zdarzeń z powodu niewystarczającego limitu lub przekroczenia limitu liczby żądań. Poproś o zwiększenie limitu.

Wznawianie subskrypcji

Gdy rozwiążesz problem, który spowodował zawieszenie subskrypcji, możesz użyć metody reactivate(), aby subskrypcja mogła ponownie otrzymywać zdarzenia. Ta metoda sprawdza, czy wszystkie błędy zostały naprawione, i zmienia pole state w subskrypcji z wartości SUSPENDED na ACTIVE.

Aby ponownie aktywować subskrypcję Google Workspace:

Google Apps Script

  1. W projekcie Apps Script utwórz nowy plik skryptu o nazwie reactivateSubscription i dodaj ten kod:

    function reactivateSubscription() {
      // The name of the subscription to reactivate.
      const name = 'subscriptions/SUBSCRIPTION_ID';
    
      // Call the Workspace Events API using the advanced service.
      const response = WorkspaceEvents.Subscriptions.reactivate({}, name);
      console.log(response);
    }
    

    Zastąp następujące elementy:

    • SUBSCRIPTION_ID: identyfikator subskrypcji. Aby uzyskać identyfikator, możesz użyć jednej z tych opcji:
      • Wartość pola uid.
      • Identyfikator nazwy zasobu zawartej w polu name. Jeśli na przykład nazwa zasobu to subscriptions/subscription-123, użyj subscription-123.
  2. Aby ponownie aktywować subskrypcję Google Workspace, uruchom funkcję reactivateSubscription w projekcie Apps Script.

Python

  1. W katalogu roboczym utwórz plik o nazwie reactivate_subscription.py i dodaj do niego ten kod:

    """Reactivate subscription."""
    
    from google_auth_oauthlib.flow import InstalledAppFlow
    from googleapiclient.discovery import build
    
    # Specify required scopes.
    SCOPES = [SCOPES]
    
    # Authenticate with Google Workspace and get user authentication.
    flow = InstalledAppFlow.from_client_secrets_file('client_secrets.json', SCOPES)
    CREDENTIALS = flow.run_local_server()
    
    # Call the Workspace Events API using the service endpoint.
    service = build(
        'workspaceevents',
        'v1',
        credentials=CREDENTIALS,
    )
    
    NAME = 'subscriptions/SUBSCRIPTION_ID'
    response = service.subscriptions().reactivate(name=NAME).execute()
    print(response)
    

    Zastąp następujące elementy:

    • SCOPES: co najmniej 1 zakres OAuth obsługujący każdy typ zdarzenia w subskrypcji. Jest sformatowany jako tablica ciągów tekstowych. Aby podać wiele zakresów, rozdziel je przecinkami. Na przykład: 'https://www.googleapis.com/auth/chat.spaces.readonly', 'https://www.googleapis.com/auth/chat.memberships.readonly'.
    • SUBSCRIPTION_ID: identyfikator subskrypcji. Aby uzyskać identyfikator, możesz użyć jednej z tych metod:
      • Wartość pola uid.
      • Identyfikator nazwy zasobu zawartej w polu name. Jeśli na przykład nazwa zasobu to subscriptions/subscription-123, użyj subscription-123.
  2. W katalogu roboczym sprawdź, czy dane uwierzytelniające klienta OAuth są zapisane i czy plik ma nazwę client_secrets.json. Przykładowy kod korzysta z tego pliku JSON do uwierzytelniania w Google Workspace i pobierania danych logowania użytkowników. Instrukcje znajdziesz w artykule Tworzenie danych logowania klienta OAuth.

  3. Aby ponownie aktywować subskrypcję Google Workspace, uruchom w terminalu te polecenia:

    python3 reactivate_subscription.py
Interfejs Google Workspace Events API zwraca długo trwającą operację, która zawiera instancję zasobu Subscription.

Jeśli żądanie się nie powiedzie, przeczytaj następną sekcję, aby rozwiązać problem.

Rozwiązywanie problemów z wieloma błędami

Jeśli błąd, który spowodował zawieszenie subskrypcji, został już rozwiązany, a metoda reactivate() nie działa, po zawieszeniu subskrypcji może wystąpić inny błąd.

Aby zidentyfikować dodatkowe błędy, sprawdź dane wyjściowe nieudanego żądania. Wyjście zawiera wszystkie błędy, które nadal występują.

Jeśli subskrypcja ma wiele błędów, wartość w polu suspensionReason zawsze odpowiada pierwotnemu błędowi, który spowodował zawieszenie subskrypcji.