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

谷歌表格新增用户时自动调用Notion API实现权限授予方案咨询

谷歌表格自动同步用户到Notion权限的App Script实现

前置准备

  • 确认你的Notion集成已获取Internal Integration Token(即API密钥),且该集成已被添加到目标Notion页面/数据库中
  • 提取目标Notion页面ID:打开页面后,URL里https://www.notion.so/之后、?v=之前的字符串就是页面ID
  • 谷歌表格中预留一列存储用户邮箱(示例用A列,表头设为“用户邮箱”,可自行调整)

完整代码实现

打开谷歌表格,点击「扩展程序」→「App Script」,替换默认代码为以下内容,记得替换代码里的三个核心变量:

// 替换为你的Notion API密钥
const NOTION_API_KEY = "你的Internal Integration Token";
// 替换为目标Notion页面ID
const NOTION_PAGE_ID = "你的Notion页面ID";
// 替换为你的表格名称(比如"Sheet1")
const SHEET_NAME = "Sheet1";

// 检查邮箱是否已处理,避免重复添加
function isEmailProcessed(email) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
  const processedEmails = sheet.getRange("B:B").getValues().flat().filter(String);
  return processedEmails.includes(email);
}

// 标记邮箱为已处理
function markEmailAsProcessed(email) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
  const emailRange = sheet.getRange("A:A").createTextFinder(email).findNext();
  if (emailRange) {
    sheet.getRange(emailRange.getRow(), 2).setValue("已处理");
  }
}

// 调用Notion API添加用户权限
function addUserToNotion(email) {
  const url = `https://api.notion.com/v1/pages/${NOTION_PAGE_ID}/invite`;
  
  const payload = JSON.stringify({
    "users": [
      {
        "email": email
      }
    ],
    "permission_level": "edit" // 可改为"read"或"comment",按需调整权限
  });
  
  const options = {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${NOTION_API_KEY}`,
      "Notion-Version": "2022-06-28", // 保持该版本或使用最新兼容版本
      "Content-Type": "application/json"
    },
    payload: payload
  };
  
  try {
    UrlFetchApp.fetch(url, options);
    console.log(`成功添加用户 ${email} 到Notion`);
    return true;
  } catch (e) {
    console.error(`添加用户失败:${e.message}`);
    return false;
  }
}

// 主函数:扫描新增邮箱并同步
function syncNewUsersToNotion() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
  const emails = sheet.getRange("A:A").getValues().flat().filter(String);
  
  emails.forEach(email => {
    if (!isEmailProcessed(email)) {
      const success = addUserToNotion(email);
      if (success) {
        markEmailAsProcessed(email);
      }
    }
  });
}

// 创建编辑触发器:表格新增内容时自动触发同步
function createOnEditTrigger() {
  ScriptApp.newTrigger("syncNewUsersToNotion")
    .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
    .onChange()
    .create();
}

配置步骤

  1. 替换代码中的NOTION_API_KEY、NOTION_PAGE_ID、SHEET_NAME为实际值
  2. 点击App Script编辑器的「运行」按钮,首次运行会要求授权,按提示完成权限授予
  3. 运行createOnEditTrigger函数创建触发器,之后表格新增邮箱时会自动同步到Notion

注意事项

  • 要添加的邮箱必须是已注册Notion的账号,否则API会返回错误
  • 确保Notion集成已被添加到目标页面:打开Notion页面,点击右上角「...」→「添加连接」,选择你的集成
  • 表格B列用于标记已处理的邮箱,请勿随意删除该列内容

内容的提问来源于stack exchange,提问作者Roman Kovalevsky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:28:27