WhatsApp

Диагностика

Проверяйте записи запусков WhatsApp CLI и диагностику без текста сообщений и учётных данных.

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

Несколько слов, которые используются на этой странице:

  • run – это один вызов wa от начала до выхода.
  • Запись о выполнении — это папка, в которой хранится то, что было выполнено при каждом запуске: его команда, его результат и одна строка для каждой операции. Он никогда не содержит текст сообщений, имена или заголовки чатов.
  • wa personal doctor проверяет установку: версию, профиль, настройки, локальное хранилище и собственные части WhatsApp — движок, ключи устройства и блокировку. – Отчет о проблеме — это один файл JSON, созданный на основе wa personal doctor, и неудачный запуск. Вы прикрепляете его к проблеме.

Что можно сделать

ЗадачаКомандаСохраняет что-нибудь?
Смотрите каждую операцию, как она происходитwa --trace …нет, печатает только в stderr
Смотрите весь провалwa --debug …нет, печатает только в stderr
Ведите учет одного запускаwa --record …да, рекорд запуска
Найти неудачный запуск позжеwa personal runs listнеудачный запуск сохраняется сам по себе
Ведите учет каждого запускаwa personal config set record trueда, каждый запуск
Проверьте установкуwa personal doctor, wa personal doctor --onlineнет
Сообщить о проблемеwa personal doctor reports createда, один файл вы отправите

Покажите это: --trace и --debug

wa personal --trace messages send 100000000000001@lid "test"
wa personal --debug chats mark-read 100000000000001@lid

--trace печатает каждую операцию на stderr по мере ее возникновения: что было запрошено, что вернулось, с идентификаторами, счетчиками, длительностью и кодом ошибки, если таковой был. stdout не меняется, поэтому канал по-прежнему получает только данные. Даже в этом случае собственный журнал движка остается отключенным: в нем указаны идентификаторы WhatsApp, а идентификатор номера телефона — это номер телефона.

--debug заменяет однострочную ошибку всей записью об ошибке — ее причиной и стеком — в stderr.

Сохраните: --record

wa personal --record chats list
wa personal runs list              # recorded runs, newest first
wa personal runs show 20261001T080000Z-process-000001     # one run: its outcome, and one line per operation
wa personal runs path 20261001T080000Z-process-000001     # the folder that holds it

Идентификатор запуска, указанный выше, составлен; runs list показывает настоящие.

Запись запуска — это папка под runs/<day>/ в папке состояния. Его имя – время и команда. Он содержит два файла:

  • run.json — команда, профиль, версия wa, узел и система, когда она началась и закончилась, результат и код ошибки;
  • events.jsonl — те же операции, что и --trace, по одной в строке.

Неудачный запуск всегда сохраняется

Если команда завершается ошибкой, ее выполнение сохраняется даже без --record. run.json тогда имеет "keptBecauseFailed": true. Это касается каждой команды и каждой ошибки: плохой вариант, неизвестная команда, проверка перед любой работой, отказ, потому что другая команда удерживает устройство. Запись содержит только слова команды, такие как messages send, а не то, что за ними следует.

Успешный запуск не оставляет записей, если вы их не запросите, поэтому отчет о проблеме всегда не прикрепляется. --no-record или "record": false в настройках это тоже отключает.

Успешные поиски сохраняют свою собственную историю, помимо записей о запусках: см. поиск.

Когда записывать каждый запуск

wa personal config set record true          # this profile
wa personal --no-record chats list          # but not this one

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

Как долго он живет

30 дней или keep_runs_for_days в настройках. Старые запуски удаляются только тогда, когда новый сохраняется целый день по имени папки, поэтому для принятия решения ничего открывать не нужно.

Чего никогда нет в записи

Запись о выполнении и --trace содержат имя операции, идентификаторы, количество, продолжительность и коды ошибок. Они никогда не несут:

  • текст сообщения;
  • заголовок чата или имя человека;
  • то, что вы набрали как <chat>, потому что набранный чат часто является именем;
  • номер телефона, код сопряжения или ключи устройства.

То же самое относится и к отчету, составленному по результатам запуска.

Проверьте установку: wa doctor

wa personal doctor            # connects to nothing
wa personal doctor --online   # also connects once and reads the account; sends nothing

Помимо версии, среды выполнения, профиля, файла конфигурации и локального хранилища, doctor считывает с диска три вещи WhatsApp, ничего не запуская:- engine — есть ли программа движка для запуска и путь к ней. Когда он отсутствует, подсказка говорит, что делать: переустановить wa с включенными дополнительными пакетами, установить WA_ENGINE или при проверке исходного кода запустить pnpm engine:build.

  • device — существуют ли ключи устройства, и могут ли private.db, его файлы -wal и -shm или их папка быть прочитаны другими пользователями этой машины. К каждому такому файлу прилагается команда chmod, которая его исправляет. doctor никогда не открывает ключи и никогда не меняет режим файла сам. В Windows проверка Unix-прав доступа к файлам не выполняется.
  • lock — кто последним удерживал одно соединение устройства (serve (pid 4242)), и выполняется ли этот процесс. Движок никогда не очищает имя, поэтому держатель считается запущенным только до тех пор, пока работает его процесс.

--online подключается один раз. Во время работы serve вместо этого используется соединение serve (одно соединение на устройство).

Отчет о проблеме

wa personal doctor reports create              # about the newest failed run
wa personal doctor reports create --run 20261001T080000Z-process-000001   # a made-up run id

Он записывает файл JSON — то, что показывает wa personal doctor плюс запуск — и говорит, куда его отправить: новая проблема на github.com/WireCatLabs/whatsapp-cli/issues. Прочтите его, прежде чем отправить. Он не содержит текста сообщения. Только wa doctor reports show показывает, что будет содержать отчет, и ничего не пишет.

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

Что делать с запусками

Записи имеют формат JSON, поэтому jq отвечает на вопросы о них. wa personal runs list --json отвечает на { items, page, meta }, а items — это run.json серий, сначала самые новые:

wa personal runs list --limit 100 --json | jq '[.items[] | select(.status == "failed") | {command, error_code}]'
wa personal runs list --limit 100 --json | jq '[.items[] | .duration_ms] | add / length'

Ошибки поиска и частичные запуски

wa personal search runs error_code:authentication_error --json
wa personal search runs status:partial 'started_at>=2026-10-01' --json

search runs ищет буквальный диагностический текст в записях. Условия запроса, например operation:messages.download, profile:work, error_code:timeout, status:failed, а также сравнения и диапазоны started_at:, сужают поиск вместе с --limit и --page; каждая страница вмещает до 100 запусков. Команда читает только записи и никогда не подключается.

Далее