---
sidebar_position: 3
---

# 触发方式

订阅器支持多种触发方式，满足不同的自动化场景需求。

---

## 📅 定时计划（Cron）

使用 Cron 表达式定义复杂的执行计划，适合需要在特定时间点执行的任务。

### 快捷预设

系统提供常用的预设选项：

| 预设 | Cron 表达式 | 说明 |
|------|-------------|------|
| 每小时 | `0 * * * *` | 每小时的第 0 分钟 |
| 每 2 小时 | `0 */2 * * *` | 每 2 小时执行一次 |
| 每 6 小时 | `0 */6 * * *` | 每 6 小时执行一次 |
| 每天上午 9 点 | `0 9 * * *` | 每天 09:00 |
| 每天中午 12 点 | `0 12 * * *` | 每天 12:00 |
| 每天下午 6 点 | `0 18 * * *` | 每天 18:00 |
| 工作日上午 9 点 | `0 9 * * 1-5` | 周一至周五 09:00 |
| 每周一上午 9 点 | `0 9 * * 1` | 每周一 09:00 |
| 每月 1 日上午 9 点 | `0 9 1 * *` | 每月 1 日 09:00 |

### 自定义配置

#### 执行频率

选择基本频率类型：

| 频率 | 说明 |
|------|------|
| **每小时** | 每隔 N 小时执行 |
| **每天** | 每天在指定时间执行 |
| **每周** | 每周指定日期执行 |
| **每月** | 每月指定日期执行 |

#### 每小时配置

- **间隔小时数**：1-12 小时
- **在第几分钟执行**：0-59 分钟

示例：每 2 小时的第 30 分钟执行 → `30 */2 * * *`

#### 每天配置

- **执行时间**：选择小时和分钟

示例：每天 09:30 执行 → `30 9 * * *`

#### 每周配置

- **选择星期**：可多选周一至周日
- **执行时间**：选择小时和分钟

示例：每周一、三、五上午 9 点 → `0 9 * * 1,3,5`

#### 每月配置

- **选择日期**：1-31 日，或"最后一天"
- **执行时间**：选择小时和分钟

示例：每月 1 日和 15 日上午 9 点 → `0 9 1,15 * *`

### Cron 表达式格式

```
┌───────────── 分钟 (0-59)
│ ┌───────────── 小时 (0-23)
│ │ ┌───────────── 日期 (1-31)
│ │ │ ┌───────────── 月份 (1-12)
│ │ │ │ ┌───────────── 星期 (0-7, 0和7都是周日)
│ │ │ │ │
* * * * *
```

#### 特殊字符

| 字符 | 说明 | 示例 |
|------|------|------|
| `*` | 任意值 | `* * * * *` 每分钟 |
| `,` | 列表 | `0 9,18 * * *` 9点和18点 |
| `-` | 范围 | `0 9 * * 1-5` 周一至周五 |
| `/` | 步长 | `*/15 * * * *` 每15分钟 |

### 时区说明

Cron 表达式使用您的本地时区。系统会在配置界面显示当前时区。

---

## ⏱️ 固定间隔（Interval）

按固定时间间隔重复执行，适合需要定期检查或监控的任务。

### 配置选项

| 选项 | 说明 | 范围 |
|------|------|------|
| **间隔时间** | 数值 | 1-999 |
| **单位** | 时间单位 | 分钟、小时、天 |

### 示例

| 配置 | 说明 |
|------|------|
| 30 分钟 | 每 30 分钟执行一次 |
| 2 小时 | 每 2 小时执行一次 |
| 1 天 | 每天执行一次 |

### 与 Cron 的区别

| 特性 | 固定间隔 | Cron |
|------|----------|------|
| 配置复杂度 | 简单 | 灵活但复杂 |
| 执行时间 | 相对于上次执行 | 固定时间点 |
| 适用场景 | 监控、轮询 | 定时报告、计划任务 |

---

## 🕐 一次性定时（One-time）

在指定的日期和时间执行一次，适合临时任务或一次性需求。

### 配置选项

使用日期时间选择器选择执行时间：

1. 选择日期
2. 选择时间（小时和分钟）

### 使用场景

- 预约发送报告
- 定时提醒
- 临时数据采集

### 注意事项

- 执行完成后订阅器不会再次触发
- 可以手动再次设置新的执行时间
- 建议执行后检查结果

---

## 🔔 事件触发（Event）

通过外部事件触发执行，适合与其他系统集成。

### Webhook 触发

接收 HTTP 请求触发执行。

#### 创建 Webhook 订阅器

1. 选择触发方式为 **事件触发**
2. 选择事件类型为 **Webhook**
3. 保存订阅器后获取 Webhook URL 和密钥

#### Webhook 信息

创建后可以获取：

| 信息 | 说明 |
|------|------|
| **API 端点** | Webhook URL，用于接收请求 |
| **签名密钥** | HMAC-SHA256 签名密钥（可选） |

#### 调用方式

**不带签名的请求**：

```bash
curl -X POST "https://your-domain/api/v1/webhooks/xxx" \
  -H "Content-Type: application/json" \
  -d '{"key": "value"}'
```

**带签名的请求**（推荐）：

```bash
SECRET="your-webhook-secret"
BODY='{"key": "value"}'
SIGNATURE=$(echo -n "$BODY" | openssl dgst -sha256 -hmac "$SECRET" | cut -d' ' -f2)

curl -X POST "https://your-domain/api/v1/webhooks/xxx" \
  -H "Content-Type: application/json" \
  -H "X-Webhook-Signature: sha256=$SIGNATURE" \
  -d "$BODY"
```

#### 使用 Webhook 数据

在 Prompt 模板中使用 `{{webhook_data}}` 变量获取请求体数据：

```
收到新的告警通知：
{{webhook_data}}

请分析告警内容并给出处理建议。
```

### Git Push 触发

代码推送时触发执行（开发中）。

#### 配置选项

| 选项 | 说明 |
|------|------|
| **仓库** | Git 仓库地址（owner/repo 格式） |
| **分支** | 监听的分支（可选，默认所有分支） |

#### 使用场景

- 代码提交后自动审查
- 自动运行测试
- 更新文档

---

## 💡 选择建议

### 按场景选择

| 场景 | 推荐触发方式 |
|------|--------------|
| 每日报告 | 定时计划（Cron） |
| 实时监控 | 固定间隔 |
| 临时任务 | 一次性定时 |
| 系统集成 | Webhook |
| CI/CD | Git Push |

### 按频率选择

| 频率 | 推荐触发方式 |
|------|--------------|
| 每分钟级 | 固定间隔 |
| 每小时级 | 固定间隔或 Cron |
| 每天级 | Cron |
| 每周/月级 | Cron |
| 不定时 | Webhook |

---

## ⚠️ 注意事项

### 执行频率限制

- 最小间隔建议不低于 1 分钟
- 高频执行会消耗更多资源
- 考虑任务执行时间，避免重叠

### 时区问题

- Cron 使用本地时区
- 跨时区协作时注意时间换算
- 系统会显示下次执行时间供确认

### Webhook 安全

- 建议使用签名验证
- 妥善保管签名密钥
- 定期轮换密钥

---

## 🔗 相关文档

- [创建订阅器](./creating-subscriptions.md) - 完整的创建流程
- [动态时间线](./timeline.md) - 查看执行结果
