Google Chat으로 데이터 가져오기

Google Chat API를 사용하면 다른 메시지 플랫폼에서 Google Chat으로 데이터를 가져올 수 있습니다. 다른 메시지 플랫폼에서 기존 메시지, 첨부파일, 반응, 멤버십, 스페이스 항목을 해당하는 Chat API 리소스로 가져올 수 있습니다. 가져오기 모드에서 Chat 스페이스를 만들고 해당 스페이스로 데이터를 가져와서 이 데이터를 가져올 수 있습니다. 프로세스가 완료되면 이 스페이스는 표준 Chat 스페이스가 됩니다.

  1. API 사용량 한도를 검토하고 미리 계획하세요.
  2. 채팅 앱의 승인을 구성합니다.
  3. 가져오기 모드에서 스페이스 만들기
  4. 리소스를 가져옵니다.
  5. 가져온 리소스의 유효성을 검사합니다.
  6. 가져온 소스 데이터의 리소스 차이 조정하기
  7. 가져오기 모드 완료.
  8. 멤버십 리소스를 만듭니다.

기본 요건

Apps Script

Python

  • Python 3.6 이상
  • pip 패키지 관리 도구
  • Python용 최신 Google 클라이언트 라이브러리입니다. 이를 설치하거나 업데이트하려면 명령줄 인터페이스에서 다음 명령어를 실행합니다.

    pip3 install --upgrade google-api-python-client google-auth
    
  • 게시된 채팅 앱입니다. 채팅 앱을 만들고 게시하려면 Google Chat 앱 빌드를 참고하세요.

  • 채팅 앱에 구성된 승인입니다. 채팅 앱은 앱이 콘텐츠를 가져오는 모든 도메인에서 도메인 전체 권한을 위임해야 합니다. 채팅 앱 승인을 참조하세요.

API 사용량 한도 검토 및 사전 계획

Chat으로 데이터를 가져오는 데 필요한 시간은 가져올 Chat 리소스의 양에 따라 크게 다를 수 있습니다. 예상 타임라인을 확인하려면 채팅 앱의 사용량 한도와 소스 메시지 플랫폼에서 가져올 예약된 데이터의 양을 검토하여 미리 계획하세요.

가져오기 모드에서 스페이스 만들기

가져오기 모드에서 스페이스를 만들려면 Space 리소스에서 create 메서드를 호출하고 importModetrue로 설정합니다. 소스 메시징 플랫폼에서 상응하는 공간 항목의 생성 시간을 보존하려면 공간의 createTime를 설정하면 됩니다. 이 createTime는 2000년 1월 1일부터 현재 시간 사이의 값으로 설정해야 합니다.

스페이스로 콘텐츠를 가져올 때 이후 단계에서 참조할 수 있도록 만든 스페이스의 name를 기록해 둡니다.

create 메서드가 호출된 시점부터 채팅 앱은 30일 이내에 스페이스로 리소스를 가져오고 가져오기 모드를 완료하며 chat.import 범위를 사용하여 멤버십 리소스를 생성해야 합니다. 채팅 앱은 30일 후에도 표준 Chat API 멤버십 범위를 사용하여 멤버십을 만들 수 있습니다. 30일 후에도 스페이스가 아직 가져오기 모드인 경우 스페이스는 자동으로 삭제되어 액세스할 수 없고 복구할 수 없습니다. 이 기간 내에 예약된 모든 리소스를 Chat으로 가져올 수 있도록 채팅 앱의 사용량 한도를 검토하여 미리 계획하세요.

다음 예는 가져오기 모드에서 스페이스를 만드는 방법을 보여줍니다.

Apps Script

function createSpaceInImportMode() {
  const space = Chat.Spaces.create({
      spaceType: 'SPACE',
      displayName: 'Import Mode Space',
      importMode: true,
      createTime: (new Date('January 1, 2000')).toJSON()
  });
  console.log(space.name);
}

Python

"""Create a space in import mode."""

import datetime

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

# Specify required scopes.
SCOPES = [
    'https://www.googleapis.com/auth/chat.import',
]

CREDENTIALS = (
    service_account.Credentials.from_service_account_file('credentials.json')
    .with_scopes(SCOPES)
    .with_subject('EMAIL')
)

# Build a service endpoint for Chat API.
service = build('chat', 'v1', credentials=CREDENTIALS)

result = (
    service.spaces()
    .create(
        body={
            'spaceType': 'SPACE',
            'displayName': 'Import Mode Space',
            'importMode': True,
            'createTime': f'{datetime.datetime(2000, 1, 1).isoformat()}Z',
        }
    )
    .execute()
)

print(result)

다음을 바꿉니다.

  • EMAIL: 도메인 전체 권한으로 가장하고 있는 사용자 계정의 이메일 주소입니다.

