Обновлено: июнь 2026. Telegram-бот падает чаще всего по одним и тем же причинам. Старый webhook блокирует polling. FSM-состояние зависает в памяти. Supabase отваливается по таймауту. Токен бота приехал из BotFather с невидимым пробелом. Разберем деся…
10+ лет в маркетинге, 300+ клиентских проектов: сайты, реклама, боты. Создатель GoBanana (228K+ пользователей, 11.6 млн ₽ выручки) и VibeCoderz. Делаю AI-продукты сам через Claude Code, Cursor, Windsurf и консультирую тех, кто хочет так же.
Об авторе →Claude Code: новый CLI-агент от Anthropic
Anthropic выпустила Claude Code — терминальный AI-агент для разработчиков. Инструмент работает прямо в командной строке и умеет писать, редактировать и запускать код.
Zcode AI: Полный гид по визуальному интерфейсу для Claude Code и AI-агентов
Узнайте, как использовать Zcode для управления Claude Code, Gemini и Codex в едином GUI. Настройка провайдеров, MCP-серверов и визуальный вайбкодинг.
YouTube-канал с монетизацией из любой точки мира: Пошаговый гайд 2026
Инструкция по созданию YouTube-канала: обход блокировок SMS, настройка расширенных функций через виртуальные номера и правила безопасности для монетизации.
Windsurf Code Maps: Как глубоко понимать архитектуру проекта перед написанием кода
Полный гайд по Windsurf Code Maps, модели Sway 1.5 и Sway Grep. Узнайте, как визуализировать архитектуру кода и ускорить разработку в 13 раз.
Vk Fast Cash Strategy
Аудитория ВКонтакте — это те же люди, что и в Instagram, но 'социальный контракт' площадки другой. Если Instagram — это 'дорогой ресторан' с демонстрацией успеха, то VK — это 'душевная шашлычная'. Здесь не работает глянцевый 'успешный успех
Обновлено: июнь 2026. Telegram-бот падает чаще всего по одним и тем же причинам. Старый webhook блокирует polling. FSM-состояние зависает в памяти. Supabase отваливается по таймауту. Токен бота приехал из BotFather с невидимым пробелом. Разберем десять багов поштучно. Под каждым идет симптом, корень проблемы и готовый дебаг-промпт для Windsurf, который чинит за минуты вместо часов.
TL;DR. Десять багов покрывают 90% случаев, когда телеграм бот для бизнеса перестает отвечать. Пять из них связаны с инфраструктурой (webhook, polling, ngrok, Supabase, токен), еще пять с кодом (FSM, magic filters, error 500, утечки памяти, состояния). Под каждый дан промпт для Windsurf, который локализует баг и предлагает фикс.
Из десяти самых частых обращений за консультацией восемь связаны с конфликтом polling и webhook, FSM-памятью и токеном. Остальные два касаются Supabase и magic filters.
Если разобрать чужой код после жалобы «не работает», статистика складывается одинаково. Конфликт polling и webhook ловят почти все, кто переключал режимы. FSM-зависание встречается, когда стораджем оставили дефолтный MemoryStorage. Невидимый пробел в токене — болезнь начинающих, кто копирует токен из BotFather через буфер.
| # | Баг | Симптом | Где корень | Среднее время на фикс |
|---|---|---|---|---|
| 1 | Бот не отвечает после рестарта | /start висит, ответов нет | Старый webhook не сброшен | 5 минут |
| 2 | FSM-состояние зависает | Юзер залип на шаге, /start не помогает | MemoryStorage + ребут | 20 минут |
| 3 | Webhook не регистрируется | setWebhook возвращает false | HTTPS-сертификат или secret | 15 минут |
| 4 | Polling vs webhook | Conflict: terminated by other getUpdates | Параллельные процессы | 10 минут |
| 5 | Supabase connection timeout | Подвисает каждые 5-10 минут | Pool overflow | 30 минут |
| 6 | Невидимый пробел в токене | 401 Unauthorized | Копирование из BotFather | 2 минуты |
| 7 | Magic filters не срабатывают | Хендлер игнорирует апдейт | Неверный тип filter | 15 минут |
| 8 | Ngrok ломает webhook | Через 30 минут тишина | Туннель перевыпустился | 5 минут |
| 9 | Апдейты пропадают при 500 | Сообщения приходят с лагом | Очередь retry в Telegram | подождать |
| 10 | Утечка памяти за сутки | Бот падает по OOM | Несбрасываемые сессии | 1 час |

