Практика

Бот есть, но не работает: как мы разбираем чужой код

Брошенный бот редко сломан целиком: обычно отвалился один доступ, один токен или один вебхук. Проверка идёт сверху вниз — доступы, токен, доставка входящих, сценарий, правила канала. Пересобирать заново честнее в четырёх случаях: доступов нет, логика заперта в чужом конструкторе, журналов не осталось, канал сменился. Срок восстановления заранее не называется: объём работы виден только после разбора.

15 мин чтения Дмитрий Киселев, основатель ЭТОБОТ и ЭТОЧАТБОТ

Задача приходит в одной формулировке: «бот у нас есть, делали не вы, сейчас не работает, посмотрите». Иногда добавляют: «и подрядчика не найти». Дальше начинается не программирование, а разбор. Бот держится на пяти слоях: доступы, ключ доступа, доставка входящих, сценарий и правила мессенджера. Тишина выглядит одинаково при поломке любого из них, поэтому проверяют слои строго сверху вниз.

Короткий ответ

  1. Проверок пять, порядок обязателен. Доступы → токен → доставка входящих → сценарий → правила канала. Первые три отсекают все сообщения сразу, последние два ломают отдельные ветки.
  2. Сначала доступы, а не код. Нет аккаунта, которым создан бот, и нет доступа к серверу — починить нечего, вопрос переходит в пересборку.
  3. «Молчит без ошибок» — почти всегда доставка. Пока в журнале входящих нет записи, сценарий ни при чём. Наш воркер доставки однажды пропустил 268 минут из 983 запусков по расписанию, не оставив в журнале ошибок ни строки.
  4. Четыре признака пересборки. Нет доступов, нет экспорта из чужого конструктора, нет журналов, канал изменился. При двух и более разбор стоит дороже новой сборки.
  5. Цена — после разбора. Разработка от 20 000 ₽, поддержка от 5 000 ₽ в месяц; точную цифру называем, когда увидим бота, и до начала работ. Срок восстановления не обещаем: он зависит от находок на первом слое.

Слой 1. Доступы: кто владелец бота, кто владелец приложения, кто платит за сервер

Самая скучная часть аудита чат-бота и самая важная: бот держится на трёх владениях, и одному человеку они принадлежат редко.

Владелец бота. В Telegram бот принадлежит аккаунту, который создал его в @BotFather: не компании, не домену — конкретному телефону. Если бота завёл подрядчик или уволившийся сотрудник, токеном распоряжается он. Передача возможна только при доступе к исходному аккаунту, иначе остаётся новый бот с новым именем и потеря всех, кто подписался на старого.

Владелец приложения канала. В Instagram* бот работает через приложение на стороне Меты, которому выдано разрешение на аккаунт. Если прежний подрядчик подключал через своё приложение, доступ к переписке заканчивается вместе с его доступом: отключение на его стороне отзывает разрешение. В МАКС роль владельца играет верифицированный профиль в кабинете business.max.ru — завести бота может организация, ИП или самозанятый, резидент РФ; проверка профиля занимает несколько рабочих дней, число ботов на профиль ограничено. Это единственный срок, который мы называем вслух, и от подрядчика он не зависит.

Кто платит за сервер и домен. Бот живёт на машине, которую кто-то оплачивает, и принимает сообщения на домен, который кто-то продлевает. Два финала: сервер отключён за неоплату — и бот молчит без единой ошибки в своём коде; или домен переехал, и адрес доставки указывает в пустоту.

Что проверяем: есть ли доступ к аккаунту-создателю, к кабинету канала, к серверу и к домену. Четыре «нет» из четырёх — не починка, а новая разработка.

Слой 2. Токен: что будет, если случайно поменял токен бота

Токен — ключ, которым сервер бота обращается к мессенджеру, и главная причина тихих поломок: входящие и исходящие ходят разными путями. При перевыпуске старый ключ перестаёт действовать сразу, но замолкает по-разному:

  • исходящие падают с ошибкой доступа на каждый запрос: видно в журнале, лечится подстановкой нового ключа;
  • входящие могут просто перестать приходить. Узел, слушавший старый ключ, не получает ошибки — он не получает ничего, и с его точки зрения все клиенты замолчали разом;
  • сценарий при этом исправен, и разбор, начатый с него, уйдёт в пустоту.

