Как я за вечер сделал бота, который ловит 404 в рекламе

Ошибаются все. Специалисты, клиенты, подрядчики. Страницы удаляют, адреса меняют, UTM-метки прописывают криво. Это неизбежно. Вопрос не в том, как исключить ошибки (они всегда будут) — а в том, как быстро их находить. Чтоб ущерб был минимальным.
У нас в агентстве типичная картина: у клиента 15–20 кампаний в Директе. В них — 300 объявлений. Каждое ведёт на конкретный URL. Кто-то на стороне клиента удалил страницу, перенёс раздел, поменял адрес, ничего нам не сказал — а реклама продолжает крутиться. Деньги льются на 404.
Чтоб это проверить руками — нужно зайти в каждую кампанию, пройтись по объявлениям, открыть каждую ссылку. На одного клиента — час. А клиентов много. И делать это надо регулярно.
Специалистам некогда. Они занимаются оптимизацией, аналитикой, стратегией — а не ручным обходом ссылок. Эта задача всегда в конце списка. Пока кто-нибудь случайно не заметит, что бюджет льётся в пустоту.
Я решил это исправить и автоматизировать.
Сначала описать, потом сделать
Я не начал с кода. Я сел описывать задачу — PRD. Что бот должен делать, на какие сообщения реагировать, какие есть ограничения у API Директа, как защитить данные клиентов друг от друга.
PRD писал не один. Я накидывал тезисы и структуру, а Claude Code помогал формировать. Я объяснял логику — «бот должен проверять URL всех активных объявлений, группировать ошибки по кампаниям, показывать только те, которые прямо сейчас крутятся». Claude Code задавал уточняющие вопросы, предлагал формат ответов, продумывал edge-кейсы (неочевидные сценарии).
Получился документ на 5 страниц. Архитектура, формат сообщений, безопасность. Всё — до первой строчки кода.
Это ключевой момент. Я не программист. Я — постановщик задачи. Чем точнее опишешь ЧТО нужно, тем лучше AI справится с реализацией.
Claude Code пишет код
Скормил готовый PRD. Claude Code прочитал документ, изучил уже существующие модули (у меня был написан API-клиент к Директу раньше) — и за один подход написал 11 новых файлов. Точка входа бота, URL-чекер, обработчики Telegram-сообщений, авторизация, rate limiter.
Я ревьюил, тестировал, давал обратную связь. Итерировали. Весь код написал он сам, а я только говорит что работает не так.
Первый деплой — тишина
Заливаю на сервер. Запускаю. Пишу боту в тестовом чате.
Ноль реакции. Тишина.
Говорю Claude Code — «бот молчит, разберись». Он добавил дебаг-логирование в middleware, перезапустил — и в логах сразу видно: бот получает сообщения, но моментально их отбрасывает. Обработка — 0 миллисекунд. Словно я ничего и не писал.
Claude Code сравнивает chat_id из конфига с тем, что приходит от Telegram — и находит проблему. Telegram для супергрупп добавляет префикс -100 к ID. В конфиге был ID без этого префикса. Бот получал сообщение, сравнивал — не совпадает — молча игнорировал.
Починили. Ожил.
Второй баг — /check не работает
Бот заговорил. В одном чате отвечает, в другом — команда /check уходит в пустоту.
Копаемся. Оказалось — внутренний обработчик для нашего командного чата перехватывал все текстовые сообщения. Фильтр был слишком широкий — ловил вообще всё, включая /check. Получал, не понимал что с ним делать, отбрасывал.
Поменяли порядок обработчиков. Заработало.
Два бага за вечер. Оба — не в логике, а в инфраструктуре. Так всегда бывает при первом деплое. Это нормально. Поэтому и надо тестировать.
66 URL за 60 секунд
Первая полная проверка: 12 обычных кампаний, 18 «Мастер кампаний», 66 уникальных URL. Все — ОК.
Специалист тратит 10 секунд. Тегает бота в чате, получает отчёт. Красный — объявление крутится и ведёт на 404, деньги сливаются прямо сейчас. Жёлтый — остановлено, но URL битый (включат — будет проблема). Серый — архив, отдает информацию что где-то есть остановленное или архивное объявление с битой ссылкой.
Без этой разбивки бот паниковал бы на каждом архивном объявлении. А их бывает сотни.
Неожиданная находка
На одном из клиентов бот нашёл интересную штуку. Базовый URL страницы — работает. Та же страница с UTM-метками — 404.
То есть site.com/page/ — ОК. А site.com/page/?utm_source=yandex — ошибка. Рекламная ссылка ведёт на 404, а если проверять руками (просто открыть страницу) — всё выглядит нормально.
Баг на стороне сайта. Без бота его бы никто не поймал — потому что никто не проверяет ссылки в том виде, в котором они реально крутятся в рекламе.
Реклама доходила, но одни ошибки приводят к другим ошибкам, поэтому передали на клиента, чтоб исключить будущей катастрофы.
Что я вынес
Раньше, чтоб решить такую задачу — нужно было либо хорошо знать программирование, либо нанять разработчика. Протестировать гипотезу → недели. Сделать инструмент → недели.
Я потратил вечер. Написал PRD вместе с Claude Code, получил рабочий код, задеплоил на сервер, починил два бага — и у команды появился инструмент, который работает 24/7.
Главное — не умение писать код. Главное — знать ЧТО нужно. Чётко описать задачу, понимать контекст, видеть ограничения. PRD важнее навыка программирования.
Мы сталкиваемся с такими болями каждый день. Рутинные штуки, про которые все знают, но никто не решает — «дорого», «некогда», «не до этого». Порог входа изменился. И это меняет правила.
Понравилось? Есть ещё
Подпишитесь — буду присылать новые статьи на почту. Отписаться можно в один клик.




