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

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

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

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

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

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

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

기본 요건

Python

  • 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입니다.
    • 선택적으로 표시 이름 (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