# Файлы и вложения (/ru/docs/wa/attachments)

Используйте эту страницу, когда вам нужно отправить фотографию или документ, сохранить отправленный кем-то файл, прослушать голосовую заметку в виде текста или найти сообщение по тексту внутри файла. Вы узнаете, что отправляет `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 и не видео). Для отправки требуется явная команда, и она соответствует [разрешениям и ограничениям на отправку](/llms.mdx/docs/ru/wa/permissions/content.md) профиля, как и любая отправка.

| Файл | Вариант | Что получает чат |
| --- | --- | --- |
| Документы, архивы и любые другие файлы | `--file` | Файл для загрузки с его именем |
| JPG, PNG, WEBP | `--photo` | Фотография; `--file` вместо этого отправляет оригинал в виде файла |
| MP4, M4V, МОВ | `--file` | Воспроизводимое видео; `--as-file` отправляет его в виде файла для загрузки |
| Запись Ogg Opus | `--voice` | Только голосовая заметка: без текста и других файлов рядом с ней |

```sh
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`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-watch "Справочник команды: wa watch"). Место сохраняет свои координаты, имя и адрес, а карточка контакта — свое имя и саму карточку, поэтому их можно пересылать. В карточке контакта записан номер телефона, поэтому она остается вместе с ключами и никогда не отображается. Для текущей геопозиции сохраняется только исходная точка.

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

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

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

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

## Скачать [#скачать]

Идентификатор сообщения `3EB0A1B2C3D4E5F6A7B8` на этой странице выдуман; возьми настоящий от `messages list -v`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-messages-list "Справочник команды: wa messages list").

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

При загрузке извлекается файл с ключами из локального хранилища; сообщение должно быть там, поэтому оставьте `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve") включенным. Место, карточка контакта или файл без ключей называется в `skipped` и для него ничего не сохраняется. Файл, который WhatsApp больше не хранит, снова запрашивается на вашем телефоне, но пока не удается ([известное ограничение](#what-the-store-keeps)). У телефона есть около 20 секунд на ответ, поэтому при медленном телефоне дайте команду более длинной `--timeout`. Хранилище сохраняет адрес новой копии, поэтому при более поздней загрузке и использовании `messages forward`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-messages-forward "Справочник команды: wa messages forward") его не спрашивая снова телефон, также после того, как вы снова привяжете устройство и телефон отправит старый адрес. Если в телефоне больше нет файла, загрузка завершается выходом `6`; попросите отправителя отправить его еще раз. `--all` сохраняет каждый файл чата, сначала самый новый; запустите его еще раз, чтобы продолжить с того места, где он остановился. Пока работает `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve"), загрузка происходит через его соединение ([одно соединение на устройство](/llms.mdx/docs/ru/wa/sessions/content.md#one-connection-per-device)).

## Переслать [#переслать]

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

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

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

## Голосовые заметки в виде текста [#голосовые-заметки-в-виде-текста]

```sh
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. Текст внутри изображения или скана таким образом не читается.

```sh
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`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-attachments-extract "Справочник команды: wa attachments extract") считывает уже сохраненные файлы или с помощью `--download` сначала сохраняет те, которые еще не сохранены для загрузки. `attachments list`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-attachments-list "Справочник команды: wa attachments list") показывает каждый файл, где он был сохранен и хранится ли его текст, но не сам текст.

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

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

Чтобы массово читать сканы с помощью API модели, установите `models.ocr.provider` и `models.ocr.model`, а затем запустите `attachments extract --ocr`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-attachments-extract "Справочник команды: wa attachments extract"). Картинки идут к этому провайдеру только с явным `--ocr`.

## Файлы для удаленного агента [#файлы-для-удаленного-агента]

Агент на этом компьютере открывает сохраненный путь. Агент на другом компьютере получает байты файла с `attachments show`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-attachments-show "Справочник команды: wa attachments show"), по ограниченному фрагменту за раз, в формате Base64 в формате JSON; `--page` превращает одну PDF-страницу в изображение с помощью установленного дополнительного пакета `@napi-rs/canvas`, куда `wa` может ее загрузить. См. [из браузера](/llms.mdx/docs/ru/wa/remote/content.md) для подключения такого агента.

## Следующий шаг [#следующий-шаг]

Найдите сообщение по его файлу с помощью `has:file`, `filename:` или `content:` ([поиск](/llms.mdx/docs/ru/wa/search/content.md#files)), и просмотрите все параметры на [странице команд](/llms.mdx/docs/ru/wa/commands/content.md).

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

Для проверенных копий файлов и ежедневного резервного копирования используйте [независимый медиа-архив](/llms.mdx/docs/ru/wa/archive/content.md#keep-independent-media-copies).
