调用Google Chat API创建空间返回400错误求助
问题排查与解决方案
错误原因
你遇到的400错误核心原因是:Google Chat API创建空间的接口不支持在请求体中传入memberships字段。memberships是独立的资源类型,不能在创建Space时直接嵌套传入,必须单独调用成员添加接口完成成员邀请操作。
此外代码还有两处冗余/不规范问题:
- URL中携带的
key参数多余:已使用OAuth2的Bearer令牌授权,无需额外添加API密钥参数。 - 虽然
ScriptApp.getOAuthToken()的授权方式正确,但需确保已配置对应权限范围(比如https://www.googleapis.com/auth/chat.spaces.create和https://www.googleapis.com/auth/chat.memberships.create)。
修正后的代码
以下是可正常创建空间并批量添加成员的完整代码:
function createRoomWithMembers() { var roomName = "ROOM_NAME"; var spaceMembers = ["SPACE_MEMBER_1@gmail.com", "SPACE_MEMBER_2@gmail.com"]; // 1. 创建Google Chat空间 var createSpaceUrl = "https://chat.googleapis.com/v1/spaces"; var createSpaceOptions = { method: "POST", muteHttpExceptions: true, headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken(), "Content-Type": "application/json" }, payload: JSON.stringify({ displayName: roomName, // 可选:指定空间类型,GROUP_CHAT为即时聊天群,默认是带话题的ROOM spaceType: "GROUP_CHAT" }) }; var createResponse = UrlFetchApp.fetch(createSpaceUrl, createSpaceOptions); var spaceData = JSON.parse(createResponse.getContentText()); // 检查空间创建状态 if (createResponse.getResponseCode() !== 200) { Logger.log("创建空间失败: " + createResponse.getContentText()); return; } var spaceName = spaceData.name; // 格式为"spaces/XXXXXX" Logger.log("空间创建成功: " + spaceName); // 2. 批量添加成员到空间 spaceMembers.forEach(function(memberEmail) { var addMemberUrl = `https://chat.googleapis.com/v1/${spaceName}/memberships`; var addMemberOptions = { method: "POST", muteHttpExceptions: true, headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken(), "Content-Type": "application/json" }, payload: JSON.stringify({ member: { user: { email: memberEmail } } }) }; var memberResponse = UrlFetchApp.fetch(addMemberUrl, addMemberOptions); if (memberResponse.getResponseCode() === 200) { Logger.log(`成功添加成员: ${memberEmail}`); } else { Logger.log(`添加成员失败 ${memberEmail}: ${memberResponse.getContentText()}`); } }); }
关键注意事项
- 空间类型选择:
spaceType设为ROOM是默认的话题式空间,设为GROUP_CHAT是无话题的即时聊天群,可根据需求调整。 - 权限配置:需在GCP项目的OAuth consent screen中添加
chat.spaces.create和chat.memberships.create权限范围,且脚本需重新完成授权流程。 - 外部成员限制:若邀请外部域用户,需确保你的Google Workspace组织允许外部成员加入Chat空间。
内容的提问来源于stack exchange,提问作者pini
相关产品推荐
相关产品推荐

