You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何指定单个Google Chat Space将消息拉取到Spreadsheet

修改方案

你当前持有的脚本是通过GmailApp拉取账号下全量Chat线程,本身没有指定Space的过滤逻辑,且该接口对新版Google Chat Space的消息兼容性差,推荐直接使用官方Chat高级服务实现单Space消息拉取,步骤如下:

  • 先获取目标Space的ID:打开网页版Google Chat,进入你要同步的目标Space,从浏览器地址栏提取spaces/后的字符串即为Space ID,例:地址为https://chat.google.com/u/0/space/XYZ123abc时,Space ID为XYZ123abc
  • 打开Apps Script编辑器,点击左侧边栏「服务」栏旁的加号,在弹出的服务列表中选择「Google Chat API」,使用默认v1版本点击添加完成授权前置准备
  • 将原有脚本全量替换为以下代码,把代码里的替换为你的目标Space ID改成你刚才拿到的实际ID即可:
function getTargetSpaceChats() {
  const sheet = SpreadsheetApp.getActiveSheet();
  // 填写表头
  sheet.getRange(1, 1, 1, 3).setValues([["发送时间", "发送人", "消息内容"]]);
  let nextPageToken = null;
  let row = 2;
  // 替换成你自己的目标Space ID
  const TARGET_SPACE_ID = "替换为你的目标Space ID";

  do {
    // 调用Chat API拉取指定Space下的消息
    const resp = Chat.Spaces.Messages.list(TARGET_SPACE_ID, {
      pageToken: nextPageToken,
      pageSize: 1000
    });
    const messages = resp.messages || [];
    // 批量写入表格,比逐行写入效率高很多
    const outputData = messages.map(msg => {
      const sendTime = new Date(msg.createTime);
      const sender = msg.sender?.displayName || "未知发送者";
      const content = msg.text || "(无文本内容,可能是卡片/附件消息)";
      return [sendTime, sender, content];
    });
    if (outputData.length) {
      sheet.getRange(row, 1, outputData.length, 3).setValues(outputData);
      row += outputData.length;
    }
    nextPageToken = resp.nextPageToken;
  } while (nextPageToken); // 分页拉完所有历史消息

  Browser.msgBox("指定Space消息同步完成!");
}

注意事项

  • 首次运行脚本会弹出OAuth授权提示,按指引走完授权流程即可,注意运行脚本的Google账号必须是目标Space的成员,否则会报权限错误
  • 上述脚本默认拉取目标Space下的全量历史消息,如果需要增量同步,可以在脚本里加个记录上次同步时间的逻辑,拉取时只拉创建时间晚于上次同步点的消息即可
  • 不推荐继续用原有GmailApp.getChatThreads()的方式加过滤实现需求:该接口已停止适配新的Chat功能,会漏拉群内回复、附件消息等内容,且全量遍历后再过滤的效率远低于直接调用Chat API指定Space拉取。

内容的提问来源于stack exchange,提问作者Allister Lobo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:27:41