功能说明
功能说明
WebUI 工作区
WebUI 采用桌面仪表盘式布局:左侧导航按账号权限显示可用页面;老师和班主任账号会在课表和控制入口下方看到“我的日程”,按姓名只列出自己任教班级的课次;顶部搜索框可按名称快速跳转到页面或常用任务。概览页集中展示当前课程、插件连接、在线手表、账号数量、课表同步与插件凭据;侧栏可在桌面端收起,并在窄屏上改为抽屉导航。
顶部提供当前页面刷新、明暗主题切换和个人账号入口;个人账号页可修改密码、撤销设备会话,系统管理员还可在此修改自己的用户名;其他账号的用户名由管理员在“人员权限”中维护。WebUI 默认采用深石墨色界面,可在顶部切换浅色主题;主题与桌面侧栏收起状态保存在当前浏览器中,不会修改服务端账号或其他设备的设置。
访问不存在的 WebUI 地址时,服务端会显示 RemoteCI 自己的“页面不存在”状态页,而不是浏览器默认错误页;页面上的按钮会按当前登录状态返回登录页、概览或个人账号。/api/* 与 /ws 的错误响应保持原样,便于脚本和客户端按状态码处理。
课程状态
插件从 ClassIsland 收集当前课表状态,每秒推送给手表和服务端:
- 当前课程与下一节课程。
- 当前时间段和下一时间段。
- 上课或课间剩余倒计时。
- 课表方案名称、是否启用和是否已加载。
- 状态生成时间,用于判断数据是否过期。
- 主界面显隐状态、睡眠/休眠可用性,以及音量状态(是否可控、百分比、静音)。
当前时间段使用插件本地时间,并随快照携带插件时区偏移(timeZoneOffsetMinutes)。手表以快照的 UTC 生成时间加该偏移推算插件本地当前时间,再计算课程进度环,因此即使手表与电脑时区设置不一致,上课/课间进度环也能正常显示。
七日课表
服务端保存插件最近一次推送的七日课表,包含每天日期、修订号、课程列表和科目清单。所有已登录账号都能在 WebUI、手机和手表查看七日课表;从插件拉取课表只对系统管理员和获准的本班班主任开放(见班主任权限),自动拉取周期是对全部班级生效的全局设置,只有系统管理员可以修改;换课仍需要“换课”权限。最近一次同步的课表会保存到数据库:插件离线、甚至服务端重启后,WebUI、手机和手表仍可查看最后一次同步的课表,“我的日程”、课程提醒和换课申请照常按这份课表工作,课表页会提示数据来自哪次同步;插件重新连接后服务端会立即拉取最新课表并覆盖。
课表数据的来源规则:插件上线过的班级,课表和“我的日程”始终使用最后一次上线时同步的数据,插件离线后也不会改用档案;插件从未同步过课表的班级,只要在“档案”页保存了班级档案,WebUI 课表页、访客页、GET /api/schedule、手机与手表的课表页和老师的“我的日程”就会自动按这份当前档案推算从今天起七天的课表,不必等待插件上线。手机与手表的课表由服务端经 WebSocket 下发:连接时推送一次,档案保存后立即推送,在手机或手表上手动刷新课表时也会重新推算。推算规则与 ClassIsland 一致:按日期安排的预定课表或临时层优先(临时层需档案开启临时层),其次按星期、课表群匹配常规课表,并套用服务端的调休日历(放假日不排课,调休上学日按指定星期上课)。课表页会注明“按本班当前档案推算”,此时“科目教师”和“换课”区隐藏,需要修改请直接编辑班级档案,或等插件同步后再操作;访客页、手机与手表课表页同样注明来源,手机与手表也不提供换课入口。老师和班主任的“我的日程”与下一节课也会纳入这类班级中教师名匹配的课程,WebUI 与手机的“我的日程”在班级名旁标注“按档案推算”。档案推算的课表只用于查看,不会让老师获得该班的访问权限,也不能用于换课申请,这些功能仍以插件同步的实际课表为准。多周轮换课表的起始周保存在教室端 ClassIsland 设置中,服务端无法得知,推算时把本周当作轮换第 1 周,并在页面上提示可能与教室端不同。插件同步课表后自动改为显示插件课表。
WebUI 课表页和访客页的课表表格固定按周一到周日排列列;由于课表覆盖从今天起的七天,排在今天之前的星期几显示的是下周对应日期(列头下方标注具体日期)。今天所在的列以浅绿色标出,并在列头注明“(今天)”,“今天”按教室端时区计算。
插件每次连接云端时,服务端都会自动拉取一次最新课表。ClassIsland 的“RemoteCI 设置”提供“立即推送当前课表”,可主动把当前七日课表发送给服务端和在线手表,并显示成功、失败或超时。系统管理员和获准的本班班主任可在 WebUI 侧边栏“课表”页面点击“立即拉取课表”,成功后用插件最新课表覆盖服务端缓存;手表与手机课表页也只对这两类账号显示拉取入口,其他账号看不到该按钮,发出的拉取请求会被服务端忽略。插件推送、WebUI 拉取、手表拉取、自动拉取和连接初始化共享一个课表任务锁;系统管理员还可把在线期间的自动拉取周期设置为关闭、每 15 分钟、每小时、每 6 小时或每天。插件离线时请求不会排队,重新连接后会自动再拉取。
WebUI 换课表单中的原节次与目标节次都以“日期 · 节次 · 科目”列出;服务端会按当前缓存课表验证所选日期、修订号和节次,交换目标必须是原节次同一天的其他课程。
换课时可勾选“永久换课”。默认操作只修改当天临时课表;永久换课会把交换或替换写入 ClassIsland 源课表,使本周及以后每周继续生效。Android 手机、Wear OS 手表和 WebUI 使用同一字段,插件会按请求选择对应课表层。手机端的能力快照仅用于提示,换课最终仍由服务端按当前班级权限和插件能力复核;快照短暂缺失时不会直接吞掉提交,服务端会返回具体失败原因。
访客页只展示已开放访客功能的班级课表;班级较多时可按班级分组筛选,选择父分组会同时包含其子分组中的班级。访客只能切换班级并只读查看课表,不能进入管理功能。
调休自动适配
服务端自动获取法定节假日与调休安排:放假日教室课表自动关闭,原本是周末但要上学的日子自动开启一份补对应工作日课程的临时课表。系统管理员可在 WebUI「调休」页调整每个调休上学日补哪天的课,或关闭此功能。详见调休。
老师、班主任角色与我的日程
服务端内置“老师”角色,默认权限为查看当前课程、发送与清除通知、发送语音和 API 访问,可在“人员权限 → 角色配置”中追加。老师账号不需要加入班级:服务端把账号的用户名(显示名)当作老师姓名,与各班课表里科目的教师名比对,姓名一致的班级就是该老师的任教班级,老师在这些班级内拥有老师角色的权限。
匹配规则:去掉首尾空白后完全相等。同名老师会绑定到同名课程,建议使用完整姓名。
一科多位老师:同一科目由多位老师任教时,在教师名中写成
张三/李四这类多人列表。服务端按分隔符拆开后逐个比对,张三、李四两位老师都会把这门课算作自己的课:各自的任教班级、“我的日程”、下一节课提醒和换课申请中都能看到它。可用的分隔符为/、、、,、;、|、&、+、\,半角和全角写法都识别,分隔符两侧的空格会被忽略;空格本身不算分隔符(英文姓名可能含空格),张三 李四会被当成一个姓名。科目教师:拥有“换课”权限的账号可在 WebUI 课表页的“科目教师”区为当前班级的每个科目填写授课教师名(多位老师用
/分隔),留空表示清除;保存后写入教室端 ClassIsland 档案并立即重新同步课表。教室端插件版本过旧时该区域会提示升级插件。我的日程:老师登录 WebUI 后,侧边栏出现“我的日程”,按日期列出自己在各任教班级的课次、节次和时间;手机端课表页默认显示“我的日程”,可切换到班级课表(芯片显示当前班名,再点一次可直接切换班级)。
班主任:内置“班主任”角色(原“班管理员”)保留本班管理能力,同时和老师一样按用户名获得“我的日程”与下一节课接口;按姓名获得任教班级访问权仍只适用于老师角色。内置角色名固定,不能在角色配置里改名,用户名也只能由系统管理员修改。
生效时机:绑定根据服务端缓存的课表实时计算,不写入数据库。插件上线过的班级使用最后一次同步的课表(插件离线后仍然有效);插件从未同步过课表的班级,任教班级的访问权限暂不可见,“我的日程”则按该班当前档案推算并标注“按档案推算”,插件同步后自动改用实际课表。
API 与 Agent:老师和班主任可在“个人账号 → API Key”创建密钥,通过
GET /api/me/schedule和GET /api/me/schedule/next读取自己的日程和下一节课。RemoteCI 仓库附带的remoteciSkill 让 AI 助手以你的账号工作,用 API Key 或账号密码登录。它面向所有角色:学生查课表;老师问“下节课去哪个班上什么”;班主任控制本班;系统管理员创建和管理班级、分组、人员与成员分配。详见API 接口。
因为用户名决定老师能看到哪些班级和课次,用户名只允许系统管理员修改。
老师换课申请
老师不需要“换课”权限,也可以自己找其他老师换课:在 WebUI 侧栏“个人 → 换课”或 Android 手机底栏“换课”页发起申请,对方老师同意后立即写入教室端课表。申请都是临时换课,只影响所选日期;永久换课仍由班主任在课表页操作。
- 互换两节课:分别选择“要换走的课”和“目标课”(班级 → 日期 → 节次)。两节课可以在不同班级、不同日期,也可以选别人的课,但至少有一节必须是自己的课。跨班互换时,学科按名称在两个班里对应;某个班没有对应的学科时无法提交。
- 替换为我的课:只选目标课,再选择一门自己任教的学科,目标课就会临时改成你上的这门课。目标班可以不是你教的班;这节课会记在你名下,进入你的“我的日程”。
- 理由:必须填写,对方审批时可以看到。
- 审批:申请发给对方课的老师。课表里那位老师没有 RemoteCI 账号时,改由该班班主任审批。对方会在 WebUI 铃铛、浏览器通知、手机通知和已绑定的 AstrBot 会话里收到提醒,可以查看理由后通过或拒绝(可附备注)。通过后立刻通知申请人和相关班主任;拒绝也会立刻通知申请人。待审批期间申请人可以撤销。
- 生效:通过时服务端会按最新课表重新核对两节课。课表已被别人改过时,会提示“已被调整,请重新申请”;教室端离线时,申请保持待审批,可以稍后再点通过。
- 临时任课老师:换课后,某节课实际上课的老师可能与该科目在班里的默认老师不同,例如替换为你的数学课,但这个班的数学平时由别人教。RemoteCI 会为这一节记录临时任课老师,手机、手表、WebUI 课表和个人日程都按实际上课的老师显示。教室大屏上的 ClassIsland 仍显示科目的默认老师。
强制换课
系统管理员在“人员权限 → 角色配置”中可以为角色开启“强制换课”(默认关闭)。开启后,换课页会多出红色的“强制换课”按钮,点击后先弹窗提示“仅在需要紧急换课时使用,请提前与对方沟通并达成一致。”,确认后不经审批直接换课,并通知对方老师“你的课已被强制换走”。
对方老师可以在“待我处理”中撤回。撤回后课表恢复原状,并通知申请人。同一位老师当天不能再强制换走这节课,只能提交普通申请;这不影响其他课、其他老师,也不影响下一周的同一节课。
权限开关
“老师主动换课”和“强制换课”都在“人员权限 → 角色配置”中按角色开关,也可以在编辑账号时单独追加。内置老师和班主任默认开启“老师主动换课”、关闭“强制换课”。关闭“老师主动换课”后,侧栏和手机底栏的“换课”入口会隐藏。
浏览器通知
WebUI 顶栏的铃铛显示未读通知数,点击进入“通知”页;在这里点“开启浏览器通知”并允许通知后,即使关闭网页,也会在系统通知中心收到换课提醒。浏览器通知要求 WebUI 通过 HTTPS(或本机 localhost)访问;普通 HTTP 局域网地址只能在打开网页时通过铃铛看到提醒。Chrome 的推送依赖 Google 推送服务,部分网络可能收不到,可改用 Edge 或 Firefox。
账号与权限
服务端使用独立账号登录,有效权限是位掩码:
| 值 | 权限 |
|---|---|
| 1 | 查看当前课程(普通用户固定拥有) |
| 2 | 概览 |
| 4 | 人员管理 |
| 8 | 发送与清除通知 |
| 16 | 换课 |
| 32 | 电源控制(含音量) |
| 64 | 保留权限位(暂时隐藏) |
| 128 | 扩展功能 |
| 256 | 主界面 |
| 512 | 发送语音 |
| 2048 | API 访问 |
| 4096 | 老师主动换课(发起与审批换课申请) |
| 8192 | 强制换课 |
管理员的有效权限固定为 16383(全部权限)。普通用户默认只含值 1,但无论是否拥有概览或换课权限,都可以进入 WebUI 课表页查看课表。其余权限由管理员在“人员权限”页面分配。设备会话可以被撤销;个人账号修改密码和人员管理重置密码都必须重复输入相同的新密码,修改成功后原有设备登录会失效。
在“人员权限”页新建账号时先选择角色:选择学生、班主任等非管理员角色必须同时指定归属班级,账号创建后会加入该班级;管理员账号不参与班级成员关系,无需分配班级;老师账号按用户名自动关联任教班级,创建时同样不选择班级。
成员 Excel 导入导出
管理员可在“人员权限”页批量维护班级成员。下载模板后按“用户 ID、用户名、班级、角色、密码”填写并上传:普通导入只创建新账号,密码可留空表示首次登录时设置;已存在的用户 ID、非法字段和文件内重复项会逐行列出,其他合法行仍会导入。
导出文件按“全部班级”或指定班级分组生成,包含“用户 ID、用户名、班级、角色”和用于识别账号的隐藏系统标识,不包含密码。可修改用户名、班级和班级角色后,使用“覆盖导入”上传同一文件;服务端只更新文件中出现的成员关系,文件中缺失的关系会保留,不会修改已有账号密码。覆盖导入会先完整校验,存在错误时不会写入任何变更。
系统配置
手机扫码登录 WebUI
WebUI 登录页提供“账号密码 / 手机扫码”两种方式。切换到“手机扫码”后页面显示二维码:在已登录的 RemoteCI 手机 App 首页右上角点击扫码图标扫描,手机上会显示将要登录的账号、电脑的系统与浏览器和 IP 地址,确认后电脑浏览器自动以该账号登录(可勾选“保持登录”);在手机上取消则网页提示已取消。二维码 3 分钟内有效,过期后点击刷新即可。
二维码只包含一次性挑战码,真正的登录会话只发给显示二维码的那个浏览器,因此即使二维码被旁人拍下也无法用来登录;确认必须由扫码的同一账号在手机 App 中完成,API Key 不能代替确认。App 登录页扫描到网页登录二维码时会提示先登录 App。
管理员侧边栏提供“系统配置”页面,包含系统更新、通知人显示、手机扫码登录、自动备份和加密配置的导入导出。“手机扫码登录”可指定概览页登录二维码中写入的服务器地址(例如反向代理后的公网地址),留空则使用当前 WebUI 访问地址;该设置只影响二维码内容,不改变服务端监听地址,并随配置备份一起导出。“通知人显示”决定自定义通知标题是否附带发送人,对所有班级生效,只有系统管理员可以修改。个人账号页面用于管理密码、设备会话与 API Key;修改用户名仅系统管理员可用。
登录页设置
管理员侧边栏提供独立的“登录页设置”页面,用于自定义未登录访问时登录页的外观:
| 设置 | 默认值 | 说明 |
|---|---|---|
| 主题 | 跟随访客偏好 | 可选浅色模式或深色模式;强制后登录页不再受浏览器本地明暗偏好影响 |
| 背景图 | 无(默认网格背景) | PNG/JPEG/WebP,不超过 2MB,铺满整屏;留空上传表示保持现有背景 |
| 背景不透明度 | 100% | 0-100%,按百分比淡化背景图,便于与登录卡片保持对比 |
| 登录卡片位置 | 居中 | 左、中、右三档,决定登录框在页面中的水平位置;选左或右时登录框靠近对应一侧,与屏幕边缘保留约 9% 页面宽度的留白(24~180 像素),另一侧留给背景图;手机等窄屏下自动回到居中 |
背景图保存在服务端数据库中,随数据库一起备份与迁移;设置页提供实时预览,保存后才生效;预览下方提供“移除背景图”恢复默认网格背景。访客页与登录后的界面仍沿用浏览器本地主题,不受此设置影响。
配置包只迁移主题、背景不透明度与登录卡片位置三项标量设置,背景图不在其中;换机器部署后需要重新上传背景图。
WebUI 控制
WebUI 侧边栏提供“控制”入口。发送通知、清除通知、主界面、音量、电源和扩展功能都集中在控制页面,并同时按账号权限与“服务端 ∩ 当前主插件”能力显示。
班级菜单另有“档案”入口,管理时间表、课表与科目的源档案;控制页不再提供时间表修改或档案分发。“加入集控”仍在控制页。课表查看、换课和科目教师设置继续在“课表”页完成。
进入“控制”页后,可以查看插件上报的主菜单、音量、静音和电源能力状态,并执行与手表控制页相同的操作。插件离线时按钮不可用;电源操作在提交前要求再次确认。
控制页的“扩展功能”区按插件分组显示:同一个 ClassIsland 插件注册的功能排在一起,分组标题下显示插件说明,未声明分组的功能归入“其他扩展”。带参数的功能会弹出参数表单,表单按插件声明显示字段名称、说明、占位提示、数字范围和选项显示名称,提交前由服务端按同一规则校验。插件声明了设置页时,分组右侧出现“插件设置”按钮,进入班级区的本班插件页(系统管理员始终可见,班主任只在该插件已开放给班级自行管理时可见)。
扩展插件设置页
插件设置分成两个入口,作用范围不同:
- 班级区“扩展插件”:侧边栏当前班级下的入口,只查看并修改当前班级的插件设置,不能选择应用范围。表单按本班设备上报的当前值预填,点击“保存到本班”后由插件在本班设备上写入。系统管理员始终能看到这个入口;班主任只在系统管理员至少开放了一个插件时看到,且只列出已开放、本班设备已上报的插件。
- 管理区“插件批量设置”(仅系统管理员):汇总全部班级设备上报了设置页的插件,修改按所选范围下发,与当前选中的班级无关。
- 班级自治:打开某个插件后,点击“允许班主任自行管理”即对全部班级开放,班主任可在班级区修改本班设置;“收回班主任管理权限”后恢复为只由系统管理员管理。插件默认都不开放,列表中以“班级可自行管理 / 仅统一管理”标出当前状态。脚本可调用
PUT /api/extension-groups/{groupId}/class-admin-access。 - 按范围下发:勾选要修改的设置项并填写新值,再在“按班级 / 分组”或“按具体设备”中选择范围;未勾选的设置项保持各设备原值。按班级或分组下发时,班内每一台在线设备都会收到;按具体设备下发时只发给勾选的在线设备。结果逐台显示。
- 各班级当前值:表格列出每个班级上报的设置值,与多数班级不一致的单元格会高亮,便于发现个别班级被改动。
- 班级自治:打开某个插件后,点击“允许班主任自行管理”即对全部班级开放,班主任可在班级区修改本班设置;“收回班主任管理权限”后恢复为只由系统管理员管理。插件默认都不开放,列表中以“班级可自行管理 / 仅统一管理”标出当前状态。脚本可调用
设置值以设备上报为准,服务端会保存最近一次上报的插件与设置值,重启后插件重连前也能打开设置页查看并修改。下发时班级插件离线(或单班保存时插件不在线)的设置会被服务端记为“待补发”,结果中显示“已保存,插件上线后自动补发”;插件重新连接并同步扩展分组后自动写入,“各班级当前值”表格的“待补发”列会显示尚未生效的新值。补发时会再次确认下发者仍有修改权限,插件给出明确结果后不再重复补发。
班级管理
RemoteCI 没有“默认班级”:首次部署时由系统管理员在初始化向导中手动新建第一个班级,所有班级都可以改名和删除。新账号只会加入创建时选择的班级,不会再出现所有老师和班主任都能看到同一个默认班级的情况。
班级未上传头像时,侧边栏左上角、选班页、访客页和班级设置中显示统一的班级图标,而不是留空。班级名称和头像可以在控制页“班级设置”中修改,也可以通过 API 或 AstrBot 的 /rci 班级改名、/rci 班级头像 修改,权限相同。
管理员可在“班级管理”中按学校、年级或校区维护多层分组树。选择左侧分组后,右侧会列出该分组及全部子分组中的班级;勾选多个班级后,可以批量开启或关闭访客、加入或移出分组、设置为所选分组、清空分组,或删除班级。分组树顶部的“未分组”节点会列出尚未归入任何分组的班级,便于批量加入分组。分组的新建、改名、移动和删除都收在树节点菜单中,班级仍可同时属于多个分组。
班主任权限
“班级管理”页的“班主任权限”面板统一决定班主任能否在自己的班级里自行完成以下操作,对全部班级生效,系统管理员始终不受限制:
| 选项 | 默认 | 影响 |
|---|---|---|
| 修改本班班名 | 开启 | 控制页“班级设置”中的班名表单与 PUT /api/classes/{id}/info |
| 上传或清除本班头像 | 开启 | 控制页“班级设置”中的头像表单与班级头像 API |
| 手动从插件拉取本班课表 | 开启 | 课表页、手表与手机的“拉取课表” |
关闭某一项后,对应入口会从班主任的界面中隐藏,直接调用接口会返回 403。脚本和 Agent 可通过 GET / PUT /api/settings/class-self-service 读取或修改同一组开关(修改仅限系统管理员)。课表定时拉取间隔是全局设置,不受此面板控制,只有系统管理员可以修改。扩展插件设置不在此面板中,而是在“扩展插件”页按插件逐个开放(见扩展插件设置页);旧版本的全局开关升级后不再生效,全部插件默认只由系统管理员管理。
班级 Excel 导入导出
管理员可在“班级管理”页用 Excel 批量维护班级与分组,流程与“人员权限”页的成员导入导出一致。
模板包含一个 .xlsx 文件中的两个工作表:
| 工作表 | 列 | 说明 |
|---|---|---|
| 分组 | 分组名称、上级分组 | “上级分组”留空表示根分组,填写父分组名称即可建立层级;最多 4 层 |
| 班级 | 班级名称、分组、访客访问 | “分组”填班级所属分组名称,多个分组用分号 ; 分隔;“访客访问”填“是”或“否” |
- 导入新建:填写模板后上传,只创建新的班级与分组。名称已存在、上级分组缺失、层级超限或字段非法的行会逐条列出失败原因,其他合法行仍会创建。
- 导出并覆盖修改:按“全部班级”或指定班级分组导出,导出文件带隐藏的“系统标识”列和“导出信息”工作表。可修改分组的“分组名称/上级分组”、班级的“班级名称/分组/访客访问”,新增行会创建新对象。
覆盖导入采用保守策略:只新增与修改,不会删除。删除文件中的某一行不会删除对应班级或分组;需要删除时仍应使用班级管理页的批量删除或分组节点菜单。覆盖导入会先完整校验,发现任一错误时不写入任何变更。
批量控制
管理员侧边栏的“批量控制”页面采用“功能卡片 → 参数弹窗 → 目标设备弹窗”的两步流程。先选择通知广播、清除通知、电源、语音、插件管理、软件更新、加入集控、远程终端或文件分发,再填写该功能的参数,最后选择班级、分组或具体设备。按班级或分组选择时,每个班只发送到最早接入的在线设备;按具体设备选择时逐台发送。时间表修改与档案分发统一移至独立的档案管理页。
批量控制按插件长期凭据列出所有已配对设备,并显示在线状态、ClassIsland 主程序版本、RemoteCI 插件版本、当前已加载插件清单和最近一次升级状态。设备离线时仍会显示服务端保存的最后一份版本快照,重新上线后自动覆盖。
- 插件管理:支持批量安装、卸载、启用或禁用插件。安装会从 ClassIsland 官方插件市场解析依赖并下载
.cipx包,重启后安装;卸载和启停通过宿主公开的插件状态接口标记,重启后生效。为避免失去远程控制,RemoteCI 会拒绝操作自身。 - 软件更新:支持批量刷新版本清单、升级插件和升级 ClassIsland 主程序,命令按在线插件连接逐台定向下发。
- 加入集控:上传 ClassIsland 的集控配置文件
ManagementPreset.json(或粘贴其内容),设备按文件中的服务器类型(Serverless manifest 模板或 ManagementServer 的 API + gRPC)加入内置集控;集控 ID 自动使用目标设备所属班级名,加入前会校验清单核心版本,写入宿主集控配置后自动重启。 - 远程终端:在设备上以当前登录用户执行一条命令并取回输出。每条命令通过
cmd /d /c独立执行,命令之间不保留状态;命令最长 4000 字符,可选工作目录,超时 1-10 秒(默认 10 秒),超时的进程会被强制结束并返回已捕获的输出。标准输出与标准错误合并返回,上限 64K 字符,超出部分截断。命令正常结束即视为成功,退出代码显示在结果中,非零退出代码不算失败。 - 扩展插件:各班设备安装同一个支持 RemoteCI 的 ClassIsland 插件后,批量控制页会自动出现以该插件命名的分组,列出它注册的、已在扩展策略中启用的功能。点击功能卡片填写参数后选择目标,即可批量执行;未安装该插件的设备会在结果中显示“扩展功能不存在”。插件声明了设置页时,分组中还有“插件设置”卡片,进入管理区的“插件批量设置”按范围统一修改。
- 文件分发:把一个不超过 10 MB 的文件发送到设备的桌面、下载或文档文件夹,不能指定其他路径。默认不覆盖同名文件而是自动追加序号,勾选“覆盖同名文件”才会替换;结果中显示文件在设备上的完整保存路径。
远程终端和文件分发位于“远程维护”区,在“批量控制”和班级“控制”页都可使用,执行结果按设备逐台显示在当前页面。
升级、插件管理、集控加入、策略下发、远程终端和文件分发都属于高风险维护操作,只允许系统管理员执行(班主任即使拥有“人员管理”权限也会被服务端和插件拒绝),并且需要在目标弹窗中再次勾选确认。命令下发成功只表示设备端已接受任务;下载、部署或重启的最终结果通过重新连接后的版本清单和升级状态展示。
档案管理
系统管理员在侧栏“管理 → 档案管理”(/Profiles) 中使用“档案库”和“批量编辑”。每班菜单的“档案”(/ClassProfiles) 只管理当前班级;本班班主任还需要本班的“换课”权限(ManageSchedule,值 16)才能使用。普通老师即使拥有该权限,也不能管理档案。
档案管理保存的是服务器上的源档案,不会自动同步教室电脑当前档案。首次使用可以从设备收集、上传现有 ClassIsland 档案或新建档案;设备本地修改不会自动回写,需要时重新收集。“课表”页优先显示插件同步的七日课表,插件尚未同步时才按本班档案推算(见七日课表)。
档案库与上传
- 全局档案是模板,可新建、上传、复制、重命名、删除与导出。分配给班级后生成独立工作副本,保留 ClassIsland 对象 ID;班级与模板的后续修改互不影响,模板更新不会自动覆盖班级副本。删除模板会保留各班副本并解除来源关系;已打开的班级草稿需重新加载修订号后再保存。
- 每班保存一份工作档案,班主任只能访问本班副本,不能进入全局档案库或其他班级档案。
- 上传 ClassIsland JSON 文件,每份上限 5 MB。先查看解析预览中的档案名、时间表、课表和科目数量、引用错误,再确认保存;导出仍是可供 ClassIsland 使用的 JSON。
- 编辑时保留未修改字段、未知字段和附加配置。无效时间、缺失时间表或科目引用会列出错误,修正后才能保存或下发。
从设备收集
工具栏的“从设备收集”读取班级在线教室电脑上 ClassIsland 当前正在使用的档案(包括临时层),作为未保存的草稿载入,检查和编辑后再保存、下发:
- 批量编辑或班级档案页:收集当前班级;批量编辑的底栏还有“收集所选班”,一次收集多个班,结果逐班显示。收集会替换这些班级未保存的草稿(会先确认),但保留服务器档案的修订号,保存时照常检查是否被他人改过。
- 档案库:选择一个班级,把它的档案收集为新的全局模板草稿“〈班级〉档案(收集)”。
- 收集时按 ClassIsland 的规则把课程数对齐到上课时段数,并清除指向已删除课表的过期指针;仍有问题时在编辑区列出,修正后才能保存。
- 班级离线时提示“班级设备未在线”;需要教室插件支持
profile.read,旧插件会提示升级。收集只读取,不改动教室电脑。
时间表、课表与科目
时间表支持名称、时间点起止时间、类型、默认科目及显示选项;课表支持名称、关联时间表、星期、多周轮换、启用状态及每节科目;科目支持名称、简称和教师。
新增上课时段时,关联课表会插入空课程;调整或移动既有时段会保留对应课程。删除已经安排课程的时段前需要确认,避免课程错位。
临时层
临时层是只在某一天替换当天课表的课表,对应 ClassIsland 的“临时层”。换课和调休在教室电脑上产生的就是临时层。编辑区的“临时层”标签按日期列出它们,标注“今天生效”“待生效”或“已过期”以及来源课表:
- 新建临时层:选择一张常规课表和生效日期,复制为当天的临时层;每天只能有一个临时层或预定课表。可勾选“单独调整当天时间”,复制一份只给这个临时层用的时间表,不影响常规时间表。
- 编辑:修改名称、日期、当天时间表和每节课程;与来源课表不同的节次标注“已换课”。
- 删除 / 清理已过期:删除单个临时层,或清理早于今天及没有日期的临时层。都在保存后生效,不影响已经下发到教室电脑的临时层。
- “时间表”“课表”标签只显示常规对象,临时层和它专用的时间表不会混在里面。
- “今天生效/已过期”按教室电脑所在时区的日期判断(取自设备最近一次上报),不受浏览器时区影响。
- 下发临时层后,教室电脑上的“启用临时层”开关会被打开,与在 ClassIsland 中新建临时层的效果一致。
“批量编辑”采用班级列表与统一编辑区:选择多个班级,在班级间切换时保留各自草稿并标记未保存内容。可以把当前内容复制给多个班,也可以分别修改后统一保存。保存会先校验所有草稿和修订号,在同一事务内写入;如果有人已修改其中一班,整批保存不生效,草稿保留,需重新加载冲突档案后再提交。班级离线也可以保存服务器档案。
保存后下发
保存与下发是两个操作;只有已保存且修订号匹配的版本才能下发。先选择时间表、课表、科目或具体对象,再明确选择下发方式,页面每次都不预选:
| 方式 | 设备上的结果 |
|---|---|
| 更新当前档案 | 更新所选对象及其必要依赖,保留其他内容 |
| 整体替换所选类别 | 清空列出的类别并写入新内容,必须再次确认;最终档案引用不完整时拒绝执行 |
| 创建并启用新档案 | 填写设备档案名,创建后立即启用;名称已存在时返回错误 |
| 作为临时层下发 | 只写入所选日期的临时层,不改动设备的常规时间表与课表;已过期的自动跳过 |
前三种方式只处理常规时间表、课表和科目,不会下发临时层;设备上原有的临时层会保留:课程数随新时间表补齐或截断,缺失的科目改为空课,只有它使用的时间表被删除时才随之移除。“作为临时层下发”时可以勾选要下发的临时层(多个班级一起下发时为各班全部未过期的临时层);设备同一天已有临时层或预定课表时,必须勾选“替换设备上同日已有的临时层或预定课表”,否则该设备返回失败并说明日期。该方式需要插件支持 profile.temp-layer。
管理员可以选择班级、分组或具体设备;按班级或分组选择时,每班只发送到最早接入的在线设备。班主任目标固定为本班。各班内容不同时,设备按所属班级收到对应档案,结果逐台显示。
下发要求教室插件支持 profile.apply;旧插件仍可用于服务器档案编辑,发送时会提示升级。设备离线或执行失败不会自动排队,可以修正后手动重试。插件在 UI 线程验证、应用并保存,失败恢复原状态,成功后重新同步七日课表。档案收集与应用可从 WebUI 档案页或档案接口(POST /api/profiles/collect、POST /api/profiles/apply,AstrBot 插件的 /rci 档案 也基于它们)发起;手机、手表通用命令和局域网直连不提供这两个命令。
服务器档案库和班级副本纳入配置备份与恢复;恢复不含档案数据的旧备份后,档案库为空,需要重新上传或新建。
手机端
Android 手机应用使用 Material 3 Expressive,承接 WebUI 与手表的课表、课堂控制、人员凭证和账号设置。
Android 桌面小组件
Android 客户端提供三种桌面小组件,尺寸遵循小米澎湃 OS(HyperOS)小部件规范的 2×2、4×2、4×4:当前时间状态(2×2 与 4×2)、今日课表(4×2 与 4×4)和 换课(2×2)。当前时间状态显示今天页时间状态卡中的状态、课程、时间段、进度和下一节课,4×2 版本横向排布;在高密度桌面网格下 2×2 会收起次要行以免截断。今日课表至少显示下一节课和时间,组件越高显示的课程越多;未登录或课表未同步时显示提示。换课组件点击后直接打开手机端换课入口。同一功能的不同尺寸在小部件中心聚合为一个组件。小组件支持深色模式,并为读屏提供整块播报内容。
小组件读取手机最近一次有效的课堂状态与七日课表缓存,网络暂时不可用时仍显示最后一次同步内容;课堂状态或课表推送到达后会立即刷新,并以一分钟级系统闹钟补充更新当前进度。缓存按服务器、账号和当前班级隔离:切换账号或服务器、退出登录、登录失效时会清空小组件内容,切换班级时清空上一个班级的课堂与课表,不会显示上一个账号或班级的数据。老师账号的“当前时间状态”优先显示个人日程(个人日程暂时拉取失败时回退为当前班级状态);班主任默认显示本班状态。
小组件的尺寸、布局、深色模式和独立 :widgetProvider 进程均按小米 Widget 规范实现,应用不依赖小米私有 SDK。在小米澎湃 OS 上,请在桌面双指捏合或负一屏“+”进入小部件中心,通过“搜索 → 安卓小部件”找到 RemoteCI 并添加;其他 Android 启动器按标准桌面小组件添加。小米小部件中心的独立展示与曝光刷新需要通过小米审核后才能开启(带小米标识但未通过审核的组件在两个入口都不会显示),在此之前小组件依靠应用推送与一分钟级定时刷新保持最新。登录页经过重新设计:顶部是应用图标,最上方的“扫码登录”卡片一键扫描 WebUI 二维码,下方卡片填写服务器地址、ID 与密码(带图标、可切换显示密码、键盘“前往”直接登录),连接失败的原因显示在醒目的提示卡中,“从局域网插件获取服务器地址”放在最后。登录页可以扫描 WebUI 概览中按需生成的“手机扫码登录”二维码:二维码携带服务器地址、登录 ID 和一次性票据,手机凭票据直接登录当前 WebUI 账号,无需再输入密码;票据 5 分钟内有效且只能使用一次,请不要在投屏或截图中展示。在“账号与设置 → 连接与服务器”页扫码同样会直接切换到二维码所属的服务器与账号。旧版只含服务器地址的二维码仍会作为服务器地址填入。
登录后可同步当前课堂与七日课表;有权限时可换课、发送通知/语音、控制主界面、音量和电源,并管理角色、账号、插件配对码、自动拉取周期和备份。控制命令的成功、失败和断线未发送状态会在当前页面显示。手机已保存会话会先直连局域网,连接成功后后台刷新云端管理 API 令牌,不阻塞首屏连接。底栏“管理”页只列出当前账号有权限的管理项(访客访问、角色配置、账号管理、插件配对码,均需“人员管理”权限);一项都没有时底栏不显示“管理”页。账号管理支持从账号角色下拉列表创建用户,访客访问与自动进入访客页集中在“访客访问”子页面分别设置;插件配对码可选中或一键复制。修改密码与设备会话移到“账号与设置 → 密码与设备会话”,所有账号都可使用,设备列表会区分 Android 手机和手表。
“管理”页和“控制”页底部分别显示“更多管理操作请使用WebUI”“更多控制操作请使用WebUI”。点击蓝色的“WebUI”链接,手机会通过当前连接的服务器地址申请一张 1 分钟内有效、只能使用一次的网页登录票据,并用系统浏览器打开 WebUI,自动登录当前账号(替换浏览器里原有的 WebUI 登录),直接进入“人员权限”或“控制”页,并沿用手机上当前选中的班级。
上学期间手机端会发布可更新的“上课状态”持续通知,包含时间状态、这节课、剩余时间和下一节课(剩余时间由系统计时器倒数到本阶段结束时刻,超级岛右侧同样显示“距下课/上课”倒计时;正文第一行为本时段时间,第二行为“下一节:课程 时间”,上课时图标为日历、课间为勿扰月亮;课间超级岛显示“课间-下一节课名”,进入 ClassIsland 上课提醒设置的准备时长(室内/室外课分别生效,含科目/时间点附加设置)后切换为“即将上课-下一节课名”;上课期间“下一节”为当堂课结束后的第一节课);放学或没有课程时自动撤销。老师账号从“我的日程”跨班级接口读取当前课与下一节课,学生账号使用当前班级的实时状态。老师模式上课中倒计时到下课;下一节课开始前 10 分钟内显示“即将上课”并倒计时到上课(通知出现时提醒一次);今天稍后还有课但未到这 10 分钟时首页显示“空闲”、通知收起,今天没有课了显示“放学”,不会因为下一节在明天或下周而整晚、整个周末显示“即将上课”。通知同时携带小米 HyperOS 焦点通知、超级岛和息屏(AOD)字段;Android 16+ 还会请求 Live Update promoted ongoing。系统不支持时仍显示普通 Android 持续通知。小米 17 Pro、17 Pro Max、18 Pro、18 Pro Max 的原生 Smart Assistant 背屏卡片由 HyperOS 系统服务和设备白名单控制,正式上线需要按小米平台要求完成场景审核和设备白名单联调。
老师账号的课表页默认显示“我的日程”,按天列出各任教班级的科目、教师、节次与时间,可切换到“本班课表”;班主任账号的课表页默认显示“本班课表”,也可切换到“我的日程”。课表页的“拉取课表”和“账号与设置”里的“自动拉取课表”只对系统管理员和当前所选班级的班主任显示;其中“自动拉取课表”是对全部班级生效的全局设置,只向系统管理员显示;班主任能否拉取课表受班主任权限控制,未获准时会立即提示“没有本班课表拉取权限”而不是一直等待;系统管理员可在“账号与设置 → 姓名”修改自己的用户名。
可访问多个班级的账号登录后会先选择进入的班级;之后点击首页左上角菜单进入“账号与设置”,在“当前班级”中切换。首页不再显示顶部班级切换行。
“账号与设置 → 外观”可以通过系统列表与单选控件独立选择浅色、深色或跟随系统,并在淡紫、经典紫、蓝、绿、橙、粉六套配色中切换;六套色值与 Wear OS 保持一致。首页底栏切换只替换正文,底栏本身不参与页面滑动动画。手机 WebSocket 使用 client=mobile,课表拉取来源为 ScheduleSyncSource.Mobile = 6,不会占用“在线手表”计数。
个人自定义课程与系统日历
所有账号都可在 WebUI 和手机“我的日程”中添加、修改或删除自己的单次课程,填写名称、地点、起止时间,并独立设置课前提醒和上课提醒。老师、班主任的任教课程与自定义课程合并显示;自定义课程只对本人可见,不写入班级课表,也不参与换课。课程保存到服务器,同账号的 WebUI、手机、手表会自动刷新;WebUI 有未保存编辑时保留表单。提醒由服务端生成个人通知,重启后不会重复生成,手机常驻课堂状态对自定义课程保持静默。
Android 与网页端一样提供两种互相独立的系统日历,入口在“账号与设置 → 系统日历”,也可在课表页直接操作:“课表 → 我的日程 → 导入日程”写入“RemoteCI 我的日程”;“课表 → 本班课表 → 同步课表”把所选班级的未来七日课表写入“RemoteCI 班级名”,之后切换查看的班级不影响该日历,改选其他班级时原班级未结束的课程会被删除。首次需授予日历读写权限,两种日历各自选择开始时或提前 5、10、15、30 分钟提醒,默认提前 10 分钟。再次导入会更新已有课程,删除已取消且尚未结束的课程,保留已结束事件;课程改名或改时间不会重复创建。
启用自动同步后,应用内会检查更新,后台约每 15 分钟同步,实际执行受联网、省电策略和系统调度影响。提醒由系统日历应用发送,请保持该日历可见并允许日历应用通知。同步为 RemoteCI 到日历的单向同步,课程应在 RemoteCI 修改;独立添加到日历的事件不受影响。关闭自动同步会保留已有事件,退出登录会停止同步,切换账号或服务器后需重新导入。权限不足、网络失败、数据无效、班级暂无课表或已失去班级访问权时保留已有事件并显示原因。
AstrBot 可在私聊通过 remoteci_personal_courses、remoteci_save_personal_course、remoteci_delete_personal_course 查询和管理课程,并转发服务端课程提醒;个人日程和通知不会通过这些工具向群聊输出。接口与字段约束见管理自定义课程。
API 接入
RemoteCI 的 REST API 复用 WebUI 与客户端同一组 /api/* 端点。管理员、班主任和老师默认拥有“API 访问”权限,学生默认没有;管理员可在“人员权限”中按角色默认权限或账号附加权限调整。
有权限的账号可在“个人账号 → API Key”创建和吊销自己的密钥,管理员也可在“人员权限 → 编辑账号”中代管。密钥明文只显示一次,服务端只保存摘要,权限始终按账号当前角色与附加权限实时计算;吊销密钥、禁用账号或移除“API 访问”权限后立即失效。
调用方式、端点清单、命令编号、错误码和 PowerShell 示例见API 接口。
手表端操作
控制页中的操作由服务端检查账号权限后交给在线插件执行,并返回真实回执。插件离线、权限不足、课表已变化或等待超时时,操作会失败,不会静默排队。
- 首页:旋转表冠或表圈可在课程状态页与菜单页之间切换,一格翻一页;菜单页直接展示功能选项,无需滚动。下课和“即将上课”状态下,主课程按钮直接显示下一节课及其时间;时间按钮会根据时间段文字自动扩展,并限制在屏幕安全宽度内。
- 换课:先选择日期,再从课程按钮选择原节次和目标节次,或用指定科目替换;提交时携带课表修订号,防止覆盖别人刚完成的修改;可打开“永久换课”让修改写入源课表并持续到之后每周。
- 快速换课:主界面点击课程按钮可直接进入换课页;上课中预选当前课,下课或即将上课时预选按钮所显示的下一节课;在“暂无课程”但仍有下一节课时,下一节课科目会显示圆角描边,点击后同样把该课预选为原课。以上入口均无需先选日期,返回键直接回主页。
- 发送通知:向 ClassIsland 发送自定义通知,成功后广播给手表。
控制功能
手机和手表按当前所选班级的插件能力显示控制项:服务端为每个可访问班级分别下发该班主插件的能力,切换班级后立即按新班级刷新,不会因为其他班级的插件离线而隐藏本班控制项,也不会在本班插件离线时误显示可用。手机端扩展参数按类型显示开关、选项(使用插件提供的选项显示名称)、数字键盘和多行文本,并在发送前按服务端规则校验;手表的选项参数同样显示显示名称。
WebUI 与手表共用同一套命令、权限和插件真实回执:
- 发送通知:向 ClassIsland 发送自定义通知;WebUI 直接在控制页面填写标题和正文;标题是否附带发送人由系统管理员在“系统配置 → 通知人显示”统一设置。
- 清除提醒:清除 ClassIsland 当前提醒。
- 主界面:显示或隐藏 ClassIsland 主界面。
- 电源:关机、重启、睡眠或休眠;休眠入口只在插件报告可用时显示。
- 音量:拖动 WebUI 音量条后自动提交;静音状态下向高调节会在同一条命令中自动取消静音。页面以插件上报的真实状态刷新。
- 扩展:控制页按插件分组列出扩展名和 ID,右侧提供“执行”和“编辑”。管理员可逐项启用、向非管理员开放,并设置是否显示在自己的手表;获开放且具备独立“扩展功能”权限的普通账号即可执行,并可单独关闭自己手表上的入口,无需同时拥有通知或电源等其他权限。云端和局域网都会同步同一策略。
语音消息
语音消息的通知仅显示标题,不显示空白正文区域;普通通知的正文为空或只有空白字符时也采用相同表现。
在 WebUI 或手表的“控制 → 发送语音”中开始录音,停止后可试听、丢弃或发送,每条最长 60 秒。账号或自定义角色需要单独授予“发送语音”权限;“发送与清除通知”不会自动获得语音权限,管理员拥有全部权限。需同时更新服务端、手表和 ClassIsland 插件,旧端未声明语音能力时入口隐藏。
课表端收到后显示“来自xxx的语音消息”,xxx 使用账号显示名称。通知开启强调特效,关闭通知音效和文字朗读,录音自动播放;效果仍受 ClassIsland 全局提醒开关限制。屏幕下方的紧凑浮窗缓缓上滑出现,拖动标题可移动;顶部左侧显示发送人,右侧显示总时长,中间使用 ClassIsland 原生滑动条拖动播放位置。底部三个无底色的大号 ClassIsland 图标分开放置,分别用于暂停/继续、每次后退 5 秒和关闭,其中关闭图标为系统危险色,播完后可重新播放。浮窗使用 ClassIsland Fluent 浮层背景、描边、圆角、深浅色主题和宿主 UI 字体;点击浮窗外部也会关闭并停止播放。已有语音浮窗时,新消息返回忙碌提示,请先关闭已有浮窗再发送。
浏览器需通过 HTTPS 或 localhost 访问并允许麦克风权限,普通局域网 HTTP 地址无法录音。使用反向代理时,上传大小上限需至少 2 MiB,否则长录音可能出现 HTTP 413。手表首次使用会请求麦克风权限;切到后台或离开页面会停止采集。录音只保留在内存中,发送失败时可在当前页面重试;离开页面会丢弃草稿。服务器不保存语音文件,其他在线手表仅收到语音消息提示,不会自动播放这段录音。
语音不会绕过电脑的系统音量或静音设置。发送成功表示课表端已启动播放;若未收到回执,请先确认课表端是否已经播放,避免重复发送。
开发者连接设置
正常使用时,插件和手表都应保持云端中转与局域网能力开启,因此普通连接页面不提供关闭开关。插件普通“RemoteCI 设置”中的“显示开发者设置菜单”默认关闭;开启并重启 ClassIsland 后,“RemoteCI 开发者设置”会提供云端和局域网服务开关,以及按真实通知、播放和浮窗流程运行的“测试接收语音”。手表在“设置 → 开发者”提供“云服务器”和“局域网直连”两个高级开关,并提供“应用并重连”。关闭后只适合诊断连接问题:插件关闭云端后无法继续刷新账号权限镜像,关闭局域网服务后不再接受手表直连;手表关闭局域网后不会尝试插件直连,关闭云端后也不会在局域网失败时回退。
手表密码只由云端服务端验证,所以密码登录会临时启用一次云端认证,即使开发者此前关闭了后续云端连接。这样退出账号不会把设备锁在无法登录的状态;认证完成后的重连仍尊重开发者设置。
插件每次连接服务端都会上报当前监听端口和所有可用局域网 IP。服务端向在线手表转发并为新连接缓存最近结果;手表保存候选地址和端口,依次尝试直连并记住成功地址。普通“设置 → 连接”仍可手动修改 IP 与 1-65535 范围内的端口,用于指定网卡或诊断自动发现。
首次登录页提供“扫描局域网设备”。手表通过 UDP 48765 发现插件,选中后从插件读取云服务器地址并补齐局域网 IP/端口;用户确认云地址后,密码仍直接由云服务器验证。鉴权成功后优先切回局域网,成功时不建立重复的云端 WebSocket。反方向上,从云端首次登录仍会由服务端补齐插件的局域网地址,因此任意一种已知连接信息都可以补出另一种。
操作前确认
换课、替换课程、电源与音量会改变教室电脑的真实状态。正式使用前应先在测试课表中确认行为。
通知
插件可以把七类事件同步给手表,手表端可以逐类开关并触发系统通知和振动:上课、课间、放学、课表变更、自定义消息、ClassIsland 自动化“显示提醒”、第三方 ClassIsland 插件通知。
课程事件的正文由插件生成,直接写明具体内容:
- 上课:哪个班上什么课,例如“高一(1)班 数学课(08:00-08:45)”。
- 下课:下节课是什么,例如“高一(1)班 下节课:物理(09:00-09:45)”;当天没有后续课程时提示“今天没有后续课程了”。
- 课表已更新:列出科目发生变化的节次,例如“今天第 2 节 数学 换为 英语;第 3 节 英语 换为 数学”。一次超过 6 处变化时只列前 6 处并注明总数;只改了教师或课表名等、没有科目变化时显示“课表已更新”。
班级名优先使用服务端下发的插件归属班级,其次使用插件设置里的“班级备注”;两者都为空时正文省略班级名。
手机与手表的课程通知、换课通知和“上课状态”常驻通知默认都是高优先级,并开启横幅、声音和振动。“上课状态”常驻通知只在首次出现时提醒一次,之后的倒计时刷新保持安静。
自定义通知的标题与正文均可留空:标题留空时显示默认标题“RemoteCI 通知”,正文留空时保持为空,由 ClassIsland 只显示标题。通知由插件执行时添加“由用户名发送:”前缀(可由服务端全局设置关闭),发送者名称取账号的用户名(显示名),客户端无法覆盖。通知请求还可以分别控制提醒强调特效、提醒音效、语音朗读和“提醒时置顶主界面”;省略时均为关闭。发送自定义通知时还可设置持续时间(秒)、重复次数与正文滚动显示,WebUI 与手机端提供相同的选项。持续时间留空时按 ClassIsland 集控的默认值 5 秒处理,最长 3600 秒;重复次数留空时按 1 次处理,最多 10 次;标题最多 60 字,正文最多 500 字,超出范围的请求会被服务端和插件拒绝。WebUI 与手机端发送界面中正文滚动显示默认关闭:关闭时正文静态显示,每次显示“持续时间”秒,整条提醒依次显示“重复次数”次;开启后正文横向滚动“重复次数”遍,总显示时长为“持续时间 × 重复次数”,与 ClassIsland 官方集控服务器的“持续时间”“重复次数”语义一致。正文超过 30 字且未开启滚动时,WebUI 与手机端会提示建议开启滚动,以免静态正文显示不全。旧版插件不识别该开关,仍按滚动方式显示;未发送该开关的旧版客户端(如旧版手表)也保持原来的滚动显示。
更新
- 服务端:管理员在“系统配置 → 系统更新”选择正式版或 Beta 渠道;正式版排除预发布,Beta 同时包含正式版和预发布;更新说明按 GitHub Markdown 渲染。强制更新可重新下载并覆盖同一版本,但不允许降级;Windows、Linux 与 Docker 会按各自安全流程替换实际程序集目录并自动重启。调试时可在同一面板“手动上传更新包(调试)”上传当前平台的服务端发布包 zip,允许同版本覆盖和降级,详见运维。Development 环境由 Visual Studio 或
dotnet build管理,WebUI 不提供覆盖更新入口。 - 手机:打开 App 时会自动检查更新(至少间隔 6 小时,按“账号与设置 → 更新”选择的正式版或 Beta 渠道),发现更高版本时弹窗显示版本号和更新说明,可以“立即更新”(下载后由系统安装器完成安装)、“稍后”或“跳过此版本”;跳过后更高的新版本仍会提示。“更新”页可以关闭自动检查、恢复已跳过的版本提示,也可以手动检查。网络失败时静默忽略。
- 手表:在“设置 → 更新”选择正式版或 Beta 渠道,设置会保存在本机。强制更新可重新下载并覆盖同一版本,但不能降级;必须先连接 WebUI,正式版只选择协议主版本相同的四段纯数字 Release,Beta 额外包含
v3.x.x-beta.y及在 GitHub 标为预发布的四段 Release,V4 不进入自动更新候选。安装确认回调使用 Android PackageInstaller 的可变显式 PendingIntent。 - 插件:升级由 ClassIsland 插件市场统一管理;稳定版使用同一个四段纯数字 Release,固定资产名为
RemoteCI.Plugin.cipx,Release 正文包含与资产同名的CLASSISLAND_PKG_MD5标记;v3.x.x-beta.y只用于三端测试,不进入市场。 - 飞牛 fnOS:从 GitHub Release 下载在线或对应架构离线 FPK,并由 fnOS 应用中心手动升级;WebUI 不提供下载按钮。
协议 V3 与软件版本独立。协议号为 3 的服务端、插件和手表可以连接;稳定更新只识别 3.<数字>.<数字>.<数字>,Beta 更新额外识别 v3.<数字>.<数字>-beta.<数字>及在 GitHub 标为预发布的四段 Release,旧三段 v3.x.x 稳定标签不再作为新渠道候选。未上报能力的旧 V3 端按 V3 基础能力处理(该基线自 3.1.0 引入)。手表按“手表本地 ∩ 服务端 ∩ 当前主插件”隐藏不支持的功能,所以某块手表缺少能力不会影响 WebUI 使用服务端与插件共同支持的功能。管理员可在概览页查看每个连接的软件版本、能力来源、有效能力和缺失能力;英文能力标识后同时显示中文说明,例如 schedule.read(读取课表)。
外观主题
手表在“设置 → 外观”中可以切换整套 Material Design 3 配色方案,选择后立即生效并保存在本机,重启不会丢失。内置方案:
| 配色 | 说明 |
|---|---|
| 淡紫 | 默认方案,对齐现有 Figma 设计与 M3 淡紫容器色 |
| 经典紫 | M3 默认紫色(primary #6750A4)系列 |
| 蓝色 | M3 blue 官方色板 |
| 绿色 | M3 green 官方色板 |
| 橙色 | M3 orange 官方色板 |
| 粉色 | M3 pink 官方色板 |
配色切换只影响手表应用自身的界面(首页、课表、设置等),不会改变通知内容或协议行为。
手表界面会读取系统报告的屏幕形状:圆形设备保留圆形安全画布,矩形设备使用完整屏幕区域;两种形状都以屏幕短边作为组件缩放基准。
手表首页没有当前课程时,状态标题直接显示“暂无课程”,并隐藏无效的当前课程按钮;如果快照与已同步课表中存在可匹配的下一节课,则用圆角描边标出该科目,点击可进入换课页并将它选为原课。存在当前课程时,课程按钮会随课程名称长度伸缩,并与下方时间框统一采用两者中较长的宽度。
集控运维
以下功能都在服务端实现,不需要升级插件。系统管理员看全部班级;班主任只看自己担任班主任的班级。全局设置在“系统配置 → 集控运维”,并随加密配置包(schema 7)一起备份。
设备状态与离线告警
管理区“设备状态”按班级列出全部教室电脑:在线状态、当前课程、插件与 ClassIsland 版本(低于服务端版本时标“待升级”)、音量、今日在线时间条,以及最近一次档案差异检查的结果;每 15 秒自动刷新,可按分组筛选或只看离线设备。
离线告警只在班级当天的在校时段内计时(第一节课前 30 分钟到最后一节下课),放学关机、周末和放假不会报警;早上没开机时从在校时段开始计时。连续离线达到阈值(默认 10 分钟,可设 5–120 分钟)后,系统管理员和该班班主任会在 WebUI 铃铛、浏览器通知、手机、手表和已绑定的 AstrBot 会话收到提醒,设备重新上线后再收到恢复提醒。每次离线只提醒一次。
自动化
管理区“自动化”(仅系统管理员)可以让常规操作自动完成。每条规则包含:
- 触发:每周定时(按各班教室电脑的本地时间,可只在上学日执行:放假日跳过、调休上学日照常)、上课 / 下课 / 放学(可只匹配某科目,可延迟 0–180 分钟)、教室电脑上线后(延迟 0–600 秒),以及可选的生效日期区间。
- 目标:班级和 / 或分组,每个班级发给最早接入的在线教室电脑。
- 动作:最多 3 个(接口最多 5 个),按顺序执行:发送通知、清除提醒、主界面显隐、音量、电源、运行扩展、下发该班档案的临时层。不开放语音、终端、文件和软件升级。
页面提供“放学 30 分钟后关机”“周五放学安全提醒”“午休降低音量”“开机后恢复音量”等模板,也可以“立即运行”试一次。规则以最后保存它的系统管理员身份执行并写入操作记录;任一班级执行失败时,保存人会收到通知。服务端在触发时刻没有运行时不会补跑(定时触发错过 5 分钟、延迟任务积压 30 分钟以上记为“已错过”),避免第二天早上突然关机。
操作记录
管理区“操作记录”(班主任在班级区)记录每一条下发到教室电脑的命令:谁、从哪个入口(WebUI、手机 App、手表、API Key、自动化、换课申请等)、对哪台设备、做了什么、结果如何,可按日期、班级、操作和结果筛选并导出 Excel。语音、文件内容和档案 JSON 不会保存,终端命令只保留前 200 字。默认保留 180 天(7–3650 天)。
课时统计
每节课结束后,服务端把实际上课的老师记入课时台账,之后不再修改;换课申请产生的临时任课老师记为代课。“课时统计”按教师汇总实际课时、其中代课和被代课,可按日期、班级、教师筛选,导出的 Excel 含汇总与逐节明细。老师在“我的日程”顶部能看到自己本月的课时。台账从升级后开始累积,服务端停机期间结束的课无法补录;课表里没有填写任课教师的科目不计入任何老师;默认不统计按档案推算的课。
档案历史与设备差异
“档案管理”和“班级档案”页右上角的“历史版本与设备差异”:
- 历史版本:每次保存都会留下一个版本(每份保留最近 50 个),可以查看这一版改了什么(如“课表「周三」第 4 节 数学 → 物理”)、与当前相比改了什么,并恢复为任一版本。恢复会另存为新版本,不影响教室电脑,需要时再下发。
- 设备差异:读取教室电脑当前的档案,与服务端班级档案比较时间表、课表和科目(不含临时层),找出在教室电脑本地被改过的地方。可手动检查所选班级,也可在系统配置开启每日自动检查(默认 12:30)。以设备为准时用“从设备收集”载入草稿再保存;以服务端为准时重新下发。
电子班牌
班级区“电子班牌”(系统管理员或本班班主任)为教室门口的班牌屏或走廊大屏生成私密链接,用任意浏览器打开即可全屏显示班名、时钟、当前课程与进度、下一节和今日课表,横竖屏都适配,可选择不显示任课老师。链接和二维码只在生成时显示一次,不需要登录;任何拿到链接的人都能看到课表,请只在班牌设备上使用,不用时随时撤销。每班最多 10 个链接;恢复加密配置包后需要重新生成。
手机切换班级与自动跟随
Android 课表页的班级芯片和控制页顶部都显示当前班名,可直接下拉切换班级。老师和班主任可在“账号与设置”开启“上课时自动切换到任教班级”(默认关闭,Android 与 Wear OS 都支持):正在上课或 10 分钟内要上课时自动切到对应班级;手动切换后,本节课结束前不会再自动切回。
当前未包含
以下内容属于后续方向,不应当作现有功能使用:
- Wear OS Tiles 小组件。
- watchOS 客户端。
- 针对特定国产手表系统的专用适配。
- 面向公网的托管服务。
- 真实写入 ClassIsland 的“切换单双周”功能(已移除)。