Google Workspace 組織の Google Chat スペースを検索、管理する

このガイドでは、Google Workspace 管理者が Google Chat API の Space リソースsearch() メソッドを使用して、組織全体の名前付きスペースを管理し、 管理タスクを実行する方法について説明します。

Google Workspace 管理者は、Chat API を使用して、 SpaceTypeSPACEとして定義されている名前付きスペースのみを管理できます。名前付きスペースは、ユーザーがメッセージを送信したり、ファイルを共有したり、共同作業を行ったりする永続的な場所です。Chat API を使用して、ダイレクト メッセージ(DM)やグループ チャットを管理することはできません。

リソース は、ユーザーと Chat アプリがメッセージの送信、 ファイルの共有、共同作業を行える場所を表します。Spaceスペースにはいくつかの種類があります。

  • ダイレクト メッセージ(DM)は、2 人のユーザー間またはユーザーと Chat アプリ間の会話です。
  • グループ チャットは、3 人以上のユーザーと Chat アプリ間の会話です。
  • 名前付きスペースは、ユーザーがメッセージを送信したり、ファイルを共有したり、共同作業を行ったりする永続的な場所です。

Google Workspace 管理者は、Chat API を使用して、組織内の名前付きスペースを検索して管理できます。方法は次のとおりです。

  • 組織内のスペースを監査する。search() メソッドを使用すると、組織内のすべてのスペースのリストを取得できます。このリストには、各スペースの設定に関する詳細情報と、作成日、前回のアクティビティの日付、メンバー数、履歴設定のステータス、外部ゲストを招待できるかどうかなどのメタデータが含まれています。
  • 利用されなくなったスペースの検出と削除。search() メソッドを使用して、特定の日時以降に利用されていないスペースを見つけ、削除することができます。詳細と サンプルコードについては、利用されなくなったスペースの検出と削除をご覧ください。
  • 検索条件に基づいてスペースのリストをエクスポートする。search() メソッドを使用すると、query で指定した条件を満たすスペースのリストを取得し、分析のために結果を CSV ファイルにエクスポートできます。
  • スペースの管理者を見つけて連絡する。 search() メソッドを使用して、組織内のすべてのスペースのリストを取得し、 members.list() メソッド を使用して、管理者であるすべてのスペース メンバーのリストを取得します。
  • 管理者が指定されていないスペースを見つける。search() メソッドを使用して、組織内のすべてのスペースのリストを取得し、members.list() メソッドを使用して、管理者がいないスペースのリストを取得します。

前提条件

Python

  • Google Chat へのアクセス権を持つ Business または Enterprise Google Workspace アカウント
  • Google Workspace 組織のチャットとスペースの会話の管理 の管理者権限 が必要です。

管理者として Google Chat API を呼び出す

管理者権限を持つユーザーとして認証するには、リクエストで次の情報を渡す必要があります。

  • 管理者権限でユーザー認証を使用することをサポートする認証スコープ を指定します。
  • useAdminAccess フィールドを true に設定します。

このセクションでは、管理者として Chat API を呼び出す次の例を示します。

組織全体のスペースを検索する

この例では、Google Workspace 管理者が Chat API の Space リソースで search() メソッドを使用して、指定した条件に基づいて組織全体のスペースを検索する方法について説明します。

ユーザー認証と管理者権限で search() メソッドを呼び出すには、リクエストで次の情報を指定する必要があります。

  • chat.admin.spaces または chat.admin.spaces.readonly 認証スコープを指定します。
  • useAdminAccess=true を指定します。
  • 検索 query パラメータを指定して結果をフィルタします:
    • customer = "customers/my_customer" - 必須。サポートされている 値はcustomers/my_customerのみです。
    • spaceType = "SPACE" - 必須。サポートされている値は SPACE のみです。
    • 必要に応じて、スペース検索をさらに絞り込むための追加のクエリを 1 つ以上指定します。たとえば、表示名のキーワード(displayName)、作成日(createTime)、スペース アクティビティ(lastActiveTime)などです。

次のコードは、管理者権限を使用して、表示名に「Hello」と「World」を含むスペースを任意の組み合わせで検索する方法の例を示しています。

Python

  1. 作業ディレクトリに search_spaces_for_hello_world.py という名前のファイルを作成します。
  2. search_spaces_for_hello_world.py に次のコードを追加します。

    from google_auth_oauthlib.flow import InstalledAppFlow
    from googleapiclient.discovery import build
    
    SCOPES = [
      'https://www.googleapis.com/auth/chat.admin.spaces.readonly',
    ]
    
    def main():
    # Authenticate with Google Workspace
    # and get user authorization.
    flow = InstalledAppFlow.from_client_secrets_file(
        'credentials.json',
        SCOPES,
    )
    creds = flow.run_local_server()
    
    # Build a service endpoint for Chat API.
    chat = build('chat', 'v1', credentials=creds)
    
    spaces = []
    page_token = ''
    
    # Search for all spaces.
    while True:
      result = (
          chat.spaces()
          .search(
              useAdminAccess=True,
              query=(
                'customer = "customers/my_customer"'
                'AND spaceType = "SPACE"'
                'AND displayName:"Hello World"'
                )
    pageToken=page_token,
          )
          .execute()
      )
      if 'spaces' not in result:
        print('No spaces found named Hello World.')
        return
      spaces.extend(result['spaces'])
      if 'nextPageToken' in result:
        page_token = result['nextPageToken']
      else:
        break
    
    print(str(len(spaces)) + ' spaces found:')
    # Prints the list of spaces.
    print(spaces)
    
  3. 作業ディレクトリでサンプルをビルドして実行します。

    python3 search_spaces_for_hello_world.py

