---
summary: "cron下的自动化配置加上媒体模型模板变量表面"
read_when:
- "安排 cron 自动化"
- "配置自动化故障警报"
- "查找媒体模型模板变量"
title: "配置——自动化和媒体模板变量"
---
`cron.*` 下预定的自动化键,加上媒体模型模板变量表面。
完整密钥索引和其他顶级配置域,请参见[配置参考](/gateway/configuration-reference)。
## 自动化(`cron`)
```json5
{
cron: {
enabled: true,
triggers: {
enabled: true,
},
webhookToken: "replace-with-dedicated-token", // optional bearer token for outbound webhook auth
webhookSsrfPolicy: {
allowedHostnames: ["127.0.0.1"], // optional exact exception for a trusted receiver
},
sessionRetention: "24h", // duration string ("0h" disables) or false
},
}
```
- `enabled`:执行已存储的自动化任务(默认:`true`)。设置为 `false` 可暂停所有自动化执行,而不会删除任务。
- `skipMissedJobs`:启动时跳过错过的重复出现的 (`cron`/`every`) 插槽,并前进到下一个未来出现的位置(默认值:`false`)。一次性 (`at`) 追赶不变。
- `triggers.enabled`:运行事件驱动的自动化触发器(默认值:`true`)。设置 `false` 以禁用条件触发器、脚本负载、流计划和事件源准入。
- `sessionRetention`:在清理 SQLite 会话行之前,保留已完成的隔离自动化运行会话的时长。也控制已归档的已删除自动化记录的清理。默认值:`24h`;设置为 `false` 或 `"0h"` 等零时长可禁用(负时长无效)。
- 终端运行历史记录保留 7 天(`lost` 行保留 24 小时),每个作业和历史记录类强制执行最新的 2000 行作为附加上限。
- `webhookToken`:用于自动化 webhook POST 投递(`delivery.mode = "webhook"`)的 bearer 令牌;如果省略,则不会发送身份验证标头。
- `webhookSsrfPolicy`:用于主要、完成、故障目标和故障警报 Webhook 的共享出站 SSRF 策略。 Private/internal 省略时目标将被阻止。更喜欢精确的 `allowedHostnames`;仅将 `dangerouslyAllowPrivateNetwork: true` 用于受信任的专用网络接收方。窄假 IP 代理标志是 `allowRfc2544BenchmarkRange` 和 `allowIpv6UniqueLocalRange`。
- `webhookSsrfPolicy.blockedHostnames`:拒绝 DNS 之前的确切主机和通配符子域以及所有允许规则。 `*.example.com` 不包括顶点;单独添加`example.com`来阻止它。为空或未设置不会增加任何拒绝。
`cron`区块严格; `cron.enabled`、`cron.skipMissedJobs`、`cron.triggers`、`cron.webhookToken`、`cron.webhookSsrfPolicy`、`cron.sessionRetention` 和 `cron.failureAlert` 是唯一可接受的密钥。已退役的 `cron.webhook` 后备 URL 已消失:运行时交付使用每个作业 `delivery.mode = "webhook"` 加上 `delivery.to`,或在保留公告交付时使用 `delivery.completionDestination`。 `openclaw doctor --fix` 从现有配置文件中删除剩余的 `cron.webhook`。
### `cron.failureAlert`
```json5
{
cron: {
failureAlert: {
enabled: false,
after: 2,
cooldownMs: 3600000,
includeSkipped: false,
mode: "announce",
channel: "last",
to: "channel:C1234567890",
accountId: "main",
},
},
}
```
`cron.failureAlert` 拥有全局警报策略及其默认目标。已存在失败路径的作业,连续 2 次执行失败且冷却时间为 1 小时后,默认覆盖;即使不存在路由,`cron.failureAlert` 对象也会显式地使用 activates/tunes 策略。已退役的 `cron.failureDestination` 块由 [`openclaw doctor --fix`](/cli/doctor) 合并到其中。
- `enabled`:显式启用或禁用全局策略。 `false` 禁用继承的通知,除非作业有自己的 `failureAlert` 对象; `true` 显式全局启用。省略它会保留路由支持的默认值。
- `after`:触发告警前所需的连续失败次数(正整数,最小值:`1`;默认值:`2`)。
- `cooldownMs`:同一任务重复告警之间的最小毫秒数(非负整数;默认值:`3600000`)。
- `includeSkipped`:将连续跳过的运行计入告警阈值(默认:`false`)。跳过的运行会单独跟踪,不会影响执行错误退避。
- `mode`:投递模式——`"announce"` 通过频道消息发送;`"webhook"` 将请求发送到 `to` 中的目标。目标数据足够时,默认为 `"announce"`。
- `channel`:播报投递的频道覆盖值。`"last"` 会复用最后一个已知的投递频道。
- `to`:显式的播报目标或 webhook URL。使用 webhook 模式时必需。
- `accountId`:可选帐户或通道 ID,用于确定警报传送范围。
- Route 优先级是每个作业 `failureAlert` 路由字段,然后是每个作业 `delivery.failureDestination` 分层在这些全局目标字段上,然后是主要公告目标。
- Per-job `failureAlert: false` 禁用该作业的执行和所需交付失败警报;自动禁用安全通知保持活动状态。任何每个作业 `failureAlert` 对象都会显式启用和调整该作业。
- `delivery.bestEffort: true` 抑制 inherited/default 执行警报;明确的每个作业 `failureAlert` 仍然具有权威性。
- 必需的完成传递失败(`status: "ok"`、`completionStatus: "failed"`)不会增加执行退避,并且可能仅通过已解决的备用故障目标(而不是失败的主路由)立即通知。
- `delivery.failureDestination` 仅支持 `sessionTarget="isolated"` 的任务,除非该任务的主要 `delivery.mode` 为 `"webhook"`。
请参阅 [Automations](/automation/cron-jobs)。 Cron 记录隔离的自动化运行历史记录。
## 媒体模型模板变量
在 `tools.media.models[].args` 中展开的模板占位符:
| 变量 | 描述 |
| --------------------------- | ------------------------------------------------- |
| `{{Body}}` | 完整的入站消息正文 |
| `{{RawBody}}` | 原始主体(无 history/sender 包装纸) |
| `{{BodyStripped}}` | 去除群组提及后的正文 |
| `{{From}}` | 发送者标识符 |
| `{{To}}` | 目标标识符 |
| `{{MessageSid}}` | 频道消息ID |
| `{{SessionId}}` | 当前会话 UUID |
| `{{IsNewSession}}` | 创建新会话时为 `"true"` |
| `{{AttachmentUrl}}` | 当前附件 URL 或提供商引用 |
| `{{AttachmentPath}}` | 当前附件的本地路径 |
| `{{AttachmentContentType}}` | 当前附件的 MIME 内容类型 |
| `{{AttachmentDir}}` | 包含 `AttachmentPath` 的目录 |
| `{{AttachmentIndex}}` | 从零开始的源事实索引 |
| `{{Transcript}}` | 音频转录文本 |
| `{{Prompt}}` | CLI 条目的已解析媒体提示词 |
| `{{MaxChars}}` | CLI 条目的已解析最大输出字符数 |
| `{{ChatType}}` | `"direct"` 或 `"group"` |
| `{{GroupSubject}}` | 群组主题(尽力获取) |
| `{{GroupMembers}}` | 群组成员预览(尽力获取) |
| `{{SenderName}}` | 发送者显示名称(尽力获取) |
| `{{SenderE164}}` | 发送者电话号码(尽力获取) |
| `{{Provider}}` | 提供商提示(whatsapp、telegram、discord 等) |
旧版的 `{{MediaPath}}`、`{{MediaUrl}}`、`{{MediaType}}` 和 `{{MediaDir}}` 名称在插件 SDK 兼容期内仍然可用,但已弃用。新配置应使用 `Attachment*` 变量。
---