WhatsApp

Файлы и вложения

Отправляйте и сохраняйте файлы WhatsApp, расшифровывайте голосовые и проверяйте архив вложений.

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

Несколько слов на этой странице:

  • Отправка доставляет файл в чат. При загрузке байты файла сохраняются на этом компьютере. Чтение (извлечение) позволяет получить текст внутри сохраненного файла. Это отдельные шаги: скачанный скан остаётся картинкой, пока кто-то его не прочитает.
  • Ключи файла — это то, что нужно WhatsApp для повторного получения файла: где он находится и как его расшифровать. Их хранит локальное хранилище, а не сам файл.
  • Индекс поиска сохраняет текст каждого прочитанного файла рядом с его сообщением. Поиск по content: находит сообщение по этому тексту.

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

ЗадачаКоманда
Отправьте файл, фотографию, видео или голосовую заметкуwa personal messages send --file, --photo, --voice
Сохранение файлов сообщения или всего чатаwa personal messages download
Отправить сохраненное сообщение еще раз, включая файлwa personal messages forward
Прослушать голосовую заметку в виде текстаwa personal messages transcribe
Посмотрите файлы, которые известны локальному хранилищу и которым еще нужен текстwa personal attachments list
Читать текст из сохраненных файлов в индекс поискаwa personal attachments extract
Сохраняйте текст, который ваш агент прочитал на скане или фотографииwa personal attachments update
Найти сообщение по файлуwa personal search messages 'has:file', 'content:…'

Что вы можете отправить

Сообщение содержит один файл, а текст становится подписью к нему. --photo и видео --file вместе составляют один альбом: текст — это подпись к фотографии, а ответ — это сообщение фотографии. В альбоме хранятся только фотографии и видео, поэтому документ рядом с фотографией отклоняется. В локальное хранилище попадает только сообщение о фотографии; Видео есть в чате WhatsApp. Фотография содержит небольшой предварительный просмотр, который показывает чат перед загрузкой (пока не WEBP и не видео). Для отправки требуется явная команда, и она соответствует разрешениям и ограничениям на отправку профиля, как и любая отправка.

ФайлВариантЧто получает чат
Документы, архивы и любые другие файлы--fileФайл для загрузки с его именем
JPG, PNG, WEBP--photoФотография; --file вместо этого отправляет оригинал в виде файла
MP4, M4V, МОВ--fileВоспроизводимое видео; --as-file отправляет его в виде файла для загрузки
Запись Ogg Opus--voiceТолько голосовая заметка: без текста и других файлов рядом с ней
wa personal messages send "Book club" "the agenda" --file agenda.pdf
wa personal messages send "Book club" "us, last week" --photo photo.jpg
wa personal messages send "Book club" --file trip.mp4 --as-file
wa personal messages send "Book club" --voice note.ogg

--filename изменяет имя, которое видят другие, а не формат. wa отклоняет файл из папки учетных данных или из своих собственных папок, если вы не добавите --allow-any-file. В WhatsApp нет автоматической или запланированной доставки, а также нет публикаций от имени кого-то другого, поэтому у wa нет --silent, --at-time или --send-as.

Что хранится в локальном хранилище

Для каждой фотографии, видео, голосовой заметки, аудио, документа и наклейки, попадающих в локальное хранилище, wa сохраняет свое имя, размер и тип, а также свои ключи. Ключи никогда не появляются в ответе, в формате JSON, в выводе MCP или в событиях watch. Место сохраняет свои координаты, имя и адрес, а карточка контакта — свое имя и саму карточку, поэтому их можно пересылать. В карточке контакта записан номер телефона, поэтому она остается вместе с ключами и никогда не отображается. Для текущей геопозиции сохраняется только исходная точка.

Два типа сообщений не имеют ключей, поэтому wa не может сохранить или переслать свой файл:

  • Фото или видео, которые можно просмотреть один раз. Собственные приложения WhatsApp не сохраняют и не пересылают фотографии, поэтому wa сбрасывает свои ключи, когда приходит.
  • Сообщение, сохраненное до того, как wa обработал файлы. Оно называет свой файл, но не может его получить.

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

