Чат-бот не отвечает: диагностика поломок по симптомам, от кнопки до ответа

Когда чат-бот на сайте молчит, причина почти всегда сидит в одном из пяти мест: сайт не пустил виджет, кончился лимит тарифа, сработала заглушка, диалог перехватил оператор или сломалась связка с Telegram. Все пять проверяются по очереди и обычно занимают минут десять.

Разбор написан про виджет ИИ-консультанта на примере Otvion, поэтому коды ответов и тексты сообщений в нем точные, их взяли из кода шлюза и виджета. Конструкторы ботов для Telegram и VK ломаются по-своему, у каждого своя справка. Логика диагностики при этом общая: идти по пути сообщения от кнопки до ответа и на каждом шаге смотреть, что вернул сервер. Числа лимитов ниже действуют на сентябрь 2026 года.

Содержание

Где именно молчит: четыре симптома и путь сообщения

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

Путь сообщения от виджета к ответу с четырьмя точками отказа и кодами ответа сервера
Четыре точки отказа на пути сообщения. Первая рвется на настройках виджета, последняя на генерации ответа, и у каждой свой набор кодов, по которым причину видно в браузере.

У каждой точки свой внешний признак, и по нему выбирается раздел ниже.

Что видит посетительНа каком шаге сбойКуда смотреть
Кнопки чата нет вообщеНастройки виджета не загрузилисьРаздел про кнопку: домен, статус, ключ
«К сожалению, произошла ошибка. Попробуйте позже.»Отправка вопроса не прошлаРаздел про ошибку: лимиты и сеть
Ответ есть, но это отписка про менеджераСработала одна из заглушекРаздел про заглушки
«Соединяем с оператором…» и тишинаДиалог у человекаРаздел про оператора

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

Кнопки чата нет на странице: домен, статус, ключ

Виджет рисует кнопку только после того, как сервер вернул его настройки. Если сервер ответил отказом, кнопки нет, и в консоли браузера остается строка «[otvion] config load failed» с кодом. Поэтому первая проверка всегда одна: нажать F12, открыть вкладку Network, обновить страницу и найти запрос config. Его код называет причину почти без вариантов.

Дерево диагностики пропавшей кнопки чата по коду ответа запроса config
Код запроса config делит поиск на четыре ветки: домен, статус, ключ и загрузка самого кода. Если запроса нет в списке, причина лежит на самой странице сайта.
Ответ на configЧто означаетЧто делать
403 domain_not_allowedАдрес страницы не входит в список разрешенных доменовДобавить домен в настройках сайта
403 site_suspendedСайт приостановлен, либо заблокирована организацияПроверить статус в панели
403 invalid_keyКлюч в коде виджета не найден среди сайтовСверить ключ с панелью, вставить код заново
Запроса нетКод виджета не загрузилсяКеш, политика безопасности, не тот шаблон

Где ломается: тестовый адрес. Виджет настроили на поддомене вроде test.example.ru, потом перенесли код на боевой сайт и забыли добавить его домен. Адрес localhost платформа на боевом контуре вообще не пропускает, так что проверка на локальной копии сайта не пройдет никогда. Префикс www платформа не различает: example.ru и www.example.ru считаются одним доменом, а любой другой поддомен нужен отдельной строкой или маской *.example.ru.

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

Если запрос config вообще не виден, браузер до платформы не дошел. Причин две. Первая: на сайте включена политика Content-Security-Policy, где директива script-src задает допустимые источники скриптов, а connect-src ограничивает fetch и XMLHttpRequest. Тогда в консоли будет запись о нарушении политики, а адреса виджета надо добавить в обе директивы. Вторая: кеш CMS или плагин оптимизации, который откладывает или склеивает скрипты. Про эти случаи подробнее в статье чат-бот на Tilda, Bitrix и WordPress.

Что проверить:

Три из четырех причин чинятся в панели за минуту. Четвертая живет в самом сайте, и искать ее надо в шаблоне и кеше.

Кнопка есть, а на сообщение приходит ошибка: лимиты и сеть

Если окно открывается, но после отправки появляется «К сожалению, произошла ошибка. Попробуйте позже.», виджет получил отказ или не дозвонился до сервера. Текст у разных причин один и тот же, поэтому смотреть надо на запрос chat во вкладке Network. Одна фраза в окне прикрывает как минимум три разные причины, и различает их только код.

Три причины одной общей ошибки в окне чата: лимит тарифа, лимит частоты, сбой сети
Посетитель видит одну и ту же фразу. Причину показывает запрос chat: ответ 200 с событием error, код 429 или сбой соединения без кода.