Чаще всего виноват висящий webhook от прошлого запуска. Telegram шлет апдейты на старый URL, polling в локальной разработке не получает ничего. Лечится одной командой deleteWebhook.
При запуске polling Telegram не должен иметь активных вебхуков на боте. Если webhook стоял раньше, его надо сбросить с флагом drop_pending_updates, иначе старая очередь догонит вас на проде. Это самая частая причина «бот не отвечает» по статистике запросов в наш чат вайбкодеров.
Симптом простой. Вы запустили скрипт, в консоли «Bot started», в Telegram пишете /start, в ответ молчание. Логи чистые, traceback пустой. На самом деле Telegram уверен, что у бота есть webhook, и шлет обновления туда. Polling висит вхолостую.
Дебаг-промпт для Windsurf под этот случай:
Бот на aiogram 3 запускается в режиме polling, но не получает
ни одного апдейта. Логи чистые. Проверь main.py: убедись что
перед dp.start_polling() вызывается await bot.delete_webhook(
drop_pending_updates=True). Если вызова нет — добавь. Также
покажи команду curl для ручной проверки getWebhookInfo через
Telegram Bot API.Windsurf откроет файл, найдет start_polling, добавит сброс webhook и подскажет curl-запрос вида https://api.telegram.org/bot<TOKEN>/getWebhookInfo. Если в ответе URL не пустой, webhook висит, лечите его.

FSM на MemoryStorage теряется при каждом рестарте процесса. Юзер ушел на шаг «введите телефон», бот перезагрузился, новый /start игнорируется. Перенесите state в Redis или Supabase.
MemoryStorage в aiogram 3 живет в оперативной памяти процесса. Перезапустили бота, передеплоили на Railway, упал воркер. Все FSM-стейты пропали. Юзер вернулся через час, нажал /start, но хендлер ждет от него телефон в шаге «contact_input» и просто игнорирует команду.
Этот баг особенно болит, когда вы решили создать бота поддержки с многошаговыми сценариями. Заявка, опрос, регистрация на услугу. Все они идут через FSM. Любой ребут роняет половину открытых сессий.

Дебаг-промпт:
Бот использует FSM на MemoryStorage. После каждого деплоя
юзеры пишут что не могут продолжить с того шага где остановились.
Покажи как:
1) переключить storage с MemoryStorage на RedisStorage
2) добавить хендлер /cancel который сбрасывает любой стейт
3) поставить TTL на FSM-стейт 30 минут чтобы зависшие сессии
очищались сами
Стек: aiogram 3.18, Redis уже подключен к проекту,
переменная REDIS_URL в .env.Готового решения хватит на 20 минут. RedisStorage переживает рестарты, /cancel спасает залипшие сессии, TTL не дает памяти расти бесконечно. Для serverless-окружений лучше Redis на Upstash, бесплатно до 10К запросов в день.
setWebhook молча возвращает false по трем причинам. Не-HTTPS URL, невалидный TLS-сертификат, или secret_token не совпадает с заголовком. Проверка занимает три curl-запроса.
Telegram принимает webhook только по HTTPS и только если сертификат валиден. Self-signed работает, но требует загрузки .pem-файла при регистрации. Бесплатный сертификат от Let's Encrypt снимает 90% проблем сразу. Cloudflare с проксированием иногда отдает неверный certificate chain.
В коде проверьте три вещи. URL точно начинается с https://. Путь после домена совпадает с тем, что слушает сервер aiohttp. Webhook secret в заголовке X-Telegram-Bot-Api-Secret-Token совпадает с тем, что вы передали в setWebhook.
Дебаг-промпт:
setWebhook возвращает false без описания ошибки. Бот на aiogram 3,
сервер aiohttp на порту 8080, домен через Cloudflare. Помоги
продебажить пошагово:
1) curl-запрос к getWebhookInfo с расшифровкой last_error_message
2) проверка что webhook_path в коде совпадает с тем что
зарегистрирован у Telegram
3) проверка secret_token в SimpleRequestHandler
4) тест что сервер реально доступен снаружи по HTTPS
Покажи команды и куда смотреть в логах aiohttp.Поле last_error_message в ответе getWebhookInfo обычно дает ключ к проблеме. «SSL: WRONG_VERSION_NUMBER» значит, что порт не отдает HTTPS. «Wrong response from the webhook: 404» — путь не тот. «Secret token is invalid» — несовпадение secret_token.

