本文档面向自行部署班级盒子的使用者。请使用自己的微信小程序、云开发环境、数据库和订阅消息模板,不要使用正式项目的任何真实配置。
- 在微信公众平台创建或准备自己的小程序。
- 在微信开发者工具中开通云开发。
- 复制
project.config.example.json为本地项目配置,并填入自己的 AppID。 - 复制
miniprogram/config.example.js为miniprogram/config.js,填入自己的云环境 ID 和订阅消息模板 ID。 - 复制
cloudfunctions/sendNoticeMessage/config.example.js为cloudfunctions/sendNoticeMessage/config.js,填入自己的订阅消息模板 ID。 - 复制
cloudfunctions/saveNoticeSubscriber/config.example.js为cloudfunctions/saveNoticeSubscriber/config.js,填入同一个订阅消息模板 ID。 - 如需启用 AI 辅助发布,在
parseNoticeWithAI云函数环境变量或服务端配置中设置:AI_API_KEYAI_BASE_URL,应指向兼容/chat/completions的服务根地址AI_MODEL,未设置时云函数会使用内置默认模型名
不要提交以下文件:
project.private.config.jsonproject.config.jsonminiprogram/config.jscloudfunctions/sendNoticeMessage/config.jscloudfunctions/saveNoticeSubscriber/config.js
使用者需要在微信开发者工具中部署 cloudfunctions 下所有云函数。
需要部署的云函数列表:
applyAdminInvitecheckAdmincreateNoticedeleteNoticelistFeedbacksparseNoticeWithAIsaveNoticeSubscribersendNoticeMessagesubmitFeedbackupdateNoticeupdateNoticePinverifyMember
其中 createNotice、updateNotice 会在云函数内部使用微信内容安全相关 OpenAPI 权限,包括文本检测和图片检测。submitFeedback 会在反馈写入前进行文本内容安全检测。parseNoticeWithAI 会先对管理员输入进行文本内容安全检测,再访问配置的 AI 服务地址生成草稿。
sendNoticeMessage/config.json 已声明订阅消息发送 OpenAPI 权限,部署时请确认该权限配置生效。
parseNoticeWithAI/config.json 已声明文本内容安全检测 OpenAPI 权限,部署时也请确认该权限配置生效。AI 辅助发布只生成草稿,不会直接写入 notices;管理员确认发布时仍会走 createNotice 的权限校验和内容安全检测。
submitFeedback/config.json 已声明文本内容安全检测 OpenAPI 权限,部署时请确认该权限配置生效。
使用者需要在云开发数据库中创建项目所需集合:
noticesusersadmin_invite_codesclass_memberssubscribersfavoritesfeedbackssecurity_countersai_usage_logsoperation_logs
feedbacks 用于保存用户提交的意见反馈,建议只允许通过 submitFeedback 云函数写入,并通过 listFeedbacks 云函数供超级管理员只读查看。
security_counters 使用固定时间桶记录发布、编辑、邀请码尝试、反馈提交等频率限制计数。
ai_usage_logs 用于记录 AI 辅助发布的调用情况,不保存用户输入原文或 AI 返回完整正文。
operation_logs 用于身份认证、管理员授权、事项发布、编辑、删除等关键操作日志。
建议定期删除 security_counters.expiresAt 已过期的记录,并根据运营需要为 operation_logs 设置保留周期。
建议为高频查询字段创建索引,例如:
users.openidusers.verifiedclass_members.nameclass_members.studentIdnotices.createdAtnotices.publisherOpenidfavorites.openidfavorites.noticeIdfeedbacks.createdAt+feedbacks._id组合倒序索引,用于超级管理员反馈列表游标分页security_counters.openidsecurity_counters.actionsecurity_counters.windowStartai_usage_logs.openidai_usage_logs.createdAtoperation_logs.openidoperation_logs.actionoperation_logs.createdAt
建议尽量收紧数据库权限:
- 普通用户不应直接写入
notices,发布应通过createNotice云函数。 - 普通用户不应直接写入
subscribers,订阅授权应通过saveNoticeSubscriber云函数保存。 - 普通用户不应直接读写
feedbacks,反馈提交应通过submitFeedback云函数,超级管理员查看应通过listFeedbacks云函数。 - 普通用户不应直接写入
security_counters。 - 普通用户不应直接读写
ai_usage_logs。 - 普通用户不应直接写入
operation_logs。 - 管理员授权、发布、编辑、删除等敏感操作应通过云函数完成权限校验。
class_members、admin_invite_codes等敏感集合不要开放普通用户直接读写。
具体权限矩阵见 docs/database-permissions.md,再结合你的云开发环境和业务需求配置。
使用者需要自行导入班级成员数据到 class_members 集合。
示例:
{
"name": "示例学生",
"studentId": "2026000000",
"boundOpenid": null,
"verified": false,
"createdAt": "2026-06-01T00:00:00.000Z",
"updatedAt": "2026-06-01T00:00:00.000Z"
}请不要把真实学生姓名和学号提交到开源仓库。
使用者需要自行创建管理员/超级管理员邀请码,并写入 admin_invite_codes 集合。
管理员邀请码示例:
{
"code": "BW-EXAMPLE-0001",
"role": "admin",
"used": false,
"usedByOpenid": null,
"usedAt": null,
"createdAt": "2026-06-01T00:00:00.000Z",
"expiredAt": "2026-12-31T23:59:59.000Z"
}超级管理员邀请码示例:
{
"code": "SUPER-EXAMPLE-0001",
"role": "superAdmin",
"used": false,
"usedByOpenid": null,
"usedAt": null,
"createdAt": "2026-06-01T00:00:00.000Z",
"expiredAt": "2026-12-31T23:59:59.000Z"
}邀请码应设置过期时间,并且只能使用一次。
使用者需要在微信公众平台配置订阅消息模板,并将模板 ID 填入:
miniprogram/config.jscloudfunctions/sendNoticeMessage/config.jscloudfunctions/saveNoticeSubscriber/config.js
开源仓库只保留 example 配置,不包含真实模板 ID。
发布前建议检查:
- 所有云函数已部署。
- 超级管理员查看反馈前,
listFeedbacks已部署。 - 数据库集合已创建。
feedbacks、security_counters和operation_logs已创建且权限收紧。- 如启用 AI 辅助发布,
parseNoticeWithAI已部署,AI_API_KEY、AI_BASE_URL、AI_MODEL已在该云函数环境或服务端配置中设置。 - 班级成员数据已导入。
- 管理员/超级管理员邀请码已创建。
- 订阅消息模板 ID 已配置。
- 开源仓库中没有真实 AppID、云环境 ID、模板 ID、openid、真实学生信息、真实邀请码或
cloud://文件地址。