name: zoom-meeting-assistance-rtms-unofficial-community
description: Zoom RTMS 会议助手 — 按需启动,通过 Zoom 实时媒体流捕获会议音频、视频、转录、屏幕共享和聊天。处理 meeting.rtms_started 和 meeting.rtms_stopped 的 Webhook 事件。提供 AI 驱动的对话建议、情感分析和实时摘要,并通过 WhatsApp 发送通知。在 Zoom RTMS Webhook 触发或用户要求录制/分析会议时使用。
使用 Zoom 实时媒体流(RTMS)的无头会议捕获服务。接收 Webhook 事件,连接 RTMS WebSocket,录制所有媒体,并通过 OpenClaw 运行 AI 分析。
此技能处理两个 Zoom Webhook 事件:
meeting.rtms_started — 当会议的 RTMS 被激活时,Zoom 发送此事件。包含连接 RTMS WebSocket 所需的 server_urls、rtms_stream_id 和 meeting_uuid。meeting.rtms_stopped — 当 RTMS 结束时(会议结束或 RTMS 被禁用),Zoom 发送此事件。触发清理操作:关闭 WebSocket 连接,生成屏幕共享 PDF,发送摘要通知。此技能需要一个公开的 Webhook 端点来接收来自 Zoom 的这些事件。
推荐方案: 使用 ngrok-unofficial-webhook-skill (skills/ngrok-unofficial-webhook-skill)。它会通过 skill.json 中的 webhookEvents 自动发现此技能,通知用户,并提供将事件路由到此服务的选项。
其他 Webhook 解决方案(例如自定义服务器、云函数)也可用,但需要额外的集成工作来将有效负载转发到此服务。
cd skills/zoom-meeting-assistance-rtms-unofficial-community
npm install
需要 ffmpeg 用于会议后的媒体转换。
在技能的 .env 文件中设置以下变量:
必需:
- ZOOM_SECRET_TOKEN — Zoom Webhook 密钥令牌
- ZOOM_CLIENT_ID — Zoom 应用客户端 ID
- ZOOM_CLIENT_SECRET — Zoom 应用客户端密钥
可选:
- PORT — 服务器端口(默认:3000)
- AI_PROCESSING_INTERVAL_MS — AI 分析频率(毫秒)(默认:30000)
- AI_FUNCTION_STAGGER_MS — AI 调用之间的延迟(毫秒)(默认:5000)
- AUDIO_DATA_OPT — 1 = 混合流,2 = 多流(默认:2)
- OPENCLAW_NOTIFY_CHANNEL — 通知渠道(默认:whatsapp)
- OPENCLAW_NOTIFY_TARGET — 电话号码 / 通知目标
cd skills/zoom-meeting-assistance-rtms-unofficial-community
node index.js
这将启动一个 Express 服务器,在 PORT 上监听 Zoom Webhook 事件。
⚠️ 重要提示: 在将 Webhook 转发到此服务之前,请务必检查服务是否正在运行:
# 检查端口 3000 上是否有服务在监听
lsof -i :3000
如果没有返回任何结果,请在转发任何 Webhook 事件之前先启动服务。
典型流程:
1. 将服务器作为后台进程启动
2. Zoom 发送 meeting.rtms_started webhook → 服务连接到 RTMS WebSocket
3. 实时接收媒体流:音频、视频、转录、屏幕共享、聊天
4. AI 处理定期运行(对话建议、情感、摘要)
5. meeting.rtms_stopped → 服务关闭连接,生成屏幕共享 PDF
所有录制内容按日期组织存储:
skills/zoom-meeting-assistance-rtms-unofficial-community/recordings/YYYY/MM/DD/{streamId}/
每个流文件夹包含:
| 文件 | 内容 | 可搜索 |
|---|---|---|
metadata.json |
会议元数据(UUID、流 ID、操作员、开始时间) | ✅ |
transcript.txt |
带时间戳和发言人姓名的纯文本转录 | ✅ 最适合搜索 — 对 grep 友好,每行一个话语 |
transcript.vtt |
VTT 格式的带时间提示的转录 | ✅ |
transcript.srt |
SRT 格式的转录 | ✅ |
events.log |
参与者加入/离开、活跃发言人变更(JSON 行格式) | ✅ |
chat.txt |
带时间戳的聊天消息 | ✅ |
ai_summary.md |
AI 生成的会议摘要(Markdown 格式) | ✅ 关键文档 — 首先阅读此文件以获取会议概览 |
ai_dialog.json |
AI 对话建议 | ✅ |
ai_sentiment.json |
每位参与者的情感分析 | ✅ |
mixedaudio.raw |
混合音频流(原始 PCM) | ❌ 二进制 |
activespeakervideo.h264 |
活跃发言人视频(原始 H.264) | ❌ 二进制 |
processed/screenshare.pdf |
去重后的屏幕共享帧生成的 PDF | ❌ 二进制 |
所有摘要也会复制到一个中央文件夹,便于访问:
skills/zoom-meeting-assistance-rtms-unofficial-community/summaries/summary_YYYY-MM-DDTHH-MM-SS_{streamId}.md
要查找和回顾过往会议数据:
# 按日期列出所有录制的会议
ls -R recordings/
# 列出特定日期的会议
ls recordings/2026/01/28/
# 在所有转录文件中搜索关键词
grep -rl "关键词" recordings/*/*/*/*/transcript.txt
# 搜索特定人员说过的话
grep "Chun Siong Tan" recordings/*/*/*/*/transcript.txt
# 阅读会议摘要
cat recordings/YYYY/MM/DD/<streamId>/ai_summary.md
# 在摘要中搜索主题
grep -rl "主题" recordings/*/*/*/*/ai_summary.md
# 查看谁参加了会议
cat recordings/YYYY/MM/DD/<streamId>/events.log
# 获取会议的情感分析
cat recordings/YYYY/MM/DD/<streamId>/ai_sentiment.json
.txt、.md、.json 和 .log 文件都是基于文本且可搜索的。从 ai_summary.md 开始快速概览,然后深入 transcript.txt 查找具体引用或细节。
# 切换 WhatsApp 通知开/关
curl -X POST http://localhost:3000/api/notify-toggle -H "Content-Type: application/json" -d '{"enabled": false}'
# 检查通知状态
curl http://localhost:3000/api/notify-toggle
当 meeting.rtms_stopped 触发时,服务会自动:
1. 从屏幕共享图像生成 PDF
2. 转换 mixedaudio.raw → mixedaudio.wav
3. 转换 activespeakervideo.h264 → activespeakervideo.mp4
4. 将混合音频和活跃发言人视频混合为 final_output.mp4
提供手动转换脚本,但请注意自动转换在会议结束时运行,因此很少需要手动重新运行。
在会议期间或之后,从 recordings/YYYY/MM/DD/{streamId}/ 读取文件:
# 按日期列出录制的会议
ls -R recordings/
# 阅读转录
cat recordings/YYYY/MM/DD/<streamId>/transcript.txt
# 阅读 AI 摘要
cat recordings/YYYY/MM/DD/<streamId>/ai_summary.md
# 阅读情感分析
cat recordings/YYYY/MM/DD/<streamId>/ai_sentiment.json
想要不同的摘要风格或分析吗?自定义 AI 提示词以满足您的需求!
编辑以下文件以更改 AI 行为:
| 文件 | 用途 | 自定义示例 |
|---|---|---|
summary_prompt.md |
会议摘要生成 | 要点列表与段落叙述、关注领域、长度 |
query_prompt.md |
查询响应格式化 | 响应风格、详细程度 |
query_prompt_current_meeting.md |
实时会议分析 | 会议期间需要突出显示的内容 |
query_prompt_dialog_suggestions.md |
对话建议风格 | 正式与随意、建议数量 |
query_prompt_sentiment_analysis.md |
情感评分逻辑 | 自定义情感类别、阈值 |
提示: 编辑前备份原始文件,以便需要时可以恢复。