gogcli `gog meet` 实战指南:在终端创建、查询、结束 Google Meet 会议并审计参会记录

发布时间:2026/9/17 8:06:35
gogcli `gog meet` 实战指南:在终端创建、查询、结束 Google Meet 会议并审计参会记录 gogcligog meet实战指南在终端创建、查询、结束 Google Meet 会议并审计参会记录【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli本文基于 gogcli 仓库的命令参考 gog meet 及其六个子命令文档展开并结合 internal/cmd/meet.go 等源码实现系统讲解如何用gog meet系列命令完成会议空间的创建、查询、配置更新与结束以及历史通话与参会人审计最后给出面向脚本化的 JSON 输出与故障排查路径。读完后你可以脱离 Web 界面用命令行管理 Google Meet 空间并将其结果接入自动化流程。命令树与别名体系gog meet是 gogcli 中对接 Google Meet REST API 的命令组文档中显示为 Google Meet完整形态为gog meet (meeting) command [flags]从源码 internal/cmd/meet.go#L13-L20 可以看到命令组定义为MeetCmd包含六个子命令且每个子命令都注册了多个语义化别名子命令别名文档说明源码定义gog meet createnewCreate a meeting spaceMeetCreateCmdgog meet getinfo,showGet a meeting spaceMeetGetCmdgog meet updateedit,setUpdate space configMeetUpdateCmdgog meet endstopEnd active conferenceMeetEndCmdgog meet historycalls,pastList past calls in a meetingMeetHistoryCmdgog meet participantspeople,attendees,whoList participants from the latest callMeetParticipantsCmd因此gog meet info abc-defg-hij与gog meet get abc-defg-hij完全等价这类别名设计来自 kong 框架的aliases标签便于不同使用习惯的用户命中同一命令。说明上述命令参考文档由gog schema --json生成见 docs/commands/gog-meet.md 页首的生成声明可通过make docs-commands重新生成因此文档与代码保持一致。前提条件Meet REST API 与 OAuth 权限gog meet的所有子命令都依赖同一条鉴权链。从 internal/cmd/service_helpers.go#L58-L84 的requireMeetService可以看出每个命令执行时都会通过requireAccount(flags)解析目标账户由全局-a/--account指定或使用默认账户用该账户名构造meet.Service工厂函数见 internal/googleapi/meet.go。而该服务所需的 OAuth 权限在 internal/googleauth/service.go#L241-L249 中集中声明ServiceMeet请求三个 scopehttps://www.googleapis.com/auth/meetings.space.created https://www.googleapis.com/auth/meetings.space.readonly https://www.googleapis.com/auth/meetings.space.settings分别对应创建空间、只读查询、修改空间配置的三类操作与create/get/update/end的能力划分一一对应。若尚未为账户开通 meet 权限按源码中错误提示见 internal/cmd/meet_helpers.go#L28-L34重新认证即可gog auth add account --services meet另外Meet REST API 需要在 Google Cloud 项目中启用否则命令会返回accessNotConfigured错误后文“故障排查”一节有专门处理。create创建会议空间gog meet (meeting) create (new) [flags]专属参数Flag类型默认值说明--access--access-typestringtrusted访问类型open、trusted或restricted--open--browserbool创建成功后在浏览器中打开该会议--entry-point--entry-point-accessstringall入口访问all或creator-only源码中标记为 hidden不出现在帮助文档中执行链路internal/cmd/meet.go#L29-L82parseMeetAccessType将小写输入规范化为大写枚举值TRUSTED/OPEN/RESTRICTED非法值直接返回用法错误parseMeetEntryPointAccess同理接受all或creator-only含creator_only、creatoronly变体映射为ALL/CREATOR_APP_ONLY处于--dry-run模式时通过dryRunExit打印meet.spaces.create的意图载荷access_type与entry_point_access后退出不产生任何 API 调用调用svc.Spaces.Create(space).Do()创建meet.Space并把Config中的访问类型一并提交。输出格式有两种JSON 模式-j输出created、name资源名spaces/...、meeting_uri、meeting_code、config五个字段可直接jq处理普通模式通过printMeetSpace以 TSV 形式打印meeting_code、meeting_uri、access若空间存在进行中通话还会打印active_conference记录名internal/cmd/meet.go#L120-L135。# 创建一个受信任账号访问的会议并输出 JSON gog meet create --access trusted -j # 创建后立即在浏览器打开 gog meet new --openget查询会议空间gog meet (meeting) get (info,show) meeting-code唯一的必填参数是会议码源码参数注释示例为abc-defg-hij见 internal/cmd/meet.go#L85-L87。这里有一个值得注意的实现细节spaces.getAPI 需要的是资源名格式而用户手中通常只有会议码。normalizeMeetSpaceNameinternal/cmd/meet.go#L137-L151会自动处理两种输入以spaces/开头的完整资源名原样保留裸会议码自动补全为spaces/code。因此gog meet get abc-defg-hij与gog meet get spaces/abc-defg-hij均可。JSON 输出与 create 相同name/meeting_uri/meeting_code/config可用于脚本中比对当前访问配置gog meet get abc-defg-hij -j --select configupdate补丁式更新空间配置gog meet (meeting) update (edit,set) meeting-code [flags]参数与create相同--access、隐藏的--entry-point但语义是部分更新。实现上internal/cmd/meet_update_end.go#L20-L93只把显式传入的字段写入meet.SpaceConfig并同步构建updateMask如config.accessType若两个参数都没给直接报 usage 错误 at least one of --access or --entry-point is required避免空 patch先通过resolveMeetSpace用会议码换取规范的space.Name——因为spaces.patch要求的是规范资源名如spaces/KP0uKCifZgYB它与会议码如abc-defg-hij并不相同见 internal/cmd/meet.go#L153-L159 的注释以Spaces.Patch(space.Name, patch).UpdateMask(...)提交只更新 mask 中的字段。示例把某会议的访问方式收紧为 restrictedgog meet set abc-defg-hij --access restrictedend结束进行中的通话gog meet (meeting) end (stop) meeting-code这是 meet 命令组中唯一的破坏性操作。源码internal/cmd/meet_update_end.go#L100-L139中它走的是dryRunAndConfirmDestructive流程--dry-run时只打印meet.end的意图正常执行前会要求确认除非加-y/--yes。确认通过后调用svc.Spaces.EndActiveConference(space.Name, req)成功时 JSON 输出{ended: true, meeting_code: ...}普通模式输出ended\ttrue。# 预览不实际结束 gog meet stop abc-defg-hij --dry-run # 确认后执行 gog meet end abc-defg-hij -yhistory列出历史通话gog meet (meeting) history (calls,past) meeting-code [flags]专属参数见 internal/cmd/meet_history.go#L15-L21Flag类型默认值说明--max--limitint20单页最大条数必须 0--page--cursorstring分页 token--all--all-pagesbool自动拉取全部页--fail-empty--require-resultsbool无结果时以退出码 3 失败实现上history先把会议码解析为空间资源名再用ConferenceRecords.List()加上过滤条件space.name spaces/...过滤表达式构造见 internal/cmd/meet_helpers.go#L39-L41来限定“只查这个空间的通话”。普通模式输出三列表格START、END、CONFERENCE自动去掉conferenceRecords/前缀JSON 模式输出meeting_code、conferences与nextPageToken。# 查看最近 50 次通话自动翻页 gog meet history abc-defg-hij --max 50 --all # CI 场景无历史通话则判定失败 gog meet past abc-defg-hij -j --fail-emptyparticipants查询参会人gog meet (meeting) participants (people,attendees,who) meeting-code [flags]参数与history基本一致差异在于--max默认为50并多一个--conference参数用于指定具体通话Flag类型默认值说明--conferencestring指定 conference ID默认取最近一次通话--max--limitint50单页最大条数--page--cursor/--all/--fail-empty同history“取最近一次通话”的逻辑在resolveConferenceinternal/cmd/meet_participants.go#L132-L167中若不传--conference它会先get出空间名再以空间名过滤ConferenceRecords.List()且PageSize(1)取返回的第一条记录作为目标通话若显式传入 conference ID则自动补上conferenceRecords/前缀后直接使用。普通模式表格输出三列DISPLAY_NAME、JOINED、LEFT。显示名的提取策略在participantDisplayNameinternal/cmd/meet_helpers.go#L43-L62中按优先级回退已登录用户的DisplayName→ 匿名参会者 → 电话参会者 → 资源名覆盖了 Meet 中三类入会方式。JSON 输出包含meeting_code、conference、participants、nextPageToken。# 审计最近一次会议的参会人 gog meet who abc-defg-hij # 指定某次通话 gog meet participants abc-defg-hij --conference CONF-1234 -j全局参数为 Agent 与 CI 设计的通用开关六个子命令共享同一套根级全局 flag完整表见 docs/commands/gog-meet.md 的 Flags 一节与 meet 功能最相关的几项Flag类型默认值说明-a/--account/--acctstring指定账户邮箱、别名或auto--access-tokenstring直接使用指定 access token绕过已存 refresh token约 1 小时过期--clientstring指定 OAuth client 名选择对应凭据与 token 桶--quota-projectstring计费项目作为X-Goog-User-Project头发送部分 API 在--access-token或 ADC 场景下必需-n/--dry-runbool不执行变更仅打印意图后成功退出-y/--forcebool跳过破坏性命令确认meet end需要-j/--json/--machineboolfalse输出 JSON适合脚本-p/--plain/--tsvboolfalse输出稳定可解析的 TSV--results-onlyboolJSON 模式下只输出主结果丢弃nextPageToken等包装字段--select/--pickstringJSON 模式下按逗号分隔字段选择支持点路径--readonlyboolfalse运行时拦截一切写操作请求--no-inputbool永不交互提示需要提示时直接失败CI 友好--enable-commands/--disable-commandsstring按点路径前缀限制/禁用命令可用于给 Agent 收窄 CLI 权限--colorstringautoauto/always/never--homestring覆盖 gogcli 的根数据目录等价GOG_HOME-v/--verbosebool详细日志其中--enable-commands/--readonly与--dry-run组合后可以构造出“只能查不能改”的只读 meet 管理环境适合交给自动化 Agent 使用。故障排查两类常见错误的自动提示gog meet的所有 API 错误都会经过wrapMeetErrorinternal/cmd/meet_helpers.go#L13-L37做一次用户友好化转换针对两种高频故障给出可操作建议accessNotConfigured/ Meet REST API has not been used提示 Meet REST API 未启用并给出启用入口Google Cloud Console 的meet.googleapis.comAPI 库页insufficientPermissions/ insufficient authentication scopes提示当前账户 scope 不足建议执行gog auth add account --services meet重新授权。这意味着排障时可以直接依据命令输出的建议动作处理而不需要自行猜测原因。测试与实现地图从源码结构看meet 命令采用“命令层 服务工厂注入”的可测试设计命令逻辑只依赖requireMeetService返回的meet.Service而测试通过 internal/cmd/meet_test_helpers_test.go 中的newTestMeetService用本地httptesthandler 替换真实 Google 端点再经executeWithMeetTestService驱动完整命令执行无需真实凭据即可验证解析、过滤与输出逻辑。各功能对应的源码位置功能实现位置命令组、create、get、输入规范化internal/cmd/meet.goupdate、endinternal/cmd/meet_update_end.gohistory通话历史internal/cmd/meet_history.goparticipants参会人与最近通话解析internal/cmd/meet_participants.go错误包装、过滤表达式、显示名回退internal/cmd/meet_helpers.gomeet.Service构造internal/googleapi/meet.goOAuth scope 声明internal/googleauth/service.go命令参考文档docs/commands/gog-meet.md 及各子命令页适用前提以上行为以当前仓库代码为准依赖 Google Meet REST APImeet/v2客户端库可用、账户完成--services meet授权且所在 Google Cloud 项目已启用该 API--access的取值范围open/trusted/restricted与--entry-pointall/creator-only是命令层强校验的白名单传入其他值会在发出请求前即被拒绝。【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考