#!/bin/bash # Единая точка отправки уведомлений в Telegram (шлюз). # Вызывают скрипты бэкапов на хосте Proxmox. Позже тот же шлюз можно вызывать с VM 200 / VPS по SSH. # Использование: notify-telegram.sh "Заголовок" "Текст сообщения" # Секреты: из Vaultwarden (токен — пароль объекта HOME_BOT_TOKEN, chat_id — поле TELEGRAM_SELF_CHAT_ID объекта RESTIC). # Файл с мастер-паролем: /root/.bw-master (chmod 600). Если его нет — тихо выходим с 0, не ломаем вызывающий скрипт. set -e TITLE="${1:-Notification}" BODY="${2:-}" # Креды из Vaultwarden или из старого конфига (fallback) TELEGRAM_BOT_TOKEN="" TELEGRAM_CHAT_ID="" BW_MASTER_PASSWORD_FILE="${BW_MASTER_PASSWORD_FILE:-/root/.bw-master}" if [ -f "$BW_MASTER_PASSWORD_FILE" ] && command -v bw >/dev/null 2>&1 && command -v jq >/dev/null 2>&1; then BW_SESSION=$(bw unlock --passwordfile "$BW_MASTER_PASSWORD_FILE" --raw 2>/dev/null) || true if [ -n "$BW_SESSION" ]; then export BW_SESSION TELEGRAM_BOT_TOKEN=$(bw get password "HOME_BOT_TOKEN" 2>/dev/null) || true RESTIC_ITEM=$(bw get item "RESTIC" 2>/dev/null) || true if [ -n "$RESTIC_ITEM" ]; then TELEGRAM_CHAT_ID=$(echo "$RESTIC_ITEM" | jq -r '.fields[] | select(.name=="TELEGRAM_SELF_CHAT_ID") | .value' 2>/dev/null) || true fi fi fi if [ -z "$TELEGRAM_BOT_TOKEN" ] || [ -z "$TELEGRAM_CHAT_ID" ]; then ENV_FILE="${TELEGRAM_NOTIFY_ENV:-/root/.telegram-notify.env}" if [ -f "$ENV_FILE" ]; then # shellcheck source=/dev/null source "$ENV_FILE" fi fi if [ -z "$TELEGRAM_BOT_TOKEN" ] || [ -z "$TELEGRAM_CHAT_ID" ]; then exit 0 fi if [ -z "$BODY" ]; then TEXT="$TITLE" else TEXT="$TITLE $BODY" fi URL="https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" if [ -n "${TELEGRAM_DEBUG:-}" ]; then curl -s -w "\nHTTP_CODE:%{http_code}\n" -X POST "$URL" \ --data-urlencode "chat_id=$TELEGRAM_CHAT_ID" \ --data-urlencode "text=$TEXT" \ -d "disable_web_page_preview=true" \ --max-time 10 else curl -sf -X POST "$URL" \ --data-urlencode "chat_id=$TELEGRAM_CHAT_ID" \ --data-urlencode "text=$TEXT" \ -d "disable_web_page_preview=true" \ --max-time 10 \ >/dev/null 2>&1 || true fi exit 0