Отсюда правило: перевыпуск токена — последний шаг диагностики, а не первый. Сначала сверяем: ключ в кабинете канала должен посимвольно совпадать с тем, что в настройках бота, без лишнего пробела на конце. В Telegram состояние адреса доставки показывает запрос getWebhookInfo — куда мессенджер отдаёт сообщения прямо сейчас, а не куда отдавал по чьей-то памяти.

Второй типовой сюжет — два узла на одном боте. Старый сервер подрядчика ещё жив, новый уже поднят, адрес доставки один. Сообщения получает тот, кто указан в настройках последним; второй молчит без ошибок и выглядит сломанным. Отключать его рано: там может лежать вся история переписки.

Слой 3. Доставка входящих: адрес, ответ 200, время ответа, потерянные события

Вебхук — адрес, на который мессенджер присылает сообщения. Если доставка не удалась, бот не «отвечает неправильно» — он не знает, что ему написали. Ломается доставка в четырёх местах.

  1. Адрес. Доступен из интернета по https с действующим сертификатом: локальный адрес, закрытый порт, просрочка — доставки нет. Отдельный случай МАКС: обращения к его API требуют доверенного российского корневого сертификата на сервере — это первая из семи причин, почему бот в МАКС не отвечает. Без него запросы не проходят, а ошибки от МАКС не будет — соединение до МАКС не доходит.
  2. Код ответа. Принимающая сторона обязана ответить 200. Ответ 500, редирект или 404 мессенджер считает неудачной доставкой.
  3. Время ответа. Отвечать нужно быстро, тяжёлую работу делать после ответа. Пределов по каналам мы не замеряли. Замеряли своё, на исходящих: 34 % отправок партнёру уходили дольше 5 секунд. При таком раскладе очередь копится, и «бот тормозит» становится штатным состоянием.
  4. Потерянные события. Худшая категория: бот при ней работает. Наш воркер, развозящий события партнёрам, пропускал 268 минут из 983 запусков по расписанию — предыдущий запуск не успевал закончиться, блокировка отклоняла новый без ожидания и молча. Признак не «не работает», а «иногда не работает», и на глаз он не отличим от невнимательности оператора.

Что проверяем: пришло ли сообщение вообще. У себя мы держим сырой журнал входящих по всем каналам и открываем его первым — одна проверка вместо трёх догадок. Если в чужом боте журнала нет, его заводят прежде, чем чинить: диагностика без журналов — угадывание за счёт заказчика.

Слой 4. Сценарий: ошибка есть, а падения нет

Когда доставка доказана, наступает очередь логики. Поломки здесь другие: код не падает, журнал чист, а поведение неверное. Два своих примера.

Тип вложения, который никто не предусмотрел. За три недели 158 фотографий и видео легли в диалоги голой строкой: канал прислал тип, которого обработчик не знал, и вместо файла оператор видел техническую пометку. Ошибки не возникло ни одной — с точки зрения кода всё прошло успешно. Из 158 файлов 135 удалось восстановить скриптом задним числом, остальные к тому времени были уже недоступны по ссылкам канала.

Переименование поля. Одно поле переименовали с share на ig_post, а место, которое его читало, оставили со старым именем. Два месяца вместо пересланного поста бот отдавал заглушку. Работало всё, кроме одной ветки, и заметили это по вопросу клиента, а не по журналам.

Вывод для аудита: «бот отвечает» и «бот работает» — разные вещи. Сценарий проходят руками целиком, на реальном устройстве, со стороны клиента, и отдельно проверяют каждый нетекстовый ввод: фото, видео, голосовое, документ, геопозицию, кнопку в старом сообщении.

Слой 5. Правила канала: часть жалоб — не поломка

Часть обращений «бот не работает» — не поломка: код исправен, ограничение лежит на стороне мессенджера, и про него не сказали при продаже.

