作业模块
带截止日期的家庭作业或课程任务:一个标题、说明、一个可选的分值、任意数量的资源链接,以及一个提交控件。它是工作室里能把一封邮件变成一份真正作业、而不只是一条作业通知的模块。
工作原理
截止日期在已发送的邮件中会渲染为一张实时跳动的倒计时图片,使用与倒计时模块本身相同的服务器端渲染动图技术。这个接口是真正共享的;作业模块并没有自己的图片编码器。旁边还有一行朴素的"还剩 X 天 Y 小时 Z 分钟"或"已逾期"文字。这种搭配之所以重要,是因为无论某个客户端是否渲染图片,它都能让截止时间保持准确。这行文字是在发送时根据收件人自己的打开时间计算出来的,因此即便在不显示图片的客户端中也能正确显示,而 GIF 则在能显示图片的客户端中持续跳动。
提交方式由提交方式字段决定,共有三种形态:
- 标记为已完成——一个固定值的动作,因此会得到与投票选项或评分色块相同的链接优先处理:一个真实的邮件内
<form>提交到互动端点(动态层),旁边配有一条指向托管确认页面(/v/[token]/act)的纯文本回退链接,两者都包裹在同一个"标记为已完成"控件周围。由于提交的值永远不变,这里仅靠链接的第二层级路径就完全够用,这与下面两种模式不同。 - 简短文本答案 / 链接答案——这两者携带的是普通 GET 链接无法预先填入的自由格式值,因此——与测验模块整份表单的回退方式一样——第二层级路径是一个指向托管实时预览本身的链接,在那里一个真实的
<input>(分别为text类型或url类型,带有相应的占位提示)负责收集答案并提交。对于无法渲染动态表单的客户端,这两种模式都不支持邮件内直接输入;它们会改为打开实时预览。
无论配置了哪种模式,一次提交都会作为一条普通的互动事件记录下来,并按收件人去重,方式与投票的投票完全相同——收件人重复点击自己的链接不会产生效果,而不会生成第二次提交。如果提交到达时该模块的截止日期已经过去,它仍会被记录,只是在下游被标记为迟交(见下方的成绩册汇总)。作业模块从不会阻止一次迟交被记录;它只会标记出来。
在其他所有地方(Outlook,或任何既不支持动态层、也无法有意义地渲染倒计时图片的客户端),回退方案就是那行静态的截止日期文字加上资源链接列表。无论层级如何,这两者始终会被渲染,旁边再配上适用的提交控件(色块或实时预览链接)。
可配置字段:
- 标题和说明,以及各自的颜色和字号。
- 截止时间——一个日期/时间;只有设置了这个字段,倒计时图片和"还剩…"/"已逾期"文字才会渲染。
- 分值——0 表示不计分(与商品模块的库存字段相同的"0 = 未设置"惯例);非零值会在标题旁附加"(N 分)"。
- 资源链接——任意数量的标签/URL 对,渲染为说明下方的一个纯链接列表。
- 提交方式——标记为已完成 / 简短文本答案 / 链接答案,如上所述。
- 背景色、内边距、边框、圆角半径,以及提交控件共用的按钮颜色替换。
示例
Subject
New assignment: Chapter 4 reading response
在线课程的每周作业提醒天然适合搭配标记为已完成——更广泛的模式参见教育,了解如何通过邮件运行课程任务和提醒。一份书面回答类作业("用两句话概括第 3 章")使用简短文本答案,这样回复本身就会直接进入成绩册,而不需要一个单独的提交入口。一份基于项目的作业("提交你的共享文档链接")使用链接答案,并让资源链接指向评分标准和任何参考材料。把截止时间设置为真实的截止日期,这样随着时间临近,倒计时能给学生带来真实的紧迫感。
静态回退效果是什么样子
<div style="margin:12px 0;background-color:transparent">
<p style="margin:0 0 4px;font-weight:700;font-size:18px;color:#111827">
Chapter 3 reading response (10 pts)
</p>
<p style="margin:0 0 6px;font-size:13px;font-weight:600;color:#111827">
Due in 2d 4h 30m
</p>
<img src="https://mailinapp.com/api/countdown?t=1737936000000&c=111827&s=..."
width="220" height="40" alt="Due in 2d 4h 30m"
style="display:block;max-width:100%;height:auto;margin-bottom:8px" />
<div style="text-align:center;margin-top:8px">
<a href="https://mailinapp.com/v/eyJhbGci..."
style="display:inline-block;padding:10px 20px;background-color:#4f46e5;
color:#ffffff;border-radius:6px;text-decoration:none;
font-size:14px;font-weight:600">
Submit answer
</a>
</div>
</div>
这里展示的是简短文本答案模式的回退效果:由于答案无法预先填入一个普通链接,回退方案是一个指向托管实时预览的链接,而不是一个 /act 确认页面。