Первая: исчерпан месячный лимит сообщений. Перед обращением к модели платформа резервирует одно сообщение из месячной квоты. Когда квота кончилась, сервер присылает событие quota_exceeded, а виджет показывает ту самую общую ошибку. На бесплатном тарифе это 50 сообщений в месяц, на Start 500, на Pro 2000, на Agency 10000. Отдельная ловушка: когда срок платного тарифа истекает, лимиты возвращаются к бесплатным. Это мягкий переход без блокировки, но 50 сообщений на живом сайте заканчиваются быстро, и бот внезапно замолкает. Тариф и срок его действия видны в разделе оплаты.

Вторая: сработал лимит частоты, код 429. На весь сайт приходится 30 запросов чата в минуту, а с одного IP-адреса по умолчанию до 20. Офис и коворкинг выходят в интернет через один адрес, поэтому команда, которая тестирует бота всем отделом одновременно, упирается в потолок раньше посетителей. Если ошибка появляется у людей из одной сети и пропадает у остальных, причина здесь.

Третья: сбой сети или слишком длинное сообщение. Мобильная сеть, блокировка провайдера или VPN рвут соединение до сервера, виджет ловит исключение и показывает тот же текст. Сообщение длиннее 4000 символов сервер отклоняет кодом 400, например, когда в чат вставляют целый документ. Просроченный токен сессии, код 401, посетитель обычно не замечает: виджет сам открывает сессию заново и повторяет запрос один раз.

Мини-вывод: при жалобе на ошибку сначала проверяются тариф и сеть, и только потом настройки бота. Настройки тут ни при чем: до модели запрос просто не дошел.

Бот отвечает заглушкой: три текста и три слоя

Есть случай, который выглядит как молчание, хотя бот отвечает. Ответ формальный, про менеджера, и по существу вопроса в нем ничего нет. В платформе заложены три такие заглушки, и каждая говорит о своем слое.

Порядок проверок запроса до ответа модели и место, где срабатывает каждая из трех заглушек
Заглушка про «не могу ответить» рождается до модели, две остальные после нее. Поэтому по тексту сразу видно, где искать: в списке стоп-фраз или на стороне модели.
Текст заглушкиЧто произошлоГде чинить
«Извините, но я не могу ответить на этот вопрос. Пожалуйста, свяжитесь с менеджером для получения информации.»Сработала стоп-фраза, модель не вызываласьСписок стоп-фраз в настройках
«К сожалению, не удалось сформировать ответ. Попробуйте переформулировать вопрос или свяжитесь с менеджером.»Модель вернула пустой ответФормулировка вопроса, база знаний, инструкция
«К сожалению, произошла ошибка. Попробуйте повторить запрос позже или свяжитесь с менеджером.»Ошибка на стороне провайдера моделиПовторить позже, при повторе писать в поддержку

Третья заглушка похожа на общую ошибку виджета, но у нее длиннее хвост: слова «повторить запрос позже или свяжитесь с менеджером» приходят с сервера как ответ бота, виджет их не пишет. Если этот текст есть, до сервера запрос дошел, и проблема уже не в лимитах и не в сети.

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

Вторая заглушка указывает на пустую или бедную базу знаний. Когда в базе нет ничего близкого к вопросу, модель отвечает общими фразами или не отвечает совсем. Порядок наполнения и типичные поломки описаны в статье база знаний для сайта. Третья заглушка почти никогда не чинится на стороне сайта: это сбой у провайдера, и лечится он временем.

Бот замолчал после ответа оператора: окно в две минуты

Бот с передачей оператору умеет замолкать намеренно. Когда оператор отвечает посетителю из Telegram, диалог переходит в режим оператора. Пока с последнего ответа человека прошло меньше двух минут, новые сообщения посетителя уходят оператору, модель не вызывается, в окне виджета появляется «Соединяем с оператором…». Виджет каждые три секунды проверяет, нет ли ответа. Через две минуты тишины ИИ отвечает снова.

Шкала времени режима оператора: две минуты молчания бота после ответа человека и возврат ИИ
После ответа оператора бот две минуты не вмешивается. Вернуть ИИ раньше можно кнопкой под карточкой диалога или командой в ответе.

Где ломается: оператор написал боту обычным сообщением. Сервер принимает ответ оператора только как ответ на карточку диалога, то есть через функцию «Ответить». Обычное сообщение в чат бота игнорируется, и посетитель ничего не получает. Если по такому ответу диалог не находится, бот пишет оператору: «Не удалось найти диалог для этого сообщения». Приучите команду отвечать именно на карточку диалога.

Где ломается: оператор ответил и ушел. Две минуты посетитель разговаривает с человеком, которого уже нет за экраном, а ИИ молчит. Вернуть его сразу можно кнопкой «Передать AI» под карточкой диалога или командой /ai в ответе на карточку. Хорошее правило для смены: закончил диалог, вернул его боту. Настройка ключевых слов и режимов передачи описана в настройке чат-бота.

