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

使用 Echobell 内置的 UTC 时间变量,按工作时间、周末或维护窗口过滤通知。包含即用的条件示例。

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

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

前提条件:条件模板Webhook邮件触发

可用的 UTC 变量

这些变量只读,始终可用,以 UTC 计算:

  • timezone(始终为 "UTC")、now/isoepochMsepochSeconds
  • yearmonth(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)

条件中直接使用(无需 {{ }})。在模板中用 {{ }} 包裹使用。

条件示例

工作日的工作时间

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

条件是普通表达式——不要用 {{ }} 包裹。运算符说明参见条件 → 支持的运算符

在模板中使用时间变量

相同变量也可以在模板中使用(加 {{ }}),适合生成审计记录和人类可读的通知:

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

与来自 Webhook邮件触发的数据混合使用:

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

注意事项

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

下一步

  • 为现有频道添加时间窗口条件:条件
  • 用变量定制通知内容:模板
  • 将工作时间频道与值班频道分开
  • 值班频道在非工作时段设置为来电通知类型