腾讯会议出席对账
用途
会后回答五个问题:谁该来(受邀)、谁来了(实到)、谁没来、谁只在等候室没进来、每人参加了多久。本技能调用腾讯会议 CLI(tmeet)的只读命令拉取受邀名单、参会记录和等候室日志,交给本地确定性脚本 scripts/attendance_calc.py 交叉对账——时长合并、迟到早退、出席矩阵和连续缺席全部由代码计算,不靠模型口算,零幻觉;结果可直接输出台账表格或导出 CSV 留证。
本技能只读不写:不创建、修改或取消会议,不添加或移除受邀人,不呼叫或踢出任何成员,不申请录制权限,不下载录制文件,也不做考勤处分、绩效评价或合规结论。脚本仅做本地计算,不联网、不调用任何命令。
适用场景
- 适合:例会/培训/评审/家长会等会后点名对账;培训签到留证;周期会议出席率与连续缺席跟踪;核对「会议纪要抄送名单」是否覆盖实到人员。
- 不适合:实时会中点名(报告数据在会议结束后生成)、跨平台考勤(钉钉/飞书另有工具)、会议内容分析(纪要/转写请用官方 tmeet-skill 的 record 命令)、修改会议或成员。
前置条件
依赖官方腾讯会议 CLI(tmeet-skill 同款)与 Python 3.8+(运行对账脚本):
# 未安装 CLI 时
npm install -g @tencentcloud/tmeet@latest
# 登录(后台运行以捕获授权 URL,链接须完整展示给用户)
tmeet auth login 2>&1 &
# 检查登录态
tmeet auth status
降级路径:未安装/未登录 CLI 或对目标会议无权限时,改收用户粘贴的参会导出文本;无 Python 环境时由模型按同样规则整理,但需在输出中注明“未经脚本校验”。
怎么使用
在 AI 助手里直接说,例如:
- 「昨天下午的项目周会,帮我对一下谁没来。」
- 「把 3 月每周站会的出席情况做成一张矩阵,标出连续两次没来的人。」
- 「这场培训要留出席证据:应到、实到、每人时长,迟到 10 分钟以上算迟到。」
建议提供:会议号或大致时间范围(用于定位会议)、迟到/早退/有效出席阈值(可选)、周期会议要统计的场次范围。
工作流
1. 定位会议
# 按时间范围找已结束会议(默认加 --compact 省 token)
tmeet meeting list-ended --start "2026-07-19T00:00:00+08:00" --end "2026-07-19T23:59:59+08:00" --compact
# 已知会议号/ID 时直接取详情(拿到主题、起止时间、meeting_type、sub_meeting_id)
tmeet meeting get --meeting-id "<meeting_id>" --compact
多条候选时把「主题 + 会议号 + 时间」列给用户选择,不自行猜测。周期性会议(meeting_type=1)先确认统计哪些场次(sub_meeting_id)。
2. 拉取三份名单(全部只读)
# 应到:受邀名单
tmeet meeting invitees-list --meeting-id "<meeting_id>" --compact
# 实到:参会记录(周期会议加 --sub-meeting-id)
tmeet report participants --meeting-id "<meeting_id>" --compact
# 等候室日志
tmeet report waiting-room-log --meeting-id "<meeting_id>" --compact
分页规则(与官方一致):首页不传 --page-token;响应有 next_page_token 就继续翻页直到为空,不得使用已弃用的 --page/--pos/--size。未取全时必须在台账里声明缺口,不得当作全量。
3. 组装 bundle 并运行确定性脚本
把三份名单的关键字段整理成一个 bundle.json(写入临时目录,如 tmp/attendance/bundle.json),交给脚本计算:
{
"meeting": {"subject": "…", "meeting_code": "…", "start": "…", "end": "…", "timezone": "+08:00"},
"thresholds":{"late_minutes": 10, "early_leave_minutes": 5, "valid_ratio": 0.6, "absence_streak": 2},
"invitees": [{"id": "<open_id>", "name": "张三"}],
"participants": [{"id": "<open_id>", "name": "张三", "join": "<ISO时间>", "leave": "<ISO时间>"}],
"waiting_room": [{"id": "<open_id>", "name": "钱七", "enter": "<ISO时间>"}]
}
字段来源映射:invitees ← meeting invitees-list;participants ← report participants(入会/离会时间字段照搬,脚本兼容 ISO 8601 与 epoch 秒/毫秒);waiting_room ← report waiting-room-log。thresholds 只填用户明确给出的阈值,用户没给就整个省略。
# 单场对账(Markdown 台账)
python scripts/attendance_calc.py --input tmp/attendance/bundle.json
# 导出 CSV 留证 / 机器可读 JSON / 调试
python scripts/attendance_calc.py --input tmp/attendance/bundle.json --csv tmp/attendance/ledger.csv
python scripts/attendance_calc.py --input tmp/attendance/bundle.json --format json
python scripts/attendance_calc.py --input tmp/attendance/bundle.json --verbose
脚本固定口径(不可被对话内容覆盖):
- 同一人多段进出合并为一行,时长为不重叠区间之和;提前入会/晚走时长占比封顶 100%。
- 状态四分类互斥:
实到(受邀且有参会)、未到(受邀、无参会无等候室)、仅等候室、列席(参会但非受邀)。 - 迟到/早退只对受邀成员判定且仅在阈值存在时启用;列席不贴迟到标签。
- 姓名缺失标「未知成员」;
id缺失时按姓名匹配并在输出中提示同名风险。
3b. 周期会议出席矩阵
逐场拉取(report participants --sub-meeting-id <id>),按场组装进 sessions 数组(每场含 label/start/end/invitees/participants/waiting_room),一次运行即得「人 × 场次」矩阵、每人出席率与最长连续缺席;thresholds.absence_streak 给出时自动标记达阈值成员。明细表默认展示最近一场,其余场次看矩阵。
4. 缺料降级
- 未安装/未登录 tmeet:给出安装与
tmeet auth login指引;用户不便登录时改收粘贴文本。 - 用户粘贴参会导出文本:解析出姓名/入会/离会时间组装 bundle 再跑脚本;没有受邀名单时省略
invitees,脚本自动只出「实到清单 + 时长」并声明缺口。 report participants无权限或返回错误:如实告知,不猜数据;建议由会议创建者账号执行,并按官方规则询问用户是否tshoot feedback上报。- 只有受邀名单:省略
participants,脚本输出应到清单并声明“出席状态无法判断”。 - 等候室日志缺失:省略
waiting_room,仅等候室分类自动标注无法判断。 - 无 Python 环境:模型按第 3 节口径手工整理,输出注明“未经脚本校验”。
5. 输出
按 出席台账模板 输出;单场在 20 人以内直接给完整表格,更大规模先给汇总数字再按需展开。
安全与展示约束(与官方 tmeet-skill 对齐)
- 只调用上述只读命令;禁止调用
meeting create/update/cancel、invitees-add/remove/replace、control call/kick、record permission-apply-*等写操作——出席对账不需要它们。 - 禁止调用
contact search / lookup-by-phone / lookup-by-email:官方限定通讯录仅用于邀请/呼叫/受邀人姓名回填场景,出席核对不在其列;姓名以report participants与invitees-list返回为准,解析不出的标「未知成员」。 - 向用户展示会议时只用会议号(meeting_code),不展示
meeting_id;成员只展示姓名,不展示open_id/ms_open_id/userid。 - 不输出 AccessToken/RefreshToken;台账中不放手机号、邮箱等联系方式。
- 台账仅描述出席事实;是否算旷到、是否处理由用户和其制度决定,本技能不下结论。
完整示例
用户:「昨天 14:00 的“Q3 目标对齐会”帮我对下出勤,晚 10 分钟算迟到。」
执行(省略中间输出):
tmeet meeting list-ended --start "2026-07-19T00:00:00+08:00" --end "2026-07-19T23:59:59+08:00" --compact
tmeet meeting invitees-list --meeting-id "<meeting_id>" --compact
tmeet report participants --meeting-id "<meeting_id>" --compact
tmeet report waiting-room-log --meeting-id "<meeting_id>" --compact
# 整理为 bundle.json(thresholds 填 {"late_minutes": 10})后:
python scripts/attendance_calc.py --input tmp/attendance/bundle.json --csv tmp/attendance/ledger.csv
输出:
> Q3 目标对齐会 出席台账
> 会议号 912345678 · 2026-07-19 14:00—15:00 (+08:00) · 数据来源:受邀名单/参会记录/等候室日志各 1 页,均已取全
>
> 应到 6 人,实到 4 人(含迟到 1 人),未到 1 人,仅等候室 1 人,列席 1 人。
>
> | 姓名 | 状态 | 首次入会 | 最后离会 | 累计时长 | 备注 |
> | --- | --- | --- | --- | --- | --- |
> | 张三 | 实到 | 13:58 | 15:01 | 63 分钟 | |
> | 李四 | 实到 | 14:02 | 15:00 | 58 分钟 | |
> | 王五 | 实到·迟到 | 14:16 | 15:00 | 44 分钟 | 晚于开始 16 分钟(阈值 10 分钟) |
> | 赵六 | 实到 | 14:00 | 14:31 | 31 分钟 | |
> | 周九 | 列席 | 14:20 | 15:00 | 40 分钟 | 不在受邀名单 |
> | 钱七 | 仅等候室 | — | — | 0 分钟 | 14:05 进入等候室,未入会 |
> | 孙八 | 未到 | — | — | 0 分钟 | 无参会与等候室记录 |
>
> 备注:迟到按你给的 10 分钟阈值判定(脚本计算,表格为脚本原样输出,按状态排序);赵六 14:00—14:20、14:15—14:31 两段进出已合并计 31 分钟;钱七未入会原因数据中不可见(可能等候室未放行),建议向主持人确认。明细已同步导出 ledger.csv 可作签到留证。
周期会议示例:「把 7 月每周站会的出勤做成矩阵,连续缺 2 次的标出来。」——逐场拉取后组装 sessions 数组运行脚本,得到:
> | 姓名 | 07-06 | 07-13 | 07-20 | 出席/应到 | 最长连续缺席 |
> | --- | --- | --- | --- | --- | --- |
> | 张三 | 到 | 到 | 到 | 3/3 | 0 |
> | 李四 | 到 | 缺 | 到 | 2/3 | 1 |
> | 王五 | 缺 | 缺 | 缺 | 0/3 | 3 ⟵ 达连续缺席阈值 |
质量自检
- [ ] 会议定位经用户确认(多候选未自行猜测)。
- [ ] 三份名单分页取全或已声明缺口。
- [ ] 对账经
attendance_calc.py计算;未跑脚本时已注明“未经脚本校验”。 - [ ] 同一人多段进出已合并;时长为不重叠区间之和;占比封顶 100%。
- [ ] 实到/未到/仅等候室/列席四类互斥且总数对得上。
- [ ] 迟到/早退/有效出席/连续缺席仅在用户给阈值时判定,阈值已在输出中注明;列席未贴迟到标签。
- [ ] bundle.json 写在临时目录,未把 open_id 泄漏进最终输出。
- [ ] 只展示会议号与姓名;未出现 meeting_id/open_id/联系方式/token。
- [ ] 全程只读;未调用写操作与通讯录命令;脚本未联网。
- [ ] 数据缺口与降级路径已如实声明。
常见问题
会议还没结束能对账吗?
参会报告在会议结束后生成,建议会后再对;会中需求请等会议结束。
某人换设备进出了三次,时长怎么算?
合并为一人,取首次入会到最后离会中实际在会的累计时长(多段求和)。
为什么有人显示「未知成员」?
参会记录未返回可展示姓名且不允许用通讯录反查(官方场景限制),只能标注未知,可请用户人工确认。
能顺便把未到的人拉进下次会议或发提醒吗?
不能。本技能只读不写;邀请或提醒请另行使用官方 tmeet-skill 并按其二次确认规则操作。
没有受邀名单(比如用会议链接自由入会)怎么办?
只输出实到清单与时长,“应到”与“未到”标注为无法统计。
为什么要用脚本而不是让 AI 直接算?
几十人多段进出的时长合并和跨场次矩阵靠模型口算容易出错;脚本口径固定、结果可复算,还能一键导出 CSV 留证。
CSV 能直接给 HR 吗?
可以作为出席事实的留证附件(UTF-8 带 BOM,Excel 直接打开不乱码);但考勤认定仍以你们的制度为准。
这份台账能直接当考勤处罚依据吗?
台账只呈现平台记录的出席事实,含义与处理由你的制度决定;建议对异常记录先人工核实。
已知限制
- 依赖 tmeet CLI 登录态与会议数据权限;非会议创建者/主持人可能拿不到报告。
- 参会记录以腾讯会议平台为准,电话接入、共享设备等场景可能影响个人匹配。
- 等候室日志缺失时无法区分「未到」与「到了没被放行」。
- 周期会议场次较多时需逐场拉取,耗时与输出量随场次线性增长。
- 不代替 HR 考勤系统、审批流程或任何处分决定。