오류 해결 및 Google Workspace 구독 재활성화하기

이 페이지에서는 오류를 해결하거나 해결하고 subscriptions.reactivate() 메서드를 호출하여 정지된 Google Workspace 구독을 재활성화하는 방법을 설명합니다.

오류로 인해 구독이 이벤트를 수신하지 못할 때마다 Google Workspace 구독이 정지됩니다. 예를 들어 정기 결제는 대상 리소스 또는 알림 엔드포인트를 찾을 수 없을 때 정지됩니다. 정기 결제 오류를 해결한 후에는 정기 결제를 다시 활성화하여 이벤트 수신을 다시 시작할 수 있습니다.

정지된 정기 결제는 다음 방법으로 알아볼 수 있습니다.

  • 앱이 정지에 관한 수명 주기 이벤트를 수신합니다. 엔드포인트 오류로 인해 정기 결제가 정지된 경우 수명 주기 이벤트가 수신되지 않을 수 있습니다.
  • subscriptions.get() 또는 subscriptions.list() 메서드를 사용하여 정기 결제의 state 필드가 SUSPENDED로 설정되어 있는지 확인합니다.
  • 알림 엔드포인트 전송 실패에 대한 알림이 전송됩니다. Google Cloud Pub/Sub 주제의 전송 실패를 모니터링하는 방법은 메시지 실패 처리를 참조하세요.

다시 활성화한 정기 결제는 원래 만료일을 유지합니다. 정기 결제 만료 시간을 연장하려면 정기 결제 업데이트 또는 갱신을 참고하세요.

Apps Script

  • Apps Script 프로젝트:
    • Apps Script에서 자동으로 생성된 기본 프로젝트 대신 Google Cloud 프로젝트를 사용하세요.
    • OAuth 동의 화면을 구성하기 위해 추가한 범위의 경우 Apps Script 프로젝트의 appsscript.json 파일에도 범위를 추가해야 합니다. 예를 들면 다음과 같습니다.
    • "oauthScopes": [
        "https://www.googleapis.com/auth/chat.messages.readonly"
      ]
          
    • Google Workspace Events 고급 서비스를 사용 설정합니다.

Python

  • Python 3.6 이상
  • pip 패키지 관리 도구
  • 최신 Python용 Google 클라이언트 라이브러리입니다. 설치하거나 업데이트하려면 명령줄 인터페이스에서 다음 명령어를 실행하세요.
      pip3 install --upgrade google-api-python-client google-auth-oauthlib
      

오류 확인 및 해결

정기 결제 오류를 식별하려면 정기 결제의 suspensionReason 필드를 검토합니다. 이 필드는 정지에 관한 수명 주기 이벤트를 수신할 때 또는 subscriptions.get() 메서드를 사용하여 정기 결제의 모든 필드를 검토할 때 찾을 수 있습니다.

다음 표는 정기 결제에서 발생할 수 있는 오류와 가능한 경우 오류를 해결하는 방법을 보여줍니다. 오류를 해결할 수 없으면 정기 결제를 삭제하거나 만료될 때까지 기다릴 수 있습니다. Google Workspace Events API는 만료된 구독을 자동으로 삭제합니다.

오류 설명 해결 방법

USER_SCOPE_REVOKED

승인하는 사용자가 구독에 필요한 하나 이상의 OAuth 범위 권한 부여를 취소했습니다. 다른 액세스 토큰을 가져옵니다. 자세한 내용은 Google 승인 서버에서 액세스 토큰 가져오기를 참고하세요.

RESOURCE_DELETED

구독의 대상 리소스가 삭제됩니다. 리소스가 복원되면 reactivate() 메서드를 호출합니다. 그 외의 경우에는 원래 타겟 리소스가 없으면 정기 결제를 다시 활성화할 수 없으므로 별도의 조치가 필요하지 않습니다.

USER_AUTHORIZATION_FAILURE

승인하는 사용자는 더 이상 정기 결제의 리소스에 액세스할 수 없습니다. 별도의 조치는 필요하지 않습니다. 구독을 승인한 사용자가 대상 리소스에 액세스할 수 없으므로 구독을 다시 활성화할 수 없습니다.

ENDPOINT_PERMISSION_DENIED

Google Workspace 애플리케이션에는 알림 엔드포인트로 이벤트를 전송할 수 있는 액세스 권한이 없습니다. 이벤트를 전송하는 Google Workspace 애플리케이션의 서비스 계정에 대한 액세스 권한을 부여합니다.

