Решение проблем
Документация: v0.24.0
Найдите сообщение или симптом и следуйте инструкции. В режиме --json ошибка выводится одной строкой в stderr: {"error":{"code":"…","message":"…"}}. Код завершения соответствует значению code. Числовые коды: Справочник команд.
По коду завершения
| Код | Имя | Типичная причина | Подробнее |
|---|---|---|---|
1 | generic_failure | опечатка в команде или сбой tg | неизвестная команда, сообщить |
2 | validation_error | неверное значение, сочетание параметров или несколько подходящих чатов | значения, чаты |
3 | configuration_error | ошибка config.json или база новее tg | настройки, база |
4 | authentication_error | нет входа, сессия завершена или хранилище ключей недоступно | нет сессии |
5 | permission_error | отказ permissions профиля или Telegram | разрешения, Telegram |
6 | not_found | чат, сообщение или человек не найден; база пустая | чат, база |
7 | confirmation_required | чат отсутствует в получателях или некому подтвердить действие | получатели, подтверждение |
8 | rate_limited | часовой лимит или ожидание Telegram | лимит, FLOOD_WAIT |
9 | timeout | Telegram не ответил или сработал --timeout | зависание |
10 | network_error | Telegram недоступен | сеть |
11 | provider_error | Telegram отклонил запрос | отказ |
12 | provider_unavailable | сбой на стороне Telegram | сбой |
13 | invalid_response | tg не может прочитать ответ; пока только my.telegram.org | приложение |
14 | outcome_unknown | соединение оборвалось после отправки; сообщение могло уйти | неизвестный результат |
130 | cancelled | Ctrl-C или отказ от подтверждения | Ctrl-C |
Сначала: tg doctor
tg doctorБез подключения показывает зависимости команд: версию, среду выполнения, конфигурацию, сессию, данные приложения, переменные TG_*_DIR, базу, журнал отправок и записи запусков. Работает даже при неисправности остальных команд. Отсутствие сессии отображается в результате, а не как ошибка: код остаётся 0. Сессия и хеш не выводятся, только наличие.
tg doctor --online--online также подключается один раз и читает аккаунт. Ничего не отправляет и не отмечает прочитанным.
После установки команда tg не найдена
Каталог команд npm отсутствует в PATH.
- Linux и macOS. Каталог —
$(npm prefix -g)/bin. Добавьте его вPATHчерез~/.zshrcили~/.bashrc:export PATH="$(npm prefix -g)/bin:$PATH". - Windows. Каталог показывает
npm prefix -g, обычно%APPDATA%\npm. Проверьте наличие в$env:Path. Терминал, открытый до установки Node, не видит обновлённыйPATH: откройте новый. - PowerShell сообщает «running scripts is disabled on this system». npm устанавливает
tg.ps1рядом сtg.cmd, а PowerShell по умолчанию запрещает скрипты. Используйтеtg.cmdили разрешите скрипты своему пользователю:Set-ExecutionPolicy -Scope CurrentUser RemoteSigned. - Раньше находится другой
tg.which -a tgилиGet-Command tg -Allв PowerShell перечислит варианты. Используйте полный путь или поставьте нужный каталог первым.
Без установки доступна команда npx @leemour/tg-cli doctor.
«error: unknown command …» — неизвестная команда
Код 1, справка в stderr вместо JSON. Первое слово, не являющееся командой, считается профилем, поэтому опечатка может стать именем профиля:
tg chat list
error: unknown command 'list'Здесь chat считается профилем, а list не является командой. Правильно — chats, во множественном числе. Список: tg --help.
"no session for profile "default" — run tg setup"
Код 4. Профиль ещё не входил на этом компьютере или вышел. Проверьте профиль: первое слово команды или TG_PROFILE (Вход и сессии).
tg setup # guided first run
tg work chats list # or name the profile you logged in toЕсли вход выполнен, проверьте различия TG_CONFIG_DIR, TG_STATE_DIR, TG_CACHE_DIR между входом и запуском, например в разных терминалах. Они меняют место хранения входа. tg config show показывает заданные переменные; env | grep TG_ — все.
При первом запуске без ключей приложения ошибка предлагает tg setup (или tg work setup для рабочего профиля). Варианты входа описаны в tg setup --help. Агент может прочитать tg skill show до входа. Прерванная или истёкшая сессия требует tg session start, затем повторной проверки настройкой.
Данные приложения не найдены, хотя вход уже выполнен
Код 4. Файл сессии есть, но хранилище ключей недоступно. Это бывает в cron, ssh, службах и MCP-клиентах с сокращённым окружением tg.
Не входите повторно: это добавит устройство и не исправит окружение. В Linux задайте XDG_RUNTIME_DIR (обычно /run/user/ и номер из id -u):
XDG_RUNTIME_DIR=/run/user/$(id -u) tg chats listДля cron: Сценарии использования. Хранилище также может быть заблокировано до входа в систему.
Сессия завершена — выполните tg session start
Код 4. Telegram больше не принимает сессию: её завершили с другого устройства (Настройки → Устройства) или через tg session end. Войдите через tg session start.
tg session start требует терминала
Код 2. Для входа человек должен отсканировать код или ввести его. Запустите в терминале. Для агента --qr-file login.png сохраняет QR-код файлом (Вход через агента).
my.telegram.org сообщил о создании приложения, но его нет
Код 13 при tg session start --app auto. Сайт не имеет API: веб-форма изменилась или ответила неожиданно. Остальные ошибки сайта дают код 11 с его сообщением. Используйте обычный tg session start: сайт откроется в браузере, затем вставьте идентификатор и хеш (Данные приложения).
Результат относится к другому профилю
tg config show показывает профиль и источник выбора. TG_PROFILE выбирает профиль, TG_PROFILE_LOCK запрещает другие. Опечатка в команде может быть прочитана как профиль (выше).
Ошибка «is not a valid config»
Код 3. В config.json неизвестная tg настройка или неверный тип значения. Ошибка указывает настройку и профиль. Она не игнорируется, чтобы не применять молча неверные значения. Исправьте файл или выполните tg config unset <setting> (Настройки).
Неверное значение --limit
Код 2. --page тоже требует целое положительное число. Иначе неверное значение могло бы молча вернуть пустой список.
Неверное время --after-time
Код 2. То же для --since-time. Нужен ISO 8601 (2026-09-20T09:00) или период назад (30m, 2h, 1d). Для идентификатора сообщения используйте --after-id или --before-id.
Неверное время --at-time
Код 2. --at-time принимает локальное время или задержку в минутах, часах, днях, не секундах. Минимум минута от текущего момента, максимум год.
Неверная длительность --timeout
Код 2. --timeout и TG_TIMEOUT требуют число с единицей ms, s, m, h, d; число без единицы запрещено.
--all и --page нельзя использовать вместе
Код 2. --all запрашивает все строки, --page — одну страницу. Команда отклоняет сочетание, а не выбирает молча один параметр.
Найдено несколько чатов — укажите идентификатор
Код 2. Название подходит нескольким чатам. Ошибка перечисляет их идентификаторы, JSON — candidates. Повторите с идентификатором. tg не угадывает получателя.
Чат не найден
Код 6. Ни одно название не содержит введённый текст. Попробуйте tg chats list --search <part of it>, идентификатор, @username или me для «Избранного». Личный чат называется именем собеседника в вашем Telegram.
Telegram не знает этот объект
Код 6. Чат, пользователь, имя или сообщение недоступны аккаунту: PEER_ID_INVALID, USERNAME_NOT_OCCUPIED, MSG_ID_INVALID и подобные ошибки. Сообщение могло быть удалено, идентификатор — относиться к другому чату. contacts lookup не находит человека, скрывающего номер или не имеющего аккаунта.
Telegram просит подождать N секунд
Код 8. Ограничение Telegram (FLOOD_WAIT). Подождите указанный срок; JSON содержит retryAfterMs. Обычно возникает после серии запросов, например chats list --all или долгого store fetch. Для store fetch и messages download --all увеличьте --pause.
Превышен часовой лимит профиля
Код 8. Лимит профиля — sendsPerHour, по умолчанию 30. Ошибка показывает время следующей отправки. Увеличивайте лимит только намеренно: tg config set sendsPerHour <n>.
Чат отсутствует в разрешённых получателях
Код 7. Список получателей включён, чат отсутствует. Добавьте его сами при необходимости: tg recipients add <chat>. Агент должен остановиться и спросить вас.
Профиль запрещает действие
Код 5 до отправки в Telegram. Отказ permissions: deny запрещает даже чтение, readonly — изменения. Ошибка указывает ключ, источник и разрешающую команду (Настройки). Агент должен спросить вас, а не менять настройку.
Действие требует подтверждения
Код 7. Уровень команды — ask, но ответить некому: нет терминала или указан --json, --jsonl. Ошибка укажет подтверждающий параметр: --allow-dangerous для удаления, --yes для остальных изменений. Добавляйте его только осознанно. Агент должен спросить вас.
Telegram отклонил запрос
Код 5, если аккаунту запрещено действие, 11 — остальные отказы. Имя причины приходит от Telegram и содержится в JSON как providerError; введённые аргументы не повторяются. Некоторые причины объясняются отдельно:
- Telegram распознаёт речь только для Premium — код
5. Используйте локальную модель:tg models audio download parakeet-v3, затемtg messages transcribe <chat> <id> --local. - Сообщение не является голосовым или видеозаметкой — код
2: указан другой тип сообщения. - Telegram не смог распознать речь — код
11; попробуйте--local.
Сбой Telegram
Код 12. Ошибка на стороне Telegram. tg ничего не изменил; повторите через минуту. Если отправляли сообщение, сначала проверьте чат.
Не удаётся подключиться к Telegram
Код 10. Нет сети, мешает firewall, прокси или DNS, либо соединение оборвалось. Код в скобках уточняет причину: ECONNREFUSED, ENOTFOUND, ETIMEDOUT. Локальные команды работают без сети: tg --offline chats list.
outcome_unknown после отправки
Код 14. Соединение оборвалось после отправки, и сообщение могло уйти. Не отправляйте его повторно без изменений. Используйте --send-id из ошибки: Telegram исключит дубликат.
tg messages send <chat> "<the same text>" --send-id <id from the error>После --at-time проверьте tg messages scheduled <chat>: отложенная отправка никогда не повторяется.
Команда зависла
Одноразовые команды закрывают соединение и выходят. Без ответа Telegram команда завершается с кодом 9 и timeout. Чтобы ограничить время и увидеть место остановки:
tg --timeout 30s --trace chats list--timeout охватывает всю команду, включая вход, закрывает соединение и завершает с кодом 9. В --trace строка → без ← означает запрос без ответа: проблема сети или Telegram (Диагностика).
Если результат выведен, но команда не выходит, это сбой. Через пять секунд tg перечисляет открытые ресурсы (tg: finished, but … stayed open) и выходит. Приложите эту строку к обращению. watch, serve, mcp должны работать до остановки.
Ctrl-C
Код 130. Команда остановлена и соединение закрыто. При остановке отправки сначала проверьте чат (tg messages list <chat> --limit 3): сообщение могло уйти. Фоновый store fetch продолжит работу; остановите через tg store jobs cancel <job>.
Ответ кроме y на запрос подтверждения даёт тот же код; действие не выполнено.
База записана более новой версией
Код 3. Другой CLI или новый tg обновил базу до несовместимой структуры. Выполните tg upgrade. Данные не теряются (Локальная база).
Для профиля пока нет сохранённых данных
Код 6. --offline, messages search, store status, store export читают только локальную базу, а профиль ещё ничего не сохранил. Сначала выполните онлайн-команду, например tg chats list.
messages search ничего не находит
Поиск не запрашивает Telegram. Пустой результат означает отсутствие сохранённых данных, а не самого сообщения. Прочитайте чат (tg messages list <chat>) или загрузите историю через tg store fetch, затем повторите (Поиск). tg store check показывает отстающие чаты.
tg serve уже работает для профиля
Код 2. Разрешён один serve на профиль. tg server status показывает процесс и время запуска; tg server stop останавливает запущенный через server start или службу.
Фоновый сервер не запускается
Причина находится в tg server logs. Обычно служба не видит хранилище ключей: оно ещё закрыто или нет XDG_RUNTIME_DIR. После переноса Node или tg повторите tg server install: служба использует пути времени установки (Служба).
npx @leemour/tg-cli запускает старую версию
npx сохраняет скачанное. Запросите новую версию: npx @leemour/tg-cli@latest.
Сообщить о проблеме
tg doctor report # what a report holds, and what it never holds; writes nothing
tg doctor report create # write it to a file, and say where to send it
tg doctor report create --run <id> # about another run; ids from tg runs listcreate записывает tg-report-<time>.json в текущий каталог или --output, доступный только вам. Внутри версии программы, среды и системы, результат tg doctor, последний неудачный запуск (операции, длительности, ошибки) и 20 последних попыток отправки без текста, только результат и длина. Идентификаторы чатов, сообщений и аккаунтов заменены метками, значимыми лишь внутри файла. Текстов, названий, имён, телефонов, сессий и данных приложения нет. Ошибки сохраняются автоматически без --record (Отчёт).
Создайте обращение на GitHub: опишите действия и результат, приложите файл. Обращение и файл публичные: сначала прочитайте его.
⚠ Не прикладывайте каталог состояния, файл сессии или ~/.local/share/cli-messaging/: они содержат доступ к аккаунту и ваши сообщения.