# Мониторинг сайтов и сервисов

**Задача:** периодически проверять список адресов, фиксировать результаты и сообщать только об изменении состояния.  
**Сложность:** средняя.  
**Схема:** Schedule Trigger → список URL → HTTP Request → повтор при ошибке → классификация → PostgreSQL → IF → Telegram.  
**Узлы:** Schedule Trigger, Code, HTTP Request, IF, PostgreSQL, Telegram.  
**Зависимости:** n8n 2.42.6, PostgreSQL, Telegram-бот и чат.  
**Файлы:** `monitoring.json`, `monitoring.sql`.

## Установка
1. Создайте отдельную тестовую базу PostgreSQL и выполните `monitoring.sql` с правами на создание таблиц и функции; затем ограничьте права рабочей учётной записи необходимыми операциями.
2. Импортируйте JSON. В узле «Адреса для проверки» укажите ваши URL; используйте только разрешённые ресурсы, не помещайте токены и персональные данные в адреса.
3. В узле PostgreSQL выберите собственные credentials; в Telegram подключите собственного бота и замените `REPLACE_WITH_YOUR_CHAT_ID`.
4. В Schedule Trigger при необходимости измените интервал и настройте часовой пояс workflow. Проверьте работу на тестовом адресе, затем активируйте.

## Что происходит
Первая неуспешная проверка сразу повторяется один раз. HTTP-коды от 200 до 399 считаются успешными; ошибка сети записывается с кодом 0. На каждый адрес сохраняются последнее состояние и журнал `ms_monitor_log`. Первое успешное состояние не вызывает уведомление; переход в ошибку и восстановление вызывают по одному уведомлению. Блокировка строки PostgreSQL предотвращает повторный сигнал при одновременных проверках.

## Тест и ожидаемый результат
Укажите два принадлежащих вам тестовых адреса с ответами HTTP 200 и HTTP 503. Первый записывается как доступный, второй — как недоступный и вызывает один сигнал. Повторный запуск при тех же статусах дополнительных сигналов не создаёт; при изменении 503 на 200 отправляется сигнал восстановления.

## Ограничения
Вторая попытка выполняется сразу, без задержки; HTTP-ошибки трактуются как недоступность. Если Telegram недоступен после фиксации перехода в БД, этот сигнал не ставится в повторную очередь: нужна отдельная доставка через outbox, если требуется гарантированная доставка. Настройте очистку журнала и ограничение доступа к списку адресов. В тесте применялись фиктивный HTTP-сервис и тестовая БД; Telegram заменён заглушкой.

## Совместимость и проверка
Проверка: 10 ноября 2026 г.; n8n 2.42.6, узлы из стандартной поставки. Проверены импорт JSON и выполнение в изолированной тестовой среде с фиктивными данными. Никакие реальные API и чаты при проверке не использовались. В других версиях проверьте соответствующие версии узлов. Импортируйте сценарий выключенным; перед запуском настройте доступы и выполните собственный тест.

При повторном импорте через CLI совпадающий ID может перезаписать существующий workflow: для новой копии измените или удалите ID в копии файла перед импортом.

Учётные данные в файлах не содержатся. Ограничивайте доступ к workflow, результатам выполнения и журналам; в настройках n8n задайте хранение и удаление данных в соответствии с вашими требованиями.
