エラーを解決して Google Workspace サブスクリプションを再度有効にする

このページでは、エラーを解決またはトラブルシューティングし、subscriptions.reactivate メソッドを呼び出して、一時停止された Google Workspace サブスクリプションを再開する方法について説明します。

エラーが発生してサブスクリプションがイベントを受信できなくなると、Google Workspace サブスクリプションは一時停止されます。たとえば、ターゲット リソースまたは通知エンドポイントが見つからない場合、サブスクリプションは一時停止されます。サブスクリプションのエラーを解決したら、サブスクリプションを再開してイベントの受信を再開できます。

一時停止中の定期購入については、次の方法で確認できます。

  • アプリが一時停止に関するライフサイクル イベントを受信します。エンドポイントのエラーによりサブスクリプションが一時停止された場合、ライフサイクル イベントを受信できないことがあります。
  • subscriptions.get メソッドまたは subscriptions.list メソッドを使用して、サブスクリプションの state フィールドが SUSPENDED に設定されているかどうかを確認します。
  • 配信の失敗が通知エンドポイントに通知されます。Google Cloud Pub/Sub トピックへの配信エラーのモニタリングについては、メッセージ エラーの処理をご覧ください。

再開した定期購入の有効期限は元のままです。サブスクリプションの有効期限を延長するには、Google Workspace サブスクリプションを更新するをご覧ください。

Apps Script

  • Apps Script プロジェクト:
    • Apps Script によって自動的に作成されるデフォルトのプロジェクトではなく、Google Cloud プロジェクトを使用します。
    • OAuth 同意画面を構成するために追加したすべてのスコープについて、Apps Script プロジェクトの appsscript.json ファイルにもスコープを追加する必要があります。たとえば、chat.messages スコープを指定した場合は、次のように追加します。
    • "oauthScopes": [
        "https://www.googleapis.com/auth/chat.messages"
      ]
          
    • 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

承認ユーザーが、サブスクリプションに必要な 1 つ以上の OAuth スコープの付与を取り消した。 別のアクセス トークンを取得します。詳細については、 Google 認証サーバーからアクセス トークンを取得するをご覧ください。

RESOURCE_DELETED

定期購入のターゲット リソースが削除されます。 リソースが復元された場合は、reactivate メソッドを呼び出します。それ以外の場合は、元のターゲット リソースなしでサブスクリプションを再有効化できないため、対応は不要です。

USER_AUTHORIZATION_FAILURE

承認ユーザーが、サブスクリプションのリソースにアクセスできなくなりました。 対応は不要です。承認したユーザーがターゲット リソースにアクセスできないため、サブスクリプションを再度有効にすることはできません。

ENDPOINT_PERMISSION_DENIED

Google Workspace アプリケーションが、通知エンドポイントにイベントを配信する権限を持っていない。 イベントを配信する Google Workspace アプリケーションのサービス アカウントにアクセス権を付与します。

サービス アカウント:
  • Google Chat イベント: chat-api-push@system.gserviceaccount.com
  • Google ドライブのイベント: drive-api-event-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

割り当てが不足しているか、レート制限に達したため、通知エンドポイントでイベントを受信できませんでした。 割り当ての増加をリクエストしてください。

APP_SCOPE_REVOKED

ドメイン管理者が、Chat 用アプリの 1 つ以上の OAuth スコープの付与を取り消しました。 管理者の承認を受け取ります。

APP_AUTHORIZATION_FAILURE

サブスクリプションの作成を承認した Chat 用アプリが、サブスクリプションのターゲット リソースにアクセスできなくなった。 ターゲット リソースへのアクセス権を再度取得します。たとえば、ターゲット リソースが Chat スペースの場合、Chat 用アプリはスペースのメンバーシップを必要とする可能性があります。

定期購入を再開する

