> ## Documentation index
> Fetch the complete documentation index at: https://tgcloud.docs7.io/llms.txt
> Ask it with GET https://tgcloud.docs7.io/ask?q=<keywords or question>. Short keywords rank best.
> Use these to discover all available pages before exploring further.

# Решение проблем

> Частые ошибки и их лечение

# Решение проблем

## `"tgcloud login" requires an interactive terminal`

CLI нужен TTY. Используйте `login_bot`: токен уходит в stdin с
`TGCLOUD_ASSUME_TTY=1`. Для CI: `TGCLOUD_TOKEN='app...'`.

## `Token format looks wrong. Expected "app<id>:<secret>"`

Передан Bot API токен. Нужен **CLI access token**:
@BotFather → бот → Serverless → CLI Access.

## `Could not reach the tgcloud server`

Нет доступа к `cloud.telegram.org`. Проверьте сеть и прокси. Обёртка CLI:
`HTTPS_PROXY` + `NODE_USE_ENV_PROXY=1` через `TGCLOUD_CLI`.

## `This bot already has N deployed modules (revision R)`

Облако и проект разъехались: `fetch` → `diff` → `push`
(или осознанно `push { force: true, confirm: true }`).

## `non-interactive session — specify --safe, --yes, or --dry-run`

Используйте `migrate`. По умолчанию `--dry-run`. Применение: `dry_run: false`
и `confirm: true`. `apply: "safe"` — это `--safe` (warning-дропы пропускаются).
`apply: "yes"` — это `--yes` (warning-дропы применяются, ручная смена типа пропускается).

## Команды отказываются, если `schema.js` лежит в корне

Это layout до CLI 0.2.0. Сначала `upgrade` с `dry_run: true`, затем
`upgrade { dry_run: false, confirm: true }`.

## `chat not found` в `run_handler`

Ожидаемо для выдуманного chat id: запись в БД проходит, падает только
реальная отправка в Telegram. Логика handler при этом выполняется.

## Нет логов развёрнутого бота

Команды, которая скачивает логи развёрнутого бота, нет. `tgcloud run`
(`run_handler`) захватывает `console.*`, но запускает ваши локальные файлы на
платформе без деплоя — это не вывод развёрнутого бота. Чтобы разобрать сбой в
деплое, читайте `webhook_status` (`tgcloud webhook`): последняя ошибка доставки
и состояние синхронизации — первые зацепки. Затем воспроизведите путь через
`run_handler`.

## Mini App показывает старый фронтенд

`push` не запускает бандлер. Вызовите `deploy` или соберите проект и затем push.
`immutable` в `tgcloud.jsonc` кеширует совпавшие файлы на год — только для
путей с хэшем в имени, например `/assets/*`.
