Автоматический мониторинг доменов на блокировку РКН через API и уведомления в Telegram: гайд для вебмастера

Обновлено 19.10.2026 | база знаний rkn-test.ru

Ручная проверка «открою сайт с телефона» ломается в первый же отпуск. Блокировка реестром или DPI приходит между релизами, часто ночью, и к утру поисковый трафик уже просел, а поддержка читает одно и то же сообщение. Вебмастеру нужен контур, который сам опрашивает домен, отличает кэш от свежей проверки и пишет в Telegram только при смене статуса. На rkn-test.ru для этого есть два уровня: публичный REST API и мониторинг в личном кабинете.

Что опрашивать и как не упереться в лимит

Публичный метод описан в документации API. Один домен - один GET. Ответ разбирается по слоям, а не по одному булеву флагу: реестр, DPI и IP могут расходиться.

curl -sS --max-time 40 \
  "https://rkn-test.ru/api/check?domain=example.com" | jq .

Ориентир по полям, которые уже документированы:

ПолеЗачем оно дежурному
statusavailable, blocked, partial или error. В алерт берётся переход, а не каждое «blocked»
checks.registry.in_registryЮридическая запись. Её снятие и появление - разные задачи
checks.dpi.blockedФильтр на российском канале, даже если реестр чистый
checks.dpi.http_code и response_sizeОтличают заглушку и обрыв тела от честного 200
checks.ip.address и checks.ip.blockedПоказывают, не уехал ли домен на чужой заблокированный адрес
cachedПовтор внутри TTL не ходит в прокси заново. Для графика это нормально

Лимит считается на IP вызывающего, кэш внутри TTL лимит не сжигает. Не ставьте cron каждую минуту на пятьдесят доменов с одного VPS: получите отказ по частоте, и алерт «error» начнёт врать. Для пачки боевых доменов правильное место - тариф мониторинга: расписание и лимиты считаются на аккаунт, а не на удачный curl с офисного IP. Публичный API оставьте для точечной проверки в скрипте деплоя и для статуса одной витрины.

Минимальный сторож на cron

Скрипт хранит прошлый status и молчит, пока он не изменился. Так Telegram не превращается в ленту одинаковых «всё ещё заблокирован».

#!/bin/bash
# /usr/local/bin/rkn-watch.sh example.com
set -euo pipefail
DOMAIN="${1:?domain}"
STATE="/var/lib/rkn-watch/${DOMAIN}.status"
mkdir -p /var/lib/rkn-watch
BODY=$(curl -sS --max-time 40 "https://rkn-test.ru/api/check?domain=${DOMAIN}")
NOW=$(echo "$BODY" | jq -r '.status // .error // "error"')
PREV=$(cat "$STATE" 2>/dev/null || echo "unknown")
echo "$NOW" > "$STATE"
if [ "$NOW" != "$PREV" ]; then
  echo "rkn-test: ${DOMAIN} ${PREV} -> ${NOW}"
fi

В crontab достаточно редкого шага. Кэш проверки всё равно сгладит частые запросы, но редкий cron бережёт и ваш лимит, и чужие глаза в чате:

15 */2 * * * /usr/local/bin/rkn-watch.sh example.com | \
  /usr/local/bin/notify-telegram.sh

notify-telegram.sh - это уже ваш бот команды: curl на api.telegram.org/bot.../sendMessage с текстом из stdin. Секрет бота живёт в файле с правами 0600, не в репозитории сайта. В сообщение кладите домен, старый статус, новый и время UTC. Ссылку на ручную перепроверку давайте на главную чекера, чтобы человек видел слои, а не только слово blocked.

Кабинет и Telegram без самописного бота

Для продакшена самописный cron легко забыть на новой виртуалке. В личном кабинете rkn-test.ru домен ставится на расписание, а уведомление уходит в Telegram, привязанный к аккаунту, и на почту. Порядок для вебмастера такой:

  1. Регистрация и вход в кабинет, раздел доменов.
  2. Добавление боевого имени, зеркала и домена, на который смотрит реклама. Зеркало проверяйте отдельно: его могут порезать раньше основного.
  3. Привязка Telegram в настройках аккаунта. Пока мессенджер не подключён, дежурный узнает о событии только из почты, которую ночью никто не читает.
  4. Выбор тарифа под число доменов. Бесплатного потолка хватает на разовую проверку, не на сетку из двадцати имён.
  5. Контрольный прогон: временно смотрите, что тестовый домен даёт понятный статус в истории, и только потом замолкаете.

Кабинет не заменяет разбор причин. Алерт «DPI» и алерт «реестр» ведут в разные статьи: ТСПУ и SNI и реестр и основания 149-ФЗ. Алерт «домен перестал резолвиться» при живом хостинге чаще связан с делегированием и идентификацией по 569-ФЗ, чем с Роскомнадзором.

Куда ещё приземлить ту же проверку

Статус на чужом лендинге и в подвале своего сайта закрывает JS-виджет или iframe. Он не будит вас ночью, зато пользователь видит, что проверка вообще существует, и поддержка меньше спорит «у меня всё открыто». Виджет, cron и кабинет не мешают друг другу: виджет для людей, API для деплоя, тариф для дежурства.

Один практический запрет. Не проверяйте с боевого веб-сервера сотню чужих доменов «заодно для клиентов» публичным методом: лимит по IP общий, и в момент реальной аварии ваш же сторож получит отказ. Вынесите опрос на отдельный маленький хост или перейдите на мониторинг аккаунта. И не шлите уведомление на каждый cached: true. Шлите на смену status, registry и dpi. Всё остальное - шум, из-за которого через неделю канал замьютят, и настоящий переезд на зеркало начнётся слишком поздно. Как делать этот переезд, не обнулив Яндекс и Google, разобрано в материале про снятие блокировки и зеркало.

Вопросы и ответы

Можно ли дергать API каждую минуту?

Лимит считается на IP вызывающего. Кэш внутри TTL повтор не сжигает, но плотный cron по десяткам доменов получит отказ. Сетку доменов ставьте на тариф мониторинга в кабинете.

Какое поле отправлять в Telegram?

Переход status, а вместе с ним registry и dpi. Повторный ответ с cached=true слать не нужно: канал замьютят, и реальный инцидент пропустят.

Чем кабинет отличается от своего curl?

Кабинет держит расписание и пишет в Telegram, привязанный к аккаунту. Curl удобен в деплое и для одной точечной проверки по документации API.

Проверить свой домен на блокировку РКН и DPI прямо сейчас

Реестр Роскомнадзора, фильтрация по российскому каналу и статус IP в одной проверке. Для постоянного контроля подключите мониторинг, API или виджет.

Дальше в базе знаний