Мониторинг изменений на сайте полезен не тогда, когда система сообщает о любом отличии в HTML, а когда сотрудник получает понятное уведомление о важном изменении. Для этого нужно заранее выбрать проверяемый блок, сохранить исходную версию, отделить динамический шум и определить, какие ошибки требуют участия человека.
Результат процесса можно сформулировать так: уведомление содержит существенное изменение конкретной страницы. В нём видны прежняя и новая формулировки, время получения версий и ссылка на diff. Ошибка загрузки уходит в отдельный канал и не выдаётся за изменение содержания.
Какую задачу решает этот процесс
Представим три рабочие ситуации.
Специалист по закупкам следит за публичной страницей поставщика, где опубликованы условия отгрузки. Ему важно узнать, что поставщик изменил минимальный срок или порядок доставки, но не нужно получать тревогу при каждом обновлении баннера.
Специалист по комплаенсу процессов проверяет страницу с публичным регламентом. Ему нужна сохранённая версия конкретного раздела и понятное различие между редакциями. Само уведомление не определяет юридическое значение изменения: это делает ответственный специалист заказчика.
Аналитик наблюдает за методикой расчёта показателя. Его задача — увидеть новую формулировку в выбранном блоке, а не сравнивать весь HTML вместе с меню, датой, рекомендациями и счётчиками.
Во всех трёх ситуациях процесс работает с заранее известным URL. Он получает snapshot, выделяет нужную область, сравнивает её с baseline и сообщает о подтверждённом содержательном различии. Это отслеживание изменений на сайте, а не сбор списка компаний и не мониторинг товарной цены.
Граница особенно важна. Система может показать, что текст условия изменился, но не должна самостоятельно решать, выгодно ли новое условие, соответствует ли оно договору или требует ли юридической реакции. Такие решения остаются у владельца процесса.
Какие данные и правила подготовить
До выбора инструмента составьте карточку наблюдения. Если не зафиксировать входные данные, один сотрудник будет считать баннер шумом, другой — важным событием, а система не сможет воспроизводимо выбрать нужный текст.
Обязательные данные
| Поле | Что зафиксировать | Источник | Ответственный | Статус |
|---|---|---|---|---|
| URL | Один разрешённый адрес наблюдаемой страницы | Владелец процесса или утверждённый перечень источников | Владелец процесса | Обязательное |
| Область страницы | selector либо однозначное правило выбора блока | Разметка публичной страницы и описание нужного условия | Технический специалист вместе с владельцем процесса | Обязательное |
| Период проверки | Когда получать новую версию и допустима ли задержка | Рабочая потребность и правила источника | Владелец процесса | Обязательное |
| Baseline | Принятая исходная версия выбранного блока и дата её получения | Первый успешно полученный снимок после проверки человеком | Ответственный за запуск | Обязательное |
| Правило значимости | Какой diff нужно подтвердить и кому показать | Регламент процесса | Владелец процесса | Обязательное |
| Адресат | Канал, группа или роль, которая получает результат | Матрица ответственности заказчика | Владелец процесса | Обязательное |
Если таблица не помещается, прокрутите её вправо. С клавиатуры используйте стрелки.
Условные данные
К условным относятся правила рендеринга JavaScript, допустимые перенаправления, авторизованный доступ, группировка нескольких изменений и отдельный канал технических ошибок. Они нужны не для каждой публичной страницы. Их добавляют только после проверки источника, прав доступа и выбранного инструмента.
Неизвестные данные
Неизвестное нельзя заполнять догадкой. Например, если непонятно, сохраняет ли страница прежний selector после обновления дизайна, так и запишите: «неизвестно; проверить на контрольном снимке и предусмотреть сигнал “блок не найден”». Если не определён адресат, мониторинг ещё не готов к запуску: даже верный diff останется без владельца.
Короткий заполненный образец
Ниже все адреса, роли, интервалы и значения синтетические. Это образец карточки, а не данные клиента и не результат внедрения Switch On AI.
| Поле | Условное значение | Источник | Ответственный | Статус |
|---|---|---|---|---|
| URL | https://example.test/delivery | Учебный перечень разрешённых страниц | Условный владелец закупок | Обязательное |
| Selector | main .delivery-terms | Осмотр учебной разметки | Условный технический специалист | Обязательное |
| Период | Один раз в 30 условных минут | Учебное требование к задержке | Условный владелец закупок | Обязательное |
| Baseline | «Доставка — до 5 рабочих дней», получено 18 октября 2026 года в 09:00 UTC | Первый условный успешный snapshot | Условный оператор запуска | Обязательное |
| Исключение шума | Блок .live-counter находится вне selector | Учебное правило сравнения | Условный владелец закупок | Обязательное |
| Адресат | Условная группа «Контроль условий» | Учебная матрица ответственности | Условный владелец процесса | Обязательное |
| JavaScript-рендеринг | Неизвестно, нужен ли для реальной страницы | Проверяется по выбранной странице и инструменту | Технический специалист | Неизвестное |
| Группировка | Объединять подтверждённые изменения одного блока в одно сообщение | Учебное правило уведомления | Владелец процесса | Условное |
Если таблица не помещается, прокрутите её вправо. С клавиатуры используйте стрелки.
Такой образец помогает обсуждать процесс, но не подтверждает доступность конкретного сайта, selector или режима рендеринга.
Как выбрать значимое изменение страницы
Страница обычно содержит несколько типов данных:
- основной контент — условие, регламент или описание, ради которого настроен мониторинг;
- дату публикации или обновления;
- баннер, который может меняться независимо от основного текста;
- динамический счётчик, случайное число, остаток времени или другой часто обновляемый элемент.
Сравнение всего HTML смешивает эти данные. Система может увидеть новую служебную метку, перестановку атрибутов или другое значение счётчика и сообщить об изменении, хотя нужное условие осталось прежним.
Поэтому единицей сравнения должен быть выбранный блок. Его можно задать CSS- или XPath-selector либо другим воспроизводимым правилом, которое поддерживает выбранный инструмент. На публичной странице такое правило должно возвращать именно нужный текст. Если selector возвращает несколько разных областей или перестал находить элемент, это сигнал настройки, а не содержательный diff.
Правило значимости в этом руководстве простое: значимое изменение — это подтверждённый diff нормализованного текста выбранного блока. Мы не вводим универсальный процент или число изменённых символов: без данных конкретного процесса такой порог был бы произвольным.
Например, изменение «Доставка — до 5 рабочих дней» на «Доставка — до 7 рабочих дней» относится к выбранному условию. Переход случайного счётчика с условных 417 на 932 не относится к нему, если счётчик расположен вне selector. Новая дата рядом с заголовком тоже не заменяет проверку самого текста.
Используйте только разрешённый доступ и учитывайте правила источника. Публичная доступность страницы сама по себе не даёт оснований обходить ограничения, защиту или требования к использованию данных. Закрытые кабинеты и персональные данные требуют отдельного основания, правил доступа и согласованной защиты.
Как сохранять снимок и сравнивать версии
Для каждой успешной проверки сохраните как минимум:
- исходный URL;
- дату и время получения;
- HTTP-результат;
- текст выбранного блока до нормализации;
- нормализованный текст;
- ссылку или идентификатор связанного snapshot;
- результат сравнения с baseline.
Нормализация должна быть предсказуемой. В базовом варианте она приводит повторяющиеся пробелы, табуляцию и переносы строк к единому виду. Это позволяет не считать новым содержанием различия только в пробельных символах. Нормализация не должна удалять числа, отрицания или целые предложения: иначе она может скрыть существенную правку.
После нормализации система строит текстовый diff. В нём должны быть различимы удалённая и добавленная формулировки. Если изменилось несколько частей выбранного блока, их лучше показать вместе с контекстом, а не отправлять вырванные слова.
Baseline меняют только после принятого правила. Если каждую новую версию автоматически назначать исходной до подтверждения, кратковременная ошибка или промежуточная публикация может исказить дальнейшее сравнение.
HTTP-ошибка, CAPTCHA, страница входа и отсутствие выбранного блока не являются новой редакцией текста:
- HTTP 404 или 503 означает, что содержимое не получено ожидаемым способом;
- CAPTCHA означает, что вместо целевого блока пришла защитная страница;
- форма входа вместо публичного содержания означает изменение доступа или маршрута;
- пустой результат selector может означать новую разметку, ошибку загрузки или реальное удаление блока.
Во всех этих случаях процесс сохраняет технический результат и создаёт сигнал ошибки. Он не вычисляет содержательный diff с последним корректным baseline и не сообщает, что текст удалён, пока человек или согласованная повторная проверка не установит причину.
Как уведомлять без потока ложных тревог
Первое обнаруженное различие ещё не обязательно отправлять как подтверждённое изменение. Страница могла обновляться по частям, сервер мог вернуть промежуточную версию, а динамический компонент — временно попасть в выбранный блок.
Рабочая последовательность выглядит так:
- Получить новый snapshot и построить diff относительно baseline.
- Если diff относится к выбранному блоку, назначить повторную проверку.
- Получить второй успешный снимок.
- Убедиться, что значимое различие сохранилось.
- Отправить одно уведомление и приложить ссылку на diff.
Повторная проверка не гарантирует истинность опубликованного условия, но отделяет устойчивое изменение страницы от части кратковременных состояний. Период подтверждения задаёт владелец процесса: универсального интервала нет.
Если за один цикл изменились несколько фрагментов одного выбранного блока, их можно сгруппировать в одно сообщение. Уведомление должно отвечать на четыре вопроса:
- какая страница проверялась;
- какой блок изменился;
- что было и что стало;
- когда получены и подтверждены версии.
Технические ошибки лучше направлять отдельно. Сообщение «страница вернула 503» требует другой реакции, чем «условие доставки изменилось». Смешивание этих событий заставляет сотрудника открывать каждую тревогу и повышает риск пропустить важный diff.
Не включайте персональные данные и содержимое закрытого кабинета без отдельного основания. Если такой доступ действительно нужен, до разработки согласуйте права, способ хранения снимков, круг получателей и срок хранения. Обычное наблюдение за публичным условием не должно незаметно превращаться в сбор закрытых данных.
Учебный пример: путь от входных данных до результата
Ниже приведён полностью синтетический пример. Все URL, даты, время, числа, названия ролей и тексты условий вымышлены для объяснения логики. Это не клиентский кейс, не файл компании, не живой тест и не измеренный результат Switch On AI.
Исходные данные:
- условный URL —
https://example.test/delivery; - selector —
main .delivery-terms; - baseline — «Доставка — до 5 рабочих дней»;
- правило шума — случайный
.live-counterрасположен вне selector; - правило значимости — подтверждённый diff нормализованного текста выбранного блока;
- адресат — условная группа «Контроль условий».
На учебной странице условие доставки изменилось на «Доставка — до 7 рабочих дней». Одновременно случайный счётчик сменил условное значение с 417 на 932. Поскольку selector выбирает только .delivery-terms, счётчик не попадает в сравнение.
| Проверка | HTTP | Выбранный блок | Diff | Подтверждение | Уведомление |
|---|---|---|---|---|---|
| Условный baseline, 09:00 | 200 | «Доставка — до 5 рабочих дней» | Нет: это исходная версия | Не требуется | Нет |
| Первое обнаружение, 09:30 | 200 | «Доставка — до 7 рабочих дней» | до 5 → до 7; счётчик 417 → 932 вне selector | Ожидает повторного снимка | Нет |
| Повторный снимок, 09:35 | 200 | «Доставка — до 7 рабочих дней» | Тот же diff условия доставки | Подтверждено | Одно условное уведомление со ссылкой на diff |
| Следующая проверка, 10:00 | 503 | Блок не получен | Содержательный diff не вычисляется | Изменение не подтверждается | Уведомления об изменении нет; создан условный сигнал ошибки |
Если таблица не помещается, прокрутите её вправо. С клавиатуры используйте стрелки.
Промежуточное решение состоит из двух частей. Во-первых, случайный счётчик исключён структурно: он находится за пределами selector, а не удаляется после сравнения неизвестным эвристическим правилом. Во-вторых, новая формулировка становится событием только после второго успешного снимка с тем же diff.
Результат учебного пути — одно уведомление о переходе от пяти к семи условным рабочим дням. Проверка с HTTP 503 не создаёт diff, не заменяет baseline и не превращается в сообщение «текст удалён».