리소스 가져오기

다른 메시지 플랫폼에서 리소스를 가져오려면 가져오기 모드 스페이스에서 Google Chat 리소스 (예: 메시지, 반응, 첨부파일)를 만듭니다. 스페이스에서 리소스를 만들 때 이전하려는 메시지 플랫폼의 관련 리소스의 데이터를 지정합니다.

메시지

채팅 앱은 자체 권한을 사용하거나 명의 도용을 통해 사용자를 대신하여 메시지를 가져올 수 있습니다. (메시지 작성자는 가장된 사용자 계정으로 설정됩니다.) 자세한 내용은 채팅 앱 승인을 참고하세요. 가져오기 모드 공간에서 메시지를 가져오려면 Message 리소스에서 create 메서드를 호출하세요. 소스 메시지 플랫폼에서 원본 메시지 생성 시간을 보존하려면 메시지의 createTime를 설정하면 됩니다. 이 createTime는 이전에 설정한 공간 생성 시간과 표시 시간 사이의 값으로 설정해야 합니다.

같은 스페이스의 메시지는 같은 createTime를 포함할 수 없으며, 해당 시간의 이전 메시지가 삭제되더라도 마찬가지입니다.

가져오기 모드 스페이스에 서드 파티 URL이 포함된 메시지는 Google Chat 내에서 링크 미리보기를 렌더링할 수 없습니다.

가져오기 모드에서 메시지를 만들면 스페이스에서 사용자 멘션이 포함된 메시지를 포함하여 사용자에게 이메일을 보내거나 알림을 보내지 않습니다.

다음 예시에서는 가져오기 모드 스페이스에서 메시지를 만드는 방법을 보여줍니다.

Python

"""Create a message in import mode space."""

import datetime

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

# Specify required scopes.
SCOPES = [
    'https://www.googleapis.com/auth/chat.import',
]

CREDENTIALS = (
    service_account.Credentials.from_service_account_file('credentials.json')
    .with_scopes(SCOPES)
    .with_subject('EMAIL')
)

# Build a service endpoint for Chat API.
service = build('chat', 'v1', credentials=CREDENTIALS)

NAME = 'spaces/SPACE_NAME'
result = (
    service.spaces()
    .messages()
    .create(
        parent=NAME,
        body={
            'text': 'Hello, world!',
            'createTime': f'{datetime.datetime(2000, 1, 2).isoformat()}Z',
        },
    )
    .execute()
)

print(result)

다음을 바꿉니다.

리액션

채팅 앱은 Chat API를 사용하여 메시지에 대한 반응을 가져올 수 있습니다. 가져오기 모드 공간에서의 인증 지원의 리소스 메서드와 유형에 대한 자세한 내용은 채팅 앱 승인을 참조하세요.

연결

채팅 앱은 Chat API를 사용하여 첨부파일을 업로드할 수 있습니다. 가져오기 모드 공간에서의 인증 지원의 리소스 메서드와 유형에 대한 자세한 내용은 채팅 앱 승인을 참조하세요. 하지만 첨부파일 업로드에 대한 Google Chat 내부 한도에 도달하지 않도록 Google Drive API를 사용하여 첨부파일을 Google Drive 파일로 업로드하고 파일 URI를 가져오기 모드 공간의 각 메시지에 연결하여 다른 메시지 플랫폼에서 첨부파일을 가져오는 것이 좋습니다.

이전 멤버십

이전 멤버십은 소스 메시지 플랫폼에서 원래 스페이스 항목을 이미 떠났지만 Chat에 데이터를 유지하려는 사용자를 위해 만들어진 멤버십입니다. 스페이스가 더 이상 가져오기 모드가 아닌 후에 새 구성원을 추가하는 방법에 대한 자세한 내용은 멤버십 리소스 만들기를 참조하세요.

대부분의 경우 이전 구성원에게 Google의 데이터 보관 정책이 적용되는 경우 이전 멤버십으로 생성된 데이터 (예: 메시지 및 반응)를 Chat으로 가져오기 전에 스페이스에 보존하는 것이 좋습니다. 스페이스가 가져오기 모드에 있는 동안 Membership 리소스에서 create 메서드를 사용하여 이전 멤버십을 스페이스로 가져올 수 있습니다. 이전 멤버십의 휴가 시간을 보존하려면 멤버십의 deleteTime를 설정해야 합니다. 이 휴식 시간은 해당 멤버십에 대해 보관할 데이터에 영향을 주므로 정확해야 합니다. 또한 이 deleteTime은 공간 생성 타임스탬프 이후여야 하며 미래의 타임스탬프가 아니어야 합니다.

