如何通过Google Calendar API获取日历事件完整参会人列表
Google Calendar API 拉取完整参会人列表方案
问题本质
这个现象和maxAttendees参数、授权scope配置错误无关,是Google Calendar原生权限规则叠加请求身份不正确导致的:
- 当事件配置项
guestsCanSeeOtherGuests设为false(即组织者关闭了「参会人可查看其他全部参会人」开关)时,非事件所有者的账号拉取事件详情时,返回的参会人列表会被自动裁剪:普通参会人仅能看到自身、事件组织者、以及和自己通过同一个Google群组批量添加的同组成员,单独添加的其他参会人会被隐藏。 - 你测试时用A1的日历ID依然拿不到全量参会人,核心原因是服务账号没有拿到事件的所有者级访问权限:仅将日历共享给服务账号、或使用只读scope发起请求时,哪怕访问的是组织者的日历,拿到的也是共享视图下的裁剪数据,而非事件的完整原始数据。
你给出的测试场景完全匹配该规则的表现:单独添加的A2/A3/A4仅在访问自身日历下的事件副本时可见,通过群组G6批量添加的成员同组互可见,其他场景下A2/A3/A4都会被隐藏。
正确请求步骤
- 前置配置:给服务账号开启Google Workspace全域委托授权(DWD),授权时必须添加
https://www.googleapis.com/auth/calendarscope,不要使用只读类的calendar scope,只读权限无法读取被权限控制隐藏的参会人字段。 - 身份配置:发起API请求时,不要直接使用服务账号自身身份,必须通过JWT claim里的
sub字段,模拟事件原始创建者的身份(即事件返回体中creator.email对应的账号,注意和organizer.email区分,委托创建的事件二者可能不一致)。如果事件创建在团队公共日历下,需要模拟该公共日历的所有者/有编辑权限的管理员账号。 - 接口选择:别在
Events.list接口上浪费时间调参数,list接口本身就会对非所有者身份的返回结果做字段裁剪,哪怕参数拉满也拿不到全量隐藏数据。直接调用Events.get接口传入目标事件的eventId,请求参数固定配置如下:maxAttendees = 100 // 配置为大于实际参会人数的数值,接口单页最大支持返回100个参会人 alwaysIncludeEmail = true singleEvents = true - 异常排查:如果按上述配置请求后依然缺失参会人,检查对应事件的配置:跨域添加的外部参会人如果尚未接受参会邀请,Google Calendar会默认对非参会人自身隐藏该条目,这种情况需要事件创建者在Google Calendar网页端手动关闭「隐藏参会人列表」开关,API才能拉取到全量数据。
内容的提问来源于stack exchange,提问作者seb
相关产品推荐
相关产品推荐

