将数据导入 Google Chat

借助 Google Chat API,您可以将其他通讯平台中的数据导入 Google Chat。您可以将其他即时通讯平台中的现有消息、附件、回应、成员资格和聊天室实体导入相应的 Chat API 资源。如需导入此类数据,您可以在导入模式下创建 Chat 聊天室,然后将数据导入这些聊天室。

下面概述了使用导入模式空间导入数据所涉及的步骤:

  1. 查看 API 用量限额并提前规划
  2. 为 Chat 应用配置授权
  3. 在导入模式下创建聊天室
  4. 导入资源
  5. 验证导入的资源
  6. 调和导入资源差异与源数据
  7. 完成导入模式
  8. 创建会员资源

前提条件

Apps 脚本

Python

  • Python 3.6 或更高版本
  • pip 软件包管理工具
  • 适用于 Python 的最新 Google 客户端库。如需安装或更新这些插件,请在命令行界面中运行以下命令:

    pip3 install --upgrade google-api-python-client google-auth
    
  • 已发布的 Chat 应用。如需创建和发布 Chat 应用,请参阅构建 Google Chat 应用

  • 为 Chat 应用配置授权。必须为 Chat 应用导入内容的所有网域中委派该 Chat 应用全网域授权,请参阅授权 Chat 应用

查看 API 用量限额并提前规划

将数据导入 Chat 所需的时间可能相差很大,具体取决于要导入的 Chat 资源的数量。提前规划,方法是查看 Chat 应用的用量限额和计划从源消息传递平台导入的数据量,以确定预计时间表。

在导入模式下创建聊天室

如需在导入模式下创建聊天室,请对 Space 资源调用 create 方法,并将 importMode 设置为 true。为了保留来源消息传递平台的等效聊天室实体的创建时间,您可以设置聊天室的 createTime。此 createTime 必须设置为 2000 年 1 月 1 日到当前时间之间的值。

记下您创建的聊天室的 name,以便在将内容导入到聊天室时在后续步骤中引用它。

从调用 create 方法开始,Chat 应用有 30 天的时间来将资源导入聊天室、完成导入模式以及使用 chat.import 范围创建成员资源。聊天应用仍然可以在达到标准 Chat API 成员资格范围 30 天后创建成员资格。30 天后,如果聊天室仍处于导入模式,该聊天室将被自动删除,并且 Chat 应用将无法访问和恢复该聊天室。请提前规划,查看 Chat 应用的用量限额,确保在此时间范围内可以将所有已安排的资源导入 Chat。

以下示例展示了如何在导入模式下创建聊天室:

Apps 脚本

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 资源(例如消息、回应和附件)。在聊天室中创建资源时,您需要指定迁移来源消息平台的相关资源中的数据。

消息

您的 Chat 应用可以使用自己的授权导入消息,也可以通过模拟用户代表用户导入消息。(邮件作者设置为模拟用户帐号。)如需了解详情,请参阅向 Chat 应用授权。如需在导入模式聊天室中导入消息,请对 Message 资源调用 create 方法。为了保留来自源消息传递平台的原始消息的创建时间,您可以设置消息的 createTime。此 createTime 必须设置为介于您之前设置的空间创建时间与当前时间之间的值。

同一空间中的消息不能包含相同的 createTime,即使之前具有该时间的消息已被删除。

在导入模式聊天室中包含第三方网址的消息无法在 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 应用可以使用 Chat API 导入对消息的回应。如需了解导入模式聊天室中的资源方法和身份验证支持类型,请参阅向 Chat 应用授权

附件

您的 Chat 应用可以使用 Chat API 上传附件。如需了解导入模式聊天室中的资源方法和身份验证支持类型,请参阅向 Chat 应用授权

以往会员

历史成员资格是指为已经从来源消息传递平台退出原始聊天室实体但您希望在 Chat 中保留其数据的用户创建的成员。如需了解如何在聊天室不再处于导入模式后添加新成员,请参阅创建成员资源

在许多情况下,如果这些历史成员受 Google 数据保留政策的约束,您需要先保留聊天室中的历史成员所创建的数据(例如消息和回应),然后再将其导入 Chat。当聊天室处于导入模式时,您可以对 Membership 资源使用 create 方法,将这些历史成员资格导入到聊天室。为了保留历史成员资格的退出时间,您必须设置成员资格的 deleteTime。此离开时间必须准确,因为它会影响为这些成员资格保留哪些数据。此外,此 deleteTime 必须晚于聊天室创建时间戳,并且不得是未来时间戳。

