---
summary: "Google 了解 OAuth 设置、刷新令牌、预检和会议工件导出"
read_when:
- "您正在为 Google Meet REST API 创建 Google 云凭证"
- "您正在铸造或轮换 Google Meet 刷新令牌"
- "您正在阅读 Meet 工件、出勤情况或成绩单导出"
title: "Google 认识 OAuth 和工件"
sidebarTitle: "OAuth 和文物"
---
Google 云凭证、刷新令牌、OAuth 验证以及阅读 Meet 工件、考勤和导出。 [Google Meet 插件](/plugins/google-meet) 指南的一部分。
## OAuth 和预检
创建 Meet 链接时 OAuth 是可选的,因为 `googlemeet create` 可以回退到浏览器自动化。配置 OAuth 后,可用于通过官方 API 创建、解析空间,或执行 Meet Media API 预检。Chrome/Chrome-node 加入会议始终不依赖 OAuth;无论哪种方式,它们都使用已登录的 Chrome 配置文件、主机的原生虚拟音频后端,以及一个已连接的节点(对于 `chrome-node`)。
### 创建 Google 凭据
在 Google Cloud Console 中:
对于 Google 工作区组织来说,内部是最简单的。 personal/test 设置的外部工作;当应用程序处于测试阶段时,添加将授权其作为测试用户的每个 Google 帐户。
- `https://www.googleapis.com/auth/meetings.space.created`
- `https://www.googleapis.com/auth/meetings.space.readonly`
- `https://www.googleapis.com/auth/meetings.space.settings`
- `https://www.googleapis.com/auth/meetings.conference.media.readonly`
- `https://www.googleapis.com/auth/calendar.events.readonly`(Calendar 查找)
- `https://www.googleapis.com/auth/drive.meet.readonly`(transcript/smart-note文档正文导出)
应用类型 **Web application**。授权重定向 URI:
```text
http://localhost:8085/oauth2callback
```
`meetings.space.created` 是 `spaces.create` 所必需的。 `meetings.space.readonly` 将 Meet URLs/codes 解析为空格。 `meetings.space.settings` 让 OpenClaw 在 API 房间创建过程中传递 `SpaceConfig` 设置,例如 `accessType`。 `meetings.conference.media.readonly` 用于 Meet Media API 预检和媒体工作; Google 可能需要开发者预览版注册才能实际使用媒体 API。仅 `--today`/`--event` 日历查找需要 `calendar.events.readonly`。仅 `--include-doc-bodies` 导出需要 `drive.meet.readonly`。如果您只需要基于浏览器的 Chrome 加入,请完全跳过 OAuth。
### 获取刷新令牌
配置 `oauth.clientId`,并可选配置 `oauth.clientSecret`(或通过环境变量传入),然后运行:
```bash
openclaw googlemeet auth login --json
```
这将在 `http://localhost:8085/oauth2callback` 上运行带有本地主机回调的 PKCE 流,并打印带有刷新令牌的 `oauth` 配置块。当浏览器无法到达本地回调时,为 copy/paste 流添加 `--manual`:
```bash
OPENCLAW_GOOGLE_MEET_CLIENT_ID="your-client-id" \
OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \
openclaw googlemeet auth login --json --manual
```
JSON 输出:
```json
{
"oauth": {
"clientId": "your-client-id",
"clientSecret": "your-client-secret",
"refreshToken": "refresh-token",
"accessToken": "access-token",
"expiresAt": 1770000000000
},
"scope": "..."
}
```
将 `oauth` 对象存放到插件配置中:
```json5
{
plugins: {
entries: {
"google-meet": {
enabled: true,
config: {
oauth: {
clientId: "your-client-id",
clientSecret: "your-client-secret",
refreshToken: "refresh-token",
},
},
},
},
},
}
```
当你不想把刷新令牌放入配置时,优先使用环境变量;配置优先解析,然后才会回退到环境变量。如果你是在会议创建、日历查找或文档正文导出支持加入之前完成认证的,请重新运行 `openclaw googlemeet auth login --json`,以确保刷新令牌覆盖当前作用域集合。
### 使用 doctor 验证 OAuth
```bash
openclaw googlemeet doctor --oauth --json
```
这会检查 OAuth 配置是否存在,以及刷新令牌是否可以获取访问令牌,而无需加载 Chrome 运行时或要求已连接的节点。报告只包含状态字段(`ok`、`configured`、`tokenSource`、`expiresAt`、检查消息),绝不会打印访问令牌、刷新令牌或客户端密钥。
| 检查 | 含义 |
| -------------------- | -------------------------------------------------------------------------------- |
| `oauth-config` | 存在 `oauth.clientId` 加 `oauth.refreshToken`,或者存在缓存的访问令牌 |
| `oauth-token` | 缓存的访问令牌仍然有效,或者刷新令牌成功获取了新的访问令牌 |
| `meet-spaces-get` | 可选的 `--meeting` 检查已解析出一个现有的 Meet 空间 |
| `meet-spaces-create` | 可选的 `--create-space` 检查创建了一个新的 Meet 空间 |
使用带副作用的创建检查来证明 Meet API 已启用且 `spaces.create` 作用域有效:
```bash
openclaw googlemeet doctor --oauth --create-space --json
```
证明对现有空间的读取权限:
```bash
openclaw googlemeet doctor --oauth --meeting https://meet.google.com/abc-defg-hij --json
openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij
```
这些检查返回 `403` 通常意味着 Meet REST API 已被禁用、刷新令牌缺少所需作用域,或者 Google 账号无法访问该空间。刷新令牌错误则表示需要重新运行 `openclaw googlemeet auth login --json` 并保存新的 `oauth` 块。
浏览器回退不需要 OAuth;那里使用的 Google 登录来自所选节点上已登录的 Chrome 配置文件,而不是 OpenClaw 配置。
接受以下环境变量作为回退:
- `OPENCLAW_GOOGLE_MEET_CLIENT_ID` 或 `GOOGLE_MEET_CLIENT_ID`
- `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET` 或 `GOOGLE_MEET_CLIENT_SECRET`
- `OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN` 或 `GOOGLE_MEET_REFRESH_TOKEN`
- `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN` 或 `GOOGLE_MEET_ACCESS_TOKEN`
- `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` 或 `GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT`
- `OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING` 或 `GOOGLE_MEET_DEFAULT_MEETING`
- `OPENCLAW_GOOGLE_MEET_PREVIEW_ACK` 或 `GOOGLE_MEET_PREVIEW_ACK`
### 解析、预检和读取工件
```bash
openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij
```
在 Meet 创建会议记录之后:
```bash
openclaw googlemeet artifacts --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet attendance --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet export --meeting https://meet.google.com/abc-defg-hij --output ./meet-export
```
使用 `--meeting` 时,`artifacts` 和 `attendance` 默认使用最新的会议记录;传入 `--all-conference-records` 可获取所有保留的记录。
日历查找会在读取工件之前先从 Google Calendar 解析会议 URL(需要包含 Calendar events readonly 作用域的刷新令牌):
```bash
openclaw googlemeet latest --today
openclaw googlemeet calendar-events --today --json
openclaw googlemeet artifacts --event "Weekly sync"
openclaw googlemeet attendance --today --format csv --output attendance.csv
```
`--today` 会在今天的 `primary` 日历中搜索带有 Meet 链接的事件;`--event ` 会搜索匹配的事件文本;`--calendar ` 可指定非主日历。`calendar-events` 会预览匹配的事件,并标记 `latest`/`artifacts`/`attendance`/`export` 将选择哪个事件。
如果您已经知道会议记录 ID,请直接寻址:
```bash
openclaw googlemeet latest --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet artifacts --conference-record conferenceRecords/abc123 --json
openclaw googlemeet attendance --conference-record conferenceRecords/abc123 --json
```
关闭 API- 创建的空间的房间:
```bash
openclaw googlemeet end-active-conference https://meet.google.com/abc-defg-hij
```
调用 `spaces.endActiveConference` 并需要 OAuth 以及授权帐户可以管理的空间的 `meetings.space.created` 范围。接受 Meet URL、会议代码或 `spaces/{id}` 并首先将其解析为 API 空间资源。这与 `googlemeet leave` 是分开的:`leave` 停止 OpenClaw 的 local/session 参与; `end-active-conference` 请求 Google Meet 结束该空间的活动会议。
生成可读报告:
```bash
openclaw googlemeet artifacts --conference-record conferenceRecords/abc123 \
--format markdown --output meet-artifacts.md
openclaw googlemeet attendance --conference-record conferenceRecords/abc123 \
--format csv --output meet-attendance.csv
openclaw googlemeet export --conference-record conferenceRecords/abc123 \
--include-doc-bodies --zip --output meet-export
openclaw googlemeet export --conference-record conferenceRecords/abc123 \
--include-doc-bodies --dry-run
```
对于 `artifacts` 和 `attendance`,`--output ` 将选定的格式(包括默认摘要)写入文件。如果没有 `--output`,报告将转至标准输出。
`artifacts` 在 Google 公开时返回会议记录元数据以及参与者、录音、转录本、结构化转录本条目和智能笔记资源元数据。 `--no-transcript-entries` 跳过大型会议的条目查找。 `attendance` 将参与者扩展到参与者会话行,其中包含 first/last 的查看次数、总会话持续时间、late/early-leave 标志以及按登录用户或显示名称合并的重复参与者资源; `--no-merge-duplicates` 将原始资源分开,`--late-after-minutes`/`--early-before-minutes` 调整阈值。
`export` 写入 `summary.md`、`attendance.csv`、`transcript.md`、`artifacts.json`、`attendance.json` 和 `manifest.json` 的文件夹。 `manifest.json` 记录所选的输入、导出选项、会议记录、输出文件、计数、令牌源、使用的任何日历事件以及部分检索警告。 `--zip` 还在该文件夹旁边写入一个便携式存档。 `--include-doc-bodies` 通过 Drive `files.export` 导出链接的 transcript/smart-note Google 文档文本(需要 Drive Meet 只读范围);如果没有它,导出将仅包括 Meet 元数据和结构化成绩单条目。部分工件失败(智能笔记列表、成绩单输入或文档正文错误)会将警告保留在 summary/manifest 中,而不是使整个导出失败。 `--dry-run` 获取相同的数据并打印清单 JSON,而不创建文件夹或 ZIP。
代理通过 `google_meet` 工具使用相同的操作(`export`、`create` 与 `accessType`、`end_active_conference`、`test_listen`);请参见 [Tool](/plugins/google-meet/tool-and-modes#tool)。
### 实况冒烟测试
`pnpm test:live` 需要 OpenClaw 存储库的源签出;下面的 `openclaw googlemeet` 命令可以从任何安装运行。
```bash
OPENCLAW_LIVE_TEST=1 \
OPENCLAW_GOOGLE_MEET_LIVE_MEETING=https://meet.google.com/abc-defg-hij \
pnpm test:live -- extensions/google-meet/google-meet.live.test.ts
```
```bash
openclaw googlemeet setup --transport chrome-node --mode transcribe
openclaw googlemeet test-listen https://meet.google.com/abc-defg-hij --transport chrome-node --timeout-ms 30000
```
| 变量 | 用途 |
| ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| `OPENCLAW_LIVE_TEST=1` | 启用受保护的实况测试 |
| `OPENCLAW_GOOGLE_MEET_LIVE_MEETING` | 保留的 Meet URL、代码或 `spaces/{id}` |
| `OPENCLAW_GOOGLE_MEET_CLIENT_ID` / `GOOGLE_MEET_CLIENT_ID` | OAuth 客户端 ID |
| `OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN` / `GOOGLE_MEET_REFRESH_TOKEN` | 刷新令牌 |
| `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET`, `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN`, `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` | 可选;不带 `OPENCLAW_` 前缀的同名回退环境变量也可用 |
底座artifact/attendance烟雾需要`meetings.space.readonly`和`meetings.conference.media.readonly`。日历查找需要`calendar.events.readonly`。驱动文档体导出需要`drive.meet.readonly`。
### 创建示例
```bash
openclaw googlemeet create
```
会打印新的会议 URI、来源和加入会话。启用 OAuth 时会使用 Meet API;未启用时则使用固定 Chrome 节点上已登录的配置文件。浏览器回退 JSON:
```json
{
"source": "browser",
"meetingUri": "https://meet.google.com/abc-defg-hij",
"joined": true,
"browser": {
"nodeId": "ba0f4e4bc...",
"targetId": "tab-1"
},
"join": {
"session": {
"id": "meet_...",
"url": "https://meet.google.com/abc-defg-hij"
}
}
}
```
如果浏览器回退首先遇到 Google 登录或 Meet 权限阻止,`google_meet` 会返回结构化详情,而不是普通字符串:
```json
{
"source": "browser",
"error": "google-login-required: Sign in to Google in the OpenClaw browser profile, then retry meeting creation.",
"manualAction": {
"reason": "google-login-required",
"message": "Sign in to Google in the OpenClaw browser profile, then retry meeting creation."
},
"browser": {
"nodeId": "ba0f4e4bc...",
"targetId": "tab-1",
"browserUrl": "https://accounts.google.com/signin",
"browserTitle": "Sign in - Google Accounts"
}
}
```
API 创建 JSON:
```json
{
"source": "api",
"meetingUri": "https://meet.google.com/abc-defg-hij",
"joined": true,
"space": {
"name": "spaces/abc-defg-hij",
"meetingCode": "abc-defg-hij",
"meetingUri": "https://meet.google.com/abc-defg-hij"
},
"join": {
"session": {
"id": "meet_...",
"url": "https://meet.google.com/abc-defg-hij"
}
}
}
```
默认创建加入,但 Chrome/Chrome-node 仍需要登录的 Google 个人资料才能通过浏览器加入;如果注销,OpenClaw 将返回 `manualAction` 或浏览器回退错误,并要求操作员在重试之前完成 Google 登录。
仅在确认您的云项目、OAuth 主体和会议参与者已注册 Meet 媒体 API 的 Google 工作区开发者预览计划后,才可设置 `preview.enrollmentAcknowledged: true`。