每日质检 V1.7
自动完成每日质检的主流程:班别选择、截图生成与裁切、需修正数统计、固定图文发送、可选转发到指定群。
当前版本的首次使用体验也已更新:
- 第一次发送
每日质检时,会先在聊天内完成基础初始化 - 先确认发送位置
- 再用按钮选择提醒时间:
06:55/14:55/22:55/暂不设置 - 设定后会直接继续进入质检流程,不需要重新发送触发词
- 默认转发群 ID 也可直接用命令管理:
qc:fwdshow/qc:fwdset <groupId>/qc:fwdreset
首次交互
先收集两项:
- 班别(固定 1~6)
- 质检人员(用于“质检人员:XXX”)
发布/安装前配置
- 当前发布版的
references/config.json已固定为一套可直接使用的表单配置。 - 若后续要改给其他环境使用,再以
references/config.example.json为模板覆盖/调整:- Google Sheet URL / spreadsheetId
- tabs 1~6 映射
- forward.account(若需要)
- 若改回模板占位值(如
REPLACE),技能安装后仍可成功,但执行到读取表格时会报缺配置。
正确入口(先看这个)
本技能有且只有一个对话流程主入口:scripts/run_flow.py
请按下面规则执行:
- 用户发送
每日质检/质检截图/质检→ 调用scripts/run_flow.py - 用户点击提醒按钮
开始/跳过→ 调用scripts/run_flow.py - 用户发送帮助或维护指令(如
/qc、qc:help、qc:reset、qc:initreset、qc:sendhere、qc:sendto ...、qc:clean、qc:fwdshow、qc:fwdset <groupId>、qc:fwdreset)→ 也由scripts/run_flow.py处理 - 若尚未初始化,
scripts/run_flow.py必须先执行首次设置,再继续每日质检主流程;不要要求用户在首次设置后重新发送一次触发词 - 不要自行用自然语言改写成手动问答流程;班别按钮、转发按钮、提醒按钮都应由脚本负责
其他脚本的角色(不要混用)
scripts/healthcheck.py:只负责检查依赖/配置是否齐全,不负责对话流程scripts/engine.py:只负责执行截图与统计,不直接承担聊天入口scripts/install-and-bootstrap.sh:部署/安装辅助脚本,用于安装后做首次初始化;不是日常对话入口scripts/first-run-setup.sh:首次提醒设置脚本;不是日常对话入口scripts/setup-reminders.sh:重新设置提醒时间;不是日常对话入口scripts/reminder_send.py/scripts/reminder_timeout.py:只负责提醒发送与超时清理;不是用户手动触发的主流程入口
执行约束(强制)
- 遇到上述触发词或按钮时,必须优先调用
scripts/run_flow.py。 - 若脚本应出现按钮却未出现,优先视为“脚本未被正确调用”或“运行环境不支持当前按钮发送”,不要退回成手动问答式流程。
- 仅在脚本报错、缺项、或明确不支持按钮能力时,才用文字说明问题。
执行逻辑
scripts/healthcheck.py先逐项检查依赖、配置、能力与关键脚本存在性。- 仅在首次触发该技能时回报一次检查结果;只检查,不自动安装、不改环境。若缺项则中止流程。
healthcheck.py只检查本技能必需项(含GOG_ACCOUNT与GOG_KEYRING_PASSWORD/密码文件),不做无关环境检查。engine.py仍会在执行时再次强校验关键环境;缺失即中止。- 本技能不再默认回退到任何个人 Google 账号。
- 满足时由
scripts/engine.py执行:- 切到指定页签
- 自动定位最近日期区块(A列)
- 取消蓝底选取
- 先进行完整截图(不先裁)
- 按当次截图实时识别网格线与内容边界,再裁切 A~G
- 右边界按 H 左线回退,确保 G 列完整且不带 H
- 保留底部 2~4 行空白
- 执行硬校验(A列日期完整、G列完整、无索引列、无H、非空)
- 校验不通过时自动重算/重裁(迭代)后再输出
- 统计需修正数(最近日期对应行数)
scripts/run_flow.py当前完整流程为(支持两种进入方式:手动发送「每日质检」,或在到点提醒时点击「开始」):- 触发「每日质检」
- 若尚未设发送位置,则先提示设定一次
- 选择班别
- 输入质检人员
- 生成截图并提示输入质检总数
- 按固定模板发送图文
- 随后显示按钮让你决定是否转发到指定群
- 分支 A:若选择转发,首次需输入群ID;指定后会作为后续默认转发群ID,不会每次重复询问;转发成功后回“已发送成功”,再清除缓存并回到 idle
- 分支 B:若选择本次不转发,会回“本次不转发,流程已结束,并已清除缓存。”,然后回到 idle
- 转发确认阶段有超时保护(默认 10 分钟),超时会自动回到 idle 并提示重开流程
- 转发失败会返回分类错误提示(群ID/权限/账号/API)
- 交互文案使用中文提示,并在关键输入后即时回覆
- 首次使用会先交互提示指定发送位置;指定后作为该对话默认值持续沿用。
qc:sendhere:发送到当前对话并设为默认qc:sendto <target> [account]:重新指定发送位置并设为默认- 也支持中文口令:
重新指定发送位置 <target> [account]
help//help/qc:help//qc会返回内置帮助,且每条命令都附中文“说明+解释”:qc:reset(重置当前这轮流程,但保留首次初始化与默认发送位置)qc:initreset(清空首次初始化状态,下次重新引导)qc:sendhere(发送到当前对话)qc:sendto <target> [account](发送到指定对话,可选指定账号)重新指定发送位置 <target> [account](中文同义命令)qc:fwdshow(查看当前默认转发群 ID)qc:fwdset <groupId>(直接设置默认转发群 ID)qc:fwdreset(清空默认转发群 ID,下次重新询问)- 图文发送后会出现“转发到指定群 / 本次不转发”按钮(不需要输入确认命令)
- 点“本次不转发”后,会提示“本次不转发,流程已结束,并已清除缓存。”
qc:clean/清理测试缓存(硬删除测试缓存:tmp/qcshots与旧qcshots-*回收目录)- 自动清理策略:在图文发送并完成确认后硬删除测试缓存
- 支持定时提醒模式:
- 在首次聊天初始化里,若点“现在设置提醒”,应继续在聊天内显示固定时间按钮:
06:55/14:55/22:55/暂不设置;不要把首次聊天流程丢去 shell 交互。 - 选定时间后,应立即覆盖旧提醒配置、写入新时间,并马上发送一次“开始 / 跳过”提醒;随后直接继续每日质检主流程。
- 若点“暂不设置”,则本次首次初始化继续完成,但
remindersConfigured应维持未设置状态。 - 若希望达到“安装后立即进入提醒设置交互”的效果,使用
scripts/install-and-bootstrap.sh作为一键安装入口:安装 skill 后立刻执行首次提醒设置,并在完成后马上发送一次“开始 / 跳过”提醒。 install-and-bootstrap.sh还会在安装完成后发送一条较完整的常用操作说明(逐条带命令范例);若当前平台支持 pin,则会尝试自动置顶,若不支持则降级为仅发送说明消息。- 首次部署也可直接使用
scripts/first-run-setup.sh:先进入提醒时间交互设置,设置完成后立即发送一次“开始 / 跳过”提醒,形成首次安装后的完整体验。 - 后续若只想调整提醒时间,可使用
scripts/setup-reminders.sh进行交互式部署,可选择预设时间(06:55 / 14:55 / 22:55)或增加自定义时间。 - 重新设置提醒时间时,会先覆盖旧的提醒配置,再写入新的时间;不会让旧时间与新时间同时保留;并会在设置完成后立即再发送一次“开始 / 跳过”提醒。
- 提醒按钮为:
开始/跳过 - 点
开始:直接进入本技能流程,但不绑定班别,后续仍由使用者自行选择班别 - 点
跳过:本次提醒直接结束,不进入后续流程 - 若 10 分钟内未点
开始/跳过,则本次提醒自动结束;并通过scripts/reminder_timeout.py删除该提醒消息、清理状态与缓存
- 在首次聊天初始化里,若点“现在设置提醒”,应继续在聊天内显示固定时间按钮:
固定输出模板
mm/dd x班x组质检 质检总数: 需修正数:<自动统计> 质检人员:<输入值>
