zoom-meeting-assistance-rtms-unofficial-community

Review·Scanned 2/18/2026

This skill captures Zoom RTMS meetings, stores recordings under skills/zoom-meeting-assistance-rtms-unofficial-community/recordings/YYYY/MM/DD/{streamId}/, and runs AI analysis via OpenClaw. It reads env vars like ZOOM_SECRET_TOKEN and ZOOM_CLIENT_SECRET, opens WebSocket connections to serverUrl/mediaUrl, and executes local binaries (ffmpeg, openclaw).

from clawhub.ai·vcca013e·134.4 KB·0 installs
Scanned from 0.1.3 at cca013e · Transparency log ↗
$ vett add clawhub.ai/tanchunsiong/zoom-meeting-assistance-rtms-unofficial-communityReview findings below

Zoom RTMS Meeting Assistant

Headless capture service for Zoom meetings using Real-Time Media Streams (RTMS). Receives webhook events, connects to RTMS WebSockets, records all media, and runs AI analysis via OpenClaw with WhatsApp notifications.

Unofficial — This skill is not affiliated with or endorsed by Zoom Video Communications.

Requires OpenClaw — This skill uses the OpenClaw CLI for AI processing and notifications.

Features

  • Real-time capture — Audio, video, transcript, screenshare, and chat via RTMS WebSockets
  • AI analysis — Dialog suggestions, sentiment analysis, and live summaries via OpenClaw
  • WhatsApp notifications — Real-time AI results sent via WhatsApp
  • Multi-format transcripts — VTT, SRT, and plain text with timestamps and speaker names
  • Screenshare PDF — Deduplicated screenshare frames compiled into a PDF
  • Per-participant audio — Raw PCM audio per participant with gap filling
  • Notification toggle — Mute/unmute notifications mid-meeting via API

How It Works

  1. Receive webhook — Zoom sends meeting.rtms_started via the ngrok webhook skill
  2. Connect to RTMS — Service connects to Zoom's RTMS WebSocket using the provided stream URLs
  3. Capture media — All streams saved in real-time to recordings/{streamId}/
  4. AI processing — OpenClaw periodically analyzes transcripts for dialog suggestions, sentiment, and summaries
  5. Meeting endsmeeting.rtms_stopped triggers cleanup, PDF generation, and summary notification

Quick Start

1. Install dependencies

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

Requires ffmpeg for post-meeting media conversion.

2. Configure

Copy .env.example to .env and fill in:

ZOOM_SECRET_TOKEN=your_webhook_secret_token
ZOOM_CLIENT_ID=your_zoom_client_id
ZOOM_CLIENT_SECRET=your_zoom_client_secret
OPENCLAW_NOTIFY_TARGET=+1234567890

3. Start

node index.js

The service listens on port 4048 (configurable) for webhook events forwarded by the ngrok skill.

Environment Variables

VariableRequiredDefaultDescription
ZOOM_SECRET_TOKENZoom webhook secret token
ZOOM_CLIENT_IDZoom app Client ID
ZOOM_CLIENT_SECRETZoom app Client Secret
PORT3000Express server port
WEBHOOK_PATH/webhookWebhook endpoint path
AI_PROCESSING_INTERVAL_MS30000AI analysis frequency (ms)
AI_FUNCTION_STAGGER_MS5000Delay between AI calls (ms)
OPENCLAW_BINopenclawPath to OpenClaw binary
OPENCLAW_NOTIFY_CHANNELwhatsappNotification channel
OPENCLAW_NOTIFY_TARGETPhone number / target
OPENCLAW_TIMEOUT120OpenClaw timeout (seconds)
AUDIO_DATA_OPT21 = mixed audio, 2 = multi-stream

Recorded Data

All recordings stored at recordings/{streamId}/:

FileContent
transcript.txtPlain text transcript — best for searching
transcript.vttVTT format transcript with timing cues
transcript.srtSRT format transcript
events.logParticipant join/leave, active speaker (JSON lines)
chat.txtChat messages with timestamps
ai_summary.mdAI-generated meeting summary
ai_dialog.jsonAI dialog suggestions
ai_sentiment.jsonSentiment analysis per participant
{userId}.rawPer-participant raw PCM audio
combined.h264Raw H.264 video
processed/screenshare.pdfDeduplicated screenshare frames as PDF

Searching Past Meetings

# List all recorded meetings
ls recordings/

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

# Search what a specific person said
grep "Name" recordings/*/transcript.txt

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

# Check who attended
cat recordings/<streamId>/events.log

API Endpoints

# 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

Post-Meeting Helpers

Run manually after a meeting ends:

# Convert raw audio/video to WAV/MP4
node convertMeetingMedia.js <streamId>

# Mux first audio + video into final MP4
node muxFirstAudioVideo.js <streamId>

Prompt Customization

Edit these files to change AI behavior:

  • summary_prompt.md — Meeting summary generation
  • query_prompt.md — Query response formatting
  • query_prompt_current_meeting.md — Real-time meeting analysis
  • query_prompt_dialog_suggestions.md — Dialog suggestion style
  • query_prompt_sentiment_analysis.md — Sentiment scoring logic

File Structure

├── .env                        # API keys & config
├── index.js                    # Main RTMS server & recording logic
├── chatWithClawdbot.js         # OpenClaw AI integration
├── convertMeetingMedia.js      # FFmpeg conversion helper
├── muxFirstAudioVideo.js       # Audio/video muxing helper
├── saveRawAudioAdvance.js      # Real-time audio stream saving
├── saveRawVideoAdvance.js      # Real-time video stream saving
├── writeTranscriptToVtt.js     # Transcript writing (VTT/SRT/TXT)
├── saveSharescreen.js          # Screenshare capture & PDF generation
├── summary_prompt.md           # Summary generation prompt
├── query_prompt*.md            # AI query prompts
└── recordings/                 # Meeting data storage
    └── {streamId}/             # Per-meeting directory

Related Skills

Bug Reports & Contributing

Found a bug? Please raise an issue at: 👉 https://github.com/tanchunsiong/zoom-meeting-assistance-with-rtms-unofficial-community-skill/issues

Pull requests are also welcome!

License

MIT