利用されなくなったスペースの検出と削除

この例では、Google Workspace 管理者が Chat API の Space リソースで search() メソッドを使用して、利用されなくなったスペースを見つけ、useAdminAccess パラメータを指定して delete() メソッドを使用して削除する方法について説明します。

Google Chat の非アクティブなスペース(アクティブに使用されていないスペース)は、貴重なストレージ容量を占有し、ユーザー インターフェースが煩雑になる可能性があります。search() メソッドを使用すると、管理者は、2 か月前など、指定した日時以降に使用されていないスペースを見つけることができます。スペースのリストが列挙されたら、更新や削除などの操作を行うことができます。

利用されなくなったスペースのリストを検索し、 ユーザー認証管理者権限で削除するには、 リクエストで次の情報を渡します。

  • 利用されなくなったスペースを検索するには、次の情報を指定します。
    • chat.admin.spaces または chat.admin.spaces.readonly 認証スコープを指定します。
    • Spaces リソースで search() メソッドを呼び出します。
    • INACTIVE_SPACE_DEADLINE を、返されるスペースを決定する前回のアクティビティの日時に設定します。
    • useAdminAccess=true を指定します。
    • 検索 query パラメータを指定して結果をフィルタします:
      • customer = "customers/my_customer" - 必須。サポートされている値は customers/my_customer のみです。
      • spaceType = "SPACE" - 必須。サポートされている値は SPACE のみです。
      • lastActiveTime - リクエストをフィルタして、利用されなくなった スペースのみを返すには、lastActiveTime を指定します。
  • 検索結果から利用されなくなったスペースを削除するには、次の情報を指定します。
    • chat.admin.delete 認証スコープを指定します。
    • Spaces リソースで delete() メソッドを呼び出します。
    • useAdminAccess=true を指定します。

次のコードは、管理者権限を使用して利用されなくなったスペースを検索して削除する方法の例を示しています。

Python

  1. 作業ディレクトリに find_and_delete_inactive_spaces.py という名前のファイルを作成します。

  2. find_and_delete_inactive_spaces.py に次のコードを追加します。

    
    from google_auth_oauthlib.flow import InstalledAppFlow
    from googleapiclient.discovery import build
    
    SCOPES = [
        'https://www.googleapis.com/auth/chat.admin.spaces.readonly',
        'https://www.googleapis.com/auth/chat.admin.delete',
    ]
    
    # Any spaces that have not been active since this time will be deleted.
    INACTIVE_SPACE_DEADLINE = '"INACTIVE_DATE"'
    
    def main():
      # Authenticate with Google Workspace
      # and get user authorization.
      flow = InstalledAppFlow.from_client_secrets_file(
          'credentials.json',
          SCOPES,
      )
      creds = flow.run_local_server()
    
      # Build a service endpoint for Chat API.
      chat = build('chat', 'v1', credentials=creds)
    
      spaces = []
      page_token = ''
    
      # Search for all inactive spaces.
      while True:
        result = (
            chat.spaces()
            .search(
                useAdminAccess=True,
                query=(
                    'customer = "customers/my_customer" AND spaceType = "SPACE" AND'
                    ' lastActiveTime < '
                )
                + INACTIVE_SPACE_DEADLINE,
                pageToken=page_token,
            )
            .execute()
        )
        if 'spaces' not in result:
          print('No inactive spaces found.')
          return
        spaces.extend(result['spaces'])
        if 'nextPageToken' in result:
          page_token = result['nextPageToken']
        else:
          break
    
      print(str(len(spaces)) + ' inactive spaces found:')
      # Prints the list of inactive spaces.
      print(spaces)
    
      # Delete all inactive spaces.
      for space in spaces:
        (
            chat.spaces()
            .delete(
                useAdminAccess=True,
                name=space['name'],
            )
            .execute()
        )
        print(
            'Deleted space: '
            + space['displayName']
            + ', Resource Name: '
            + space['name']
        )
    
    if __name__ == '__main__':
      main()
    
  3. コードで、INACTIVE_DATE を YYYY-MM-DDTHH:MM:SS+HH:MM 形式の日時に置き換えます。例: 「2024-06-01T00:00:00+00:00」。

  4. 作業ディレクトリでサンプルをビルドして実行します。

    python3 find_and_delete_inactive_spaces.py