VPS с самостоятельным администрированием

Telegram-бот не отвечает: диагностика на VPS

Начните с последнего работающего этапа, а не с переустановки. Если бот отвечает на /id, связь с Telegram уже есть; ошибка AI-вопроса относится к следующему участку. Страница Mini App, которая загружается, но отвергает проверку, отличается от сервера без рабочего HTTPS. Ниже разбираем готовые примеры, в логах которых нет текстов переписки и ключей.

Первые проверки

Из правильного каталога Compose-проекта:

docker compose ps
docker compose logs --tail=50
df -h

Сохраните время и фиксированный код/HTTP-статус. Не публикуйте .env, развёрнутую конфигурацию Compose, request body и содержимое базы. Уточните сервис: у Python-примера это bot, у Mini App — app и caddy.

Процесс бота и Telegram

Симптом Где искать Следующий шаг
Контейнер завершается при старте Конфигурация, права или диск Прочитайте ошибку, проверьте обязательные значения и volume /data
Нет ответа на /id Токен, сеть или второй получатель Проверьте Telegram-ошибки и другие запущенные копии
Telegram 401 Токен бота Исправьте или замените токен, пересоздайте контейнер
Telegram 409 / настроен webhook Несколько способов получения Найдите прежний worker/webhook, оставьте одного владельца
/id работает, AI запрещён Allowlist Замените 0 числовым ID и пересоздайте контейнер
Restart не применяет настройки Окружение контейнера Используйте up -d --force-recreate

Username не заменяет ID, а сообщения групп пример намеренно не обслуживает. Команда просмотра webhook без вывода его URL находится в сравнении polling и webhooks. Не отбрасывайте pending updates как универсальный способ ремонта.

Ошибки inference и медленные ответы

При HTTP 401/403 проверьте соответствие ключа, base URL и доступа аккаунта. При 402 — доступный для расходов баланс. HTTP 422 или missing_text_response требуют проверки точного ID и совместимости модели с текстовым Chat Completions и max_tokens. У некоторых reasoning-моделей маленького бюджета может не хватить на видимый ответ. Смена модели или лимита — осознанное действие, не автоматический fallback в боте.

Для 429 проверьте квоты и rate limits. При 5xx или connection error возможна временная недоступность провайдера. Платная попытка автоматически не повторяется. Таймаут тоже может сопровождаться списанием; повтор сообщения — новый запрос. Увеличение дневного лимита не исправляет ключ или сеть.

Сообщения обрабатываются по одному. Если VPS почти не нагружен, пока люди ждут, сначала измерьте задержку модели. Общий дневной лимит обновляется в 00:00 UTC и учитывает неудачные AI-попытки. Подробности — в контроле расходов.

Пропал контекст после restart

Проверьте исходное имя Compose-проекта, подключение bot-data, наличие /data/bot.sqlite и ненулевой HISTORY_TURNS. То, что модель не вспомнила факт, само по себе не доказывает потерю базы. На историю влияют /reset, исключение ID из allowlist и восстановление старой копии. Не удаляйте volumes для исправления: см. постоянное состояние и восстановление.

Ошибки Mini App

Симптом Что проверить
Нет HTTPS / ошибка сертификата A/AAAA DNS, доступность TCP 80/443, конфликт портов, логи Caddy
Caddy 502 Работу app-контейнера, обязательный token/domain
Просьба открыть из Telegram Запуск через меню; в обычном браузере нет initData
Проверка 401 Токен того же бота, окно в пять минут, часы хоста
Проверка 403 Точное совпадение MINI_APP_DOMAIN и Origin страницы
Проверка 413 Слишком большой запрос; не передавайте лишний профиль или историю

Успех /healthz не проверяет подпись Telegram. Mini App возвращает только подтверждённую личность и не умеет отвечать через LLM: клиента модели в нём нет. До изменения кода пройдите инструкцию запуска.

После исправления один раз проверьте именно сломавшийся этап. Сохраните работающую конфигурацию и запишите изменение; повторные полные пересборки мешают найти причину. Источник: Telegram Bot API.

Тарифы из текущего каталога

Сейчас не удалось загрузить планы. Смотрите актуальные тарифы на странице цен.