КаналКто делает первый шагЧто выглядит как поломка
Telegramчеловек нажал «Запустить»«не пишет по базе телефонов» — рассылки по номерам не существует, бот не найдёт человека по номеру
ВКонтактесообщество может написать подписчику первым, бессрочно«перестало работать через сутки» — окна 24 часа у ВК нет, бот ВКонтакте не отвечает в личных сообщениях по другим причинам
МАКСчеловек начал диалог«молчит без ошибок» — чаще всего нет российского сертификата или профиль без верификации
Instagram*человек: комментарий, реакция на сторис или кодовое слово«не дошёл первый Директ» — он уходит как Private Reply, и попытка одна

Про Instagram* отдельно: отказ на первом Директе сжигает попытку, повторная отправка не спасает — спасает публичная подсказка в комментариях, чтобы человек написал сам. Кто и на каких условиях может начать переписку в каждом канале, разобрано в статье про то, кто может написать клиенту первым. WhatsApp в России мы не продаём.

Признак → где смотреть → что это значит

ПризнакГде смотретьЧто это значит
Молчит всем и всегда, с первого днядоступы и токенключ не тот, не выдан или перевыпущен
Работал, перестал после переезда сервераадрес доставки, сертификат, DNSвебхук ведёт на старую машину или нет сертификата
Диалог виден в кабинете канала, в панели бота нетжурнал входящихдоставка не принята, сценарий исправен
Молчит без ошибок, в журналах пустосертификат, адрес доставкизапрос не доходит до мессенджера или обратно
Текст приходит, фото и видео нетобработчик вложенийнеобработанный тип вложения
Иногда отвечает, иногда неточередь и расписание обработкипотерянные события, а не «плохой интернет»
Отвечает на кнопки, молчит на обычный текстусловия старта сценариязапуск завязан только на команду
Не отвечает одному конкретному человекукто отправил первое сообщениеправило канала о первом шаге, поломки нет

Чужой конструктор: что удастся вытащить, а что останется внутри

Если доступ к кабинету потерян или оплата прекращена, объём спасаемого зависит от платформы, а не от нас.

  • Тексты, кнопки, картинки. Вытаскиваются почти всегда: экспортом, руками из работающего бота или со скриншотов. Самая дешёвая часть переноса.
  • Структура сценария. Экспорт в читаемом виде есть далеко не везде. Обычно логику восстанавливают по поведению бота и собирают заново — это новая сборка по чужому образцу, а не починка.
  • История переписки и статистика. Остаются в платформе. Поэтому сравнить «до» и «после» переноса чаще всего нечем, и обещать такое сравнение мы не станем.
  • База подписчиков. Главная ловушка. Telegram не отдаёт по API список тех, кто нажал «Запустить»: список живёт таблицей внутри платформы, где собран бот. Без выгрузки новый бот знает только тех, кто написал ему снова. Поэтому старого не выключают, пока новый не заработал.

Прежде чем спорить о цене починки, надо выяснить, есть ли у платформы экспорт: от этого зависит вилка, а не от красоты старого кода.

Когда честнее пересобрать заново: четыре признака

Иногда правильный ответ на просьбу починить — «не стоит». По отдельности признак ещё не приговор, два вместе — почти всегда пересборка.

  1. Доступов нет и владельца не найти. Аккаунт, которым создан бот, утерян. Восстанавливать нечего: токеном распоряжается тот, у кого доступ к аккаунту-создателю.
  2. Логика заперта в платформе без экспорта. Сценарий придётся переписать в любом случае, и разбор старого — лишняя оплаченная работа.
  3. Журналов нет и завести их некуда. Нет доступа к серверу, нет истории входящих, непонятно, что было вчера. Такой разбор стоит дороже новой сборки, а результат заранее не назовёшь.
  4. Канал изменился или сменился. Логика построена на возможности, которой в канале нет. Частый случай — перенос бота из 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 не отдаёт, и он теряется.

Нужен бот, который делает это у вас?

Читать дальше