Как проверить результат перед запуском
Проверка должна охватывать нормальный путь и исключения. До запуска подготовьте контролируемые входные примеры и заранее запишите ожидаемый результат. После прогона сравните его с фактическим, не ограничиваясь тем, что уведомление «выглядит правильно».
| Ситуация | Ожидаемый результат | Сигнал ошибки | Действие человека |
|---|---|---|---|
| Подтверждённое изменение выбранного блока | Один diff и одно уведомление после повторного успешного снимка | Diff потерян, задвоен или отправлен до подтверждения | Проверить снимки, правило подтверждения и адресата |
| Случайный счётчик вне selector | Счётчик не влияет на сравнение | В diff появляется значение счётчика | Исправить область выбора и повторить проверку на сохранённых снимках |
| HTTP 404 или 503 | Техническая ошибка сохранена отдельно; baseline не изменён | Система сообщает об удалении текста или строит содержательный diff | Проверить доступность, URL и правила повторной попытки |
| CAPTCHA | Защитная страница распознана как сбой проверки | Текст CAPTCHA сравнивается с baseline | Остановить содержательное сравнение и проверить допустимый способ доступа |
| Страница входа вместо контента | Содержательное изменение не создаётся | В diff попадают поля авторизации | Проверить маршрут, сессию, права и основание доступа |
| Selector не нашёл блок | Создан сигнал настройки; прежний baseline сохранён | Пустой блок принят за удаление | Проверить разметку страницы и обновить selector после ручной оценки |
Если таблица не помещается, прокрутите её вправо. С клавиатуры используйте стрелки.
Отдельно проверьте границу шума. Для каждого исключения должно быть понятно, почему элемент не влияет на результат: он находится вне selector, удаляется безопасной нормализацией пробелов или обрабатывается как отдельное техническое состояние. Формулировка «система сама поймёт» не задаёт проверяемого правила.
Исходные снимки нужно сохранить так, чтобы ответственный мог восстановить цепочку baseline → первое различие → подтверждение → уведомление. Если остаётся только итоговое сообщение, нельзя проверить, действительно ли новая формулировка присутствовала в обеих версиях.
Проверка 404 или 503 не доказывает удаление страницы либо блока. Даже после нескольких ошибок решение о смене статуса должен принимать человек по согласованному правилу. Аналогично новая цена на странице конкурента не должна становиться второй темой процесса: здесь проверяется изменение конкретного условия, а не строится система мониторинга товарных цен.
Что согласовать для внедрения
Готовый инструмент подходит, если он умеет получать нужную страницу, выбирать целевой элемент, хранить версии, показывать diff и отправлять уведомление в доступный канал. Возможности JavaScript-рендеринга, авторизации, фильтров, сроков хранения, тарифов и конкретных каналов нужно сверять для выбранного продукта и условий доступа. Наличие функции на странице поставщика не доказывает совместимость с вашей системой.
Собственная интеграция нужна, когда результат требуется связать с внутренним маршрутом: назначить владельца, разделить содержательные и технические события, применить согласованное подтверждение или передать diff в рабочую систему. Такая интеграция не отменяет правил источника и контроля человека.
Для этой операции ИИ нужен не всегда. Фиксированное сравнение выбранного текста часто можно выполнить обычной интеграцией. ИИ-помощник может рассматриваться, если после технического diff требуется подготовить понятную сводку по согласованным правилам. Бот подходит, если сотруднику нужен диалоговый канал для просмотра события или передачи его человеку. Эти форматы нельзя считать взаимозаменяемыми до разбора процесса.
Switch On AI может разработать ИИ-помощника, бота или интеграцию для операции «уведомление содержит существенное изменение конкретной страницы» после проверки данных, доступных API и прав. Возможные форматы работы собраны в разделе услуг. Это не обещание совместимости с конкретным сайтом или инструментом: режим доступа, тариф, ограничения и способ уведомления проверяются отдельно.
Правила бухгалтерского, юридического, кадрового и отраслевого учёта задаёт и проверяет специалист заказчика. Система показывает сохранённые версии и diff, но не заменяет его решение о значении изменения.
Практический следующий шаг — подготовить список страниц и для каждой назвать критерий важного изменения, шум, адресата и реакцию на ошибку. Затем можно обсудить одну операцию и согласовать границы прототипа. Прототип проверяет согласованную часть сценария и не равен полному внедрению; сроки, эффект и состав дальнейших работ определяются только после разбора задачи.
Вопросы по этой задаче
Как убрать ложные уведомления?
Выберите конкретный блок через selector, исключите динамические элементы, нормализуйте только безопасные различия вроде пробелов и подтверждайте содержательный diff повторным успешным снимком. HTTP-ошибки, CAPTCHA, страницу входа и отсутствие блока направляйте в отдельную ветку ошибок.
Можно ли проверять страницу с JavaScript?
Это зависит от выбранного инструмента, режима рендеринга, доступов и правил источника. До внедрения нужно проверить, появляется ли целевой блок после выполнения JavaScript, стабилен ли selector и разрешён ли такой способ доступа. Совместимость, тариф и необходимые права согласуются отдельно.
Чем ошибка загрузки отличается от изменения?
При изменении система успешно получает выбранный блок и строит diff относительно сохранённого baseline. При HTTP 404/503, CAPTCHA, странице входа или отсутствии блока ожидаемое содержание не получено, поэтому содержательный diff не вычисляется, baseline не заменяется, а ответственному отправляется сигнал ошибки.