Telegram разрешает только один способ доставки апдейтов на бота. Запустили polling рядом с зарегистрированным webhook? Получите «Conflict: terminated by other getUpdates request».
Когда вы создаете ии для создания тг бота через AI-агента, тот не всегда знает текущее состояние бота в Telegram. Агент пишет код под polling, а у вас на проде живет webhook от предыдущей итерации. В итоге два процесса дерутся за апдейты, оба падают.
Симптом в логах: aiogram.exceptions.TelegramConflictError: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running. Иногда апдейты приходят к одному процессу, иногда к другому, рандомно. Хендлеры срабатывают через раз.
Дебаг-промпт:
В логах TelegramConflictError. Проверь:
1) что в Telegram сейчас зарегистрировано через getWebhookInfo
2) есть ли где-то еще запущенный процесс бота (ps aux | grep python)
3) добавь в startup-код бота явный bot.delete_webhook(
drop_pending_updates=True) перед polling
4) если бот деплоится на Railway/Render — проверь что старая
ревизия точно остановлена, иногда висит зомби-процесс
Покажи конкретные команды для проверки на Linux-сервере.На Railway часто помогает явный рестарт деплоймента. На VPS поможет pkill -f bot_main.py перед запуском. Если используете systemd, проверьте Restart=always и что юнит не запущен дважды.
Подключения копятся быстрее чем закрываются. Pool переполняется, новые запросы висят. Лечится pgbouncer в transaction mode и pool_size в районе 5-10.
Supabase дает по 60 одновременных подключений на проект на бесплатном тарифе. Чат боты для бизнеса с активным трафиком выжирают этот лимит за час. Особенно если каждый хендлер открывает новое соединение и забывает закрыть. Через час бот ловит connection timeout и молчит.Симптом плавающий. Бот работает нормально первый час, потом ответы начинают приходить с задержкой 10-30 секунд, потом часть сообщений теряется. В логах Supabase видно too many connections for role.
Дебаг-промпт:
Бот на aiogram 3 + asyncpg + Supabase. После часа работы
начинаются connection timeout и потери апдейтов. Помоги:
1) переключить подключение с прямого порта 5432 на pooler 6543
(transaction mode pgbouncer)
2) выставить pool_size=10, max_overflow=5, pool_pre_ping=True
3) добавить middleware которое получает соединение в начале
хендлера и возвращает в pool в конце через async context manager
4) логгировать сколько соединений сейчас открыто каждые 5 минут
Покажи готовый код middleware для aiogram 3.Транзакционный pooler Supabase на порту 6543 решает 80% подобных кейсов сразу. Соединения переиспользуются между запросами, пик нагрузки выдерживается без падений. Бесплатный тариф после переключения держит примерно 200 одновременных пользователей.

Эти баги не выкидывают traceback и не дают красных строк в логах. Бот просто работает странно. Диагностика по симптомам, не по ошибкам.

