📅 日历 (Calendar)
规划、跟踪和管理事件日程,支持 AI 助手帮您制定计划。
日历 (Calendar) 是一个内置的日程规划功能,它为每位用户分配了一个个人日历。您可以创建事件、设置重复周期、与团队成员共享日历,并允许 AI 模型通过自然语言对话自主创建和管理日程事件。
当前活跃的 自动化 (Automations) 会自动展示在专用的 Scheduled Tasks(计划任务) 日历上,让您在一处便能对手动事件和自动化工作流一目了然。
日历功能默认启用,但管理员可以通过 ENABLE_CALENDAR 环境变量或管理面板中的开关将其禁用。
为什么选择日历功能?
日历功能赋予了 AI 模型感知和操作时间的能力。一旦启用,您可以随时让模型提醒您某件事、安排一项重复性的任务,或者检查本周后续有哪些安排,一切都自然且高效。
AI 驱动的日程规划
在启用了 原生函数调用 (Native function calling) 的情况下,模型可以通过自然语言来搜索、创建、更新和删除日历事件。您只需要对它说 “提醒我本周五下午 3 点跟设计团队对一下进度”,模型就会为您创建一个包含提醒通知的事件。当事件时间到达时,您将收到弹窗提示、浏览器系统通知以及(可选的)Webhook 触发,整个过程完全不需要您手动创建任何事件。
自动化集成
活跃的 自动化 (Automations) 会作为虚拟事件显示在专属的 Scheduled Tasks 日历上。即将运行的计划会显示下一次执行的具体时间,而历史运行记录则会直接链接到它们当时生成的聊天对话中,为您提供结合了人工事件与自动化工作流的统一时间线。
共享日历
可以通过访问授权将日历共享给特定的用户或用户组。团队成员可以在自己的日历界面旁看到被共享的事件,并支持内置的 RSVP 状态跟踪(待定、已接受、已拒绝、暂定)。
多日历组织
通过颜色标记,将不同的事件整理到不同的日历中(例如,“个人”、“团队会议”、“值班日程”)。每位用户在首次访问日历时,系统都会自动为其创建 Personal(个人) 和 Scheduled Tasks(计划任务) 日历。
核心功能特性
| 功能特性 | 描述 |
|---|---|
| 📅 月/周/日视图 | 包含月、周、日视图的完整日历 UI |
| 🔁 重复事件 | 基于 RRULE 的重复事件逻辑(按天、按周、按月、自定义重复) |
| 🤖 智能体自主管理 | AI 模型可以自主执行搜索、创建、更新和删除事件 |
| ⚡ 自动化图层 | 将活跃的自动化计划和历史运行记录虚拟渲染在日历上 |
| 👥 日历共享 | 通过访问授权,将日历共享给特定用户或用户组 |
| 📍 地点与描述 | 支持为事件添加地理位置信息和富文本描述 |
| 🎨 颜色定制 | 支持为每个日历和单条事件设置不同的颜色分类 |
| ✅ RSVP / 参会状态 | 邀请其他用户参加事件,支持待定/已接受/已拒绝/暂定状态 |
| 🔔 事件提醒 | 支持通过界面弹窗、浏览器通知和 Webhook 发送事件提醒 |
访问控制
非管理员用户访问日历功能受到权限系统的管控。
- 管理员 (Admins):始终拥有日历的完整访问权限
- 普通用户 (Users):需要拥有 Features > Calendar 权限
请参见 RBAC 权限文档 中对应的权限类别。
要授予普通用户该权限:
- 打开 Admin Panel > Users > Groups
- 编辑 Default permissions(默认权限) 或某个特定用户组
- 开启 Features > Calendar
您也可以通过 USER_PERMISSIONS_FEATURES_CALENDAR 来修改此默认值。
快速开始
访问日历
在侧边栏中打开 User Menu(用户菜单) > Calendar。首次访问时,系统将自动创建两个默认日历:
在用户菜单中按住 Shift 键会显示固定/取消固定图标。固定“日历”将会在侧边栏快捷导航区添加一个日历图标,实现一键访问。
- Personal(个人):您手动创建事件的默认日历(蓝色,首次访问时自动创建)
- Scheduled Tasks(计划任务):仅用于展示自动化日程与历史运行记录的只读虚拟图层(紫色,仅当用户拥有 自动化 (Automations) 访问权限时可见)
创建日历
点击日历侧边栏中 Calendars 标题旁的 + 按钮,以打开创建新日历模态框。输入日历名称,从预设调色板(蓝色、红色、绿色、琥珀色、紫罗兰色、粉色、青色、橙色)中选择一种主色调,然后点击 Create。新创建的日历会立即出现在侧边栏中,并且在您创建或编辑事件时的日历选择器中可见。每个日历归其创建者所有,并可以通过 共享日历 分享给他人。
创建事件
- 点击 New Event 按钮(位于侧边栏或顶部栏),或者直接点击日历网格上的任何一天/某个小时单元格
- 填写事件详细信息:
- 标题(必填)
- 所属日历:将事 件添加到哪个日历中
- 时间:设置日期和具体时间,或勾选 All day(全天)
- 地点(可选)
- 描述(可选)
- 点击 Create
编辑或删除事件
点击日历上的任意事件即可打开事件编辑器。从那里您可以更新事件详情或删除该事件。由自动化自动生成的虚拟事件无法在此直接编辑;点击它们将直接导航至该自动化配置页面或当时执行的聊天对话。
日历视图
使用顶部工具栏的下拉菜单在不同视图之间进行切换:
| 视图 | 描述 |
|---|---|
| 月 (Month) | 完整的月度网格与事件条。如果一天中的事件超出容量,会显示 “+N more” 链接以跳往当天视图。 |
| 周 (Week) | 包含每小时格子槽的 7 天时间网格。您可以垂直滚动来浏览一天的安排。 |
| 日 (Day) | 单日的时间网格与小时格子槽,用于更精细的日程规划。 |
使用 箭头按钮 进行前后时间导航,或点击 Today(今天) 按钮迅速跳转回当前日期。侧边栏的迷你日历也提供了快速日期选择导航。
自 动化集成
Scheduled Tasks(计划任务) 日历在自动化管理与日历视图之间架起了一座桥梁。它是一个虚拟日历,不实际存储在数据库中,而是只要用户拥有自动化功能访问权限,系统就会在调用 API 时实时动态合成。
未来运行安排
对于每个配置了 RRULE 定时运行的活跃自动化,日历系统会计算其即将发生的运行时间点,并将它们作为虚拟事件渲染在请求的日期范围内。
历史运行记录
已完成的自动化运行会作为历史事件出现在日历上。每一个事件都会展示自动化的名称,并包含指向其所生成聊天会话的链接元数据。点击某次历史运行事件即可立刻打开其创建的聊天。
工作原理
- 该虚拟日历使用一个固定的常数 ID (
__scheduled_tasks__),并且它在事件编辑器的日历选择器中是被排除掉的 - 虚拟事件的 ID 会带上前缀
auto_(针对未来运行安排)或run_(针对历史运行记录) - 它们无法在日历 UI 界面中进行编辑或删除
- 点击未来的计划运行事件会导航至该自动化的配置编辑器
- 点击历史运行事件会直接导航至执行该次运行的聊天会话中
智能体事件管理
在启用了原生函数调用的模式下,AI 模型可以自主帮您管理日历:
| 关联工具 | 作用 |
|---|---|
search_calendar_events | 跨所有可访问的日历,通过关键字和/或日期范围搜索事件 |
create_calendar_event | 在默认日历或指定的日历上创建新事件 |
update_calendar_event | 更新事件的标题、时间、描述、地点,或者将其取消 |
delete_calendar_event | 永久删除某个日历事件 |
用户: 从下周一开始,帮我把每周工作日的上午 9 点都安排一次团队晨会。
用户: 我这周日历上都有什么安排?
用户: 把明天的设计评审移到下午 3 点,并把地点加到 A 栋大楼。
配置要求
要使聊天对话中的日历工具可用,必须满足以下条件:
- 模型必须启用了 Native Function Calling(原生函数调用)
- 模型必须启用了 Builtin Tools(内置工具) 能力
- 模型的内置工具设置中必须启用了 Calendar(日历) 类别(默认启用)
- 全局必须启用了
ENABLE_CALENDAR(默认启用) - 用户必须被授予了 Features > Calendar 权限(管理员始终自动通过)
所有的日期和时间值都会自动根据用户本地检测到的时区进行适配处理。
有关所有内置工具的完整详情,请参阅 内置工具参考。
共享日历
日历支持与知识库、模型及其他资源完全相同的访问授权体系。
分享日历
- 打开日历的 settings(设置)(通过日历列表或编辑接口端点)
- 为特定用户或用户组添加具有
read(只读)或write(读写)权限的访问授权 (Access Grant)
共享访问权限提供的功能
| 授权权限 | 实际效果 |
|---|---|
| Read (只读) | 可以查看该日历及其包含的事件 |
| Write (读写) | 只读权限 + 可以在该日历上创建、更 新和删除事件 |
只有日历的所有者 (Owner)(或系统管理员)才有权限管理该日历的访问授权并删除日历本身。
将日历设置为任何人均可只读或读写的通配符授权(Wildcard Access Grant)受到 Calendars Public Sharing 权限的管控。当非管理员所有者被禁用了此权限时,在创建或更新日历时,公开 Principal(主体)会被静默从访问授权列表中剥离 —— 但针对特定用户和特定用户组的显式授权不会受到影响。管理员始终保留公开分享的能力。可在 Admin Panel → Users → Groups → Permissions 中按组进行配置,或配置 USER_PERMISSIONS_CALENDAR_ALLOW_PUBLIC_SHARING。
参与者与 RSVP 状态
日历事件支持记录参与者以及他们的回复 (RSVP) 状态跟踪:
| 状态值 | 含义 |
|---|---|
pending | 邀请已发送,尚未回复 |
accepted | 参与者已确认参会 |
declined | 参与者已拒 绝参会 |
tentative | 参与者目前还不确定 |
参与者可以通过 API 接口更新他们自己的 RSVP 状态。只要用户是某场事件的参与者,无论他们是否是该日历的所有者,该事件在其日历界面上都是可见的。
提醒与告警
每个事件都可以配置 Reminder(提醒),用于控制在事件开始前多久发出告警。
| 提醒选项 | 提醒行为 |
|---|---|
| None | 不发送告警 |
| At time of event | 事件开始时立刻告警 |
| 5 / 10 / 15 / 30 minutes before | 提前相应的分钟数发送告警 |
| 1 hour before | 提前 60 分钟发送告警 |
默认值为 提前 10 分钟。
告警投递方式
- 界面弹窗 (Toast notification):在 Open WebUI 界面中弹出弹框,显示事件标题和距离开始的剩余时间。点击该弹窗可直接跳转至日历视图。
- 浏览器系统通知 (Browser notification):如果用户在设置中开启了浏览器通知,则会展示操作系统级别的原生推送通知。
- Webhook 接口推送:如果用户在 Settings > Notifications 中配置了 Webhook URL,系统会向该 URL 推送
calendar_alert请求。
告警事件在服务器端会通过 meta.alerted_at 字段进行去重,因此即使在系统重启或多实例集群部署中,每场事件的每次开始时间最多也只可能触发一次告警。
全局日程告警检测的预看窗口时间可以通过 CALENDAR_ALERT_LOOKAHEAD_MINUTES 进行配置(默认值:10 分钟)。
配置项
| 环境变量参数 | 默认值 | 描述 |
|---|---|---|
ENABLE_CALENDAR | True | 在全局启用或禁用日历功能 |
USER_PERMISSIONS_FEATURES_CALENDAR | True | 默认情况下,允许或禁止非管理员用户访问日历功能 |
USER_PERMISSIONS_CALENDAR_ALLOW_PUBLIC_SHARING | False | 是否允许非管理员所有者向日历添加通配符只读/读写访问授权 |
SCHEDULER_POLL_INTERVAL | 10 | 计划调度器心跳轮询的时间间隔(秒,与自动化功能共享) |
CALENDAR_ALERT_LOOKAHEAD_MINUTES | 10 | 检测即将发生的事件 的默认告警时间预看窗口(分钟) |
日历功能也可以在 Admin Panel > Settings > General 的“Features(功能特性)”部分直接进行开关配置。
局限性
不支持外部日历同步
日历功能目前是 Open WebUI 内部的独立模块。它无法通过 CalDAV/iCal 协议与 Google Calendar、Outlook 或其他第三方外部日历服务同步。
“计划任务”日历是虚拟且只读的
Scheduled Tasks(计划任务)日历是在运行时实时生成的,并不实际保存在数据库里。它的事件无法从日历 UI 界面中进行修改或删除。要调整运行日程,请前往 自动化 (Automations) 页面对底层的自动化任务进行管理。
重复事件展开
重复发生的事件是在每次查询时在服务端进行计算展开的。过 于复杂的 RRULE 模式或者跨度极长的查询日期范围,可能会使 API 接口的响应时间有所增加。