Docs: update zh-CN translations and pipeline

What:
- update zh-CN glossary, TM, and translator prompt
- regenerate zh-CN docs and apply targeted fixes
- add zh-CN AGENTS pipeline guidance

Why:
- address terminology/spacing feedback from #6995

Tests:
- pnpm build && pnpm check && pnpm test
This commit is contained in:
Josh Palmer
2026-02-03 13:23:00 -08:00
parent 9f03791aa9
commit a3ec2d0734
228 changed files with 10651 additions and 10475 deletions
+13 -13
View File
@@ -5,19 +5,19 @@ read_when:
summary: 监控模型提供商的 OAuth 过期状态
title: 认证监控
x-i18n:
generated_at: "2026-02-01T19:36:14Z"
generated_at: "2026-02-03T10:03:53Z"
model: claude-opus-4-5
provider: pi
source_hash: eef179af9545ed7ab881f3ccbef998869437fb50cdb4088de8da7223b614fa2b
source_path: automation/auth-monitoring.md
workflow: 14
workflow: 15
---
# 认证监控
OpenClaw 通过 `openclaw models status` 暴露 OAuth 过期健康状态。可将其用于自动化和告警;脚本是针对手机工作流的可选补充
OpenClaw 通过 `openclaw models status` 提供 OAuth 过期健康状态。请使用该命令进行自动化和告警;脚本是手机工作流程提供的可选附加功能
## 推荐方式:CLI 检查(跨平台通用
## 推荐方式:CLI 检查(可移植
```bash
openclaw models status --check
@@ -26,22 +26,22 @@ openclaw models status --check
退出码:
- `0`:正常
- `1`:凭证过期或缺失
- `1`:凭证过期或缺失
- `2`:即将过期(24 小时内)
适用于 cron/systemd,无需额外脚本。
此方式适用于 cron/systemd,无需额外脚本。
## 可选脚本(运维/手机工作流)
## 可选脚本(运维 / 手机工作流
这些脚本位于 `scripts/` 目录下,属于**可选**。它们假定你可以通过 SSH 访问 Gateway网关主机,并针对 systemd + Termux 进行了调优。
这些脚本位于 `scripts/` 目录下,属于**可选**内容。它们假定你可以通过 SSH 访问 Gateway 网关主机,并针对 systemd + Termux 进行了调优。
- `scripts/claude-auth-status.sh` 现在使用 `openclaw models status --json` 作为数据源(如果 CLI 不可用则回退到直接读取文件),因此请确保定时器中 `openclaw``PATH` 中。
- `scripts/claude-auth-status.sh` 现在使用 `openclaw models status --json` 作为数据源(如果 CLI 不可用则回退到直接读取文件),因此请确保 `openclaw`定时器的 `PATH` 中。
- `scripts/auth-monitor.sh`cron/systemd 定时器目标;发送告警(ntfy 或手机)。
- `scripts/systemd/openclaw-auth-monitor.{service,timer}`systemd 用户定时器。
- `scripts/claude-auth-status.sh`Claude Code + OpenClaw 认证检查器(完整/json/简洁模式)。
- `scripts/mobile-reauth.sh`:通过 SSH 进行引导重新认证流程。
- `scripts/termux-quick-auth.sh`:一键小件状态查看 + 打开认证 URL。
- `scripts/termux-auth-widget.sh`:完整的引导式小件流程。
- `scripts/termux-sync-widget.sh` Claude Code 凭证同步至 OpenClaw。
- `scripts/mobile-reauth.sh`:通过 SSH 引导重新认证流程。
- `scripts/termux-quick-auth.sh`:一键小件状态查看 + 打开认证 URL。
- `scripts/termux-auth-widget.sh`:完整的引导式小件流程。
- `scripts/termux-sync-widget.sh`同步 Claude Code 凭证 OpenClaw。
如果你不需要手机自动化或 systemd 定时器,可以跳过这些脚本。
+93 -95
View File
@@ -1,39 +1,39 @@
---
read_when:
- 调度后台任务或唤醒
- 配置需要与心跳一起或并行运行的自动化
- 在心跳和定时任务之间做选择
summary: Gateway网关调度器的定时任务与唤醒
- 配置需要与心跳一起运行或配合运行的自动化任务
- 决定计划任务使用心跳还是定时任务
summary: Gateway 网关调度器的定时任务与唤醒机制
title: 定时任务
x-i18n:
generated_at: "2026-02-01T19:37:32Z"
generated_at: "2026-02-03T07:44:30Z"
model: claude-opus-4-5
provider: pi
source_hash: d43268b0029f1b13d0825ddcc9c06a354987ea17ce02f3b5428a9c68bf936676
source_path: automation/cron-jobs.md
workflow: 14
workflow: 15
---
# 定时任务(Gateway网关调度器)
# 定时任务(Gateway 网关调度器)
> **定时任务还是心跳?** 请参阅[定时任务与心跳对比](/automation/cron-vs-heartbeat)了解何时使用哪种方式。
定时任务是 Gateway网关内置的调度器。它持久化任务、在合适的时间唤醒智能体,并可选择将输出发送回聊天。
定时任务是 Gateway 网关内置的调度器。它持久化任务,在正确的时间唤醒智能体,并可选择将输出发送回聊天。
如果你想要 _"每天早上运行"__"20 分钟后提醒智能体"_,定时任务就是对应的机制。
如果你需要"每天早上运行这个"或"20 分钟后触发智能体",定时任务就是实现机制。
## 简要概述
- 定时任务运行在 **Gateway网关内部**而非模型内部)。
- 定时任务运行在 **Gateway 网关内部**不是在模型内部)。
- 任务持久化存储在 `~/.openclaw/cron/` 下,因此重启不会丢失计划。
- 两种执行方式:
- **主会话**入队一个系统事件,然后在下一次心跳时运行。
- **隔离**:在 `cron:<jobId>` 中运行专用智能体轮次,可选择投递输出。
- 唤醒是一等功能:任务可以请求"立即唤醒"或"下次心跳"。
- **主会话**将系统事件加入队列,然后在下一次心跳时运行。
- **隔离**:在 `cron:<jobId>` 中运行专用智能体回合,可选择发送输出。
- 唤醒是一等功能:任务可以请求"立即唤醒"或"下次心跳"。
## 快速开始(可操作)
创建一个一次性提醒,验证存在,然后立即运行:
创建一个一次性提醒,验证它是否存在,然后立即运行:
```bash
openclaw cron add \
@@ -49,7 +49,7 @@ openclaw cron run <job-id> --force
openclaw cron runs --id <job-id>
```
调度一个带投递功能的周期性隔离任务:
调度一个带消息发送的循环隔离任务:
```bash
openclaw cron add \
@@ -63,99 +63,97 @@ openclaw cron add \
--to "channel:C1234567890"
```
## 工具调用等价形式Gateway网关定时任务工具)
## 工具调用等效项Gateway 网关定时任务工具)
有关规范的 JSON 结构和示例,请参阅[工具调用的 JSON 模式](/automation/cron-jobs#json-schema-for-tool-calls)。
有关规范的 JSON 结构和示例,请参阅[工具调用的 JSON schema](/automation/cron-jobs#json-schema-for-tool-calls)。
## 定时任务的存储位置
定时任务默认持久化存储在 Gateway网关主机的 `~/.openclaw/cron/jobs.json`。Gateway网关将文件加载到内存中,并在更改时写回,因此在 Gateway网关停止时手动编辑才是安全的。请优先使用 `openclaw cron add/edit` 或定时任务工具调用 API 进行更改。
定时任务默认持久化存储在 Gateway 网关主机的 `~/.openclaw/cron/jobs.json`。Gateway 网关将文件加载到内存中,并在更改时写回,因此只有在 Gateway 网关停止时手动编辑才是安全的。建议使用 `openclaw cron add/edit` 或定时任务工具调用 API 进行更改。
## 新手友好概述
将定时任务理解为:**何时**运行 + **做什么**
1. **选择调度计划**
1. **选择计划**
- 一次性提醒 → `schedule.kind = "at"`CLI`--at`
- 重复任务 → `schedule.kind = "every"``schedule.kind = "cron"`
- 如果你的 ISO 时间戳省略了时区,将被视为 **UTC**
- 如果你的 ISO 时间戳省略了时区,将被视为 **UTC**
2. **选择运行位置**
- `sessionTarget: "main"` → 在下一次心跳时使用主会话上下文运行。
- `sessionTarget: "isolated"` → 在 `cron:<jobId>` 中运行专用智能体轮次
- `sessionTarget: "main"` → 在下一次心跳时使用主上下文运行。
- `sessionTarget: "isolated"` → 在 `cron:<jobId>` 中运行专用智能体回合
3. **选择负载**
- 主会话 → `payload.kind = "systemEvent"`
- 隔离会话 → `payload.kind = "agentTurn"`
可选:`deleteAfterRun: true` 会在一次性任务成功行后将其从存储中删除。
可选:`deleteAfterRun: true` 会在成功行后从存储中删除一次性任务
## 概念
### 任务
定时任务是一存储记录,包含:
定时任务是一存储记录,包含:
- 一个**调度计划**(何时运行),
- 一个**计划**(何时运行),
- 一个**负载**(做什么),
- 可选的**投递**(输出发送到哪里)。
- 可选的**智能体绑定**`agentId`):在定智能体下运行任务;如果缺失或未知,Gateway网关会回退到默认智能体。
- 可选的**发送**(输出发送到哪里)。
- 可选的**智能体绑定**`agentId`):在定智能体下运行任务;如果缺失或未知,Gateway 网关会回退到默认智能体。
任务通过稳定的 `jobId` 标识(用于 CLI/Gateway网关 API
在智能体工具调用中,`jobId` 是规范字段;旧版 `id` 仍可兼容使用。
任务可以通过 `deleteAfterRun: true` 在一次性任务成功运行后自动删除。
任务通过稳定的 `jobId` 标识( CLI/Gateway 网关 API 使用)。在智能体工具调用中,`jobId` 是规范名称;为了兼容性也接受旧版的 `id`。任务可以通过 `deleteAfterRun: true` 选择在一次性成功运行后自动删除
### 调度计划
### 计划
定时任务支持三种调度类型:
定时任务支持三种计划类型:
- `at`:一次性时间戳(自纪元的毫秒数)。Gateway网关接受 ISO 8601 格式并转换为 UTC。
- `at`:一次性时间戳(自纪元以来的毫秒数)。Gateway 网关接受 ISO 8601 并转换为 UTC。
- `every`:固定间隔(毫秒)。
- `cron`:5 字段 cron 表达式,可选 IANA 时区。
- `cron`5 字段 cron 表达式,可选 IANA 时区。
Cron 表达式使用 `croner`。如果省略时区,使用 Gateway网关主机的本地时区。
Cron 表达式使用 `croner`。如果省略时区,使用 Gateway 网关主机的本地时区。
### 主会话与隔离执行
### 主会话与隔离执行
#### 主会话任务(系统事件)
会话任务入队一个系统事件,并可选择唤醒心跳运行器。它们必须使用 `payload.kind = "systemEvent"`
任务将系统事件加入队列并可选择唤醒心跳运行器。它们必须使用 `payload.kind = "systemEvent"`
- `wakeMode: "next-heartbeat"`(默认):事件等待下一次计划心跳。
- `wakeMode: "next-heartbeat"`(默认):事件等待下一次计划心跳。
- `wakeMode: "now"`:事件触发立即心跳运行。
当你需要正常的心跳提示 + 主会话上下文时,这是最佳选择。参见[心跳](/gateway/heartbeat)。
#### 隔离任务(专用定时会话)
隔离任务在会话 `cron:<jobId>` 中运行专用智能体轮次
隔离任务在会话 `cron:<jobId>` 中运行专用智能体回合
关键行为:
- 提示以 `[cron:<jobId> <任务名称>]` 为前缀,便于追踪。
- 每次运行都会启动一个**新的会话 ID**不继承之前的对话)。
- 提示以 `[cron:<jobId> <job name>]` 为前缀以便追踪。
- 每次运行启动一个**新的会话 id**没有先前的对话延续)。
- 摘要会发布到主会话(前缀 `Cron`,可配置)。
- `wakeMode: "now"` 在发布摘要后触发立即心跳。
- 如果 `payload.deliver: true`,输出会投递到渠道;否则保留在内部。
- 如果 `payload.deliver: true`,输出会发送到渠道;否则保内部。
对于嘈杂、频繁或"后台杂务"类任务,使用隔离任务可以避免污染你的主聊天记录
对于嘈杂、频繁或不应该刷屏主聊天历史的"后台杂务",使用隔离任务。
### 负载结构(运行内容
### 负载结构(运行什么
支持两种负载类型:
- `systemEvent`:仅限主会话,通过心跳提示路由。
- `agentTurn`:仅限隔离会话,运行专用智能体轮次
- `agentTurn`:仅限隔离会话,运行专用智能体回合
`agentTurn` 字段:
见的 `agentTurn` 字段:
- `message`:必文本提示。
- `message`:必需的文本提示。
- `model` / `thinking`:可选覆盖(见下文)。
- `timeoutSeconds`:可选超时覆盖。
- `deliver`设为 `true` 将输出发送到渠道目标。
- `timeoutSeconds`:可选超时覆盖。
- `deliver``true` 将输出发送到渠道目标。
- `channel``last` 或特定渠道。
- `to`渠道特定目标(电话/聊天/频道 ID)。
- `bestEffortDeliver`投递失败时避免任务失败。
- `to`:特定于渠道的目标(电话/聊天/频道 id)。
- `bestEffortDeliver`发送失败时避免任务失败。
隔离选项(仅适用于 `session=isolated`):
@@ -163,60 +161,60 @@ Cron 表达式使用 `croner`。如果省略时区,将使用 Gateway网关主
- `postToMainMode``summary`(默认)或 `full`
- `postToMainMaxChars`:当 `postToMainMode=full` 时的最大字符数(默认 8000)。
### 模型和思覆盖
### 模型和思覆盖
隔离任务(`agentTurn`)可以覆盖模型和思级别:
隔离任务(`agentTurn`)可以覆盖模型和思级别:
- `model`:提供商/模型字符串(例如 `anthropic/claude-sonnet-4-20250514`)或别名(例如 `opus`
- `thinking`:思级别(`off``minimal``low``medium``high``xhigh`;仅限 GPT-5.2 + Codex 模型)
- `thinking`:思级别(`off``minimal``low``medium``high``xhigh`;仅限 GPT-5.2 + Codex 模型)
注意:你也可以在主会话任务上设置 `model`,但会更改共享的主会话模型。我们建议仅对隔离任务使用模型覆盖,以避免意外的上下文切换。
注意:你也可以在主会话任务上设置 `model`,但会更改共享的主会话模型。我们建议仅对隔离任务使用模型覆盖,以避免意外的上下文切换。
优先级解析顺序
解析优先级:
1. 任务负载覆盖(最高优先级
1. 任务负载覆盖(最高)
2. 钩子特定默认值(例如 `hooks.gmail.model`
3. 智能体配置默认值
### 投递(渠道 + 目标)
### 发送(渠道 + 目标)
隔离任务可以将输出投递到渠道。任务负载可以指定:
隔离任务可以将输出发送到渠道。任务负载可以指定:
- `channel``whatsapp` / `telegram` / `discord` / `slack` / `mattermost`(插件)/ `signal` / `imessage` / `last`
- `to`渠道特定的接收目标
- `to`:特定于渠道的接收目标
如果省略 `channel``to`,定时任务可以回退到主会话的"最后路由"(智能体最后回复的位置)。
投递说明:
发送说明:
- 如果设置了 `to`,即使省略 `deliver`,定时任务也会自动投递智能体的最终输出。
- 当你需要最后路由投递但不指定明确 `to` 时,使用 `deliver: true`
- 使用 `deliver: false` 即使存在 `to` 也保持输出内部使用
- 如果设置了 `to`,即使省略 `deliver`,定时任务也会自动发送智能体的最终输出。
- 当你想要不带显式 `to` 的最后路由发送时,使用 `deliver: true`
- 使用 `deliver: false` 即使存在 `to` 也保持输出内部。
目标格式提醒:
- Slack/Discord/Mattermost(插件)目标应使用明确前缀(例如 `channel:<id>``user:<id>`)以避免歧义。
- Telegram 题应使用 `:topic:` 式(见下文)。
- Slack/Discord/Mattermost(插件)目标应使用显式前缀(例如 `channel:<id>``user:<id>`)以避免歧义。
- Telegram 题应使用 `:topic:` 式(见下文)。
#### Telegram 投递目标(题/论坛帖子)
#### Telegram 发送目标(题/论坛帖子)
Telegram 通过 `message_thread_id` 支持论坛题。对于定时任务投递,你可以将题/帖子编码到 `to` 字段中:
Telegram 通过 `message_thread_id` 支持论坛题。对于定时任务发送,你可以将题/帖子编码到 `to` 字段中:
- `-1001234567890`(仅聊天 ID
- `-1001234567890:topic:123`(推荐:明确的主题标记)
- `-1001234567890`(仅聊天 id
- `-1001234567890:topic:123`(推荐:显式话题标记)
- `-1001234567890:123`(简写:数字后缀)
带前缀的目标如 `telegram:...` / `telegram:group:...`接受:
带前缀的目标如 `telegram:...` / `telegram:group:...`接受:
- `telegram:group:-1001234567890:topic:123`
## 工具调用的 JSON 模式
## 工具调用的 JSON schema
直接调用 Gateway网关 `cron.*` 工具(智能体工具调用或 RPC使用这些结构。CLI 标志接受人类可读的时间格式如 `20m`,但工具调用对 `atMs``everyMs` 使用纪元毫秒`at` 时间接受 ISO 时间戳)。
直接调用 Gateway 网关 `cron.*` 工具(智能体工具调用或 RPC)使用这些结构。CLI 标志接受人类可读的时间格式如 `20m`,但工具调用对 `atMs``everyMs` 使用纪元毫秒(`at` 时间接受 ISO 时间戳)。
### cron.add 参数
一次性主会话任务(系统事件):
一次性主会话任务(系统事件):
```json
{
@@ -229,7 +227,7 @@ Telegram 通过 `message_thread_id` 支持论坛主题。对于定时任务投
}
```
带投递的周期性隔离任务:
循环,带发送的隔离任务:
```json
{
@@ -252,8 +250,8 @@ Telegram 通过 `message_thread_id` 支持论坛主题。对于定时任务投
说明:
- `schedule.kind``at``atMs`)、`every``everyMs`)或 `cron``expr`,可选 `tz`)。
- `atMs``everyMs` 纪元毫秒
- `sessionTarget` 必须 `"main"``"isolated"`且必须与 `payload.kind` 匹配。
- `atMs``everyMs` 纪元毫秒。
- `sessionTarget` 必须 `"main"``"isolated"`且必须与 `payload.kind` 匹配。
- 可选字段:`agentId``description``enabled``deleteAfterRun``isolation`
- `wakeMode` 省略时默认为 `"next-heartbeat"`
@@ -271,8 +269,8 @@ Telegram 通过 `message_thread_id` 支持论坛主题。对于定时任务投
说明:
- `jobId` 是规范字段;`id` 可兼容使用
- 在补丁中使用 `agentId: null` 清除智能体绑定。
- `jobId` 是规范名称;为了兼容性也接受 `id`
- 在补丁中使用 `agentId: null` 清除智能体绑定。
### cron.run 和 cron.remove 参数
@@ -284,9 +282,9 @@ Telegram 通过 `message_thread_id` 支持论坛主题。对于定时任务投
{ "jobId": "job-123" }
```
## 存储历史
## 存储历史
- 任务存储:`~/.openclaw/cron/jobs.json`Gateway网关管理的 JSON)。
- 任务存储:`~/.openclaw/cron/jobs.json`Gateway 网关管理的 JSON)。
- 运行历史:`~/.openclaw/cron/runs/<jobId>.jsonl`JSONL,自动清理)。
- 覆盖存储路径:配置中的 `cron.store`
@@ -332,7 +330,7 @@ openclaw cron add \
--wake now
```
周期性隔离任务(投递到 WhatsApp):
循环隔离任务(发送到 WhatsApp):
```bash
openclaw cron add \
@@ -346,7 +344,7 @@ openclaw cron add \
--to "+15551234567"
```
周期性隔离任务(投递到 Telegram 题):
循环隔离任务(发送到 Telegram 题):
```bash
openclaw cron add \
@@ -360,7 +358,7 @@ openclaw cron add \
--to "-1001234567890:topic:123"
```
带模型和思覆盖的隔离任务:
带模型和思覆盖的隔离任务:
```bash
openclaw cron add \
@@ -376,10 +374,10 @@ openclaw cron add \
--to "+15551234567"
```
智能体选择(多智能体置):
智能体选择(多智能体置):
```bash
# 将任务绑定到智能体 "ops"(如果该智能体不存在则回退到默认智能体
# 将任务绑定到智能体"ops"(如果该智能体不存在则回退到默认)
openclaw cron add --name "Ops sweep" --cron "0 6 * * *" --session isolated --message "Check ops queue" --agent ops
# 切换或清除现有任务的智能体
@@ -408,27 +406,27 @@ openclaw cron edit <jobId> \
openclaw cron runs --id <jobId> --limit 50
```
不创建任务直接发送系统事件:
不创建任务的立即系统事件:
```bash
openclaw system event --mode now --text "Next heartbeat: check battery."
```
## Gateway网关 API 接口
## Gateway 网关 API 接口
- `cron.list``cron.status``cron.add``cron.update``cron.remove`
- `cron.run`(强制或到期)、`cron.runs`
如需不创建任务直接发送系统事件,使用 [`openclaw system event`](/cli/system)。
对于不创建任务的立即系统事件,使用 [`openclaw system event`](/cli/system)。
## 故障排除
### "没有任何任务运行"
### "什么都不运行"
- 检查定时任务是否启用:`cron.enabled``OPENCLAW_SKIP_CRON`
- 检查 Gateway网关是否持续运行(定时任务运行在 Gateway网关进程内)。
- 对于 `cron` 调度:确认时区(`--tz`)与主机时区的关系。
- 检查定时任务是否启用:`cron.enabled``OPENCLAW_SKIP_CRON`
- 检查 Gateway 网关是否持续运行(定时任务在 Gateway 网关进程内运行)。
- 对于 `cron` 计划:确认时区(`--tz`)与主机时区的关系。
### Telegram 投递到了错误的位置
### Telegram 发送到错误的位置
- 对于论坛题,使用 `-100…:topic:<id>` 以确保明确无歧义。
- 如果你在日志或存储的"最后路由"目标中看到 `telegram:...` 前缀,这是正常的;定时任务投递接受这些前缀并仍正确解析题 ID。
- 对于论坛题,使用 `-100…:topic:<id>` 以确保明确无歧义。
- 如果你在日志或存储的"最后路由"目标中看到 `telegram:...` 前缀,这是正常的;定时任务发送接受它们并仍正确解析题 ID。
+35 -35
View File
@@ -5,12 +5,12 @@ read_when:
summary: 通过 gogcli 将 Gmail Pub/Sub 推送接入 OpenClaw webhooks
title: Gmail PubSub
x-i18n:
generated_at: "2026-02-01T19:38:47Z"
generated_at: "2026-02-03T07:43:25Z"
model: claude-opus-4-5
provider: pi
source_hash: dfb92133b69177e4e984b7d072f5dc28aa53a9e0cf984a018145ed811aa96195
source_path: automation/gmail-pubsub.md
workflow: 14
workflow: 15
---
# Gmail Pub/Sub -> OpenClaw
@@ -20,11 +20,11 @@ x-i18n:
## 前置条件
- 已安装并登录 `gcloud`[安装指南](https://docs.cloud.google.com/sdk/docs/install-sdk))。
- 已安装 `gog`gogcli)并已授权 Gmail 账[gogcli.sh](https://gogcli.sh/))。
- 已安装 `gog` (gogcli) 并为 Gmail 账户授权[gogcli.sh](https://gogcli.sh/))。
- 已启用 OpenClaw hooks(参见 [Webhooks](/automation/webhook))。
- 已登录 `tailscale`[tailscale.com](https://tailscale.com/))。支持的置使用 Tailscale Funnel 作为公共 HTTPS 端点。
其他隧道服务也可以使用,但属于自行配置/不受支持,需要手动接线
目前我们支持的是 Tailscale。
- 已登录 `tailscale`[tailscale.com](https://tailscale.com/))。支持的置使用 Tailscale Funnel 作为公共 HTTPS 端点。
其他隧道服务也可以使用,但需要自行配置/不受支持,需要手动接
目前我们支持的是 Tailscale。
示例 hook 配置(启用 Gmail 预设映射):
@@ -39,7 +39,7 @@ x-i18n:
}
```
如需将 Gmail 摘要投递到聊天界面,可覆盖预设并设置 `deliver` 以及可选的 `channel`/`to` 的映射:
将 Gmail 摘要投递到聊天界面,请用设置 `deliver` 以及可选的 `channel`/`to` 的映射覆盖预设
```json5
{
@@ -65,11 +65,11 @@ x-i18n:
}
```
如果你想固定渠道,请设置 `channel` + `to`。否则 `channel: "last"` 会使用最后的投递路由(回退到 WhatsApp)。
如果你想使用固定渠道,请设置 `channel` + `to`。否则 `channel: "last"` 会使用上次的投递路由(默认回退到 WhatsApp)。
如需为 Gmail 运行强制使用更便宜的模型,在映射中设置 `model``provider/model` 或别名)。如果你设置`agents.defaults.models`,请将其包含在允许列表中
为 Gmail 运行强制使用更便宜的模型,在映射中设置 `model``provider/model` 或别名)。如果你强制启用`agents.defaults.models`,请将其包含在
如需专门为 Gmail hooks 设置默认模型和思级别,在配置中添加 `hooks.gmail.model` / `hooks.gmail.thinking`
专门为 Gmail hooks 设置默认模型和思级别,在配置中添加 `hooks.gmail.model` / `hooks.gmail.thinking`
```json5
{
@@ -82,42 +82,42 @@ x-i18n:
}
```
说明
注意事项
- 映射中每个 hook 的 `model`/`thinking` 仍会覆盖这些默认值。
- 映射中每个 hook 的 `model`/`thinking` 仍会覆盖这些默认值。
- 回退顺序:`hooks.gmail.model``agents.defaults.model.fallbacks` → 主模型(认证/速率限制/超时)。
- 如果设置了 `agents.defaults.models`Gmail 模型必须在允许列表中。
- Gmail hook 内容默认使用外部内容安全边界进行包装。
如需禁用(危险),请设置 `hooks.gmail.allowUnsafeExternalContent: true`
- Gmail hook 内容默认使用外部内容安全边界包装。
禁用(危险),请设置 `hooks.gmail.allowUnsafeExternalContent: true`
如需进一步自定义负载处理,添加 `hooks.mappings` 或在 `hooks.transformsDir` 下添加 JS/TS 转换模块(参见 [Webhooks](/automation/webhook))。
进一步自定义负载处理,添加 `hooks.mappings` 或在 `hooks.transformsDir` 下添加 JS/TS 转换模块(参见 [Webhooks](/automation/webhook))。
## 向导(推荐)
使用 OpenClaw 辅助工具一键完成所有配置(在 macOS 上通过 brew 安装依赖):
使用 OpenClaw 助手将所有内容接入在一起(在 macOS 上通过 brew 安装依赖):
```bash
openclaw webhooks gmail setup \
--account openclaw@gmail.com
```
默认置:
默认置:
- 使用 Tailscale Funnel 作为公共推送端点。
-`openclaw webhooks gmail run` 写入 `hooks.gmail` 配置。
- 启用 Gmail hook 预设(`hooks.presets: ["gmail"]`)。
路径说明:当启用 `tailscale.mode` 时,OpenClaw 会自动将 `hooks.gmail.serve.path` 设置为 `/`,并将公共路径保持在 `hooks.gmail.tailscale.path`(默认 `/gmail-pubsub`),因为 Tailscale 在代理前会去除设置的路径前缀。
如果你需要后端接收带前缀的路径,请将 `hooks.gmail.tailscale.target`(或 `--tailscale-target`)设置为完整 URL`http://127.0.0.1:8788/gmail-pubsub`,并匹配 `hooks.gmail.serve.path`
路径说明:当启用 `tailscale.mode` 时,OpenClaw 会自动将 `hooks.gmail.serve.path` 设置为 `/`,并将公共路径保持在 `hooks.gmail.tailscale.path`(默认 `/gmail-pubsub`),因为 Tailscale 在代理前会剥离设置的路径前缀。
如果你需要后端接收带前缀的路径,请将 `hooks.gmail.tailscale.target`(或 `--tailscale-target`)设置为完整 URL,如 `http://127.0.0.1:8788/gmail-pubsub`,并匹配 `hooks.gmail.serve.path`
要自定义端点?使用 `--push-endpoint <url>``--tailscale off`
要自定义端点?使用 `--push-endpoint <url>``--tailscale off`
平台说明:在 macOS 上,向导通过 Homebrew 安装 `gcloud``gogcli``tailscale`;在 Linux 上请先手动安装它们。
Gateway网关自动启动(推荐):
Gateway 网关自动启动(推荐):
-`hooks.enabled=true` 且设置了 `hooks.gmail.account` 时,Gateway网关会在启动时运行 `gog gmail watch serve` 并自动续期 watch。
- 设置 `OPENCLAW_SKIP_GMAIL_WATCHER=1` 可退出自动启动(如果你自运行守护进程则很有用)。
-`hooks.enabled=true` 且设置了 `hooks.gmail.account` 时,Gateway 网关会在启动时运行 `gog gmail watch serve` 并自动续期 watch。
- 设置 `OPENCLAW_SKIP_GMAIL_WATCHER=1` 可退出(如果你自运行守护进程则很有用)。
- 不要同时运行手动守护进程,否则会遇到 `listen tcp 127.0.0.1:8788: bind: address already in use`
手动守护进程(启动 `gog gmail watch serve` + 自动续期):
@@ -135,7 +135,7 @@ gcloud auth login
gcloud config set project <project-id>
```
注意:Gmail watch 要求 Pub/Sub 主题位于与 OAuth 客户端相同的项目中。
注意:Gmail watch 要求 Pub/Sub 主题与 OAuth 客户端位于同一项目中。
2. 启用 API
@@ -149,7 +149,7 @@ gcloud services enable gmail.googleapis.com pubsub.googleapis.com
gcloud pubsub topics create gog-gmail-watch
```
4. 允许 Gmail 推送发布:
4. 允许 Gmail push 发布:
```bash
gcloud pubsub topics add-iam-policy-binding gog-gmail-watch \
@@ -168,9 +168,9 @@ gog gmail watch start \
保存输出中的 `history_id`(用于调试)。
## 运行推送处理
## 运行推送处理程序
本地示例(共享令牌认证):
本地示例(共享 token 认证):
```bash
gog gmail watch serve \
@@ -185,17 +185,17 @@ gog gmail watch serve \
--max-bytes 20000
```
说明
注意事项
- `--token` 保护推送端点(`x-gog-token``?token=`)。
- `--hook-url` 指向 OpenClaw `/hooks/gmail`(已映射;隔离运行 + 摘要发送到主会话)。
- `--hook-url` 指向 OpenClaw `/hooks/gmail`(已映射;隔离运行 + 摘要发送到主线程)。
- `--include-body``--max-bytes` 控制发送到 OpenClaw 的正文片段。
推荐:`openclaw webhooks gmail run` 封装了相同的流程并自动续期 watch。
## 暴露处理(高级,不受支持)
## 暴露处理程序(高级,不受支持)
如果你需要非 Tailscale 隧道,请手动接线并在推送订阅中使用公共 URL(不受支持,无保护措施):
如果你需要非 Tailscale 隧道,请手动接并在推送订阅中使用公共 URL(不受支持,无保护措施):
```bash
cloudflared tunnel --url http://127.0.0.1:8788 --no-autoupdate
@@ -217,7 +217,7 @@ gog gmail watch serve --verify-oidc --oidc-email <svc@...>
## 测试
向被监的收件箱发送一封邮件
向被监的收件箱发送一条消息
```bash
gog gmail send \
@@ -227,7 +227,7 @@ gog gmail send \
--body "ping"
```
检查 watch 状态和历史:
检查 watch 状态和历史记录
```bash
gog gmail watch status --account openclaw@gmail.com
@@ -237,8 +237,8 @@ gog gmail history --account openclaw@gmail.com --since <historyId>
## 故障排除
- `Invalid topicName`:项目不匹配(主题不在 OAuth 客户端项目中)。
- `User not authorized`:主题缺少 `roles/pubsub.publisher` 权限
- 空消息:Gmail 推送仅提供 `historyId`;通过 `gog gmail history` 获取详情
- `User not authorized`:主题缺少 `roles/pubsub.publisher`
- 空消息:Gmail push 仅提供 `historyId`;通过 `gog gmail history` 获取。
## 清理
+15 -14
View File
@@ -1,16 +1,16 @@
---
read_when:
- 添加或修改投票支持
- 调试从 CLI 或 Gateway网关发送的投票
summary: 通过 Gateway网关 + CLI 发送投票
- 调试从 CLI 或 Gateway 网关发送的投票
summary: 通过 Gateway 网关 + CLI 发送投票
title: 投票
x-i18n:
generated_at: "2026-02-01T19:38:57Z"
generated_at: "2026-02-03T07:43:12Z"
model: claude-opus-4-5
provider: pi
source_hash: 760339865d27ec40def7996cac1d294d58ab580748ad6b32cc34d285d0314eaf
source_path: automation/poll.md
workflow: 14
workflow: 15
---
# 投票
@@ -19,7 +19,7 @@ x-i18n:
- WhatsAppWeb 渠道)
- Discord
- Microsoft TeamsAdaptive Cards
- MS TeamsAdaptive Cards
## CLI
@@ -47,29 +47,30 @@ openclaw message poll --channel msteams --target conversation:19:abc@thread.tacv
- `--poll-multi`:允许选择多个选项
- `--poll-duration-hours`:仅限 Discord(省略时默认为 24)
## Gateway网关 RPC
## Gateway 网关 RPC
方法:`poll`
参数:
- `to`(字符串,必
- `question`(字符串,必
- `options`(字符串数组,必
- `to`(字符串,必
- `question`(字符串,必
- `options`(字符串数组,必
- `maxSelections`(数字,可选)
- `durationHours`(数字,可选)
- `channel`(字符串,可选,默认:`whatsapp`
- `idempotencyKey`(字符串,必
- `idempotencyKey`(字符串,必
## 渠道差异
- WhatsApp2-12 个选项,`maxSelections` 必须在选项数量范围内,忽略 `durationHours`
- Discord2-10 个选项,`durationHours` 限制在 1-768 小时(默认 24)。`maxSelections > 1` 启用多选;Discord 不支持严格的选择数量限制。
- Microsoft TeamsAdaptive Card 投票(由 OpenClaw 管理)。没有原生投票 API`durationHours` 被忽略。
- Discord2-10 个选项,`durationHours` 限制在 1-768 小时之间(默认 24)。`maxSelections > 1` 启用多选;Discord 不支持严格的选择数量限制。
- MS TeamsAdaptive Card 投票(由 OpenClaw 管理)。原生投票 API`durationHours` 被忽略。
## 智能体工具(Message
使用 `message` 工具的 `poll` 操作(`to``pollQuestion``pollOption`,可选 `pollMulti``pollDurationHours``channel`)。
注意:Discord 没有"精确选择 N 个"模式;`pollMulti` 映射为多选。
Teams 投票以 Adaptive Cards 形式渲染,需要 Gateway网关保持在线以在 `~/.openclaw/msteams-polls.json` 中记录投票结果。
注意:Discord 没有"恰好选择 N 个"模式;`pollMulti` 映射为多选。
Teams 投票以 Adaptive Cards 形式渲染,需要 Gateway 网关保持在线
以将投票记录到 `~/.openclaw/msteams-polls.json`
+33 -33
View File
@@ -1,21 +1,21 @@
---
read_when:
- 添加或改 webhook 端点
- 添加或改 webhook 端点
- 将外部系统接入 OpenClaw
summary: 用于唤醒和隔离智能体运行的 Webhook 入口
summary: 用于唤醒和隔离智能体运行的 Webhook 入口
title: Webhooks
x-i18n:
generated_at: "2026-02-01T19:39:20Z"
generated_at: "2026-02-03T07:43:23Z"
model: claude-opus-4-5
provider: pi
source_hash: f26b88864567be82366b1f66a4772ef2813c7846110c62fce6caf7313568265e
source_path: automation/webhook.md
workflow: 14
workflow: 15
---
# Webhooks
Gateway网关可以暴露一个小型 HTTP webhook 端点用于外部触发。
Gateway 网关可以暴露一个小型 HTTP webhook 端点用于外部触发。
## 启用
@@ -29,7 +29,7 @@ Gateway网关可以暴露一个小型 HTTP webhook 端点用于外部触发。
}
```
说明
注意事项
-`hooks.enabled=true` 时,`hooks.token` 为必填项。
- `hooks.path` 默认为 `/hooks`
@@ -40,7 +40,7 @@ Gateway网关可以暴露一个小型 HTTP webhook 端点用于外部触发。
- `Authorization: Bearer <token>`(推荐)
- `x-openclaw-token: <token>`
- `?token=<token>`(已弃用;会记录警告,将在未来的主要版本中移除)
- `?token=<token>`(已弃用;会记录警告日志,将在未来的主要版本中移除)
## 端点
@@ -52,13 +52,13 @@ Gateway网关可以暴露一个小型 HTTP webhook 端点用于外部触发。
{ "text": "System line", "mode": "now" }
```
- `text` **必填**(字符串):事件描述(例如 "New email received")。
- `mode` 可选(`now` | `next-heartbeat`):是否触发立即心跳(默认 `now`)或等待下一次周期性检查。
- `text` **必填**(字符串):事件描述(例如"收到新邮件")。
- `mode` 可选(`now` | `next-heartbeat`):是否立即触发心跳(默认 `now`)或等待下一次定期检查。
效果:
- 为**主**会话入一个系统事件
- 如果 `mode=now`,触发立即心跳
- 为**主**会话入一个系统事件队列
- 如果 `mode=now`则立即触发心跳
### `POST /hooks/agent`
@@ -79,44 +79,44 @@ Gateway网关可以暴露一个小型 HTTP webhook 端点用于外部触发。
}
```
- `message` **必填**(字符串):智能体处理的提示或消息。
- `name` 可选(字符串):hook 的人类可读名称(例如 "GitHub"),用作会话摘要的前缀。
- `message` **必填**(字符串):智能体处理的提示或消息。
- `name` 可选(字符串):hook 的可读名称(例如"GitHub"),用作会话摘要的前缀。
- `sessionKey` 可选(字符串):用于标识智能体会话的键。默认为随机的 `hook:<uuid>`。使用一致的键可以在 hook 上下文中进行多轮对话。
- `wakeMode` 可选(`now` | `next-heartbeat`):是否触发立即心跳(默认 `now`)或等待下一次周期性检查。
- `deliver` 可选(布尔值):如果为 `true`,智能体的回复将发送到消息渠道。默认为 `true`。仅为心跳确认的回复会被自动跳过。
- `channel` 可选(字符串):投递的消息渠道。可选值:`last``whatsapp``telegram``discord``slack``mattermost`(插件)、`signal``imessage``msteams`。默认为 `last`
- `to` 可选(字符串):渠道的接收标识符(例如 WhatsApp/Signal 的电话号码、Telegram 的聊天 ID、Discord/Slack/Mattermost(插件)的频道 ID、Microsoft Teams 的会话 ID)。默认为主会话中的最后一个接收
- `model` 可选(字符串):模型覆盖(例如 `anthropic/claude-3-5-sonnet` 或别名)。如果有模型限制,必须在允许的模型列表中。
- `thinking` 可选(字符串):思级别覆盖(例如 `low``medium``high`)。
- `wakeMode` 可选(`now` | `next-heartbeat`):是否立即触发心跳(默认 `now`)或等待下一次定期检查。
- `deliver` 可选(布尔值):如果为 `true`,智能体的响应将发送到消息渠道。默认为 `true`。仅为心跳确认的响应会自动跳过。
- `channel` 可选(字符串):用于投递的消息渠道。可选值:`last``whatsapp``telegram``discord``slack``mattermost`(插件)、`signal``imessage``msteams`。默认为 `last`
- `to` 可选(字符串):渠道的接收标识符(例如 WhatsApp/Signal 的电话号码、Telegram 的聊天 ID、Discord/Slack/Mattermost(插件)的频道 ID、MS Teams 的会话 ID)。默认为主会话中的最后一个接收
- `model` 可选(字符串):模型覆盖(例如 `anthropic/claude-3-5-sonnet` 或别名)。如果有限制,必须在允许的模型列表中。
- `thinking` 可选(字符串):思级别覆盖(例如 `low``medium``high`)。
- `timeoutSeconds` 可选(数字):智能体运行的最大持续时间(秒)。
效果:
- 运行一**隔离**智能体轮次(使用独立的会话键)
- 始终将摘要发布到**主**会话
- 如果 `wakeMode=now`,触发立即心跳
- 运行一**隔离**智能体回合(独立的会话键)
- 始终**主**会话中发布摘要
- 如果 `wakeMode=now`则立即触发心跳
### `POST /hooks/<name>`(映射)
自定义 hook 名称通过 `hooks.mappings` 解析(见配置)。映射可以将任意请求体转换为 `wake``agent` 操作,支持可选的模板或代码转换。
自定义 hook 名称通过 `hooks.mappings` 解析(见配置)。映射可以将任意请求体转换为 `wake``agent` 操作,支持可选的模板或代码转换。
映射选项(要):
映射选项(要):
- `hooks.presets: ["gmail"]` 启用内置的 Gmail 映射。
- `hooks.mappings` 允许你在配置中定义 `match``action` 和模板。
- `hooks.transformsDir` + `transform.module` 加载 JS/TS 模块以实现自定义逻辑。
- `hooks.transformsDir` + `transform.module` 加载 JS/TS 模块用于自定义逻辑。
- 使用 `match.source` 保持通用的接收端点(基于请求体的路由)。
- TS 转换需要 TS 加载器(例如 `bun``tsx`)或运行时预编译的 `.js`
- 在映射上设置 `deliver: true` + `channel`/`to` 可将回复路由到聊天界面(`channel` 默认为 `last`,回退到 WhatsApp)。
- `allowUnsafeExternalContent: true` 该 hook 禁用外部内容安全包装(危险;仅受信任的内部来源)。
- `openclaw webhooks gmail setup``openclaw webhooks gmail run` 写入 `hooks.gmail` 配置。完整的 Gmail watch 流程请参阅 [Gmail Pub/Sub](/automation/gmail-pubsub)。
- `allowUnsafeExternalContent: true` 禁用该 hook 外部内容安全包装(危险;仅用于受信任的内部来源)。
- `openclaw webhooks gmail setup``openclaw webhooks gmail run` 写入 `hooks.gmail` 配置。完整的 Gmail 监听流程请参阅 [Gmail Pub/Sub](/automation/gmail-pubsub)。
## 响应
- `200` 用于 `/hooks/wake`
- `202` 用于 `/hooks/agent`(异步运行已启动)
- `401` 认证失败
- `400` 无效请求体
- `400` 请求体无效
- `413` 请求体过大
## 示例
@@ -137,7 +137,7 @@ curl -X POST http://127.0.0.1:18789/hooks/agent \
### 使用不同的模型
agent 请求体(或映射)中添加 `model` 以覆盖该次运行的模型:
智能体请求体(或映射)中添加 `model` 以覆盖该次运行的模型:
```bash
curl -X POST http://127.0.0.1:18789/hooks/agent \
@@ -146,7 +146,7 @@ curl -X POST http://127.0.0.1:18789/hooks/agent \
-d '{"message":"Summarize inbox","name":"Email","model":"openai/gpt-5.2-mini"}'
```
如果你设置`agents.defaults.models`,请确保覆盖的模型包含在其中。
如果你启用`agents.defaults.models` 限制,请确保覆盖的模型包含在其中。
```bash
curl -X POST http://127.0.0.1:18789/hooks/gmail \
@@ -157,7 +157,7 @@ curl -X POST http://127.0.0.1:18789/hooks/gmail \
## 安全
- 将 hook 端点限制在 local loopback、tailnet 或受信任的反向代理之后。
- 使用专用的 hook 令牌;不要复用 Gateway网关认证令牌。
- 将 hook 端点保持在 loopback、tailnet 或受信任的反向代理之后。
- 使用专用的 hook 令牌;不要复用 Gateway 网关认证令牌。
- 避免在 webhook 日志中包含敏感的原始请求体。
- Hook 请求体默认被视为不受信任的,并使用安全边界进行包装。如果你必须为特定 hook 禁用此功能,请在该 hook 的映射中设置 `allowUnsafeExternalContent: true`(危险)。
- Hook 请求体默认被视为不受信任并使用安全边界包装。如果你必须为特定 hook 禁用此功能,请在该 hook 的映射中设置 `allowUnsafeExternalContent: true`(危险)。