deleteTime 외에 createTime를 설정하여 이전 멤버십의 원래 가입 시간을 보존할 수도 있습니다. deleteTime와 달리 createTime는 선택사항입니다. 설정하지 않으면 createTimedeleteTime에서 1마이크로초를 빼서 자동으로 계산됩니다. 설정하는 경우 createTimedeleteTime 이전이어야 하며 스페이스 생성 시간 또는 그 이후여야 합니다. 이 createTime 정보는 데이터 보관 여부를 확인하는 데 사용되지 않으며 Google 관리 콘솔 및 Google Vault와 같은 관리 도구에 표시되지 않습니다.

사용자가 소스 메시지 플랫폼에서 스페이스에 참여하거나 나갈 수 있는 방법에는 여러 가지가 있을 수 있지만 (초대, 단독으로 참여, 다른 사용자가 추가 등) Chat에서는 이러한 작업은 모두 이전 멤버십 createTimedeleteTime 필드로 추가되거나 삭제된 것으로 표시됩니다.

다음 예시는 가져오기 모드 공간에서 이전 멤버십을 만드는 방법을 보여줍니다.

Python

"""Create a historical membership in import mode space."""

import datetime

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

# Specify required scopes.
SCOPES = [
    'https://www.googleapis.com/auth/chat.import',
]

CREDENTIALS = (
    service_account.Credentials.from_service_account_file('credentials.json')
    .with_scopes(SCOPES)
    .with_subject('EMAIL')
)

# Build a service endpoint for Chat API.
service = build('chat', 'v1', credentials=CREDENTIALS)

NAME = 'spaces/SPACE_NAME'
USER = 'users/USER_ID'
result = (
    service.spaces()
    .members()
    .create(
        parent=NAME,
        body={
            'createTime': f'{datetime.datetime(2000, 1, 3).isoformat()}Z',
            'deleteTime': f'{datetime.datetime(2000, 1, 4).isoformat()}Z',
            'member': {'name': USER, 'type': 'HUMAN'},
        },
    )
    .execute()
)

print(result)

다음을 바꿉니다.

가져온 리소스 검증

채팅 앱은 Message 리소스에서 list 메서드 를 호출하여 가져오기 모드 스페이스의 콘텐츠를 읽고 확인할 수 있습니다. 반환된 메시지의 emojiReactionSummariesattachment 필드에서 ReactionAttachment 리소스를 읽을 수 있습니다. 채팅 앱은 명의 도용을 통해서만 사용자를 대신하여 이 메서드를 호출할 수 있습니다. 자세한 내용은 채팅 앱 승인을 참고하세요.

채팅 앱은 Message 리소스에서 get 메서드를 호출하여 유효성 검사를 위해 개별 메시지를 읽을 수도 있습니다. 채팅 앱은 자체 권한을 사용하여 자체 메시지를 읽기 위해서만 이 메서드를 호출할 수 있습니다. 자세한 내용은 채팅 앱 승인을 참고하세요.

채팅 앱은 Membership 리소스에서 list 메서드를 호출하여 이전 멤버십을 나열할 수도 있습니다. 스페이스가 가져오기 모드를 종료하면 list 메서드는 더 이상 이전 멤버십을 노출하지 않습니다. 채팅 앱은 명의 도용을 통해서만 사용자를 대신하여 이 메서드를 호출할 수 있습니다. 자세한 내용은 채팅 앱 승인을 참고하세요.

Space 리소스에서 get 메서드를 호출하여 가져오기 모드 공간의 속성을 읽을 수 있습니다. 채팅 앱은 자체 권한을 사용해서만 이 메서드를 호출할 수 있습니다. 자세한 내용은 채팅 앱 승인을 참고하세요.

소스 데이터와 가져온 리소스 차이 조정

가져오기 중 원래 항목 변경으로 인해 가져온 리소스가 소스 메시지 플랫폼의 원래 항목과 더 이상 일치하지 않는 경우 채팅 앱은 Chat API를 호출하여 가져온 채팅 리소스를 수정할 수 있습니다. 예를 들어 사용자가 Chat에서 메시지를 작성한 후에 소스 메시지 플랫폼에서 메시지를 수정하면 채팅 앱은 가져온 메시지를 업데이트하여 원본 메시지의 현재 내용을 반영할 수 있습니다.

메시지

가져오기 모드 공간에서 메시지의 지원되는 필드를 업데이트하려면 Message 리소스에서 update 메서드를 호출합니다. 채팅 앱은 초기 메시지를 만들 때 사용한 것과 동일한 권한을 사용해서만 이 메서드를 호출할 수 있습니다. 최초 메시지를 만들 때 사용자 가장을 사용한 경우 동일한 가장 사용자를 사용하여 메시지를 업데이트해야 합니다.

