Google Workspace 조직의 Google Chat 스페이스 검색 및 관리

이 가이드에서는 Google Workspace 관리자가 Google Chat API의 Space 리소스에서 search() 메서드를 사용하여 조직 전반에서 이름이 지정된 스페이스를 관리하고 관리 작업을 실행하는 방법을 설명합니다.

Google Workspace 관리자는 Chat API를 사용하여 이름이 지정된 스페이스만 관리할 수 있습니다. 이름이 지정된 스페이스는 SPACESpaceType로 정의됩니다. 이름이 지정된 스페이스는 사용자가 메시지를 보내고, 파일을 공유하고, 공동작업하는 지속적인 장소입니다. Chat API를 사용하여 다이렉트 메시지 (DM) 또는 그룹 채팅을 관리할 수는 없습니다.

Space 리소스는 사용자와 Chat 앱이 메시지를 보내고, 파일을 공유하고, 공동작업할 수 있는 장소를 나타냅니다. 스페이스에는 다음과 같은 여러 유형이 있습니다.

  • 채팅 메시지 (DM)는 두 사용자 간의 대화 또는 사용자와 Chat 앱 간의 대화입니다.
  • 그룹 채팅은 3명 이상의 사용자와 Chat 앱 간의 대화입니다.
  • 이름이 지정된 스페이스는 사용자가 메시지를 보내고, 파일을 공유하고, 공동작업하는 지속적인 공간입니다.

Google Workspace 관리자는 Chat API를 사용하여 다음과 같은 방법으로 조직에서 이름이 지정된 스페이스를 검색하고 관리할 수 있습니다.

  • 조직의 스페이스를 감사합니다. search() 메서드를 사용하면 생성 날짜, 마지막 활동 날짜, 구성원 수, 기록 설정 상태, 외부 게스트 초대 기능 등 각 스페이스의 설정 및 메타데이터에 관한 세부정보와 함께 조직의 모든 스페이스 목록을 검색할 수 있습니다.
  • 비활성 스페이스를 찾아 삭제합니다. search() 메서드를 사용하면 지정된 날짜와 시간 이후 사용되지 않은 스페이스를 찾아 삭제할 수 있습니다. 자세한 내용과 샘플 코드는 비활성 스페이스 찾기 및 삭제를 참고하세요.
  • 검색 기준에 따라 스페이스 목록을 내보냅니다. search() 메서드를 사용하면 query에 지정된 기준을 충족하는 스페이스 목록을 검색하고 분석을 위해 결과를 CSV 파일로 내보낼 수 있습니다.
  • 스페이스 관리자를 찾아 연락합니다. search() 메서드를 사용하여 조직의 모든 스페이스 목록을 가져온 다음 members.list() 메서드를 사용하여 관리자인 모든 스페이스 회원 목록을 가져올 수 있습니다.
  • 지정된 관리자가 없는 스페이스를 찾습니다. search() 메서드를 사용하여 조직의 모든 스페이스 목록을 가져온 다음 members.list() 메서드를 사용하여 관리자가 없는 스페이스 목록을 가져올 수 있습니다.

기본 요건

Python

  • Google Workspace 조직에 대한 Chat 및 스페이스 대화 관리 관리자 권한이 있어야 합니다.

관리자로 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입니다.
    • 원하는 경우 스페이스 검색을 추가로 필터링하는 하나 이상의 추가 쿼리(예: 표시 이름의 키워드(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(
        'client_secrets.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(
          'client_secrets.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