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

如何通过exchangelib GetUserAvailability查询Exchange联系人忙闲时间

问题解答

完全可以,exchangelib封装的GetUserAvailability服务和Outlook客户端查看日历参会人忙/闲状态调用的是Exchange同一套底层EWS接口,返回的忙闲时段、状态标记等内容和Outlook端添加联系人到日历邀请时看到的空闲/忙碌展示效果完全一致。

实现注意事项

  • 权限要求:调用接口使用的Exchange账号,默认拥有组织内联系人的忙闲信息查看权限,和Outlook端无需额外配置就能看他人忙闲的权限逻辑一致;如果目标联系人手动修改了日历权限关闭了忙闲对外展示,接口也会和Outlook一样无法拉取到对应数据。
  • 查询能力对齐:默认调用时仅返回时段对应的状态(空闲/暂定/忙碌/外出/离线),不会返回会议主题、参会人等隐私内容;如果目标联系人对你开放了日历详情权限,调整接口参数即可拉取到完整的日程详情,和Outlook端看到的效果完全匹配。
  • 时间粒度支持:支持自定义查询的起止时间窗口,默认时间粒度和Outlook一致为15分钟,可根据业务需求调整查询粒度,也支持跨时区的时间自动转换。

最简参考代码

from exchangelib import Credentials, Account, DELEGATE
from exchangelib.properties import Attendee, TimeWindow
import datetime

# 初始化Exchange账号连接
creds = Credentials("你的企业邮箱地址", "你的账号密码")
acc = Account("你的企业邮箱地址", credentials=creds, autodiscover=True, access_type=DELEGATE)

# 配置查询时间范围:示例为查询当前时间起未来3天的日程
query_start = datetime.datetime.now()
query_end = query_start + datetime.timedelta(days=3)
time_window = TimeWindow(start=query_start, end=query_end)

# 指定要查询忙闲状态的目标联系人
target = Attendee(mailbox="目标联系人的邮箱地址")

# 调用忙闲查询接口
result = acc.protocol.get_user_availability(
    attendees=[target],
    time_window=time_window,
    requested_data="FreeBusy"  # 若需查看详情可替换为"FreeBusyWithDetails"
)

# 解析返回的忙闲时段数据
for event in result.attendees[0].calendar_events:
    print(f"时段: {event.start_time} ~ {event.end_time}, 状态: {event.busy_status}")

提示:如果批量查询多个联系人的忙闲状态,可以把多个目标联系人统一放到attendees参数列表里,一次接口调用就能拿到所有目标的忙闲数据,和Outlook添加多个参会人时批量拉取忙闲的逻辑一致,效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:12:19