Известное ограничение: старый файл еще не загружается. На проверенных телефонах телефон загружает файл еще раз, но шифрует новую копию с помощью нового ключа, который не отправляется на связанные устройства, поэтому wa не может его прочитать. Загрузка заканчивается media.retry-failed ("телефон снова загрузил этот файл, но новая копия не скачалась") и ничего не сохраняет, а не битый файл. Откройте файл на телефоне или попросите отправителя отправить его еще раз.

Скачать

Идентификатор сообщения 3EB0A1B2C3D4E5F6A7B8 на этой странице выдуман; возьми настоящий от messages list -v.

wa personal messages download "Book club" 3EB0A1B2C3D4E5F6A7B8 --output-dir ~/Downloads --json
wa personal messages download "Book club" --all --output-dir ./book-club

При загрузке извлекается файл с ключами из локального хранилища; сообщение должно быть там, поэтому оставьте serve включенным. Место, карточка контакта или файл без ключей называется в skipped и для него ничего не сохраняется. Файл, который WhatsApp больше не хранит, снова запрашивается на вашем телефоне, но пока не удается (известное ограничение). У телефона есть около 20 секунд на ответ, поэтому при медленном телефоне дайте команду более длинной --timeout. Хранилище сохраняет адрес новой копии, поэтому при более поздней загрузке и использовании messages forward его не спрашивая снова телефон, также после того, как вы снова привяжете устройство и телефон отправит старый адрес. Если в телефоне больше нет файла, загрузка завершается выходом 6; попросите отправителя отправить его еще раз. --all сохраняет каждый файл чата, сначала самый новый; запустите его еще раз, чтобы продолжить с того места, где он остановился. Пока работает serve, загрузка происходит через его соединение (одно соединение на устройство).

Переслать

wa personal messages forward "Book club" 3EB0A1B2C3D4E5F6A7B8 --to "Ann Lee"

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

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

Голосовые заметки в виде текста

wa personal models list kind:audio                    # the speech models, and which are downloaded
wa personal models download parakeet-v3    # once, about 670 MB
wa personal messages transcribe "Book club" 3EB0A1B2C3D4E5F6A7B8 --local

WhatsApp не имеет собственного распознавания речи, поэтому transcribe всегда использует модель на этом компьютере; --local прямо говорит об этом, и --model выбирает один. Голосовая заметка не покидает ваш компьютер. Без загруженной модели команда останавливается с выходом 6 и присваивает имя модели для загрузки.

Читать текст файлов

wa сам читает текстовые слои: обычный текст, текст PDF и DOCX, ODT, ODS, XLSX, PPTX и EPUB. Текст внутри изображения или скана таким образом не читается.

wa personal messages download "Book club" 3EB0A1B2C3D4E5F6A7B8 --output-dir ./files --extract
wa personal attachments extract --chat "Book club" --download --output-dir ./files
wa personal attachments list 'is:needs_text' --json
wa personal search messages 'content:"reading list"'

--extract читает файлы, сохраненные этой загрузкой. attachments extract считывает уже сохраненные файлы или с помощью --download сначала сохраняет те, которые еще не сохранены для загрузки. attachments list показывает каждый файл, где он был сохранен и хранится ли его текст, но не сам текст.

Скан или фотография считывается вашим агентом с помощью собственных инструментов машинного зрения. Затем агент сохраняет текст, чтобы поиск нашел его:

wa personal attachments update "Book club" 3EB0A1B2C3D4E5F6A7B8 --text-file scan.txt

Чтобы массово читать сканы с помощью API модели, установите models.ocr.provider и models.ocr.model, а затем запустите attachments extract --ocr. Картинки идут к этому провайдеру только с явным --ocr.

Файлы для удаленного агента

Агент на этом компьютере открывает сохраненный путь. Агент на другом компьютере получает байты файла с attachments show, по ограниченному фрагменту за раз, в формате Base64 в формате JSON; --page превращает одну PDF-страницу в изображение с помощью установленного дополнительного пакета @napi-rs/canvas, куда wa может ее загрузить. См. из браузера для подключения такого агента.

Следующий шаг

Найдите сообщение по его файлу с помощью has:file, filename: или content: (поиск), и просмотрите все параметры на странице команд.

Сохранять копии после удаления источника

Для проверенных копий файлов и ежедневного резервного копирования используйте независимый медиа-архив.