谷歌表格新增用户时自动调用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(); }
配置步骤
- 替换代码中的
NOTION_API_KEY、NOTION_PAGE_ID、SHEET_NAME为实际值 - 点击App Script编辑器的「运行」按钮,首次运行会要求授权,按提示完成权限授予
- 运行
createOnEditTrigger函数创建触发器,之后表格新增邮箱时会自动同步到Notion
注意事项
- 要添加的邮箱必须是已注册Notion的账号,否则API会返回错误
- 确保Notion集成已被添加到目标页面:打开Notion页面,点击右上角「...」→「添加连接」,选择你的集成
- 表格B列用于标记已处理的邮箱,请勿随意删除该列内容
内容的提问来源于stack exchange,提问作者Roman Kovalevsky
相关产品推荐
相关产品推荐

