From 95110971f3a5675f53a517aa3e53be7a1f94a010 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 30 Apr 2026 23:02:17 +0800 Subject: [PATCH] fix(telegram): close remaining DM alert routes --- .gitea/workflows/run-migration.yml | 5 ++- apps/api/src/services/decision_manager.py | 4 +-- apps/api/src/services/notification_matrix.py | 35 ++++++------------- apps/api/src/services/telegram_gateway.py | 6 ++-- .../test_notification_matrix_group_cutover.py | 31 ++++++++++++++++ docs/LOGBOOK.md | 1 + .../ADR-075-telegram-notification-standard.md | 26 ++++++-------- docs/operations/HUMAN-IN-THE-LOOP.md | 10 +++--- docs/runbooks/RUNBOOK-E2E-CI-SCHEDULE.md | 4 +-- docs/runbooks/SECRETS-MANAGEMENT.md | 5 +-- docs/slo/SLO-SLI-DEFINITION.md | 2 +- scripts/ops/backup-from-110.sh | 4 +-- scripts/ops/deploy-docker-health-monitor.sh | 3 +- scripts/ops/docker-health-monitor.sh | 7 ++-- scripts/ops/dr-drill.sh | 5 +-- scripts/ops/pg-backup.sh | 5 +-- 16 files changed, 86 insertions(+), 67 deletions(-) create mode 100644 apps/api/tests/test_notification_matrix_group_cutover.py diff --git a/.gitea/workflows/run-migration.yml b/.gitea/workflows/run-migration.yml index c877a98ad..d78cf91d3 100644 --- a/.gitea/workflows/run-migration.yml +++ b/.gitea/workflows/run-migration.yml @@ -18,6 +18,9 @@ on: paths: - 'apps/api/migrations/*.sql' +env: + TELEGRAM_ALERT_CHAT_ID: "-1003711974679" + jobs: migrate: runs-on: ubuntu-latest # 或 self-hosted runner on 110 @@ -94,7 +97,7 @@ jobs: if: always() env: TG_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} - TG_CHAT: ${{ secrets.TELEGRAM_OPS_CHAT_ID }} + TG_CHAT: ${{ env.TELEGRAM_ALERT_CHAT_ID }} run: | if [ -n "$TG_TOKEN" ] && [ -n "$TG_CHAT" ]; then STATUS="${{ job.status }}" diff --git a/apps/api/src/services/decision_manager.py b/apps/api/src/services/decision_manager.py index ca2cbc0df..20cecff6c 100644 --- a/apps/api/src/services/decision_manager.py +++ b/apps/api/src/services/decision_manager.py @@ -388,7 +388,7 @@ async def _push_decision_to_telegram( diff_summary=_diff_text, ) elif _notif_type == NotificationType.TYPE_8M or _alert_category in ("alertchain_health", "flywheel_health"): - # TYPE-8M:飛輪/告警鏈路健康異常,發到個人 DM(不發群組) + # TYPE-8M:飛輪/告警鏈路健康異常,統一發到 SRE 戰情室群組。 # 2026-04-17 ogt + Claude Sonnet 4.6: 解析 debate_summary,各欄位用不同組件 # 根因:diagnosis/system_impact/probable_cause 全取 reasoning[:100] → 三欄重複同一段字 _parsed = _parse_debate_summary(reasoning) @@ -406,7 +406,7 @@ async def _push_decision_to_telegram( probable_cause=_cause, ) elif _alert_category == "secops": - # TYPE-5S:資安事件 — 隔離/封鎖審核卡,發到個人 DM (ADR-075 Step-5) + # TYPE-5S:資安事件 — 隔離/封鎖審核卡,統一發到 SRE 戰情室群組。 # 2026-04-12 ogt (ADR-075 Step-5) _labels = incident.signals[0].labels if incident.signals else {} _threat_level = _labels.get("threat_level", risk_level) diff --git a/apps/api/src/services/notification_matrix.py b/apps/api/src/services/notification_matrix.py index 721621107..4d6f15b1e 100644 --- a/apps/api/src/services/notification_matrix.py +++ b/apps/api/src/services/notification_matrix.py @@ -4,8 +4,8 @@ Notification routing matrix — ADR-093 單一矩陣決定每種通知類型的發送目標,取代 telegram_gateway.py 內 24 處硬碼 chat_id。 設計原則: -- tg_group_cutover=False(預設)時維持舊行為,灰階切流用 -- tg_group_cutover=True 時由矩陣完全控制路由 +- 正式告警目的地一律 SRE_GROUP_CHAT_ID 優先 +- OPENCLAW_TG_CHAT_ID 只在 SRE_GROUP_CHAT_ID 缺失時作 fail-soft fallback - 未知通知類型預設發群組 2026-04-25 ogt + Claude Sonnet 4.6 @@ -16,9 +16,9 @@ from enum import Enum class Destination(str, Enum): - DM = "dm" # OPENCLAW_TG_CHAT_ID (個人 DM) + DM = "dm" # OPENCLAW_TG_CHAT_ID (僅缺群組設定時 fallback) GROUP = "group" # SRE_GROUP_CHAT_ID - BOTH = "both" # 兩者都發(群組版去按鈕) + BOTH = "both" # legacy alias: 2026-04-30 起視為 group-first @dataclass(frozen=True) @@ -28,16 +28,16 @@ class RoutingRule: # ADR-093 D1-D4 路由矩陣 -# 2026-04-25 ogt: TYPE-5S 從 DM 改為 GROUP — SignOz webhook 屬監控告警,SRE 全員可見 +# 2026-04-30 Codex: 所有告警類型群組優先,DM 只作缺群組設定 fallback。 NOTIFICATION_ROUTING: dict[str, RoutingRule] = { "TYPE-1": RoutingRule(Destination.GROUP), - "TYPE-2": RoutingRule(Destination.BOTH, strip_buttons_for_group=True), + "TYPE-2": RoutingRule(Destination.GROUP), "TYPE-3": RoutingRule(Destination.GROUP), "TYPE-4": RoutingRule(Destination.GROUP), "TYPE-4D": RoutingRule(Destination.GROUP), "TYPE-5S": RoutingRule(Destination.GROUP), "TYPE-6B": RoutingRule(Destination.GROUP), - "TYPE-7E": RoutingRule(Destination.BOTH, strip_buttons_for_group=False), + "TYPE-7E": RoutingRule(Destination.GROUP), "TYPE-8M": RoutingRule(Destination.GROUP), } @@ -58,24 +58,9 @@ def resolve_chat_ids( ) -> list[str]: """ 回傳此通知應發送的 chat_id 清單。 - tg_group_cutover=False 時維持原本的 DM only 行為(灰階切流用)。 + tg_group_cutover 僅保留為舊 caller 相容參數;正式策略永遠群組優先。 """ - if not tg_group_cutover: - # Feature flag 關閉 → 維持舊行為(DM only for interactive, group for info) - interactive = {"TYPE-3", "TYPE-4", "TYPE-4D", "TYPE-8M"} - if notification_type in interactive: - return [dm_chat_id] if dm_chat_id else [] - return [group_chat_id] if group_chat_id else [] - rule = get_routing_rule(notification_type) - if rule.destination == Destination.DM: + if rule.destination == Destination.DM and not group_chat_id: return [dm_chat_id] if dm_chat_id else [] - elif rule.destination == Destination.GROUP: - return [group_chat_id] if group_chat_id else [] - else: # BOTH - result = [] - if group_chat_id: - result.append(group_chat_id) - if dm_chat_id: - result.append(dm_chat_id) - return result + return [group_chat_id or dm_chat_id] if (group_chat_id or dm_chat_id) else [] diff --git a/apps/api/src/services/telegram_gateway.py b/apps/api/src/services/telegram_gateway.py index a90f50c1e..27bf6e88d 100644 --- a/apps/api/src/services/telegram_gateway.py +++ b/apps/api/src/services/telegram_gateway.py @@ -2593,7 +2593,7 @@ class TelegramGateway: 適用: FlywheelPlaybookZero / AlertChainBroken_* 等 按鈕: 固定 3 個([觸發診斷] [查看面板] [靜默]) - 只發個人 DM,不發群組(雙頻道路由規則)。 + 正式收件通道為 AwoooI SRE 戰情室群組。 """ severity_emoji = "🔴" if severity_level == "critical" else "🟠" category_label = "飛輪核心異常" if alert_category == "flywheel_health" else "告警鏈路異常" @@ -2647,7 +2647,7 @@ class TelegramGateway: ADR-075 (2026-04-12 ogt) 按鈕: [隔離資源] [封鎖來源IP] [強制驅逐] [確認授權] - 只發個人 DM(指令敏感,不發群組)。 + 正式收件通道為 AwoooI SRE 戰情室群組。 """ level_icon = {"critical": "🔴", "warning": "🟠"}.get(threat_level.lower(), "⚠️") @@ -2755,7 +2755,7 @@ class TelegramGateway: ADR-075 (2026-04-12 ogt) 觸發: SLA 超時(P0: 15分鐘; P1: 45分鐘) - 路由: 個人 DM + 群組(緊急事故全員知情) + 路由: SRE 戰情室群組(緊急事故全員知情) 按鈕: [建立戰情室] [Postmortem草稿] [DR手冊] [確認接手] """ duration_str = f"{duration_min} 分鐘" if duration_min < 60 else f"{duration_min//60} 小時 {duration_min%60} 分" diff --git a/apps/api/tests/test_notification_matrix_group_cutover.py b/apps/api/tests/test_notification_matrix_group_cutover.py new file mode 100644 index 000000000..1b086a06f --- /dev/null +++ b/apps/api/tests/test_notification_matrix_group_cutover.py @@ -0,0 +1,31 @@ +from src.services.notification_matrix import resolve_chat_ids + + +def test_all_alert_types_resolve_to_sre_group_first() -> None: + for notification_type in [ + "TYPE-1", + "TYPE-2", + "TYPE-3", + "TYPE-4", + "TYPE-4D", + "TYPE-5S", + "TYPE-6B", + "TYPE-7E", + "TYPE-8M", + "UNKNOWN", + ]: + assert resolve_chat_ids( + notification_type, + dm_chat_id="5619078117", + group_chat_id="-1003711974679", + tg_group_cutover=False, + ) == ["-1003711974679"] + + +def test_dm_is_only_fail_soft_fallback_when_group_missing() -> None: + assert resolve_chat_ids( + "TYPE-3", + dm_chat_id="5619078117", + group_chat_id="", + tg_group_cutover=True, + ) == ["5619078117"] diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 1a157ad18..2acd01d19 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -15,6 +15,7 @@ - `send_approval_card()` 改為單次送 SRE 群組,不再先送 DM 再背景補群組;同時把 `tg_approval:*`、`tg_msg:*`、`approval_records.telegram_chat_id` 記到實際群組訊息。 - Drift / Meta / SecOps / Business / Escalation 卡片、執行結果、rollback 提案、auto-repair fallback、AI provider failover、成本警告、容量預測、Hermes 規則品質、合規、Coverage、Gitea/Code Review 通知全部改為群組優先。 - Gitea CD / Code Review / deploy-alerts / E2E health / dev CD workflow 的 Telegram sendMessage 也改用 SRE 群組 ID,避免 workflow 通知仍打到個人 DM。 +- Ops 旁路補齊:docker health monitor、PG backup、DR drill、backup-from-110、migration workflow 的 Telegram fallback 改為 `SRE_GROUP_CHAT_ID` / `TELEGRAM_ALERT_CHAT_ID` 優先。 - 更新 ADR-093、Alert Chain E2E runbook、Human-in-the-loop 文件,避免後續驗收仍檢查 @tsenyangbot 個人 DM。 ### 驗證 diff --git a/docs/adr/ADR-075-telegram-notification-standard.md b/docs/adr/ADR-075-telegram-notification-standard.md index 8600e74bd..c355380da 100644 --- a/docs/adr/ADR-075-telegram-notification-standard.md +++ b/docs/adr/ADR-075-telegram-notification-standard.md @@ -59,28 +59,22 @@ ADR-071(2026-04-11)設計了 TYPE-1/2/3/4/4D 五種通知類型,並實作 | 類型 | 適用場景 | 按鈕 | 發送目標 | |-----|---------|------|---------| | TYPE-1 | 純資訊、備份成功、心跳 | 無 | SRE 群組 | -| TYPE-2 | AI 自動修復完成 | 無(結果通知)| 個人 DM + 群組唯讀 | -| TYPE-3 | 需人工審核(預設)| 依 category 動態 ≤4 個 | 個人 DM 只 | -| TYPE-4 | AI 無法判斷 | [手動記錄][查面板][忽略] | 個人 DM 只 | -| TYPE-4D | Config Drift | [查Diff][採納][回滾][忽略] | 個人 DM 只 | -| TYPE-5S | 資安防禦(未來)| [隔離][封鎖IP][驅逐Pod][確認授權] | 個人 DM 只 | +| TYPE-2 | AI 自動修復完成 | 無(結果通知)| SRE 群組 | +| TYPE-3 | 需人工審核(預設)| 依 category 動態 ≤4 個 | SRE 群組 | +| TYPE-4 | AI 無法判斷 | [手動記錄][查面板][忽略] | SRE 群組 | +| TYPE-4D | Config Drift | [查Diff][採納][回滾][忽略] | SRE 群組 | +| TYPE-5S | 資安防禦(未來)| [隔離][封鎖IP][驅逐Pod][確認授權] | SRE 群組 | | TYPE-6B | 業務/FinOps(未來)| [暫停][查SignOz][忽略] | SRE 群組 | -| TYPE-7E | 重大事故升級(未來)| [建立戰情室][Postmortem][DR手冊][確認接手] | 個人 DM + 群組 | -| TYPE-8M | 飛輪/告警鏈路健康 | [觸發診斷][查看面板][靜默] | 個人 DM 只 | +| TYPE-7E | 重大事故升級(未來)| [建立戰情室][Postmortem][DR手冊][確認接手] | SRE 群組 | +| TYPE-8M | 飛輪/告警鏈路健康 | [觸發診斷][查看面板][靜默] | SRE 群組 | ### D4:雙頻道路由規則 ``` -含 Callback Button → 只發個人 DM(@tsenyangbot) - TYPE-3 / TYPE-4 / TYPE-4D / TYPE-5S / TYPE-7E / TYPE-8M +2026-04-30 起,正式告警收件通道統一為 AwoooI SRE 戰情室群組 + SRE_GROUP_CHAT_ID=-1003711974679 -純資訊展示 → 只發 SRE 群組(-1003711974679) - TYPE-1 / TYPE-6B - -執行結果 → 兩個都發(群組版唯讀無按鈕) - TYPE-2 - -(TYPE-7E 升級 → 兩個都發,群組版加 @mention) +OPENCLAW_TG_CHAT_ID 僅作 SRE_GROUP_CHAT_ID 缺失時的 fail-soft fallback。 ``` ### D5:Telegram 卡片格式防腐規則 diff --git a/docs/operations/HUMAN-IN-THE-LOOP.md b/docs/operations/HUMAN-IN-THE-LOOP.md index a4ad58f36..a6de0a63d 100644 --- a/docs/operations/HUMAN-IN-THE-LOOP.md +++ b/docs/operations/HUMAN-IN-THE-LOOP.md @@ -86,7 +86,7 @@ AI = Level 3(P3 自動,P0/1/2 部分自動) ### 3.1 Telegram 審核卡操作 -當系統發送 TYPE-3 審核卡到統帥個人 DM: +當系統發送 TYPE-3 審核卡到 AwoooI SRE戰情室群組: ``` ╔══════════════════════════════════════╗ @@ -114,10 +114,10 @@ AI = Level 3(P3 自動,P0/1/2 部分自動) ``` 審核卡發出後: - 0 分鐘: 審核卡發送到個人 DM - 15 分鐘: 提醒訊息(同一個 DM): + 0 分鐘: 審核卡發送到 SRE 戰情室群組 + 15 分鐘: 提醒訊息(同一個群組): "⚠️ 此審核已等待 15 分鐘,請盡快處理" - 30 分鐘: 升級告警發送到 SRE 群組: + 30 分鐘: 升級告警發送到 SRE 戰情室群組: "🔴 審核逾時!Incident #XXX 已等待 30 分鐘未處理 若不處理,系統將在 5 分鐘後自動標記為 ESCALATED" 35 分鐘: Incident 狀態 → ESCALATED @@ -161,7 +161,7 @@ Kill Switch = 立即凍結 AWOOOI 所有自動操作的緊急機制。 **方法 1:Telegram 指令**(推薦,最快) ``` -在個人 DM 輸入: +在 SRE 戰情室群組或授權對話輸入: /kill_switch enable 系統回應: diff --git a/docs/runbooks/RUNBOOK-E2E-CI-SCHEDULE.md b/docs/runbooks/RUNBOOK-E2E-CI-SCHEDULE.md index 3a861dfea..784172fd1 100644 --- a/docs/runbooks/RUNBOOK-E2E-CI-SCHEDULE.md +++ b/docs/runbooks/RUNBOOK-E2E-CI-SCHEDULE.md @@ -134,7 +134,7 @@ jobs: 🔍 請立即調查 UI 回歸問題" env: TG_BOT_TOKEN: ${{ secrets.OPENCLAW_TG_BOT_TOKEN }} - TG_CHAT_ID: ${{ secrets.OPENCLAW_TG_CHAT_ID }} + TG_CHAT_ID: ${{ env.TELEGRAM_ALERT_CHAT_ID }} # 視覺截圖比對工作(獨立 job,只在排程時執行) visual-regression: @@ -186,7 +186,7 @@ jobs: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" env: TG_BOT_TOKEN: ${{ secrets.OPENCLAW_TG_BOT_TOKEN }} - TG_CHAT_ID: ${{ secrets.OPENCLAW_TG_CHAT_ID }} + TG_CHAT_ID: ${{ env.TELEGRAM_ALERT_CHAT_ID }} ``` --- diff --git a/docs/runbooks/SECRETS-MANAGEMENT.md b/docs/runbooks/SECRETS-MANAGEMENT.md index b4af2dc5b..87c681eee 100644 --- a/docs/runbooks/SECRETS-MANAGEMENT.md +++ b/docs/runbooks/SECRETS-MANAGEMENT.md @@ -22,7 +22,7 @@ CD Pipeline 每次部署自動注入到 K8s,禁止手動 patch。 | `HARBOR_USERNAME` | Harbor Registry 推送 | Harbor UI → 帳號設定 | 字串 | 長期 | | `HARBOR_PASSWORD` | Harbor Registry 推送 | Harbor UI → 帳號設定 | 字串 | 長期 | | `TELEGRAM_BOT_TOKEN` | CD 部署通知 | @BotFather → /mybots | `{id}:AAH...` | 長期 | -| `TELEGRAM_CHAT_ID` | CD 通知接收人 | Telegram 個人 ID | 數字 | 長期 | +| `TELEGRAM_CHAT_ID` | CD 注入 `OPENCLAW_TG_CHAT_ID` 的 fail-soft fallback | Telegram chat ID | 數字 | 長期 | | `NVIDIA_API_KEY` | Nemotron LLM 仲裁 | https://build.nvidia.com → API Keys | `nvapi-...` | **可能過期** | | `GEMINI_API_KEY` | Gemini 備援 LLM | https://aistudio.google.com/apikey | `AIzaSy...` | **可能過期** | @@ -31,7 +31,8 @@ CD Pipeline 每次部署自動注入到 K8s,禁止手動 patch。 | Secret Key | 用途 | 狀態 | 來源 | |-----------|------|------|------| | `OPENCLAW_TG_BOT_TOKEN` | API 告警發送 | ✅ | Gitea: `TELEGRAM_BOT_TOKEN` | -| `OPENCLAW_TG_CHAT_ID` | API 告警接收 | ✅ | Gitea: `TELEGRAM_CHAT_ID` | +| `OPENCLAW_TG_CHAT_ID` | API 告警 fallback 接收 | ✅ | Gitea: `TELEGRAM_CHAT_ID` | +| `SRE_GROUP_CHAT_ID` | API 正式告警接收 | ✅ | ConfigMap: `-1003711974679` | | `NVIDIA_API_KEY` | Nemotron LLM | ✅ | Gitea: `NVIDIA_API_KEY` | | `GEMINI_API_KEY` | Gemini 備援 | ✅ | Gitea: `GEMINI_API_KEY` | | `DATABASE_URL` | PostgreSQL 連線 | ✅ | 手動設定 (永久) | diff --git a/docs/slo/SLO-SLI-DEFINITION.md b/docs/slo/SLO-SLI-DEFINITION.md index 1a37292fc..04a18ca78 100644 --- a/docs/slo/SLO-SLI-DEFINITION.md +++ b/docs/slo/SLO-SLI-DEFINITION.md @@ -199,7 +199,7 @@ Error Budget = 1 - SLO 目標值 ### SLO 違規告警規則 ```yaml -# 以下情況 → TYPE-8M「飛輪健康告警」→ 發統帥個人 DM +# 以下情況 → TYPE-8M「飛輪健康告警」→ 發 AwoooI SRE 戰情室群組 SLO-1 連續 2 小時 < 50%: 告警: "⚠️ 自動修復成功率跌破 50%,飛輪瀕死" diff --git a/scripts/ops/backup-from-110.sh b/scripts/ops/backup-from-110.sh index aa94f76cb..ea85aa355 100644 --- a/scripts/ops/backup-from-110.sh +++ b/scripts/ops/backup-from-110.sh @@ -101,9 +101,9 @@ EOF else log "=== Backup FAILED ($ERRORS errors) ===" - # Telegram 告警(若有 token) + # Telegram 告警:正式目的地為 SRE 戰情室群組。 TG_TOKEN="${TG_BOT_TOKEN:-}" - TG_CHAT="${TG_CHAT_ID:-}" + TG_CHAT="${TELEGRAM_ALERT_CHAT_ID:-${SRE_GROUP_CHAT_ID:--1003711974679}}" if [ -n "$TG_TOKEN" ] && [ -n "$TG_CHAT" ]; then curl -s -X POST "https://api.telegram.org/bot${TG_TOKEN}/sendMessage" \ -d "chat_id=${TG_CHAT}" \ diff --git a/scripts/ops/deploy-docker-health-monitor.sh b/scripts/ops/deploy-docker-health-monitor.sh index 3d08d1a9f..e33f6ce56 100755 --- a/scripts/ops/deploy-docker-health-monitor.sh +++ b/scripts/ops/deploy-docker-health-monitor.sh @@ -81,7 +81,8 @@ deploy_to_host() { AWOOOI_API_URL=https://awoooi.wooo.work TELEGRAM_BOT_TOKEN=CHANGE_ME -TELEGRAM_CHAT_ID=CHANGE_ME +SRE_GROUP_CHAT_ID=-1003711974679 +TELEGRAM_ALERT_CHAT_ID=-1003711974679 SEND_COOLDOWN_SECONDS=300 SECRETS_TEMPLATE echo ' ⚠️ 請填寫 /etc/awoooi-ops/secrets.env.template 後重命名為 secrets.env' diff --git a/scripts/ops/docker-health-monitor.sh b/scripts/ops/docker-health-monitor.sh index 5c19f038e..78bcd1e66 100755 --- a/scripts/ops/docker-health-monitor.sh +++ b/scripts/ops/docker-health-monitor.sh @@ -24,7 +24,8 @@ fi : "${AWOOOI_API_URL:=https://awoooi.wooo.work}" : "${TELEGRAM_BOT_TOKEN:=}" -: "${TELEGRAM_CHAT_ID:=}" +: "${SRE_GROUP_CHAT_ID:=-1003711974679}" +: "${TELEGRAM_ALERT_CHAT_ID:=${SRE_GROUP_CHAT_ID:-${TELEGRAM_CHAT_ID:-}}}" : "${LOG_FILE:=/var/log/docker-health-monitor.log}" : "${SEND_COOLDOWN_SECONDS:=300}" : "${COOLDOWN_DIR:=/tmp/docker-health-monitor-cooldown}" @@ -86,10 +87,10 @@ matches_pattern() { # ─── Telegram 直發 Fallback ────────────────────────────────────────────────── send_telegram_direct() { local message="$1" - [[ -z "$TELEGRAM_BOT_TOKEN" || -z "$TELEGRAM_CHAT_ID" ]] && return 0 + [[ -z "$TELEGRAM_BOT_TOKEN" || -z "$TELEGRAM_ALERT_CHAT_ID" ]] && return 0 curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \ -H "Content-Type: application/json" \ - -d "{\"chat_id\":\"${TELEGRAM_CHAT_ID}\",\"text\":\"${message}\",\"parse_mode\":\"HTML\"}" \ + -d "{\"chat_id\":\"${TELEGRAM_ALERT_CHAT_ID}\",\"text\":\"${message}\",\"parse_mode\":\"HTML\"}" \ > /dev/null 2>&1 || true } diff --git a/scripts/ops/dr-drill.sh b/scripts/ops/dr-drill.sh index 051f75c1a..ff2caea84 100644 --- a/scripts/ops/dr-drill.sh +++ b/scripts/ops/dr-drill.sh @@ -33,10 +33,11 @@ log() { echo "[$(date '+%Y-%m-%d %H:%M:%S %z')] $*"; } notify_telegram() { local msg="$1" - if [[ -n "${TELEGRAM_BOT_TOKEN:-}" && -n "${TELEGRAM_CHAT_ID:-}" ]]; then + local chat_id="${TELEGRAM_ALERT_CHAT_ID:-${SRE_GROUP_CHAT_ID:--1003711974679}}" + if [[ -n "${TELEGRAM_BOT_TOKEN:-}" && -n "$chat_id" ]]; then curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \ -H "Content-Type: application/json" \ - -d "{\"chat_id\":\"${TELEGRAM_CHAT_ID}\",\"text\":\"${msg}\",\"parse_mode\":\"HTML\"}" \ + -d "{\"chat_id\":\"${chat_id}\",\"text\":\"${msg}\",\"parse_mode\":\"HTML\"}" \ > /dev/null 2>&1 || true fi } diff --git a/scripts/ops/pg-backup.sh b/scripts/ops/pg-backup.sh index c06f1ba3f..e756a9959 100644 --- a/scripts/ops/pg-backup.sh +++ b/scripts/ops/pg-backup.sh @@ -23,10 +23,11 @@ log() { echo "${LOG_PREFIX} $*"; } notify_telegram() { local msg="$1" - if [[ -n "${TELEGRAM_BOT_TOKEN:-}" && -n "${TELEGRAM_CHAT_ID:-}" ]]; then + local chat_id="${TELEGRAM_ALERT_CHAT_ID:-${SRE_GROUP_CHAT_ID:--1003711974679}}" + if [[ -n "${TELEGRAM_BOT_TOKEN:-}" && -n "$chat_id" ]]; then curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \ -H "Content-Type: application/json" \ - -d "{\"chat_id\":\"${TELEGRAM_CHAT_ID}\",\"text\":\"${msg}\",\"parse_mode\":\"HTML\"}" \ + -d "{\"chat_id\":\"${chat_id}\",\"text\":\"${msg}\",\"parse_mode\":\"HTML\"}" \ > /dev/null 2>&1 || true fi }