Самые подлые баги в Telegram-боте те, где код выполняется без ошибок, но делает не то. Невидимый пробел в токене, неверный тип в magic filter, истекший ngrok-туннель. Каждый из этих случаев лечится за пять минут, если знать где смотреть.
Скопировали токен из BotFather через мобильную клавиатуру, в начало или конец прилип пробел. Бот стартует, через секунду падает с Unauthorized. Лечится открытием .env в редакторе с подсветкой непечатных символов и token.strip() в коде. Промпт: «Добавь strip() при чтении BOT_TOKEN из переменной окружения, валидируй формат регуляркой ^\d{8,10}:[A-Za-z0-9_-]{35}$».
В aiogram 3 фильтр F.text == "hello" сработает только на текстовые сообщения. Если юзер прислал стикер с подписью «hello», хендлер пропустит апдейт. Аналогично F.photo не ловит документ-изображение. Дебаг-промпт: «Покажи список content_types которые приходят на текущий хендлер, добавь логгирование message.content_type в начало роутера для отладки».
Бесплатный ngrok дает URL на 30 минут или до перезапуска. URL поменялся, а webhook у Telegram остался старый. Промпт: «Сделай скрипт на bash который при старте ngrok автоматически забирает публичный URL через ngrok API на localhost:4040 и вызывает setWebhook у Telegram».
Если хендлер вернул 500-ю ошибку, Telegram ставит апдейт в retry-очередь и шлет повторно. Сначала через 3 секунды, потом 10, потом 30. Не паникуйте и не перезапускайте бота. Подождите минуту, очередь рассосется. Промпт: «Добавь global error handler в роутер чтобы ловить exception и возвращать 200 OK с логгированием, а не падать на 500».
Бот живет сутки, потом падает по OOM. Чаще всего виноваты несбрасываемые Bot() инстансы внутри хендлеров или забытые aiohttp.ClientSession. Промпт: «Запусти memray на работающем процессе бота, найди топ-5 объектов по памяти, покажи где они создаются».
Cascade в Windsurf читает весь проект, ищет связи между файлами и выдает правку с пояснением. Ручной дебаг занимает час, через AI — около 10-15 минут на стандартный баг.
ИИ для создания тг бота полезен не только на этапе генерации кода. Дебаг в нем идет быстрее за счет того, что агент видит весь контекст проекта сразу. Не нужно копировать файлы туда-сюда. Windsurf и Cursor умеют запускать команды и читать вывод прямо из чата.
Базовая модель под дебаг — Claude Sonnet 4.6 за 3 доллара на миллион токенов входа. Для сложных случаев — Claude Opus 4.7 с 87.6% на SWE-bench. Для бюджетной работы — DeepSeek V4 Pro Max за 43 цента на миллион при том же качестве кода 80.6% на SWE-bench. Параметры есть в нашем разборе моделей.
Максим: «Мог засесть до пяти ночи и править одну функцию, которая не работала. Если бы не терпение — я уже испотел, и хотелось это все закрыть. Но я понимал, что это можно решить и нужно решить, чтобы идти дальше. С Windsurf этот же баг я бы поймал часа за полтора, не за восемь».
Включите режим Cascade write для автопатчей или read для просмотра предложений. Read безопаснее, write быстрее. На незнакомой кодовой базе всегда начинайте с read.
Хороший промпт дает агенту стек, симптом, лог и желаемый результат. Без логов агент гадает, без стека лезет не в те библиотеки, без симптома советует общее.
Промпт «почини бота, он не работает» — это ноль информации. Агент сгенерирует пять гипотез, ни одна не попадет в точку. Хороший дебаг-промпт занимает 5-7 строк и содержит четыре блока: стек, симптом, лог, желаемое поведение.
Базовый шаблон под Windsurf:
Стек: aiogram [версия], [Redis/Postgres/SQLite], [деплой VPS/Railway/Render]
Что должно происходить: [одно предложение]
Что реально происходит: [симптом]
Лог ошибки (если есть): [traceback или 'логи чистые']
Уже пробовал: [короткий список из 1-3 пунктов]
Задача:
1) найди корень проблемы
2) покажи минимальную правку файла
3) добавь логгирование чтобы похожий баг поймать раньше
С таким промптом Cascade или Composer выдают точечную правку, без переписывания половины файла. Если бот сложный и логику нужно понять с нуля, добавьте @codebase в начало промпта, агент сделает быстрый обзор архитектуры.
Для глубокого reasoning по архитектурным багам выгоднее Claude Opus 4.7. Для типовых исправлений в одном файле — Sonnet 4.6 или DeepSeek V4. Если бот для бизнеса с продакшен-трафиком и нужен системный аудит, проще записаться на консультацию к Максиму и пройти полную проверку за вечер.

