CLI-Anything Zoom用命令行通过 Zoom REST API 管理会议、参会者与云录制的实战指南【免费下载链接】CLI-AnythingCLI-Anything: Making ALL Software Agent-Native -- CLI-Hub: https://clianything.cc/项目地址: https://gitcode.com/GitHub_Trending/cl/CLI-Anythingcli-anything-zoom是 CLI-Anything 生态中面向 Zoom 的 CLI harness它通过 Zoom REST API v2 与 OAuth2 认证把会议全生命周期管理创建/查询/修改/删除、参会者登记与云录制归档全部收拢到终端之下。本文以 zoom/agent-harness/cli_anything/zoom/skills/SKILL.md 为核心骨架结合包内源码与测试完整讲解安装配置、命令体系、JSON 输出模式与面向 AI Agent 的调用规范帮助读者在脚本、流水线或 Agent 中稳定驱动 Zoom 会议运营。一、项目定位与适用场景cli-anything-zoom是一个面向 Zoom 的 CLI harness核心目标是“从命令行管理 Zoom 的会议、参会者与录制”。它不依赖 GUI 或浏览器操作登录时的浏览器授权除外所有交互均通过 Zoom REST API v2 完成。会议管理创建、列出、查看详情、更新、删除会议以及一键打开 join/start URL参会者管理单个或批量登记参会者Registrant、列出登记状态、取消登记、查询已结束会议的出席名单Participant云录制管理按日期范围列出云录制、查看单个会议的录制文件、下载文件、删除录制。从源码结构看见 zoom/agent-harness/cli_anything/zoom/zoom_cli.pyCLI 由auth、meeting、participant、recording四个命令组加一个repl交互命令构成底层按职责拆分为 core/auth.py、core/meetings.py、core/participants.py、core/recordings.py网络层统一收敛在 utils/zoom_backend.py。二、安装与前置条件2.1 安装该 CLI 随cli-anything-zoom包一并分发安装后即获得cli-anything-zoom命令console_scripts 入口定义见 zoom/agent-harness/setup.pypip install cli-anything-zoom # 或从源码安装 cd zoom/agent-harness pip install -e .Prerequisites依据 zoom/agent-harness/cli_anything/zoom/skills/SKILL.mdPython 3.10setup.py 中python_requires3.10依赖click8.0.0、requests2.28.0、prompt-toolkit3.0.0一个可用的 Zoom 账号免费或付费一个 Zoom OAuth App用于获取 API 凭据。2.2 创建 Zoom OAuth App一次性的前置准备在 Zoom Marketplace 开发者后台创建一个General App (OAuth)并配置配置项取值Redirect URLhttp://localhost:4199/callback与 CLI 默认回调一致Required scopesuser:read:admin、meeting:read:admin、meeting:write:admin、recording:read:admin回调地址中的端口4199是 CLI 默认值与 auth.py 中redirect_uri默认参数http://localhost:4199/callback严格对应若在 Zoom 后台填写了其他端口auth setup时需用--redirect-uri显式指定。2.3 快速上手三步走# 1. 配置 OAuth 凭据 cli-anything-zoom auth setup --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET # 2. 浏览器授权登录自动打开浏览器完成 OAuth2 cli-anything-zoom auth login # 3. 创建一场会议 cli-anything-zoom meeting create --topic Team Standup --duration 30 # 4. 列出会议 cli-anything-zoom meeting list # 5. 进入交互模式 cli-anything-zoom repl三、命令体系全览3.1 基础用法# 显示帮助 cli-anything-zoom --help # 直接启动交互式 REPL cli-anything-zoom # 以 JSON 输出执行命令供 Agent/程序消费 cli-anything-zoom --json meeting list--json是挂载在根命令上的全局 flag一旦开启所有命令组的输出都会切换为结构化 JSON实现见 zoom_cli.py 中的output()函数。3.2 Auth认证与 OAuth2 设置命令说明auth setup配置 OAuth App 凭据client-id / client-secret / redirect-uriauth login通过 OAuth2 浏览器流程登录auth status检查认证状态是否已配置、是否已登录、token 是否有效auth logout移除本地保存的 tokenauth setup的关键参数cli-anything-zoom auth setup \ --client-id ID \ --client-secret SECRET \ --redirect-uri http://localhost:4199/callback # 可选默认即此值从源码看setup_oauth()会把凭据写入~/.cli-anything-zoom/config.jsonCONFIG_DIR定义于 utils/zoom_backend.py并返回配置路径。登录成功后 token 保存在同目录tokens.json配置目录权限为0o700、凭据与 token 文件权限为0o600Windows 下还会通过icacls收紧为仅当前用户可访问见_restrict_path()。auth login的浏览器流程CLI 解析回调地址得到端口默认 4199启动本地HTTPServer用webbrowser.open()打开授权 URL用户授权后 Zoom 回跳到本地回调服务端捕获code超时上限 2 分钟随后调用exchange_code()换取 access/refresh token 并落盘最后调用GET /users/me验证身份。若本地回调不可用可手动取码后执行cli-anything-zoom auth login --code CODE。3.3 Meeting会议管理命令说明meeting create创建新 Zoom 会议meeting list列出会议meeting info获取会议详情meeting update更新会议meeting delete删除会议meeting join在浏览器中打开会议 join URLmeeting start在浏览器中打开会议 start URL仅主持人可用创建会议的完整参数默认值与取值范围以 zoom_cli.py 与 core/meetings.py 为准cli-anything-zoom meeting create \ --topic Team Standup \ # 必填会议主题 --start-time 2025-01-15T10:00:00Z \ # ISO 8601 起始时间缺省为即时会议 --duration 30 \ # 时长分钟默认 60 --timezone Asia/Shanghai \ # 时区默认 UTC --agenda Weekly sync \ # 议程/描述默认空 --password 123456 \ # 会议密码不传则由 Zoom 自动生成 --auto-recording cloud \ # none|local|cloud默认 none --waiting-room \ # 开启等候室 --join-before-host \ # 允许主持人入会前加入 --no-mute \ # 关闭“入会即静音”默认静音底层 create_meeting() 会向POST /users/me/meetings发送请求体其中meeting_type在核心函数中默认2定时会议settings聚合auto_recording、waiting_room、join_before_host、mute_upon_entry由--no-mute取反得到。其他会议操作示例# 列出会议status: upcoming|scheduled|live|pending默认 upcomingpage-size 默认 30 cli-anything-zoom meeting list --status upcoming --page-size 30 # 获取会议详情 cli-anything-zoom meeting info 1234567890 # 更新会议只更新显式传入的字段未传字段保持不变 cli-anything-zoom meeting update 1234567890 --topic New Topic --duration 45 # 删除会议非交互模式下需 --confirm 跳过确认 cli-anything-zoom meeting delete 1234567890 --confirm # 浏览器打开加入/开始链接 cli-anything-zoom meeting join 1234567890 cli-anything-zoom meeting start 1234567890会议列表/详情的标准化输出字段由_format_meeting()/_format_meeting_summary()归一化id、uuid、topic、type、status、start_time、duration、timezone、agenda、join_url、start_url、password、settings含 auto_recording / waiting_room / join_before_host / mute_upon_entry、created_at。分页信息包含total_records、page_count、page_number、page_sizepage_size上限 300 会在后端被min(page_size, 300)钳制。3.4 Participant参会者管理命令说明participant add为会议登记一位参会者participant add-batch从 CSV 文件批量登记参会者participant list列出已登记参会者participant remove取消某位参会者的登记participant attended列出已结束会议的出席人员# 单个登记会议须开启 registration返回 registrant_id、join_url 等 cli-anything-zoom participant add 1234567890 \ --email aliceexample.com --first-name Alice --last-name Wang # 批量登记CSV 格式 email,first_name,last_name首行为表头 cli-anything-zoom participant add-batch 1234567890 registrants.csv # 列出登记status: approved|pending|denied默认 approved cli-anything-zoom participant list 1234567890 --status approved # 取消登记 cli-anything-zoom participant remove 1234567890 REGISTRANT_ID # 查询已结束会议的出席名单注意此处参数是会议 UUID不是数字 ID cli-anything-zoom participant attended MEETING_UUID底层实现要点core/participants.pyadd_registrant()调用POST /meetings/{id}/registrants返回registrant_id、join_url、start_time等add_batch_registrants()逐个调用登记接口并汇总registered/failed计数与逐条errors批量结果可直接用于流水线判读remove_registrant()通过PATCH /meetings/{id}/registrants/status提交{action: cancel, registrants: [{id: ...}]}list_past_participants()调用GET /past_meetings/{uuid}/participants要求传入会议 UUID若 UUID 以/开头会自动做双重 URL 编码并返回每位出席者的join_time、leave_time、duration。概念区分Zoom 将会前登记的人称为Registrant登记人把实际入会的人称为Participant出席者。participant add/list/remove管理的是前者participant attended查询的是后者仅限已结束的会议。3.5 Recording云录制管理命令说明recording list列出云录制recording files列出指定会议的录制文件recording download下载录制文件recording delete删除某会议的全部录制# 按日期范围列出云录制--from/--to 格式 YYYY-MM-DD缺省默认近 30 天 cli-anything-zoom recording list --from 2025-01-01 --to 2025-01-31 --page-size 30 # 查看某会议的录制文件含 download_url、play_url、file_size、file_type 等 cli-anything-zoom recording files 1234567890 # 下载录制DOWNLOAD_URL 取自 recording files 的输出--overwrite 可覆盖已存在文件 cli-anything-zoom recording download https://... /path/to/save.mp4 # 删除某会议全部录制非交互模式需 --confirm cli-anything-zoom recording delete 1234567890 --confirmcore/recordings.py 的实现细节list_recordings()请求GET /users/me/recordings按会议聚合recording_files每个文件包含id、file_type、file_extension、file_size、status、recording_start/end、download_urldownload_recording()先通过_get_valid_token()取得有效 access token再携带Authorization: Bearer头以流式方式下载timeout300、每块 8KB自动创建目标目录文件已存在且未加--overwrite时抛出FileExistsError拒绝覆盖下载完成后返回path、size_bytes、size_mbdelete_recording()/delete_recording_file()分别支持删除整个会议录制或单个录制文件UUID 前缀/时同样自动双重编码。四、REPL 交互模式不带子命令直接运行cli-anything-zoom即进入交互式 REPL也可显式执行cli-anything-zoom repl。会话启动时会打印 banner并自动检查认证状态已登录显示当前登录用户已配置未登录提示执行auth login未配置提示执行auth setup --client-id ID --client-secret SECRET。REPL 内直接输入命令即可如meeting list、auth status支持help查看可用命令速览涵盖 auth / meeting / participant / recording 全部子命令quit、exit、q退出会话基于prompt-toolkit的命令行编辑与历史记录、shlex引号字符串解析含空格的参数可正常处理命令出错时不退出会话仅打印错误信息便于连续调试。会话状态管理能力依据 SKILL.md 的 State Management 章节REPL 维护会话级历史与状态支持撤销/重做undo/redo等导航能力项目级状态可保存/加载为 JSON 文件并追踪修改与变更记录。五、双输出模式人类可读与机器可读所有命令都支持两种输出模式由根命令的--jsonflag 控制实现于 zoom_cli.py人类可读默认表格化、缩进化的格式化文本_print_dict/_print_list递归打印嵌套字典与列表机器可读--jsonjson.dumps(data, indent2)输出的结构化 JSON便于 Agent 与脚本解析。# 人类可读 cli-anything-zoom meeting list # 机器可读Agent 消费 cli-anything-zoom --json meeting list错误处理同样双轨开启--json时异常被序列化为{error: ..., type: ...}的 JSON人类模式下错误写入 stderr 并以非零退出码结束REPL 内不退出进程。因此 Agent 可以稳定地“读 stdout 拿数据、读 stderr 拿错误、看退出码判成败”。六、底层原理OAuth2 与 API 封装所有网络请求最终汇聚到 utils/zoom_backend.py该模块是包内唯一发 HTTP 请求的地方API 常量API_BASE https://api.zoom.us/v2OAuth 授权端点https://zoom.us/oauth/authorize、令牌端点https://zoom.us/oauth/token凭据与令牌持久化~/.cli-anything-zoom/config.jsonclient_id/client_secret/redirect_uri与tokens.jsonaccess_token/refresh_token/expires_in/saved_at写入即锁定权限令牌自动续期_get_valid_token()在 token 剩余有效期不足 5 分钟expires_in - 300时自动用 refresh_token 换取新令牌并回写refresh_token 缺失时保留旧值统一请求封装api_request()自动附加Authorization: Bearer头封装 GET/POST/PATCH/DELETE 四种方法api_get/api_post/api_patch/api_delete204 响应归一化为{status: success}流式响应下载直接返回原始 Response身份信息get_current_user()通过GET /users/me获取邮箱、姓名、账号信息用于登录验证与 REPL 提示符上下文。七、面向 AI Agent 的调用规范SKILL.md 明确给出了程序化调用时的五项纪律这也是将该 CLI 接入 Agent 的最佳实践始终使用--jsonflag获取可解析输出检查返回码—— 0 表示成功非零表示出错失败时解析 stderr获取错误信息JSON 模式下错误也会出现在 stderr 的 JSON 结构中所有文件操作使用绝对路径如recording download的输出路径、add-batch的 CSV 路径导出类操作后校验产物存在如下载完成后核对返回的path与size_bytes。典型 Agent 工作流示例# 1. 以 JSON 列出会议判断是否有即将召开的会议 cli-anything-zoom --json meeting list --status upcoming # 2. 批量登记参会者并读取注册结果计数 cli-anything-zoom --json participant add-batch 1234567890 /abs/path/registrants.csv # 3. 拉取某会议录制文件的下载地址再流式下载到本地并核对大小 cli-anything-zoom --json recording files 1234567890 cli-anything-zoom --json recording download https://... /abs/path/meeting.mp4八、测试与质量保障包的测试策略记录在 zoom/agent-harness/cli_anything/zoom/tests/TEST.md单元测试test_core.py不发起真实网络请求所有 Zoom API 调用均被 mock无需 Zoom 账号即可运行覆盖 auth setup/login、meeting CRUD、participant 管理、recording 管理、JSON 输出与后端工具函数端到端测试test_full_e2e.py需要真实 OAuth 凭据默认跳过通过环境变量CLI_ANYTHING_ZOOM_E2E1启用覆盖认证状态检查与会议完整生命周期create/read/update/delete。运行方式# 仅单元测试无需 Zoom 账号 cd zoom/agent-harness python3 -m pytest cli_anything/zoom/tests/test_core.py -v # E2E 测试需先完成 auth setup auth login CLI_ANYTHING_ZOOM_E2E1 python3 -m pytest cli_anything/zoom/tests/test_full_e2e.py -v # 全部测试 python3 -m pytest cli_anything/zoom/tests/ -v根据 TEST.md 记录的测试结果TestAuthSetup、TestAuthLogin、TestMeetingCommands、TestParticipantCommands、TestRecordingCommands、TestJsonOutput、TestBackend各套件均通过覆盖率涵盖 auth 模块OAuth setup、浏览器登录、手动 code 流程、状态检查、logout、meetings 模块全量 CRUD、join/start URL 获取、participants 模块单个/批量登记、列出、取消、历史出席者与 recordings 模块列出、取文件、下载、删除。九、版本与延伸阅读当前包版本为1.0.1见 zoom/agent-harness/setup.pySKILL.md 中标注的版本为 1.0.0安装方式pip install cli-anything-zoom或cd zoom/agent-harness pip install -e .更多资料包内 README含前置条件与 Quick Start、测试计划与结果TEST.md、CLI 入口与命令定义使用前提提醒所有涉及真实账号数据的操作登录、建会、录制下载/删除都需要有效的 Zoom OAuth App 凭据且 OAuth scope 需覆盖user:read:admin、meeting:read:admin、meeting:write:admin、recording:read:admin。【免费下载链接】CLI-AnythingCLI-Anything: Making ALL Software Agent-Native -- CLI-Hub: https://clianything.cc/项目地址: https://gitcode.com/GitHub_Trending/cl/CLI-Anything创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考