Google Chat으로 데이터 가져오기

Google Chat API를 사용하면 다른 메시지 플랫폼에서 Google Chat으로 데이터를 가져올 수 있습니다. 다른 메시지 플랫폼에서 기존 메시지, 첨부파일, 반응, 멤버십, 스페이스 항목을 해당 Chat API 리소스로 가져올 수 있습니다. 가져오기 모드에서 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 범위를 사용하여 멤버십 리소스를 생성해야 합니다. 채팅 앱은 표준 Chat API 멤버십 범위를 사용하여 30일 후에도 멤버십을 만들 수 있습니다. 30일 후에도 스페이스가 아직 가져오기 모드인 경우 자동으로 삭제되어 액세스할 수 없으며 Chat 앱에서 복구할 수 없습니다. Chat 앱의 사용량 한도를 검토하여 이 기간 내에 예약된 모든 리소스를 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를 사용하여 첨부파일을 업로드할 수 있습니다. 가져오기 모드 스페이스의 리소스 메서드 및 인증 지원 유형에 관한 자세한 내용은 채팅 앱 승인을 참고하세요.

이전 멤버십

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

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

deleteTime 외에 createTime를 설정하여 이전 멤버십의 원래 가입 시간을 보존할 수도 있습니다. deleteTime와 달리 createTime는 선택사항입니다. 설정하지 않으면 deleteTime에서 1마이크로초를 빼서 createTime가 자동으로 계산됩니다. 설정된 경우 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에는 이러한 스페이스를 데이터 가져오기에서 비롯한다고 표시하는 표시가 없습니다.

가져오기 모드를 완료하고 사용자가 스페이스에 액세스할 수 있도록 하려면 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 범위를 계속 사용하고 가져온 스페이스에 대한 액세스 권한을 모든 구성원에게 제공할 수 있도록 가져오기가 완료된 직후에 채팅 앱에서 멤버십 리소스를 만드는 것이 좋습니다.