qoderwake需通过自定义waker实现日报与周报自动生成功能。用户须创建skill.md声明双周期输入输出契约,配置两个cron触发计划分别对应日/周执行,并复用同一jinja2模板动态渲染内容,最后通过cli验证链路畅通。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要让QoderWake每天自动拉取资讯生成日报、每周汇总协作数据产出周报,而不是反复手动复制粘贴多源内容再排版——这要求Waker具备双周期感知能力、结构化数据注入逻辑和可复用的模板契约。QoderWake不提供“日报Waker”或“周报Waker”的预设类型,所有Waker都由用户通过技能定义(SKILL.md)+定时触发策略+模板渲染三者组合构建,缺一不可。
定义日报与周报双周期Waker技能
Waker本质是带时间语义的技能封装,必须用SKILL.md声明输入输出契约,否则无法被定时任务调用。
第一步:在项目根目录创建.qoder/skills/daily-weekly-report/SKILL.md,路径必须含skills子目录且文件名全小写。
第二步:在SKILL.md中填写以下核心字段,【name字段必须唯一且不含空格,例如daily-weekly-report,否则定时任务无法识别该技能】:
```yaml
name: daily-weekly-report
description: 支持按日/周双模式生成结构化报告,自动注入新闻、代码提交、PR、工单四类数据
input_schema:
type: object
properties:
mode:
type: string
enum: [daily, weekly]
description: 指定生成日报或周报
date_range:
type: string
format: date
description: 日期范围,日报填当天,周报填ISO周起止日如2026-07-27/2026-08-02
output_schema:
type: object
properties:
report_path:
type: string
description: 生成的Markdown报告绝对路径
rendered_at:
type: string
format: date-time
examples:
- input: {mode: "daily", date_range: "2026-07-30"}
output: {report_path: "/output/daily_20260730.md", rendered_at: "2026-07-30T08:00:00Z"}
```
第三步:保存后执行qodercli skill reload,终端返回Reloaded 1 skill(s)即表示注册成功。若无响应,检查文件是否存放在.qoder/skills/下且无编码错误。
配置日报与周报双触发计划
同一个Waker技能可通过不同Cron表达式绑定两个独立触发计划,分别对应日/周节奏。
方法一:日报触发(每日上午8点)
登录QoderWake管理控制台 →「触发管理」→「定时触发」→「添加计划」:
名称填“DAILY-0800-资讯日报生成”;时区选Asia/Shanghai;Cron填0 0 8 * * *;关联任务选“技能调用” → 输入技能名daily-weekly-report → 参数填{"mode":"daily","date_range":"{{now|strftime:%Y-%m-%d}}"}。
方法二:周报触发(每周五下午5点)
同路径新建第二个计划,名称填“WEEKLY-1700-研发周报生成”;Cron填0 0 0 17 ? FRI *;参数改为{"mode":"weekly","date_range":"{{now|strftime:%Y-%m-%d}}/next_friday"},【next_friday必须存在,否则模板渲染失败,该变量由QoderWake内置日期函数支持】。
两个计划保存后,状态栏均显示“已启用”,且各自trace_id可独立追踪。
准备日报与周报共用模板
模板决定最终输出形态,需用Jinja2语法兼容两种模式,避免维护两套文件。
在项目templates/目录下新建report.j2,内容开头声明条件分支:
{% if input.mode == "daily" %}<br>## {{ input.date_range | date('%Y年%m月%d日') }} 资讯日报<br>{% else %}<br>## {{ input.date_range.split('/')[0] | date('%m月%d日') }}—{{ input.date_range.split('/')[1] | date('%m月%d日') }} 研发周报<br>{% endif %}
正文部分用{% for item in data.news %}…{% endfor %}循环渲染资讯,用{% if input.mode == "weekly" %}{% for pr in data.pr_list %}…{% endfor %}{% endif %}包裹周报专属区块。
保存后,在QoderWake配置中指定template_path: templates/report.j2,该路径必须为相对路径且从项目根目录起算。
验证Waker执行链路
不要等明天8点看日报是否生成——现在就用CLI手动触发一次,确认整条链路畅通。
步骤一:执行日报模拟命令qodercli skill invoke daily-weekly-report --input '{"mode":"daily","date_range":"2026-07-30"}'
步骤二:检查返回JSON中report_path指向的文件是否存在,打开确认标题为“2026年07月30日资讯日报”且含至少一条新闻条目。
步骤三:执行周报模拟命令qodercli skill invoke daily-weekly-report --input '{"mode":"weekly","date_range":"2026-07-27/2026-08-02"}'
步骤四:查看生成文件标题是否为“07月27日—08月02日研发周报”,并确认PR列表区块非空。若任一环节失败,日志中会明确提示缺失数据源或模板语法错误位置。










