用 Echobell 的 UTC 条件实现时间窗口通知
Echobell 内置的 UTC 时间变量可以让你直接在频道条件中限制通知的时间窗口——工作时间、值班班次、维护窗口——无需外部过滤层。
可用的 UTC 变量
这些变量只读,始终可用,以 UTC 计算:
timezone(始终为 "UTC")、now/iso、epochMs、epochSecondsyear、month(1–12)、monthNamedayOfMonth(1–31)dayOfWeek(0–6,周日 = 0)、dayOfWeekNamehour(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}}{{service}} {{status}} at {{time}} ({{timezone}})注意事项
- 所有系统变量均为 UTC。如果团队跨多个时区,设置小时范围时请考虑时差。
- 先用简单的时间窗口,确认生效后再叠加内容过滤条件。
- 在频道上留一段简短说明,解释条件逻辑(如"工作日 09–17 UTC;非工作时段仅限高严重级别")。