---
title: 频道条件 - 智能通知过滤
sidebarTitle: 条件
description: 掌握 Echobell 的条件系统以智能过滤通知。包含条件表达式、运算符、基于时间的过滤和减少告警疲劳最佳实践的完整指南。
---

# 频道条件

频道条件是强大的表达式，用于确定何时应发送通知。通过在频道上设置条件，您可以基于变量内容或 HTTP 头过滤通知，确保订阅者只接收相关告警。这对于减少告警疲劳和维持通知系统的高信噪比至关重要。

频道条件是强大的表达式，用于确定何时应发送通知。通过在频道上设置条件，您可以根据变量或 HTTP 标头的内容过滤通知，确保订阅者只收到相关警报。

## 了解条件

条件是计算结果为 `true` 或 `false` 的表达式。当频道被触发时：

- 如果条件**未设置**（为空），通知将发送给所有订阅者。
- 如果条件**已设置**，只有当表达式计算为 `true` 时，才会发送通知。

## 编写条件

条件以表达式形式编写，不需要在模板中使用的 `{{}}` 包装器。例如：

```
status == "active"
```

此条件仅允许在 `status` 变量等于 "active" 时发送通知。

## 常见用例

以下是一些您可能使用条件的实际例子：

### 基本变量检查

```
amount > 100
```

仅当 "amount" 变量大于 100 时才通知。

```
message != ""
```

仅当 "message" 变量不为空时才通知。

```
isUrgent == true
```

仅当 "isUrgent" 变量为真时才通知。

### 检查 HTTP 标头

您可以使用特殊变量 `header` 访问 HTTP 标头：

```
header["user-agent"].includes("Mozilla")
```

仅当请求来自 Mozilla 浏览器时才通知。

```
header["content-type"] == "application/json"
```

仅当内容类型为 JSON 时才通知。

```
header["x-priority"] == "high"
```

仅当自定义优先级标头设置为"high"时才通知。

<Callout type="info">标头中的所有键都是小写的。</Callout>

### 复杂条件

您可以使用逻辑运算符组合多个条件：

```
(temperature > 30 || pressure > 100) && status == "monitoring"
```

仅当温度超过 30 或压力超过 100，且状态为"monitoring"时才通知。

```
environment == "production" && (errorLevel == "critical" || errorLevel == "high")
```

仅对生产环境中的关键或高级错误进行通知。

## 支持的运算符

条件表达式中支持以下运算符：

| 运算符                    | 描述       | 示例                                        |
| ------------------------- | ---------- | ------------------------------------------- |
| `==`                      | 等于       | `status == "active"`                        |
| `!=`                      | 不等于     | `status != "inactive"`                      |
| `!`                       | 逻辑非     | `!isCompleted`                              |
| `<`                       | 小于       | `count < 10`                                |
| `>`                       | 大于       | `price > 99.99`                             |
| `<=`                      | 小于或等于 | `battery <= 20`                             |
| `>=`                      | 大于或等于 | `confidence >= 0.95`                        |
| `&&`                      | 逻辑与     | `isAdmin && isActive`                       |
| <code>&#124;&#124;</code> | 逻辑或     | <code>isError &#124;&#124; isWarning</code> |

## 条件变量

当通过 webhook 触发频道时，您可以访问：

1. URL 中的**查询参数**
2. POST 请求的**JSON 主体**
3. 通过 `header` 对象访问的**HTTP 标头**

对于电子邮件触发器，您可以访问：

- `from`：电子邮件发件人地址
- `to`：收件人地址
- `subject`：电子邮件主题行
- `text`：纯文本正文内容
- `html`：HTML 正文内容

### 系统时间变量（UTC）

这些只读变量在条件与模板中始终可用，且全部以 UTC 计算。

- `timezone`：恒为 `"UTC"`
- `now` / `iso`：当前时间的 ISO‑8601 字符串（如 `2025-05-06T12:34:56.789Z`）
- `epochMs`：自 Unix 纪元以来的毫秒数（数字）
- `epochSeconds`：自 Unix 纪元以来的秒数（数字）
- `year`：四位年份
- `month`：月份 `1–12`
- `monthName`：月份名称 `January–December`
- `dayOfMonth`：当月第几天 `1–31`
- `dayOfWeek`：星期几 `0–6`（周日 = 0）
- `dayOfWeekName`：星期名称 `Sunday–Saturday`
- `hour`：小时 `0–23`
- `minute`：分钟 `0–59`
- `second`：秒 `0–59`
- `date`：`YYYY-MM-DD` 字符串
- `time`：`HH:mm:ss` 字符串

示例：

```
// 工作日的 09:00–17:00（UTC）
hour >= 9 && hour < 17 && dayOfWeek >= 1 && dayOfWeek <= 5

// 仅周末
dayOfWeek == 0 || dayOfWeek == 6

// 每月第一天的整点
dayOfMonth == 1 && minute == 0
```

## 最佳实践

1. **从简单开始** - 从基本条件开始，根据需要增加复杂性
2. **彻底测试** - 用各种输入测试您的条件，确保它们按预期工作
3. **记录您的条件** - 在您频道的备注字段中添加注释，解释复杂的条件
4. **考虑边缘情况** - 考虑缺失变量或意外值的情况

## 示例

### 仅针对特定错误发出警报

```
errorType == "database" && severity == "high"
```

### 仅在工作时间内通知

```
hour >= 9 && hour < 17 && dayOfWeek >= 1 && dayOfWeek <= 5
```

### 按用户类型过滤

```
userType == "admin" || userRole == "supervisor"
```

### 检查请求来源

```
header["origin"] == "https://trusted-site.com" || header["referer"].includes("trusted-domain.com")
```

### 监控阈值违规

```
metricValue > threshold && isMonitoring == true
```

通过有效使用条件，您可以减少通知噪音，确保订阅者只收到对他们有相关性和可操作性的警报。