Канал оператора в Telegram молчит при живом сайте

Бот отвечает посетителям, а оператор не получает уведомлений или его ответы не доходят до сайта. Значит, ломается связка с Telegram. Начать стоит с одного вызова: метод getWebhookInfo в Bot API возвращает состояние webhook, число неотправленных обновлений pending_update_count и последнюю ошибку доставки в полях last_error_date и last_error_message. Токен бота при этом нельзя оставлять в скриншотах и чатах поддержки.

Связка сайта, шлюза и Telegram с пятью типичными точками поломки уведомлений оператора
Уведомление идет из шлюза в Telegram, ответ оператора возвращается через webhook. Пять типичных точек поломки выделены на пути туда и обратно.

Где ломается: тариф. На бесплатном тарифе Telegram-оператор недоступен, он включается от тарифа Start. Настройка при этом может выглядеть заполненной, а уведомлений не будет. Где ломается: режим «Только с контактами». Уведомление приходит, только если посетитель оставил телефон или почту, и отсутствие сообщений в Telegram в таком режиме поломкой не считается.

Где ломается: webhook и чат. Токен вписан, но webhook не подключен: после сохранения токена нужны кнопки «Проверить» и «Подключить webhook». Запрос без верного секрета сервер отклоняет кодом 403. Апдейты принимаются только из чата, ID которого указан в настройках, поэтому ответ из другой группы молча игнорируется. Про сами поля разговор в разделе про Telegram в настройке чат-бота.

Для самописного бота или другого сервиса действуют правила Bot API. Получать обновления можно либо через webhook, либо через getUpdates, вместе они не работают. Webhook принимает порты 443, 80, 88 и 8443. Если токен пересоздавали командой /token в BotFather, в панель нужно вписать новый. Схожие поломки бота в мессенджере Max разобраны в статье чат-бот в Max, а про создание бота в Telegram с нуля есть отдельное руководство.

Мини-вывод: если сайт живой, а Telegram молчит, первым смотрят getWebhookInfo, вторым тариф. Остальное бывает реже.

Порядок проверки за десять минут

Когда причина неизвестна, идти лучше по пути сообщения, от кнопки до оператора, и не перескакивать. Тогда каждый следующий шаг проверяет то, что предыдущий уже подтвердил.

  1. Открыть страницу в чистом окне без расширений. Режим инкогнито исключает кеш и блокировщики рекламы, которые иногда режут чужие скрипты.
  2. Нажать F12, открыть Network, обновить страницу и найти config. Код 200 означает, что домен, статус и ключ в порядке. Иначе смотрите таблицу выше.
  3. Открыть чат и отправить короткое сообщение «тест». В списке запросов должны появиться session и chat, оба с кодом 200.
  4. Прочитать текст в окне. Общая ошибка виджета, одна из трех заглушек или «Соединяем с оператором…» указывают на разные разделы этой статьи.
  5. Проверить панель: статус сайта, список доменов, тариф и срок его действия.
  6. Если молчит Telegram, вызвать getWebhookInfo и нажать «Проверить» в панели.

Если причина не нашлась, поддержке пригодятся четыре вещи: адрес страницы, время сообщения, код и текст ответа запроса chat и скриншот вкладки Network без токенов. С такими данными поддержка сразу видит, на каком шаге сбой.

Частые вопросы

Почему бот отвечает по-старому после того, как я поправил базу знаний?

Ответы кешируются: в коде время хранения составляет час, а ключом служит сам вопрос вместе с концом истории диалога. Один и тот же вопрос в течение часа может получать прежний ответ. Для проверки задайте вопрос новой формулировкой или подождите.

Бот не отвечает только у меня или в офисе. Это поломка?

Скорее всего нет. С одного IP-адреса по умолчанию проходит до 20 запросов чата в минуту, а офис делит один адрес на всех. Проверьте с мобильного интернета и в режиме инкогнито, чтобы исключить расширения браузера.

Виджет работал, а вчера пропал. С чего начать?

С разделов про кнопку и тариф: статус сайта, список доменов, ключ и срок платного тарифа. Затем проверьте, не перезаписали ли шаблон сайта при обновлении, тогда код виджета мог исчезнуть вместе со старой версией.

Подойдет ли этот разбор для бота из конструктора в Telegram или Max?

Логика диагностики та же: идти по пути сообщения и смотреть, что вернул сервер. Коды ответов, тексты ошибок и лимиты у каждого конструктора свои, поэтому сверяйтесь с его справкой. Для Max есть отдельный разбор.

Короткий чек-лист

Перед тем как писать в поддержку, стоит пройти по списку:

Если хотите проверить это на своем сайте: Otvion ставится одной строкой кода, бесплатный тариф без карты, регистрация на otvion.ru/app/register.