You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Google Calendar API为服务账号添加用户日历的忙闲读取权限?

实现服务账号读取用户Gmail主日历忙闲权限的步骤

1. 前期准备:创建服务账号并启用API

  • 在Google Cloud控制台创建服务账号,生成并下载JSON格式的密钥文件,妥善保存。
  • 在控制台的API库中找到Google Calendar API,启用该服务。

2. 为用户主日历配置权限(二选一)

方式一:普通Gmail用户手动授权

让用户操作自己的Google日历:

  • 打开Google日历,找到主日历(通常名称与Gmail邮箱一致),点击右侧的三个点 → 「设置和共享」。
  • 进入「共享特定人员」页面,添加服务账号的邮箱地址,权限选择「查看忙闲信息」,保存设置。

方式二:Google Workspace域管理员批量授权(仅适用于域内用户)

如果你是Workspace域管理员,可以跳过用户手动授权:

  • 登录Google Admin控制台,进入「安全」→「API控制」→「域范围委派」。
  • 添加服务账号的客户端ID,授予权限范围https://www.googleapis.com/auth/calendar.freebusy,保存后即可让服务账号访问域内所有用户的日历忙闲信息。

3. 代码调用FreeBusy API

以Python为例,实现服务账号模拟用户身份查询忙闲信息:
首先安装依赖:

pip install google-api-python-client google-auth

然后编写核心代码:

from google.oauth2 import service_account
from googleapiclient.discovery import build

# 配置参数
SCOPES = ['https://www.googleapis.com/auth/calendar.freebusy']
SERVICE_ACCOUNT_KEY_PATH = '你的服务账号密钥文件路径.json'
TARGET_USER_EMAIL = '用户提供的Gmail地址@gmail.com'

# 生成带用户模拟的凭证
credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_KEY_PATH, scopes=SCOPES
)
delegated_creds = credentials.with_subject(TARGET_USER_EMAIL)

# 构建Calendar服务并查询忙闲
calendar_service = build('calendar', 'v3', credentials=delegated_creds)
freebusy_query = {
    "timeMin": "2024-05-01T00:00:00Z",  # 查询起始时间,需为ISO 8601格式
    "timeMax": "2024-05-07T23:59:59Z",  # 查询结束时间
    "items": [{"id": TARGET_USER_EMAIL}]  # 主日历ID即用户Gmail地址
}

response = calendar_service.freebusy().query(body=freebusy_query).execute()
print("用户忙闲信息:", response)

关键注意事项

  • 权限最小化:优先使用calendar.freebusy权限,而非calendar.readonly,前者仅能读取忙闲数据,安全性更高。
  • 普通Gmail用户必须手动授权:非Workspace域的用户无法通过域委派授权,必须完成手动共享步骤才能让服务账号访问其日历忙闲信息。

内容的提问来源于stack exchange,提问作者Yusif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:55:18