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

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

Subskrypcje Google Workspace są zawieszane za każdym razem, gdy błąd uniemożliwia rejestrowanie zdarzeń. Na przykład subskrypcja jest zawieszona, gdy nie można znaleźć jej docelowego zasobu lub punktu końcowego powiadomień. Po naprawieniu błędów dotyczących subskrypcji możesz ją ponownie aktywować, aby znów otrzymywać zdarzenia.

Informacje o zawieszonej subskrypcji możesz uzyskać w ten sposób:

  • Aplikacja otrzymuje zdarzenie cyklu życia dotyczące zawieszenia. Jeśli subskrypcja została zawieszona z powodu błędu punktu końcowego, możesz nie otrzymać zdarzenia cyklu życia.
  • Za pomocą metody subscriptions.get() lub subscriptions.list() możesz sprawdzić, czy pole state subskrypcji ma wartość SUSPENDED.
  • Otrzymasz powiadomienie o niepowodzeniu dostarczenia do punktu końcowego powiadomień. Aby dowiedzieć się więcej o monitorowaniu niepowodzeń dostarczania do tematów Google Cloud Pub/Sub, przeczytaj artykuł Obsługa błędów przesyłania wiadomości.

Ponownie aktywowane subskrypcje zachowują pierwotną datę ważności. Aby przedłużyć okres ważności subskrypcji, przeczytaj artykuł Aktualizowanie i odnawianie subskrypcji.

Google Apps Script

  • Projekt Apps Script:
    • Użyj swojego projektu Google Cloud zamiast domyślnego utworzonego automatycznie przez Apps Script.
    • W przypadku wszystkich zakresów, które zostały dodane 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 języka Python. Aby je zainstalować lub zaktualizować, uruchom to polecenie w interfejsie wiersza poleceń:
      pip3 install --upgrade google-api-python-client google-auth-oauthlib
      

Wykrywanie i naprawianie błędów

Aby zidentyfikować błąd związany z subskrypcją, sprawdź jej pole suspensionReason. Możesz znaleźć to pole, gdy otrzymasz zdarzenie cyklu życia dotyczącego zawieszenia lub sprawdzić wszystkie pola subskrypcji za pomocą metody subscriptions.get().

W tabeli poniżej znajdziesz możliwe błędy subskrypcji oraz, w miarę możliwości, sposoby ich rozwiązania. Jeśli nie możesz rozwiązać problemu, możesz usunąć subskrypcję lub poczekać, aż wygaśnie. Google Workspace Event API automatycznie usuwa wygasłe subskrypcje.

Błąd Opis Sposoby rozwiązania problemu

USER_SCOPE_REVOKED

Autoryzowany użytkownik unieważnił przypisanie co najmniej 1 zakresu OAuth wymaganych do subskrypcji. Uzyskaj inny token dostępu. Więcej informacji znajdziesz w artykule Uzyskiwanie tokena dostępu z serwera autoryzacji Google.

RESOURCE_DELETED

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

USER_AUTHORIZATION_FAILURE

Autoryzowany 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ń w 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 rolę Publikującego Pub/Sub (roles/pubsub.publisher) do konta usługi

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 związane z publikacjami Pub/Sub, zapoznaj się z dokumentacją rozwiązywania problemów.

ENDPOINT_RESOURCE_EXHAUSTED

Punkt końcowy powiadomień nie odebrał zdarzeń z powodu niewystarczającego limitu lub osiągnięcia ograniczenia liczby żądań. Poproś o zwiększenie limitu.

Ponowne aktywowanie subskrypcji

Po usunięciu błędu, który spowodował zawieszenie subskrypcji, możesz użyć metody reactivate(), aby zezwolić subskrypcji na ponowne odbieranie zdarzeń. Sprawdza ona, czy wszystkie błędy zostały usunięte, i zmienia wartość pola state subskrypcji z 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 do niego 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ć dowolnej z tych opcji:
      • Wartość pola uid.
      • Identyfikator nazwy zasobu przedstawionej w polu name. Jeśli na przykład nazwa zasobu to subscriptions/subscription-123, użyj atrybutu 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 protokołu OAuth, który obsługuje każdy typ zdarzenia w subskrypcji. Sformatowana jako tablica ciągów tekstowych. Aby podać kilka 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ć dowolnej z tych opcji:
      • Wartość pola uid.
      • Identyfikator nazwy zasobu przedstawionej w polu name. Jeśli na przykład nazwa zasobu to subscriptions/subscription-123, użyj atrybutu subscription-123.
  2. Sprawdź, czy w katalogu roboczym są zapisane dane logowania identyfikatora klienta OAuth i nadaj mu nazwę client_secrets.json. Przykładowy kod używa tego pliku JSON do uwierzytelniania w Google Workspace i pobierania danych logowania użytkownika. Instrukcje znajdziesz w artykule Tworzenie danych logowania identyfikatora klienta OAuth.

  3. Aby ponownie aktywować abonament Google Workspace, uruchom w terminalu to polecenie:

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

Jeśli żądanie się nie powiedzie, zapoznaj się z sekcją poniżej, aby dowiedzieć się, jak rozwiązać inne problemy.

Naprawianie wielu błędów

Jeśli błąd powodujący zawieszenie subskrypcji został już rozwiązany, a metoda reactivate() nie powiedzie się, po zawieszeniu subskrypcji mógł wystąpić kolejny błąd.

Aby zidentyfikować dodatkowe błędy, przejrzyj dane wyjściowe niepomyślnego żądania. Dane wyjściowe zawierają wszelkie błędy, które nadal występują.

Jeśli subskrypcja zawiera wiele błędów, wartość w polu suspensionReason zawsze będzie zawierać pierwotny błąd, który spowodował zawieszenie subskrypcji.