Add Telegram fallback API support

This commit is contained in:
Codex
2026-03-17 13:07:54 +08:00
parent 83ef629623
commit 7ab26712d0
3 changed files with 31 additions and 6 deletions
+2
View File
@@ -22,6 +22,7 @@ cp exclude.user.list.example exclude.user.list
- `LABEL`:机器或业务标识 - `LABEL`:机器或业务标识
- `BACKUP_DIRS`:要备份的目录,使用多行格式,每行一个目录 - `BACKUP_DIRS`:要备份的目录,使用多行格式,每行一个目录
- `TG_BOT_TOKEN` / `TG_USER_ID`Telegram 通知配置,可留空 - `TG_BOT_TOKEN` / `TG_USER_ID`Telegram 通知配置,可留空
- `TG_API_BASE_FALLBACK`:可选,自建 Telegram API 地址;官方失败时自动回退
`BACKUP_DIRS` 示例: `BACKUP_DIRS` 示例:
@@ -104,6 +105,7 @@ cd /root/backup_OBS
- 安装脚本不会覆盖已有的 `env.conf``exclude.user.list` - 安装脚本不会覆盖已有的 `env.conf``exclude.user.list`
- `install.sh` 和后续脚本都只使用仓库根目录下的 `./obsutil` - `install.sh` 和后续脚本都只使用仓库根目录下的 `./obsutil`
- `obsutil` 安装完成后,首次仍需手动执行 `./obsutil config -interactive` - `obsutil` 安装完成后,首次仍需手动执行 `./obsutil config -interactive`
- Telegram 通知默认优先走官方 `https://api.telegram.org`,失败后才会尝试 `TG_API_BASE_FALLBACK`
如果你想手动安装或更新仓库根目录下的 `./obsutil`,可以直接执行: 如果你想手动安装或更新仓库根目录下的 `./obsutil`,可以直接执行:
+1
View File
@@ -6,6 +6,7 @@ OBS_BACKUP_DIR="backup/${LABEL}" # 备份存放目录
# Telegram 通知配置 # Telegram 通知配置
TG_BOT_TOKEN="" # 留空表示不启用 TG_BOT_TOKEN="" # 留空表示不启用
TG_USER_ID="" # 留空表示不启用 TG_USER_ID="" # 留空表示不启用
TG_API_BASE_FALLBACK="" # 可选:官方失败时使用的自建Telegram API地址
# 备份目录,使用多行格式;每行一个目录 # 备份目录,使用多行格式;每行一个目录
BACKUP_DIRS=$(cat <<'EOF' BACKUP_DIRS=$(cat <<'EOF'
+28 -6
View File
@@ -13,25 +13,47 @@ tg_code_block() {
tg_send_message() { tg_send_message() {
local message="${1-}" local message="${1-}"
local response api local response primary_api fallback_api
if [[ -z "${TG_BOT_TOKEN:-}" || -z "${TG_USER_ID:-}" ]]; then if [[ -z "${TG_BOT_TOKEN:-}" || -z "${TG_USER_ID:-}" ]]; then
log "INFO" "未配置Telegram通知,跳过发送" log "INFO" "未配置Telegram通知,跳过发送"
return 0 return 0
fi fi
api="https://api.telegram.org/bot${TG_BOT_TOKEN}/sendMessage" primary_api="https://api.telegram.org/bot${TG_BOT_TOKEN}/sendMessage"
response="$(curl -sS -X POST "$api" \ response="$(curl -sS -X POST "$primary_api" \
--data-urlencode "chat_id=${TG_USER_ID}" \ --data-urlencode "chat_id=${TG_USER_ID}" \
--data-urlencode "parse_mode=MarkdownV2" \ --data-urlencode "parse_mode=MarkdownV2" \
--data-urlencode "disable_web_page_preview=true" \ --data-urlencode "disable_web_page_preview=true" \
--data-urlencode "text=${message}" 2>&1 || true)" --data-urlencode "text=${message}" 2>&1 || true)"
if echo "$response" | grep -q '"ok":true'; then if echo "$response" | grep -q '"ok":true'; then
log "INFO" "Telegram通知发送成功" log "INFO" "Telegram通知发送成功official"
else return 0
log "WARN" "Telegram通知发送失败: $response"
fi 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() { tg_read_user_excludes() {