ClawSkills logoClawSkills

Zoom Meeting Assistance Rtms Unofficial Community

Zoom RTMS 会议助手 — 按需启动以通过 Zoom 实时媒体流捕获会议音频、视频、文字记录、屏幕共享和聊天。处理会议...

介绍

# Zoom RTMS Meeting Assistant

使用实时媒体流 (RTMS) 的 Zoom 会议无头捕获服务。接收 Webhook 事件,连接到 RTMS WebSocket,录制所有媒体,并通过 OpenClaw 运行 AI 分析。

## 处理的 Webhook 事件

此技能处理两种 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 依赖项

此技能需要一个公开的 Webhook 端点来接收来自 Zoom 的这些事件。

**首选:** 使用 **ngrok-unofficial-webhook-skill** (`skills/ngrok-unofficial-webhook-skill`)。它会通过 `skill.json` 中的 `webhookEvents` 自动发现此技能,通知用户,并提供将事件路由到此处。

其他 Webhook 解决方案(例如自定义服务器、云函数)也可以使用,但需要额外的集成来将数据包转发到此服务。

## 前置条件

```bash cd skills/zoom-meeting-assistance-rtms-unofficial-community npm install ```

需要 `ffmpeg` 用于会后媒体转换。

## 环境变量

在技能的 `.env` 文件中设置这些变量:

**必需:** - `ZOOM_SECRET_TOKEN` — Zoom webhook secret token - `ZOOM_CLIENT_ID` — Zoom app Client ID - `ZOOM_CLIENT_SECRET` — Zoom app Client Secret

**可选:** - `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` — 通知的电话号码/目标对象

## 启动服务

```bash cd skills/zoom-meeting-assistance-rtms-unofficial-community node index.js ```

这将启动一个 Express 服务器,在 `PORT` 上监听 Zoom webhook 事件。

**⚠️ 重要:** 在将 webhook 转发到此服务之前,请务必检查它是否正在运行:

```bash # Check if service is listening on port 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 生成的会议摘要 | ✅ 关键文档 — 首先阅读此文件以了解会议概览 | | `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 ```

## 搜索和查询过去的会议

要查找和回顾过去的会议数据:

```bash # List all recorded meetings by date ls -R recordings/

# List meetings for a specific date ls recordings/2026/01/28/

# Search across all transcripts for a keyword grep -rl "keyword" recordings/*/*/*/*/transcript.txt

# Search for what a specific person said grep "Chun Siong Tan" recordings/*/*/*/*/transcript.txt

# Read a meeting summary cat recordings/YYYY/MM/DD/<streamId>/ai_summary.md

# Search summaries for a topic grep -rl "topic" recordings/*/*/*/*/ai_summary.md

# Check who attended a meeting cat recordings/YYYY/MM/DD/<streamId>/events.log

# Get sentiment for a meeting cat recordings/YYYY/MM/DD/<streamId>/ai_sentiment.json ```

`.txt`、`.md`、`.json` 和 `.log` 文件都是基于文本且可搜索的。首先查看 `ai_summary.md` 以快速了解概览,然后深入查看 `transcript.txt` 以获取具体引用或详细信息。

## API 端点

```bash # Toggle WhatsApp notifications on/off curl -X POST http://localhost:3000/api/notify-toggle -H "Content-Type: application/json" -d '{"enabled": false}'

# Check notification status 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}/` 读取文件:

```bash # List recorded meetings by date ls -R recordings/

# Read transcript cat recordings/YYYY/MM/DD/<streamId>/transcript.txt

# Read AI summary cat recordings/YYYY/MM/DD/<streamId>/ai_summary.md

# Read sentiment analysis cat recordings/YYYY/MM/DD/<streamId>/ai_sentiment.json ```

## 提示词自定义

想要不同的摘要风格或分析?自定义 AI 提示词以满足您的需求!

编辑这些文件以更改 AI 行为:

| 文件 | 用途 | 自定义示例 | |------|---------|----------------------| | `summary_prompt.md` | 会议摘要生成 | 要点 vs 散文,关注领域,长度 | | `query_prompt.md` | 查询响应格式 | 响应风格,详细程度 | | `query_prompt_current_meeting.md` | 实时会议分析 | 会议期间要强调的内容 | | `query_prompt_dialog_suggestions.md` | 对话建议风格 | 正式 vs 随意,建议数量 | | `query_prompt_sentiment_analysis.md` | 情感评分逻辑 | 自定义情感类别,阈值 |

**提示:** 编辑前请备份原始文件,以便在需要时恢复。

更多产品