使用服务账号批量创建Meet链接时Google Calendar API报错‘Invalid conference type value’
服务账号批量创建Google Meet链接报错:Invalid conference type value.
我使用具备全域委派权限的服务账号,通过Google Calendar API批量创建Google Meet链接,该服务账号是对应日历的创建者,理论上权限足够,但收到了如下错误。
请求代码
interface BatchMeetLinkProps { events: { startDateTime: Date; endDateTime: Date; title: string; }[]; calendarId: string; } const calendarBaseUrl = "https://www.googleapis.com/calendar/v3"; const batchUrl = "https://www.googleapis.com/batch/calendar/v3"; export const createBatchMeetLinks = async ({ events, calendarId, }: BatchMeetLinkProps) => { const accessToken = await auth.getAccessToken(); const boundary = `batch_${createId()}`; const batchBody = events .map((event, index) => { const requestBody = JSON.stringify({ summary: event.title, start: { dateTime: event.startDateTime.toISOString() }, end: { dateTime: event.endDateTime.toISOString() }, conferenceData: { createRequest: { requestId: createId(), conferenceSolutionKey: { type: "hangoutsMeet" }, }, }, }); return `--${boundary}\r\nContent-Type: application/http\r\nContent-ID: <item${index}>\r\n\r\nPOST ${calendarBaseUrl}/calendars/${calendarId}/events?conferenceDataVersion=1\r\nContent-Type: application/json\r\n\r\n${requestBody}`; }) .join("\r\n") .concat(`\r\n--${boundary}--`); const response = await fetch(batchUrl, { method: "POST", headers: { Authorization: `Bearer ${accessToken}`, "Content-Type": `multipart/mixed; boundary=${boundary}`, }, body: batchBody, }); const textResponse = await response.text(); console.log(textResponse); // Debugging response return textResponse; };
错误信息
"error": { "errors": [ { "domain": "global", "reason": "invalid", "message": "Invalid conference type value." } ], "code": 400, "message": "Invalid conference type value." }
已确认事项
- 服务账号具备全域委派权限
- 日历由该服务账号创建
- API请求包含
conferenceDataVersion=1参数 conferenceSolutionKey已设置为"hangoutsMeet",该值应为正确选项
问题成因分析及解决方案
1. 批量请求格式异常
当前每个子请求的${requestBody}结尾缺少\r\n,可能导致API无法正确解析请求体,进而错误识别conferenceSolutionKey的类型值。修改每个子请求的返回内容,在${requestBody}后添加\r\n:
return `--${boundary}\r\nContent-Type: application/http\r\nContent-ID: <item${index}>\r\n\r\nPOST ${calendarBaseUrl}/calendars/${calendarId}/events?conferenceDataVersion=1\r\nContent-Type: application/json\r\n\r\n${requestBody}\r\n`;
2. 服务账号Meet权限限制
即使服务账号是日历创建者,Google Workspace管理员可能限制了服务账号创建Meet会议的权限。需要登录Admin控制台,在Meet > 会议设置中确认是否允许服务账号发起Meet会议,部分域会默认限制服务账号的Meet功能。
3. 参数传递验证
虽然代码中已添加conferenceDataVersion=1,但建议抓包验证实际发送的批量请求中,每个子请求的URL是否确实包含该参数。批量请求中若某个子请求遗漏该参数,会导致API无法识别会议创建请求的格式。
4. requestId唯一性检查
确保每个会议创建请求的requestId是全局唯一值,重复的requestId可能触发API的异常处理逻辑,导致类型值校验失败。可以使用UUID生成更可靠的唯一ID。
内容的提问来源于stack exchange,提问作者user9247
相关产品推荐
相关产品推荐