Да. Windsurf и Cursor читают логи, объясняют ошибки и предлагают исправления текстом. Вы копируете traceback в чат с агентом, выбираете Claude Sonnet 4.6 или Opus 4.7 и получаете готовый патч. Понимание основ все же нужно, чтобы оценить корректность правки.
Чаще всего из-за переменных окружения. Локально подхватывается .env, на сервере переменные нужно прописать вручную через панель хостинга или systemd-юнит. Вторая причина: разная версия Python или библиотек. Зафиксируйте версии в requirements.txt.
Polling. Для локальной разработки и проектов до 1000 пользователей разница в скорости незаметна, а возни в десять раз меньше. Webhook стоит включать, когда телеграм бот для бизнеса выходит в продакшен на VPS с белым IP и HTTPS.
В логах увидите Unauthorized или 401. Зайдите в @BotFather, нажмите /token, скопируйте заново и аккуратно вставьте. Невидимый пробел в начале или конце токена дает ровно ту же ошибку, что и совсем неверный токен.
Если предыдущий запрос вернул ошибку 500 или таймаут, Telegram ставит апдейт в очередь и шлет повторно с возрастающей задержкой. Починили баг, подождите минуту, очередь рассосется сама. Не нужно перезапускать бота каждые пять секунд.
На aiogram 3. Версия 2 в режиме поддержки, новые фичи в нее не добавляются. Миграция занимает день, если бот небольшой. Магические фильтры и роутеры сильно упрощают код, особенно когда чат-бот для бизнеса разрастается до десятка сценариев.
Бесплатный тариф Windsurf дает ограниченное количество premium-запросов в месяц. Для разовой починки бага хватает. Если дебажите боты регулярно, тариф Pro за 15 долларов в месяц окупается одним рабочим вечером.
Polling. Режим работы бота, когда он сам каждые несколько секунд спрашивает у Telegram «есть новые сообщения?». Простой, не требует HTTPS, удобен для локальной разработки.
Webhook. Режим, когда Telegram сам пушит апдейты на URL вашего сервера. Требует HTTPS и публичного адреса. Дает минимальную задержку, нужен в продакшене.
FSM (Finite State Machine). Машина состояний. Хранит на каком шаге диалога находится конкретный юзер. Нужна для многошаговых сценариев: регистрация, оформление заявки, опрос.
MemoryStorage. Дефолтный сторадж для FSM в aiogram. Хранит состояния в оперативной памяти процесса. Теряется при рестарте.
RedisStorage. Альтернативный сторадж. Состояния переживают рестарты бота. Рекомендуется для любого продакшена.
Magic filter. Декларативный фильтр в aiogram 3 через объект F. Позволяет писать F.text.startswith("/")вместо lambda message: message.text.startswith("/").
Long polling timeout. Сколько секунд сервер Telegram держит соединение открытым в ожидании новых апдейтов. Рекомендуется 30-60 секунд.
Ngrok. Сервис для проброса локального сервера в публичный интернет с HTTPS. Полезен для разработки webhook. Бесплатный URL живет 30 минут или до перезапуска.
BotFather. Официальный бот Telegram для создания и управления своими ботами. Через него выпускают токен, ставят описание, аватарку и команды.
Pooler. Слой перед базой данных, который переиспользует подключения между запросами. У Supabase транзакционный pooler работает на порту 6543. Решает проблему «too many connections».
Подобрали стек для своего бота, но застряли на одном из этих багов? Загляните в каталог AI IDE на VibeCoderz и обзор AI-агентов под задачи разработки. Если бот сложнее, чем кажется, и нужен внешний взгляд, запишитесь на консультацию к Максиму. Час разбора экономит обычно от двух до пяти вечеров самостоятельного дебага.
Обновлено: июнь 2026. Команда VibeCoderz.