From 7ab26712d0c3987d91fdca50aff4b26d304cf3ad Mon Sep 17 00:00:00 2001 From: Codex Date: Tue, 17 Mar 2026 13:07:54 +0800 Subject: [PATCH] Add Telegram fallback API support --- README.md | 2 ++ env.conf.example | 1 + lib/telegram.sh | 34 ++++++++++++++++++++++++++++------ 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index a21912a..d664d97 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ cp exclude.user.list.example exclude.user.list - `LABEL`:机器或业务标识 - `BACKUP_DIRS`:要备份的目录,使用多行格式,每行一个目录 - `TG_BOT_TOKEN` / `TG_USER_ID`:Telegram 通知配置,可留空 +- `TG_API_BASE_FALLBACK`:可选,自建 Telegram API 地址;官方失败时自动回退 `BACKUP_DIRS` 示例: @@ -104,6 +105,7 @@ cd /root/backup_OBS - 安装脚本不会覆盖已有的 `env.conf` 和 `exclude.user.list` - `install.sh` 和后续脚本都只使用仓库根目录下的 `./obsutil` - `obsutil` 安装完成后,首次仍需手动执行 `./obsutil config -interactive` +- Telegram 通知默认优先走官方 `https://api.telegram.org`,失败后才会尝试 `TG_API_BASE_FALLBACK` 如果你想手动安装或更新仓库根目录下的 `./obsutil`,可以直接执行: diff --git a/env.conf.example b/env.conf.example index bb5cfe2..628a391 100644 --- a/env.conf.example +++ b/env.conf.example @@ -6,6 +6,7 @@ OBS_BACKUP_DIR="backup/${LABEL}" # 备份存放目录 # Telegram 通知配置 TG_BOT_TOKEN="" # 留空表示不启用 TG_USER_ID="" # 留空表示不启用 +TG_API_BASE_FALLBACK="" # 可选:官方失败时使用的自建Telegram API地址 # 备份目录,使用多行格式;每行一个目录 BACKUP_DIRS=$(cat <<'EOF' diff --git a/lib/telegram.sh b/lib/telegram.sh index 48a4e78..499211f 100755 --- a/lib/telegram.sh +++ b/lib/telegram.sh @@ -13,25 +13,47 @@ tg_code_block() { tg_send_message() { local message="${1-}" - local response api + local response primary_api fallback_api if [[ -z "${TG_BOT_TOKEN:-}" || -z "${TG_USER_ID:-}" ]]; then log "INFO" "未配置Telegram通知,跳过发送" return 0 fi - api="https://api.telegram.org/bot${TG_BOT_TOKEN}/sendMessage" - response="$(curl -sS -X POST "$api" \ + primary_api="https://api.telegram.org/bot${TG_BOT_TOKEN}/sendMessage" + response="$(curl -sS -X POST "$primary_api" \ --data-urlencode "chat_id=${TG_USER_ID}" \ --data-urlencode "parse_mode=MarkdownV2" \ --data-urlencode "disable_web_page_preview=true" \ --data-urlencode "text=${message}" 2>&1 || true)" if echo "$response" | grep -q '"ok":true'; then - log "INFO" "Telegram通知发送成功" - else - log "WARN" "Telegram通知发送失败: $response" + log "INFO" "Telegram通知发送成功(official)" + return 0 fi + + log "WARN" "Telegram官方API发送失败: $response" + + if [[ -z "${TG_API_BASE_FALLBACK:-}" ]]; then + log "WARN" "未配置Telegram备用API,通知发送失败" + return 1 + fi + + fallback_api="${TG_API_BASE_FALLBACK%/}/bot${TG_BOT_TOKEN}/sendMessage" + response="$(curl -sS -X POST "$fallback_api" \ + --data-urlencode "chat_id=${TG_USER_ID}" \ + --data-urlencode "parse_mode=MarkdownV2" \ + --data-urlencode "disable_web_page_preview=true" \ + --data-urlencode "text=${message}" 2>&1 || true)" + + if echo "$response" | grep -q '"ok":true'; then + log "INFO" "Telegram通知发送成功(fallback)" + return 0 + fi + + log "WARN" "Telegram备用API发送失败: $response" + log "WARN" "Telegram通知发送失败" + return 1 } tg_read_user_excludes() {