Бот есть, но не работает: как мы разбираем чужой код
Брошенный бот редко сломан целиком: обычно отвалился один доступ, один токен или один вебхук. Проверка идёт сверху вниз — доступы, токен, доставка входящих, сценарий, правила канала. Пересобирать заново честнее в четырёх случаях: доступов нет, логика заперта в чужом конструкторе, журналов не осталось, канал сменился. Срок восстановления заранее не называется: объём работы виден только после разбора.
Задача приходит в одной формулировке: «бот у нас есть, делали не вы, сейчас не работает, посмотрите». Иногда добавляют: «и подрядчика не найти». Дальше начинается не программирование, а разбор. Бот держится на пяти слоях: доступы, ключ доступа, доставка входящих, сценарий и правила мессенджера. Тишина выглядит одинаково при поломке любого из них, поэтому проверяют слои строго сверху вниз.
Короткий ответ
- Проверок пять, порядок обязателен. Доступы → токен → доставка входящих → сценарий → правила канала. Первые три отсекают все сообщения сразу, последние два ломают отдельные ветки.
- Сначала доступы, а не код. Нет аккаунта, которым создан бот, и нет доступа к серверу — починить нечего, вопрос переходит в пересборку.
- «Молчит без ошибок» — почти всегда доставка. Пока в журнале входящих нет записи, сценарий ни при чём. Наш воркер доставки однажды пропустил 268 минут из 983 запусков по расписанию, не оставив в журнале ошибок ни строки.
- Четыре признака пересборки. Нет доступов, нет экспорта из чужого конструктора, нет журналов, канал изменился. При двух и более разбор стоит дороже новой сборки.
- Цена — после разбора. Разработка от 20 000 ₽, поддержка от 5 000 ₽ в месяц; точную цифру называем, когда увидим бота, и до начала работ. Срок восстановления не обещаем: он зависит от находок на первом слое.
Слой 1. Доступы: кто владелец бота, кто владелец приложения, кто платит за сервер
Самая скучная часть аудита чат-бота и самая важная: бот держится на трёх владениях, и одному человеку они принадлежат редко.
Владелец бота. В Telegram бот принадлежит аккаунту, который создал его в @BotFather: не компании, не домену — конкретному телефону. Если бота завёл подрядчик или уволившийся сотрудник, токеном распоряжается он. Передача возможна только при доступе к исходному аккаунту, иначе остаётся новый бот с новым именем и потеря всех, кто подписался на старого.
Владелец приложения канала. В Instagram* бот работает через приложение на стороне Меты, которому выдано разрешение на аккаунт. Если прежний подрядчик подключал через своё приложение, доступ к переписке заканчивается вместе с его доступом: отключение на его стороне отзывает разрешение. В МАКС роль владельца играет верифицированный профиль в кабинете business.max.ru — завести бота может организация, ИП или самозанятый, резидент РФ; проверка профиля занимает несколько рабочих дней, число ботов на профиль ограничено. Это единственный срок, который мы называем вслух, и от подрядчика он не зависит.
Кто платит за сервер и домен. Бот живёт на машине, которую кто-то оплачивает, и принимает сообщения на домен, который кто-то продлевает. Два финала: сервер отключён за неоплату — и бот молчит без единой ошибки в своём коде; или домен переехал, и адрес доставки указывает в пустоту.
Что проверяем: есть ли доступ к аккаунту-создателю, к кабинету канала, к серверу и к домену. Четыре «нет» из четырёх — не починка, а новая разработка.
Слой 2. Токен: что будет, если случайно поменял токен бота
Токен — ключ, которым сервер бота обращается к мессенджеру, и главная причина тихих поломок: входящие и исходящие ходят разными путями. При перевыпуске старый ключ перестаёт действовать сразу, но замолкает по-разному:
- исходящие падают с ошибкой доступа на каждый запрос: видно в журнале, лечится подстановкой нового ключа;
- входящие могут просто перестать приходить. Узел, слушавший старый ключ, не получает ошибки — он не получает ничего, и с его точки зрения все клиенты замолчали разом;
- сценарий при этом исправен, и разбор, начатый с него, уйдёт в пустоту.
Отсюда правило: перевыпуск токена — последний шаг диагностики, а не первый. Сначала сверяем: ключ в кабинете канала должен посимвольно совпадать с тем, что в настройках бота, без лишнего пробела на конце. В Telegram состояние адреса доставки показывает запрос getWebhookInfo — куда мессенджер отдаёт сообщения прямо сейчас, а не куда отдавал по чьей-то памяти.
Второй типовой сюжет — два узла на одном боте. Старый сервер подрядчика ещё жив, новый уже поднят, адрес доставки один. Сообщения получает тот, кто указан в настройках последним; второй молчит без ошибок и выглядит сломанным. Отключать его рано: там может лежать вся история переписки.
Слой 3. Доставка входящих: адрес, ответ 200, время ответа, потерянные события
Вебхук — адрес, на который мессенджер присылает сообщения. Если доставка не удалась, бот не «отвечает неправильно» — он не знает, что ему написали. Ломается доставка в четырёх местах.
- Адрес. Доступен из интернета по https с действующим сертификатом: локальный адрес, закрытый порт, просрочка — доставки нет. Отдельный случай МАКС: обращения к его API требуют доверенного российского корневого сертификата на сервере — это первая из семи причин, почему бот в МАКС не отвечает. Без него запросы не проходят, а ошибки от МАКС не будет — соединение до МАКС не доходит.
- Код ответа. Принимающая сторона обязана ответить 200. Ответ 500, редирект или 404 мессенджер считает неудачной доставкой.
- Время ответа. Отвечать нужно быстро, тяжёлую работу делать после ответа. Пределов по каналам мы не замеряли. Замеряли своё, на исходящих: 34 % отправок партнёру уходили дольше 5 секунд. При таком раскладе очередь копится, и «бот тормозит» становится штатным состоянием.
- Потерянные события. Худшая категория: бот при ней работает. Наш воркер, развозящий события партнёрам, пропускал 268 минут из 983 запусков по расписанию — предыдущий запуск не успевал закончиться, блокировка отклоняла новый без ожидания и молча. Признак не «не работает», а «иногда не работает», и на глаз он не отличим от невнимательности оператора.
Что проверяем: пришло ли сообщение вообще. У себя мы держим сырой журнал входящих по всем каналам и открываем его первым — одна проверка вместо трёх догадок. Если в чужом боте журнала нет, его заводят прежде, чем чинить: диагностика без журналов — угадывание за счёт заказчика.
Слой 4. Сценарий: ошибка есть, а падения нет
Когда доставка доказана, наступает очередь логики. Поломки здесь другие: код не падает, журнал чист, а поведение неверное. Два своих примера.
Тип вложения, который никто не предусмотрел. За три недели 158 фотографий и видео легли в диалоги голой строкой: канал прислал тип, которого обработчик не знал, и вместо файла оператор видел техническую пометку. Ошибки не возникло ни одной — с точки зрения кода всё прошло успешно. Из 158 файлов 135 удалось восстановить скриптом задним числом, остальные к тому времени были уже недоступны по ссылкам канала.
Переименование поля. Одно поле переименовали с share на ig_post, а место, которое его читало, оставили со старым именем. Два месяца вместо пересланного поста бот отдавал заглушку. Работало всё, кроме одной ветки, и заметили это по вопросу клиента, а не по журналам.
Вывод для аудита: «бот отвечает» и «бот работает» — разные вещи. Сценарий проходят руками целиком, на реальном устройстве, со стороны клиента, и отдельно проверяют каждый нетекстовый ввод: фото, видео, голосовое, документ, геопозицию, кнопку в старом сообщении.
Слой 5. Правила канала: часть жалоб — не поломка
Часть обращений «бот не работает» — не поломка: код исправен, ограничение лежит на стороне мессенджера, и про него не сказали при продаже.
| Канал | Кто делает первый шаг | Что выглядит как поломка |
|---|---|---|
| Telegram | человек нажал «Запустить» | «не пишет по базе телефонов» — рассылки по номерам не существует, бот не найдёт человека по номеру |
| ВКонтакте | сообщество может написать подписчику первым, бессрочно | «перестало работать через сутки» — окна 24 часа у ВК нет, бот ВКонтакте не отвечает в личных сообщениях по другим причинам |
| МАКС | человек начал диалог | «молчит без ошибок» — чаще всего нет российского сертификата или профиль без верификации |
| Instagram* | человек: комментарий, реакция на сторис или кодовое слово | «не дошёл первый Директ» — он уходит как Private Reply, и попытка одна |
Про Instagram* отдельно: отказ на первом Директе сжигает попытку, повторная отправка не спасает — спасает публичная подсказка в комментариях, чтобы человек написал сам. Кто и на каких условиях может начать переписку в каждом канале, разобрано в статье про то, кто может написать клиенту первым. WhatsApp в России мы не продаём.
Признак → где смотреть → что это значит
| Признак | Где смотреть | Что это значит |
|---|---|---|
| Молчит всем и всегда, с первого дня | доступы и токен | ключ не тот, не выдан или перевыпущен |
| Работал, перестал после переезда сервера | адрес доставки, сертификат, DNS | вебхук ведёт на старую машину или нет сертификата |
| Диалог виден в кабинете канала, в панели бота нет | журнал входящих | доставка не принята, сценарий исправен |
| Молчит без ошибок, в журналах пусто | сертификат, адрес доставки | запрос не доходит до мессенджера или обратно |
| Текст приходит, фото и видео нет | обработчик вложений | необработанный тип вложения |
| Иногда отвечает, иногда нет | очередь и расписание обработки | потерянные события, а не «плохой интернет» |
| Отвечает на кнопки, молчит на обычный текст | условия старта сценария | запуск завязан только на команду |
| Не отвечает одному конкретному человеку | кто отправил первое сообщение | правило канала о первом шаге, поломки нет |
Чужой конструктор: что удастся вытащить, а что останется внутри
Если доступ к кабинету потерян или оплата прекращена, объём спасаемого зависит от платформы, а не от нас.
- Тексты, кнопки, картинки. Вытаскиваются почти всегда: экспортом, руками из работающего бота или со скриншотов. Самая дешёвая часть переноса.
- Структура сценария. Экспорт в читаемом виде есть далеко не везде. Обычно логику восстанавливают по поведению бота и собирают заново — это новая сборка по чужому образцу, а не починка.
- История переписки и статистика. Остаются в платформе. Поэтому сравнить «до» и «после» переноса чаще всего нечем, и обещать такое сравнение мы не станем.
- База подписчиков. Главная ловушка. Telegram не отдаёт по API список тех, кто нажал «Запустить»: список живёт таблицей внутри платформы, где собран бот. Без выгрузки новый бот знает только тех, кто написал ему снова. Поэтому старого не выключают, пока новый не заработал.
Прежде чем спорить о цене починки, надо выяснить, есть ли у платформы экспорт: от этого зависит вилка, а не от красоты старого кода.
Когда честнее пересобрать заново: четыре признака
Иногда правильный ответ на просьбу починить — «не стоит». По отдельности признак ещё не приговор, два вместе — почти всегда пересборка.
- Доступов нет и владельца не найти. Аккаунт, которым создан бот, утерян. Восстанавливать нечего: токеном распоряжается тот, у кого доступ к аккаунту-создателю.
- Логика заперта в платформе без экспорта. Сценарий придётся переписать в любом случае, и разбор старого — лишняя оплаченная работа.
- Журналов нет и завести их некуда. Нет доступа к серверу, нет истории входящих, непонятно, что было вчера. Такой разбор стоит дороже новой сборки, а результат заранее не назовёшь.
- Канал изменился или сменился. Логика построена на возможности, которой в канале нет. Частый случай — перенос бота из Telegram в МАКС: часть сущностей переносится, часть собирается с нуля.
Пятый случай — задача, которую бот не решает вовсе. Если поток обращений маленький и боту не поручено ничего, кроме приветствия, — ни записи клиентов, ни приёма оплаты в Telegram-боте, — тишина лечится живым человеком в переписке или простым автоответчиком в Telegram: реанимировать такого бота можно, но работы у него от этого не появится.
Чего делать не надо
Не перевыпускать токен первым делом. Выглядит безопасно, а гасит вторую половину связки: узел со старым ключом замолкает без ошибок и запутывает разбор.
Не пересоздавать бота ради тишины. В МАКС это особенно дорого: профиль верифицирован, число ботов на профиль ограничено. Выключение обратимо, удаление нет.
Не покупать «рассылку по базе» как лечение тишины. В Telegram и МАКС бот пишет только тому, кто начал первым, в Instagram* холодный Директ невозможен. Бессрочно писать подписчику первым может только сообщество ВКонтакте.
Не требовать срок восстановления до разбора. Сроков мы не обещаем: пока не видно, на каком слое поломка, любой срок — выдумка. Разница между строкой в настройках и запертым чужим кабинетом измеряется не часами, а типом работы.
Что вы получаете после аудита чат-бота
- Отчёт по слоям. Что проверено, что исправно, где поломка. С пометкой, какой факт взят из журналов, а какой из документации канала: степени уверенности разные, смешивать их нельзя.
- Оценка работ. Разработка от 20 000 ₽, поддержка от 5 000 ₽ в месяц; точную цифру называем после разбора и до начала работ. Что двигает смету, разобрано в статье про то, сколько стоит разработка чат-бота. Если внутри бота ИИ-агент, его работа считается по расходу токенов, а не ставкой за месяц; зарубежные ИИ-сервисы помогаем оплатить иностранными картами.
- Решение: чинить или собирать. С названной причиной, а не с общим «там всё плохо».
Чего в отчёте не будет: обещанного срока, процентов роста заявок и сравнения с тем, как было до нас. Срок зависит от находок на первом слое, а проценты и сравнение нечем измерить, если статистика осталась в чужой платформе. В аудите и в новой разработке порядок работы один: сначала смотрим, потом считаем. Другие разборы лежат в разделе «Практика».
Откуда цифры
На 16 сентября 2026 года на движке ЭТОЧАТБОТ работают боты пользователей сервиса: Instagram* — 325 (176 активных), Telegram — 70 (54), вебчат на сайте — 16 (16), МАКС — 11 (8), ВКонтакте — 4 (4). Сценариев 366, кабинетов 323, диалогов 85 905, сообщений 445 524 с апреля 2026 года. Это боты пользователей сервиса ЭТОЧАТБОТ, созданные на движке, а не заказные проекты агентства.
Инциденты выше — пропущенные минуты воркера, медленные отправки, вложения голой строкой, заглушка после переименования поля — это поломки нашего собственного движка, взятые из своих журналов. Приводим их вместо чужих историй сознательно: цифры по клиентским проектам публиковать нельзя.
Что прислать, если бот молчит
Напишите в @etoBotTeamBot три факта: какой канал, с какого момента тишина и что менялось перед ней — переезд сервера, смена токена, новый подрядчик. Этого обычно хватает, чтобы сузить поиск до одного-двух слоёв ещё до начала работ.
Частые вопросы
Бот не работает — как исправить?
Проверять по слоям сверху вниз: доступы к аккаунту-создателю и серверу, токен, доставка входящих, сценарий, правила канала. Первые три слоя отсекают сообщения полностью, последние два ломают отдельные ветки. Начинать с журнала входящих: если записи о сообщении нет, сценарий исправен, править его бессмысленно.
Сбой Telegram-бота: что проверять первым?
Токен и адрес доставки сообщений, а не сценарий. В Telegram бот принадлежит аккаунту, который создал его в @BotFather: без доступа к аккаунту токеном распорядиться нельзя. Состояние вебхука показывает запрос getWebhookInfo. И помните правило канала: бот пишет только тому, кто нажал «Запустить».
Что делать, если бот в ВК не отвечает?
Проверить в настройках сообщества три вещи: включены ли сообщения, подключён ли сервер для событий, отмечены ли нужные типы событий. Затем токен сообщества и права у него. Важно: окна 24 часа у ВКонтакте нет, сообщество может написать подписчику первым бессрочно, поэтому версия «перестало работать через сутки» ложная.
Что будет, если случайно поменял токен бота?
Старый ключ перестанет действовать сразу. Исходящие начнут падать с ошибкой доступа, а входящие могут просто перестать приходить: узел, слушавший старый ключ, не получает ошибки — он не получает ничего. Сценарий при этом исправен, поэтому токен сначала сверяют посимвольно с тем, что в кабинете канала.
Почему бот молчит без ошибок в логах?
Потому что ошибке неоткуда взяться: запрос не дошёл до мессенджера либо сообщение не дошло до бота. В МАКС частая причина — отсутствие доверенного российского корневого сертификата на сервере: соединение обрывается до МАКС. Вторая причина — адрес доставки указывает на другую машину. Проверка одна: журнал входящих и пробный запрос с сервера бота.
Сколько стоит аудит чат-бота?
Отдельного прайса на аудит у нас нет: работа считается как разработка — от 20 000 ₽, поддержка потом от 5 000 ₽ в месяц. Точную цифру называем после разбора и до начала работ. Объём заранее не виден: поломка бывает и одной строкой в настройках, и сценарием, запертым в чужом кабинете.
Можно ли забрать бота у прежнего подрядчика?
Зависит от канала. В Telegram бот принадлежит аккаунту, который его создал: передача возможна только при доступе к этому аккаунту. В Instagram* доступ держится на приложении Меты, и отключение на стороне прежнего подрядчика отзывает разрешение. В МАКС всё привязано к верифицированному профилю в business.max.ru.
Когда бота дешевле пересобрать, чем починить?
При двух и более признаках из четырёх: нет доступа к аккаунту-создателю, логика заперта в чужом конструкторе без экспорта, журналов нет, канал изменился. Тогда разбор старого кода — оплаченная работа без результата. Старого бота не выключают, пока новый не заработал: список подписчиков Telegram по API не отдаёт, и он теряется.
Нужен бот, который делает это у вас?