feat(ops): запасной канал алертов на случай недоступного Telegram #3070

Merged
lekss361 merged 1 commit from feat/alert-fallback-smtp into main 2026-08-23 23:55:41 +00:00

1 commit

Author SHA1 Message Date
bot-backend
568d82919d feat(ops): запасной канал алертов на случай недоступного Telegram
All checks were successful
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / changes (pull_request) Successful in 7s
CI / changes (pull_request) Successful in 9s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
До этого единственным каналом был Telegram, и при его недоступности
notify() ограничивался `|| log "WARN"`. То есть алерт ТЕРЯЛСЯ: оставалась
строка в логе, который никто не читает, пока не случится беда. Канал,
которым мы узнаём о проблемах, сам является проблемой — поломка скрывает
сама себя.

Это не гипотеза. Замер с нового хоста (#3059, 23.08): из семи публикуемых
адресов api.telegram.org с Poincare отвечает РОВНО ОДИН (149.154.167.220),
скан всей подсети 149.154.167.0/24 не нашёл ни одного другого. Через прокси
Telegram не проходит вовсе — узлы российские. После переезда весь
Telegram-канал висит на одном адресе без запасного, и через него же идут
алерты бэкапов и uptime-нотификации.

Почта выбрана потому, что проверена: с Poincare smtp.beget.com:465 OPEN
(587 закрыт). Транспорт — тот же curl, который уже жёсткая зависимость
lib-backup.sh; новых пакетов не нужно.

Правка ложится ровно в ту точку, которую сам файл объявляет расширением:
«to wire a different channel later, edit ONLY this function».

Поведение:
  telegram ok            -> как раньше
  telegram упал          -> пробуем почту
  telegram не настроен   -> пробуем почту
  почта не настроена     -> ГРОМКАЯ строка «АЛЕРТ НЕ ДОСТАВЛЕН»
  оба канала упали       -> ГРОМКАЯ строка с кодом возврата curl

Ничего не настроено -> ведёт себя ровно как до правки. Кредов в
репозитории нет, читаются из того же env-файла, что и Telegram.

Проверено (bash -n + прогон всех веток):
  - почта не настроена  -> «АЛЕРТ НЕ ДОСТАВЛЕН (...не настроена)», rc=1
  - SMTP недоступен     -> «НИ ОДНИМ КАНАЛОМ (... curl smtp rc=7)», rc=1
  - notify() без telegram сам зовёт запасной канал
  - пароль в выводе: 0 вхождений (специально проверил grep'ом)

НЕ проверена успешная доставка: для неё нужны настоящие SMTP-креды, а это
часть владельца. Три попытки поднять фейковый SMTP-сервер положительный
контроль не дали, выдумывать результат не стал — см. test plan в PR.

Refs #3059, #3057
2026-08-24 02:53:22 +03:00