如何通过Google App Script调用Chat API为Google Chat房间(非群组)添加用户
解决方案
为什么你之前的方案失效
Google Chat入站webhook仅支持@已加入当前房间的用户,未加入用户的提及标记会被接口直接过滤,不会触发自动加人逻辑,这个是官方的功能限制,所以该思路无法落地。
可行方案:直接调用Google Chat API添加成员
你可以通过Google Chat API的memberships.create接口直接向目标房间添加域内用户,无需发送@消息,完全满足你的需求。
前置准备
- 你的账号需要具备Google Workspace管理员权限,同时是目标Chat房间的管理员/成员
- 在App Script项目的「项目设置」中勾选「在appsscript.json清单中显示高级服务」,然后在清单中添加Chat API的OAuth授权范围:
https://www.googleapis.com/auth/chat.memberships - 开启App Script的Admin SDK和Chat API高级服务
优化后代码示例
// 替换为你的实际域名 const DOMAIN = 'domain.xyz'; // 替换为目标Chat房间的ID const TARGET_SPACE_ID = 'xxxxxx'; // 处理新用户加入组织的触发事件,也可以手动调用runBatchAdd()批量加存量用户 function onNewUserAdded(event) { const newUserEmail = event.primaryEmail; addUserToChatSpace(newUserEmail); } // 批量添加存量域内用户到房间 function runBatchAdd() { let pageToken; do { const page = AdminDirectory.Users.list({ domain: DOMAIN, maxResults: 50, pageToken: pageToken }); if (page.users) { page.users.forEach(user => { addUserToChatSpace(user.primaryEmail); // 加1秒延迟避免触发API限流 Utilities.sleep(1000); Logger.log(`已添加用户:${user.name.fullName} <${user.primaryEmail}>`); }); } pageToken = page.nextPageToken; } while (pageToken); } // 单个用户添加到Chat房间核心方法 function addUserToChatSpace(userEmail) { const apiUrl = `https://chat.googleapis.com/v1/spaces/${TARGET_SPACE_ID}/members`; const payload = { member: { name: `users/${userEmail}` } }; const options = { method: 'post', contentType: 'application/json', headers: { Authorization: `Bearer ${ScriptApp.getOAuthToken()}` }, payload: JSON.stringify(payload), muteHttpExceptions: true }; const response = UrlFetchApp.fetch(apiUrl, options); if (response.getResponseCode() !== 200) { Logger.log(`添加用户${userEmail}失败:${response.getContentText()}`); } }
注意事项
- 如果要实现新用户自动加人,需要在Google Workspace管理员后台配置事件触发器,将
onNewUserAdded函数绑定到「用户创建」事件即可 - 不要调整批量添加的频率,避免触发Chat API的限流规则
- 如果目标房间为公开房间,域内用户加入后默认不会收到提醒,不会打扰用户
内容的提问来源于stack exchange,提问作者Harsh Choudhary
相关产品推荐
相关产品推荐