定期購入が一時停止された原因となったエラーを解決したら、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('credentials.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: サブスクリプションの各イベントタイプをサポートする 1 つ以上の 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 の認証情報が保存され、ファイル名が credentials.json になっていることを確認します。このコードサンプルでは、この JSON ファイルを使用して Google Workspace で認証を行い、ユーザー認証情報を取得します。手順については、OAuth クライアント ID の認証情報を作成するをご覧ください。

  3. Google Workspace サブスクリプションを再有効化するには、ターミナルで次のコマンドを実行します。

    python3 reactivate_subscription.py
Google Workspace Events API は、Subscription リソースのインスタンスを含む長時間実行オペレーションを返します。

リクエストが失敗した場合は、次のセクションで追加のエラーのトラブルシューティングを行います。

Google Chat 用アプリとしてサブスクリプションを再有効化する

ユーザーとしてではなく、Chat 用アプリとして Chat イベントのサブスクリプションを再有効化できます。プロセスは同様ですが、次の点が異なります。

  1. ユーザー認証ではなく、管理者の 1 回限りの承認で Chat 用アプリとして認証します。

  2. Chat アプリが Chat イベントを登録できるようにする認可スコープを指定します。これらの承認スコープは常に chat.app で始まり、次のものが含まれます。

    • https://www.googleapis.com/auth/chat.app.memberships: Chat スペース メンバー イベントをサブスクライブします。
    • https://www.googleapis.com/auth/chat.app.messages.readonly: Chat スペースのメッセージ イベントとリアクション イベントをサブスクライブします。
    • https://www.googleapis.com/auth/chat.app.spaces: Chat スペースのイベントを登録します。

API キーを作成する

デベロッパー プレビュー API メソッドを呼び出すには、API ディスカバリ ドキュメントの非公開のデベロッパー プレビュー バージョンを使用する必要があります。リクエストを認証するには、API キーを渡す必要があります。

API キーを作成するには、アプリの Google Cloud プロジェクトを開いて次の操作を行います。

  1. Google Cloud コンソールで、メニュー > [API とサービス] > [認証情報] に移動します。

    [認証情報] に移動

  2. [認証情報を作成] > [API キー] をクリックします。
  3. 新しい API キーが表示されます。
    • [コピー] をクリックして、アプリのコードで使用する API キーをコピーします。API キーは、プロジェクトの認証情報の [API キー] セクションでも確認できます。
    • 不正使用を防ぐため、API キーを使用できる場所と対象の API を制限することをおすすめします。詳細については、API 制限を追加するをご覧ください。

Google Workspace Events API を呼び出すスクリプトを作成する

次のコードサンプルは、Chat 用アプリの Google Workspace サブスクリプションを再有効化します。

Python

  """Reactivate subscription."""

  from google.oauth2 import service_account
  from apiclient.discovery import build

  # Specify required scopes.
  SCOPES = [SCOPES]

  # Specify service account details.
  CREDENTIALS = (
      service_account.Credentials.from_service_account_file('credentials.json')
      .with_scopes(SCOPES)
  )

  # Call the Workspace Events API using the service endpoint.
  service = build(
      'workspaceevents',
      'v1beta',
      credentials=CREDENTIALS,
      discoveryServiceUrl='https://workspaceevents.googleapis.com/$discovery/rest?version=v1beta&labels=DEVELOPER_PREVIEW&key=API_KEY',
  )

  NAME = 'subscriptions/SUBSCRIPTION_ID'
  response = service.subscriptions().reactivate(name=NAME).execute()
  print(response)

次のように置き換えます。

  • SCOPES: Chat アプリが Chat イベントをサブスクライブできるようにする認可スコープを指定します。これらの承認スコープは常に chat.app で始まり、次のものが含まれます。

    • https://www.googleapis.com/auth/chat.app.memberships: Chat スペース メンバー イベントをサブスクライブします。
    • https://www.googleapis.com/auth/chat.app.messages.readonly: Chat スペースのメッセージ イベントとリアクション イベントをサブスクライブします。
    • https://www.googleapis.com/auth/chat.app.spaces: Chat スペースのイベントを登録します。
  • API_KEY: Google Workspace Events API のサービス エンドポイントを構築するために作成した API キー。

  • SUBSCRIPTION_ID: サブスクリプションの ID。ID を取得するには、次のいずれかを使用します。

    • uid フィールドの値。
    • name フィールドに示されるリソース名の ID。たとえば、リソース名が subscriptions/subscription-123 の場合は、subscription-123 を使用します。

複数のエラーのトラブルシューティング

定期購入を一時停止したエラーを解決し、reactivate メソッドが失敗した場合は、定期購入が一時停止された後に別のエラーが発生した可能性があります。

追加のエラーを特定するには、失敗したリクエストの出力を確認します。出力には、まだ存在するエラーが含まれます。

定期購入に複数のエラーがある場合、suspensionReason フィールドの値は常に、定期購入を一時停止した元のエラーを使用します。