无法通过Calendar API启用Google Meet的Attendance Report功能
解决方案:程序化启用Google Meet参会报告
核心问题分析
你之前的patch请求无效,是因为误用了conferenceData.createRequest(该参数用于新建Meet会议),而对于已存在Meet链接的事件,需要直接修改现有conferenceData.settings中的参会报告配置。
Google Apps Script 实现方案
以下脚本会遍历指定日历内的所有带Meet链接的事件,启用参会报告功能:
function enableAttendanceReportForMeetEvents() { const targetCalendarId = "your-calendar-id@domain.com"; // 替换为目标日历ID const eventList = Calendar.Events.list(targetCalendarId, { maxResults: 200, // 根据需求调整事件数量 singleEvents: true, conferenceDataVersion: 1 // 必须设置,否则无法获取/修改会议数据 }); if (!eventList.items || eventList.items.length === 0) { console.log("未找到包含Google Meet链接的事件"); return; } eventList.items.forEach(event => { // 筛选出带Google Meet的事件 if (event.conferenceData?.conferenceSolution?.type === "hangoutsMeet") { // 构建更新体:保留原有会议数据,仅启用参会报告 const updatePayload = { conferenceData: { ...event.conferenceData, settings: { ...event.conferenceData.settings, attendanceReportEnabled: true } } }; // 执行更新 Calendar.Events.patch(updatePayload, targetCalendarId, event.id, { conferenceDataVersion: 1 }); console.log(`已为事件「${event.summary}」启用参会报告`); } }); }
Python 实现方案(使用Google API客户端库)
如果偏好Python,以下代码实现相同功能:
首先安装依赖:
pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib
运行脚本:
from googleapiclient.discovery import build from google.oauth2.service_account import Credentials def enable_meet_attendance_reports(calendar_id): SCOPES = ["https://www.googleapis.com/auth/calendar"] SERVICE_ACCOUNT_KEY_PATH = "path/to/service-account-key.json" # 替换为你的服务账号密钥路径 # 初始化API客户端 credentials = Credentials.from_service_account_file( SERVICE_ACCOUNT_KEY_PATH, scopes=SCOPES ) service = build("calendar", "v3", credentials=credentials) # 获取日历事件 events = service.events().list( calendarId=calendar_id, maxResults=200, singleEvents=True, conferenceDataVersion=1 ).execute().get("items", []) if not events: print("没有找到带Google Meet链接的事件") return for event in events: # 判断是否为Google Meet事件 if ( "conferenceData" in event and event["conferenceData"]["conferenceSolution"]["type"] == "hangoutsMeet" ): # 更新会议设置 updated_conference_data = event["conferenceData"].copy() updated_conference_data["settings"] = updated_conference_data.get("settings", {}) updated_conference_data["settings"]["attendanceReportEnabled"] = True # 提交更新请求 service.events().patch( calendarId=calendar_id, eventId=event["id"], body={"conferenceData": updated_conference_data}, conferenceDataVersion=1 ).execute() print(f"已启用事件「{event['summary']}」的参会报告") if __name__ == "__main__": target_calendar_id = "your-calendar-id@domain.com" # 替换为目标日历ID enable_meet_attendance_reports(target_calendar_id)
关键注意事项
- 权限要求:执行脚本的账号(或服务账号)必须拥有目标日历的编辑权限,且Google Admin Console中已为组织/用户开启「参会报告」功能(路径:
Admin Console > Apps > Google Workspace > Google Meet > Meet settings)。 - conferenceDataVersion 参数:必须设置为
1,否则API会忽略conferenceData相关的修改请求。 - 现有事件兼容性:无论事件是手动创建还是API创建,只要包含Meet链接,都可以通过此方法启用参会报告。
内容的提问来源于stack exchange,提问作者Philipp Uhr
相关产品推荐
相关产品推荐