가져오기 모드 스페이스에서 메시지를 삭제하려면 Message 리소스에서 delete 메서드를 호출합니다. 가져오기 모드 스페이스의 메시지는 원본 메시지 작성자가 삭제할 필요가 없으며 도메인의 모든 사용자를 가장하여 삭제할 수 있습니다. 채팅 앱은 자체 권한을 사용해서만 자신의 메시지를 삭제할 수 있습니다. 자세한 내용은 채팅 앱 승인을 참고하세요.

리액션

가져오기 모드 공간에서 메시지에 대한 반응을 삭제하려면 reactions 리소스에서 delete 메서드를 사용합니다. 가져오기 모드 공간에서의 인증 지원의 리소스 메서드와 유형에 대한 자세한 내용은 채팅 앱 승인을 참조하세요.

연결

가져오기 모드 스페이스에서 메시지의 첨부파일을 업데이트하려면 media 리소스에 upload 메서드를 사용합니다. 가져오기 모드 공간에서의 리소스 메서드 및 인증 지원 유형에 대한 자세한 내용은 채팅 앱 승인을 참조하세요.

이전 멤버십

가져오기 모드 공간에서 이전 멤버십을 삭제하려면 Membership 리소스에서 delete 메서드를 사용합니다. 스페이스 가져오기 모드가 종료되면 delete 메서드는 더 이상 이전 멤버십을 삭제할 수 없습니다.

가져오기 모드 스페이스에서는 이전 멤버십을 업데이트할 수 없습니다. 잘못 가져온 이전 멤버십을 수정하려면 스페이스가 아직 가져오기 모드에 있는 동안 먼저 멤버십을 삭제한 다음 다시 만들어야 합니다.

스페이스

가져오기 모드 공간에서 지원되는 필드를 업데이트하려면 spaces 리소스에서 patch 메서드를 사용합니다.

가져오기 모드 공간을 삭제하려면 spaces 리소스에서 delete 메서드를 사용합니다.

가져오기 모드 공간에서 지원되는 리소스 메서드 및 인증 유형에 대한 자세한 내용은 채팅 앱 승인을 참조하세요.

가져오기 모드 완료

completeImport 메서드를 호출하기 전에 검증리소스 차이 조정을 완료했는지 확인해야 합니다. 가져오기 모드에서 스페이스를 종료하면 되돌릴 수 없으며, 가져오기 모드 공간이 일반 스페이스로 변환됩니다. Chat에는 이러한 스페이스가 데이터 가져오기에 기여했다고 간주하는 표시가 없습니다.

가져오기 모드를 완료하고 사용자가 스페이스에 액세스할 수 있도록 하려면 채팅 앱은 Space 리소스에서 completeImport 메서드를 호출하면 됩니다. 채팅 앱은 명의 도용을 통해서만 사용자를 대신하여 이 메서드를 호출할 수 있습니다. 자세한 내용은 채팅 앱 승인을 참고하세요. 이 메서드가 완료되면 가장된 사용자는 스페이스 관리자로 스페이스에 추가됩니다. 이 메서드는 처음 create.space 메서드 호출 후 30일 이내에 호출해야 합니다. 30일이 지난 후에 이 메서드를 호출하려고 하면 가져오기 모드 공간이 삭제되고 더 이상 채팅 앱에서 액세스할 수 없기 때문에 호출이 실패합니다.

completeImport 메서드에서 가장된 사용자는 스페이스를 만든 사용자가 아니어도 됩니다.

다음 예시에서는 가져오기 모드를 완료하는 방법을 보여줍니다.

Python

"""Complete import."""

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

# Specify required scopes.
SCOPES = [
    'https://www.googleapis.com/auth/chat.import',
]

CREDENTIALS = (
    service_account.Credentials.from_service_account_file('credentials.json')
    .with_scopes(SCOPES)
    .with_subject('EMAIL')
)

# Build a service endpoint for Chat API.
service = build('chat', 'v1', credentials=CREDENTIALS)

NAME = 'spaces/SPACE_NAME'
result = service.spaces().completeImport(name=NAME).execute()

print(result)

다음을 바꿉니다.

멤버십 리소스 만들기

가져오기 모드가 완료된 스페이스의 사용자 멤버십을 추가하려면 Membership 리소스에서 create 메서드를 호출합니다. 채팅 앱은 처음 create.space 메서드 호출 후 30일 이내에 chat.import 범위와 사용자 가장을 사용하여 이 메서드를 계속 호출할 수 있습니다. 가장된 사용자는 스페이스 관리자여야 합니다.

30일이 경과한 후 채팅 앱에 이 메서드를 호출하려면 추가 멤버십 범위가 필요합니다.

채팅 앱은 멤버십 생성에 chat.import 범위를 계속 사용하고 가져온 스페이스에 대한 액세스 권한을 모든 구성원에게 제공할 수 있도록 가져오기가 완료된 후 즉시 멤버십 리소스를 만드는 것이 좋습니다.