---
title: "用 Echobell 的 UTC 条件实现时间窗口通知"
description: "使用 Echobell 内置的 UTC 时间变量，按工作时间、周末或维护窗口过滤通知。包含即用的条件示例。"
date: 2025-11-06
author: Nooc
authorAvatarLink: /images/avatars/nooc.webp
authorLink: https://nooc.me
---

# 用 Echobell 的 UTC 条件实现时间窗口通知

Echobell 内置的 UTC 时间变量可以让你直接在频道条件中限制通知的时间窗口——工作时间、值班班次、维护窗口——无需外部过滤层。

前提条件：[条件](/en/docs/conditions)、[模板](/en/docs/template)、[Webhook](/en/docs/webhook)、[邮件触发](/en/docs/email-trigger)。

## 可用的 UTC 变量

这些变量只读，始终可用，以 UTC 计算：

- `timezone`（始终为 "UTC"）、`now`/`iso`、`epochMs`、`epochSeconds`
- `year`、`month`（1–12）、`monthName`
- `dayOfMonth`（1–31）
- `dayOfWeek`（0–6，周日 = 0）、`dayOfWeekName`
- `hour`（0–23）、`minute`（0–59）、`second`（0–59）
- `date`（YYYY-MM-DD）、`time`（HH:mm:ss）

在[条件](/en/docs/conditions)中直接使用（无需 `{{ }}`）。在[模板](/en/docs/template)中用 `{{ }}` 包裹使用。

## 条件示例

### 工作日的工作时间

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

### 仅周末

```
dayOfWeek == 0 || dayOfWeek == 6
```

### 非工作时段（夜间和周末）

```
(hour < 9 || hour >= 17) || dayOfWeek == 0 || dayOfWeek == 6
```

### 维护窗口（每周六 01:00–03:00）

```
dayOfWeek == 6 && hour >= 1 && hour < 3
```

### 每月 1 日整点

```
dayOfMonth == 1 && minute == 0
```

### 季度末工作时间（3/6/9/12 月）

```
(month == 3 || month == 6 || month == 9 || month == 12) && hour >= 9 && hour < 17 && dayOfWeek >= 1 && dayOfWeek <= 5
```

## 与内容过滤组合

时间条件可以通过标准运算符与数据变量组合使用：

- 非工作时段仅对高严重级别升级：
  ```
  ((hour < 9 || hour >= 17) || dayOfWeek == 0 || dayOfWeek == 6) && (severity == "high" || severity == "critical")
  ```
- 生产环境，仅工作日：
  ```
  environment == "production" && dayOfWeek >= 1 && dayOfWeek <= 5
  ```

条件是普通表达式——不要用 `{{ }}` 包裹。运算符说明参见[条件 → 支持的运算符](/en/docs/conditions#supported-operators)。

## 在模板中使用时间变量

相同变量也可以在模板中使用（加 `{{ }}`），适合生成审计记录和人类可读的通知：

```
Sent at {{date}} {{time}} {{timezone}}
Today is {{dayOfWeekName}}, {{monthName}} {{dayOfMonth}}, {{year}}
Epoch: {{epochSeconds}}
```

与来自 [Webhook](/en/docs/webhook) 或[邮件触发](/en/docs/email-trigger)的数据混合使用：

```
{{service}} {{status}} at {{time}} ({{timezone}})
```

## 注意事项

- 所有系统变量均为 UTC。如果团队跨多个时区，设置小时范围时请考虑时差。
- 先用简单的时间窗口，确认生效后再叠加内容过滤条件。
- 在频道上留一段简短说明，解释条件逻辑（如"工作日 09–17 UTC；非工作时段仅限高严重级别"）。

## 下一步

- 为现有频道添加时间窗口条件：[条件](/en/docs/conditions)
- 用变量定制通知内容：[模板](/en/docs/template)
- 将工作时间频道与值班频道分开
- 值班频道在非工作时段设置为来电通知类型