除了 deleteTime 之外,您还可以设置 createTime 以保留历史成员资格的原始加入时间。与 deleteTime 不同,createTime 是可选的。如果未设置,系统将自动从 deleteTime 中减去 1 微秒来计算 createTime。如果设置了此字段,则 createTime 必须在 deleteTime 之前,并且不得早于聊天室创建时间。此 createTime 信息不会用于确定数据保留时长,也不会在 Google 管理控制台和 Google 保险柜等管理工具中显示。

虽然用户可能可以通过多种方式在来源消息传递平台中加入和退出聊天室(通过邀请、自行加入、由其他用户添加),但在 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)

替换以下内容:

验证导入的资源

您的 Chat 应用可以对 Message 资源调用 list 方法 ,以回读并验证导入模式空间的内容。您可以从任何返回消息的 emojiReactionSummariesattachment 字段中读取 ReactionAttachment 资源。聊天应用只能通过模拟代表用户调用此方法。如需了解详情,请参阅向 Chat 应用授权

您的 Chat 应用还可以通过对 Message 资源调用 get 方法来读取单独的消息以进行验证。聊天应用只能调用此方法,使用自己的权限来读取自己的消息。如需了解详情,请参阅向 Chat 应用授权

聊天应用还可以列出历史成员资格,方法是对 Membership 资源调用 list 方法。聊天室退出导入模式后,list 方法将不再公开历史成员资格。聊天应用只能通过模拟来代表用户调用此方法。如需了解详情,请参阅向 Chat 应用授权

您可以通过对 Space 资源调用 get 方法来读取导入模式空间的属性。聊天应用只能使用自己的授权调用此方法。 如需了解详情,请参阅向 Chat 应用授权

调和导入资源差异与源数据

如果由于导入过程中原始实体发生了变化,任何导入的资源不再与源消息传递平台中的原始实体匹配,Chat 应用可以调用 Chat API 来修改导入的聊天资源。例如,如果用户在 Chat 中创建消息后,在源消息传递平台中修改了该消息,Chat 应用可以更新导入的消息,使其反映原始消息的当前内容。

消息

如需更新导入模式空间中消息的受支持的字段,请对 Message 资源调用 update 方法。在调用该方法时,聊天应用只能使用最初创建消息时使用的相同授权。如果您在初始消息创建期间使用了用户模拟,则必须使用同一模拟用户更新该消息。

如需删除导入模式聊天室中的消息,请对 Message 资源调用 delete 方法。导入模式聊天室中的消息不需要由原始消息创建者删除,您可以通过模拟网域中的任何用户来删除。聊天应用只能使用自己的授权删除自己的消息。如需了解详情,请参阅向 Chat 应用授权

回应

如需在导入模式聊天室中删除对消息的回应,请对 reactions 资源使用 delete 方法。如需了解导入模式聊天室中的资源方法和身份验证支持类型,请参阅向 Chat 应用授权

附件

如需更新导入模式聊天室中的消息附件,请对 media 资源使用 upload 方法。如需了解导入模式聊天室中的资源方法和身份验证支持类型,请参阅向 Chat 应用授权

以往会员

如需删除导入模式空间中的历史成员资格,请对 Membership 资源使用 delete 方法。聊天室退出导入模式后,delete 方法将不再允许您删除历史成员资格。

您无法在导入模式聊天室中更新历史成员资格。如果要更正错误导入的历史成员资格,您需要先将其删除,然后在空间仍处于导入模式时重新创建。

聊天室

如需更新导入模式空间中支持的字段,请对 spaces 资源使用 patch 方法

如需删除导入模式空间,请对 spaces 资源使用 delete 方法

如需了解导入模式聊天室中的资源方法和身份验证支持类型,请参阅向 Chat 应用授权

完成导入模式

在调用 completeImport 方法之前,您应确保已完成验证资源差异协调。退出导入模式空间是不可逆转的过程,它会将导入模式空间转换为常规空间。Chat 中没有指示将这些聊天室归因于数据导入的指示器。

为了完成导入模式并允许用户访问聊天室,Chat 应用可以调用 Space 资源completeImport 方法。聊天应用只能通过模拟代表用户调用此方法。如需了解详情,请参阅向 Chat 应用授权。此方法完成后,系统会将模拟用户作为聊天室管理员添加到聊天室。必须在首次调用 create.space 方法后的 30 天内调用此方法。如果您在 30 天期限过后尝试调用此方法,调用会导致失败,因为导入模式空间已被删除,且无法再通过 Chat 应用访问。

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 应用在导入完成后立即创建成员资格资源,以便 Chat 应用可以继续使用 chat.import 范围来创建成员资格,并向所有成员提供所导入空间的访问权限。