关于 zoom
zoom 是通过 Zoom API 管理会议和云录制的技能,适合需要从命令行处理 Zoom 会议的用户。它分别使用 Server-to-Server OAuth 和 User OAuth 访问会议与录制内容。
主要功能
- 01列出、创建、更新和删除会议
- 02查询云录制及相关文件
- 03查看录制的字幕、摘要和下载链接
- 04支持 Markdown 与 JSON 输出
适用场景
- 01查看即将举行或已结束的会议
- 02创建或修改预定会议
- 03查找录制、字幕和下载链接
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ glebis/ claude-skills --skill zoom安装后在 Claude Code 中输入/zoom确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.md.claude-plugin/plugin.jsonscripts/zoom_meetings.py详细介绍
Zoom 技能
通过 Zoom API 管理 Zoom 会议和云录制。
功能
- 会议:列出、创建、更新和删除已安排的会议
- 录制:列出云录制及其文字稿、摘要和下载链接
注意:传递给创建/更新命令的所有时间都会被视为本地时间。如果未通过 --timezone 明确指定时区,脚本会自动检测你的时区。
先决条件
此技能使用两种身份验证方法:
| 功能 | 身份验证类型 | 凭据文件 |
|---|---|---|
| 会议 | Server-to-Server OAuth | ~/.zoom_credentials/credentials.json |
| 录制 | User OAuth(General App) | ~/.zoom_credentials/oauth_token.json |
检查状态:
python3 scripts/zoom_meetings.py setup
设置
第 1 部分:Server-to-Server OAuth(用于会议)
- 前往 marketplace.zoom.us → Develop → Build App
- 选择 Server-to-Server OAuth
- 为其命名(例如,“Claude Zoom Meetings”)
- 复制 Account ID、Client ID、Client Secret
- 添加作用域:
meeting:read:meeting:adminmeeting:read:list_meetings:adminmeeting:write:meeting:adminuser:read:user:admin
- 激活应用
- 保存凭据:
mkdir -p ~/.zoom_credentials
cat > ~/.zoom_credentials/credentials.json << 'EOF'
{
"account_id": "YOUR_ACCOUNT_ID",
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET"
}
EOF
第 2 部分:General App OAuth(用于录制)
Server-to-Server 应用无法访问云录制。你需要另一个 General App:
- 前往 marketplace.zoom.us → Develop → Build App
- 选择 General App
- 设置重定向 URL:
http://localhost:8888/callback - 复制 Client ID 和 Client Secret
- 添加作用域:
cloud_recording:read:list_user_recordingscloud_recording:read:list_recording_files
- 激活应用
- 授权(一次性浏览器流程):
# Open this URL in browser (replace CLIENT_ID):
https://zoom.us/oauth/authorize?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=http://localhost:8888/callback
# After authorizing, you'll be redirected to:
# http://localhost:8888/callback?code=AUTHORIZATION_CODE
# Exchange the code for tokens (replace values):
python3 -c "
import requests, json
resp = requests.post('https://zoom.us/oauth/token',
auth=('CLIENT_ID', 'CLIENT_SECRET'),
data={'grant_type': 'authorization_code', 'code': 'AUTH_CODE', 'redirect_uri': 'http://localhost:8888/callback'})
data = resp.json()
data['client_id'] = 'CLIENT_ID'
data['client_secret'] = 'CLIENT_SECRET'
data['expires_at'] = __import__('time').time() + data.get('expires_in', 3600)
with open(__import__('pathlib').Path.home() / '.zoom_credentials/oauth_token.json', 'w') as f:
json.dump(data, f, indent=2)
print('Saved!')
"
快速开始
# Check setup
python3 scripts/zoom_meetings.py setup
# List upcoming meetings
python3 scripts/zoom_meetings.py list
# Create a meeting
python3 scripts/zoom_meetings.py create "Team Standup" --start "2025-01-15T10:00:00" --duration 30
# List recordings
python3 scripts/zoom_meetings.py recordings --start 2025-01-01
命令
会议
# List meetings
python3 scripts/zoom_meetings.py list # upcoming
python3 scripts/zoom_meetings.py list --type previous # past
python3 scripts/zoom_meetings.py list --limit 10 --json
# Get meeting details
python3 scripts/zoom_meetings.py get MEETING_ID
# Create meeting (times are treated as LOCAL time)
python3 scripts/zoom_meetings.py create "Topic" # instant
python3 scripts/zoom_meetings.py create "Topic" --start "2025-01-15T14:00:00" # scheduled (local time)
python3 scripts/zoom_meetings.py create "Topic" --duration 60 --timezone "Europe/Berlin"
python3 scripts/zoom_meetings.py create "Topic" --agenda "Discussion points" --waiting-room
python3 scripts/zoom_meetings.py create "Topic" --invite "[email protected]" # send invite
python3 scripts/zoom_meetings.py create "Topic" --invite "[email protected]" --invite "[email protected]" # multiple
# Update meeting
python3 scripts/zoom_meetings.py update MEETING_ID --topic "New Topic"
python3 scripts/zoom_meetings.py update MEETING_ID --start "2025-01-16T10:00:00"
# Delete meeting (requires meeting:delete:meeting:admin scope)
python3 scripts/zoom_meetings.py delete MEETING_ID
录制
# List all recordings (default: last 30 days)
python3 scripts/zoom_meetings.py recordings
# With date range
python3 scripts/zoom_meetings.py recordings --start 2025-01-01 --end 2025-01-31
# Show download URLs
python3 scripts/zoom_meetings.py recordings --show-downloads
# Get specific meeting's recordings
python3 scripts/zoom_meetings.py recording MEETING_ID
# JSON output
python3 scripts/zoom_meetings.py recordings --json
输出格式
Markdown(默认)
# Zoom Meetings (3 upcoming)
## Weekly Team Sync
**ID:** 123456789
**Start:** 2025-01-15 14:00:00 UTC
**Duration:** 60 minutes
**Join URL:** https://zoom.us/j/123456789
JSON
添加 --json,即可生成适合通过管道传递给其他工具的结构化输出。
录制文件类型
| 类型 | 说明 |
|---|---|
| MP4 | 视频录制 |
| M4A | 仅音频 |
| TRANSCRIPT | 文字稿(VTT) |
| CHAT | 聊天消息 |
| TIMELINE | 发言者时间线 |
| SUMMARY | AI 会议摘要 |
用户请求示例
| 用户表述 | 命令 |
|---|---|
| “列出我的 Zoom 会议” | list |
| “显示过往会议” | list --type previous |
| “创建一个明天下午 2 点的会议” | create "Meeting" --start "2025-01-15T14:00:00" |
| “显示我的 Zoom 录制” | recordings --start 2025-01-01 |
| “获取会议 X 的录制” | recording MEETING_ID |
依赖项
pip install requests
文件
| 文件 | 用途 |
|---|---|
~/.zoom_credentials/credentials.json | S2S OAuth 凭据 |
~/.zoom_credentials/token.json | S2S 缓存令牌 |
~/.zoom_credentials/oauth_token.json | User OAuth 令牌(自动刷新) |
已知问题
- **
join_before_host是账户级设置。**此设置在 Zoom 账户管理员级别锁定。如果账户设置覆盖了通过 API 针对单个会议设置的值,该设置会被静默忽略。必须先在 Zoom 管理设置中更改(Security → “允许参与者在主持人之前加入”),之后 API 调用才会遵循此设置。 - **等候室设置会覆盖“主持人之前加入”。**如果账户级别启用了等候室,即使 API 接受了
join_before_host,该设置也不会生效。
API 参考
评论
支持 Markdown