Google Chat 이벤트의 경우 서비스 계정은 chat-api-push@system.gserviceaccount.com입니다. Google Meet 이벤트의 경우 서비스 계정은 meet-api-event-push@system.gserviceaccount.com입니다.

Pub/Sub 주제의 경우 Pub/Sub 게시자 역할 (roles/pubsub.publisher) )을 서비스 계정에 부여합니다.

ENDPOINT_NOT_FOUND

알림 엔드포인트가 존재하지 않거나 찾을 수 없습니다. 엔드포인트가 여전히 활성 상태이고 작동 중인지 확인합니다. Pub/Sub 주제 문제를 해결하려면 문제 해결 문서를 참조하세요.

ENDPOINT_RESOURCE_EXHAUSTED

할당량 부족 또는 비율 제한에 도달하여 알림 엔드포인트에서 이벤트를 수신할 수 없습니다. 할당량 상향 조정을 요청합니다.

정기 결제 재활성화

정기 결제를 정지한 오류를 해결했으면 reactivate() 메서드를 사용하여 정기 결제가 다시 이벤트를 수신하도록 할 수 있습니다. 이 메서드는 모든 오류가 해결되었는지 확인하고 정기 결제의 state 필드를 SUSPENDED에서 ACTIVE로 변경합니다.

Google Workspace 구독을 재활성화하려면 다음 안내를 따르세요.

Apps Script

  1. Apps Script 프로젝트에서 reactivateSubscription라는 새 스크립트 파일을 만들고 다음 코드를 추가합니다.

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

    다음을 바꿉니다.

    • SUBSCRIPTION_ID: 정기 결제의 ID입니다. ID를 가져오려면 다음 중 하나를 사용하면 됩니다.
      • uid 필드의 값입니다.
      • name 필드에 표시된 리소스 이름의 ID입니다. 예를 들어 리소스 이름이 subscriptions/subscription-123이면 subscription-123을 사용합니다.
  2. Google Workspace 구독을 다시 활성화하려면 Apps Script 프로젝트에서 reactivateSubscription 함수를 실행합니다.

Python

  1. 작업 디렉터리에서 reactivate_subscription.py라는 파일을 만들고 다음 코드를 추가합니다.

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

    다음을 바꿉니다.

    • SCOPES: 구독에 대한 각 이벤트 유형을 지원하는 하나 이상의 OAuth 범위입니다. 문자열 배열로 형식이 지정됩니다. 여러 범위를 나열하려면 쉼표로 구분하세요. 'https://www.googleapis.com/auth/chat.spaces.readonly', 'https://www.googleapis.com/auth/chat.memberships.readonly'를 예로 들 수 있습니다.
    • SUBSCRIPTION_ID: 정기 결제의 ID입니다. ID를 가져오려면 다음 중 하나를 사용하면 됩니다.
      • uid 필드의 값입니다.
      • name 필드에 표시된 리소스 이름의 ID입니다. 예를 들어 리소스 이름이 subscriptions/subscription-123이면 subscription-123을 사용합니다.
  2. 작업 디렉터리에 OAuth 클라이언트 ID 사용자 인증 정보를 저장하고 파일 이름을 client_secrets.json로 지정했는지 확인합니다. 코드 샘플은 이 JSON 파일을 사용하여 Google Workspace에 인증하고 사용자 인증 정보를 가져옵니다. 자세한 내용은 OAuth 클라이언트 ID 사용자 인증 정보 만들기를 참조하세요.

  3. Google Workspace 구독을 재활성화하려면 터미널에서 다음을 실행합니다.

    python3 reactivate_subscription.py
    
Google Workspace Events API는 Subscription 리소스의 인스턴스가 포함된 장기 실행 작업을 반환합니다.

요청이 실패하면 다음 섹션을 참조하여 추가 오류를 해결합니다.

여러 오류 문제 해결하기

정기 결제를 정지하는 오류를 해결했고 reactivate() 메서드가 실패했다면 정기 결제가 정지된 후 다른 오류가 발생했을 수 있습니다.

추가 오류를 식별하려면 실패한 요청의 출력을 검토합니다. 출력에 아직 존재하는 오류가 포함됩니다.

정기 결제에 오류가 여러 개 있으면 suspensionReason 필드의 값은 항상 정기 결제를 정지한 원래 오류를 사용합니다.