エラーを解決して 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

承認したユーザーが、定期購入に必要な 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 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: サブスクリプションの各イベントタイプをサポートする 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 の認証情報を保存し、ファイルに client_secrets.json という名前を付けていることを確認します。コードサンプルでは、この JSON ファイルを使用して Google Workspace で認証を行い、ユーザー認証情報を取得します。手順については、OAuth クライアント ID 認証情報を作成するをご覧ください。

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

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

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

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

サブスクリプションを停止したエラーを解決しても reactivate() メソッドが失敗する場合は、サブスクリプションが停止された後に別のエラーが発生している可能性があります。

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

サブスクリプションに複数のエラーがある場合、suspensionReason フィールドの値には常に、サブスクリプションを一時停止した元のエラーが使用されます。